Import Geant4 8.3.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 15:07:44 +02:00
parent fe73f43734
commit 75c7fd177d
764 changed files with 45230 additions and 95238 deletions
+92 -81
View File
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -30,34 +30,34 @@ Going to assign importance: 131072, to volume: cell_18
The initial Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
Transportation
DoIt Vector:
Transportation
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
The final Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
Transportation
DoIt Vector:
Transportation
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
================================================
=== G4ProcessPlacer::AddProcessAsSecondDoIt: for: neutron
@@ -65,27 +65,27 @@ DoIt Vector:
The initial Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
Transportation
DoIt Vector:
Transportation
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
The final Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
MassImportanceProcess
Transportation
@@ -93,10 +93,10 @@ DoIt Vector:
Transportation
MassImportanceProcess
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
================================================
@@ -115,30 +115,33 @@ phot: Total cross sections from Sandia parametrisation.
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -147,27 +150,32 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -207,50 +215,53 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
Volume name | Importance| Tr.Entering| Population| Collisions| Coll*WGT| NumWGTedE| FluxWGTedE| Av.Tr.WGT|
cell_01_rep:0............ | 1 | 106 | 127 | 165 | 165 | 4.7833307 | 8.4257685 | 1 |
cell_02_rep:0............ | 2 | 79 | 170 | 150 | 75 | 8.3770212 | 8.9611837 | 1 |
cell_03_rep:0............ | 4 | 120 | 257 | 292 | 73 | 0.030422242 | 8.1225467 | 1 |
cell_04_rep:0............ | 8 | 118 | 267 | 325 | 40.625 | 6.2788095 | 7.9670281 | 1 |
cell_05_rep:0............ | 16 | 112 | 236 | 298 | 18.625 | 0.066754216 | 7.5980323 | 1 |
cell_06_rep:0............ | 32 | 124 | 264 | 342 | 10.6875 | 5.2637216 | 7.6806894 | 1 |
cell_07_rep:0............ | 64 | 161 | 322 | 438 | 6.84375 | 4.9595564 | 7.2063026 | 1 |
cell_08_rep:0............ | 128 | 205 | 412 | 532 | 4.15625 | 4.0919226 | 6.9949884 | 1 |
cell_09_rep:0............ | 256 | 236 | 482 | 650 | 2.5390625 | 0.11583494 | 6.6067148 | 1 |
cell_10_rep:0............ | 512 | 267 | 549 | 748 | 1.4609375 | 4.0989275 | 6.2777243 | 1 |
cell_11_rep:0............ | 1024 | 325 | 648 | 993 | 0.96972656 | 0.64376933 | 5.8542585 | 1 |
cell_12_rep:0............ | 2048 | 374 | 733 | 1233 | 0.60205078 | 0.13579459 | 5.5076248 | 1 |
cell_13_rep:0............ | 4096 | 412 | 832 | 1361 | 0.33227539 | 3.5686894 | 5.4720131 | 1 |
cell_14_rep:0............ | 8192 | 438 | 897 | 1402 | 0.17114258 | 0.22945117 | 5.496985 | 1 |
cell_15_rep:0............ | 16384 | 476 | 990 | 1656 | 0.10107422 | 0.80759575 | 5.4423419 | 1 |
cell_16_rep:0............ | 32768 | 539 | 1059 | 1738 | 0.053039551 | 3.8380076 | 5.1041349 | 1 |
cell_17_rep:0............ | 65536 | 579 | 1201 | 1995 | 0.030441284 | 0.1904835 | 4.9379711 | 1 |
cell_18_rep:0............ | 131072 | 501 | 1179 | 2198 | 0.016769409 | 0.54009342 | 4.7248222 | 1 |
rest_rep:0............... | 131072 | 548 | 548 | 0 | 0 | 0 | 0 | 0 |
shieldWorld_rep:0........ | 1 | 11 | 110 | 0 | 0 | 10 | 10 | 1 |
cell_01_rep:0............ | 1 | 118 | 150 | 149 | 149 | 7.2096509 | 8.5785508 | 1 |
cell_02_rep:0............ | 2 | 87 | 192 | 189 | 94.5 | 8.2328232 | 8.660209 | 1 |
cell_03_rep:0............ | 4 | 99 | 212 | 240 | 60 | 6.6805827 | 7.9415373 | 1 |
cell_04_rep:0............ | 8 | 119 | 258 | 287 | 35.875 | 6.957465 | 7.8605556 | 1 |
cell_05_rep:0............ | 16 | 150 | 321 | 396 | 24.75 | 5.1009587 | 7.099783 | 1 |
cell_06_rep:0............ | 32 | 162 | 353 | 426 | 13.3125 | 4.6037023 | 7.0570615 | 1 |
cell_07_rep:0............ | 64 | 205 | 416 | 568 | 8.875 | 4.8261852 | 6.6681408 | 1 |
cell_08_rep:0............ | 128 | 223 | 486 | 656 | 5.125 | 0.53648464 | 6.6539856 | 1 |
cell_09_rep:0............ | 256 | 251 | 519 | 751 | 2.9335938 | 4.943392 | 6.39047 | 1 |
cell_10_rep:0............ | 512 | 288 | 597 | 875 | 1.7089844 | 4.3487469 | 6.110481 | 1 |
cell_11_rep:0............ | 1024 | 337 | 698 | 1058 | 1.0332031 | 4.4329506 | 6.0885935 | 1 |
cell_12_rep:0............ | 2048 | 393 | 782 | 1238 | 0.60449219 | 4.4763037 | 6.0639968 | 1 |
cell_13_rep:0............ | 4096 | 451 | 930 | 1440 | 0.3515625 | 4.2499709 | 5.7580044 | 1 |
cell_14_rep:0............ | 8192 | 472 | 985 | 1522 | 0.18579102 | 0.072154763 | 5.4255988 | 1 |
cell_15_rep:0............ | 16384 | 503 | 1014 | 1715 | 0.10467529 | 0.87569507 | 5.1929267 | 1 |
cell_16_rep:0............ | 32768 | 576 | 1204 | 2080 | 0.063476562 | 0.13469363 | 4.97975 | 1 |
cell_17_rep:0............ | 65536 | 635 | 1281 | 2314 | 0.035308838 | 3.3098112 | 4.7409862 | 1 |
cell_18_rep:0............ | 131072 | 565 | 1356 | 2505 | 0.019111633 | 3.1110957 | 4.603961 | 1 |
rest_rep:0............... | 131072 | 601 | 601 | 0 | 0 | 0 | 0 | 0 |
shieldWorld_rep:0........ | 1 | 14 | 114 | 0 | 0 | 10 | 10 | 1 |
=== G4ProcessPlacer::RemoveProcess: for: neutron
ProcessName: MassImportanceProcess, will be removed!
The initial Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
MassImportanceProcess
Transportation
@@ -258,27 +269,27 @@ DoIt Vector:
Transportation
MassImportanceProcess
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
The final Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
Transportation
DoIt Vector:
Transportation
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
================================================
=== G4ProcessPlacer::RemoveProcess: for: neutron
@@ -286,33 +297,33 @@ DoIt Vector:
The initial Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
MScoreProcess
Transportation
DoIt Vector:
Transportation
MScoreProcess
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
The final Vectors:
GPIL Vector:
Decay
LCapture
LFission
HadronCapture
HadronFission
inelastic
LElastic
HadronElastic
Transportation
DoIt Vector:
Transportation
LElastic
HadronElastic
inelastic
LFission
LCapture
HadronFission
HadronCapture
Decay
================================================
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -130,32 +130,35 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -164,24 +167,29 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -189,13 +197,15 @@ ionIoni: tables are built for GenericIon
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -237,20 +247,23 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -286,7 +299,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 2000
User=93.45s Real=229.21s Sys=10.12s
User=135.86s Real=161.42s Sys=5.57s
======================== run summary ======================
@@ -294,29 +307,29 @@ Run Summary
============================================================
total energy deposit: 99.778 MeV
total energy deposit: 99.795 MeV
nb tracks/event neutral: 27.852 charged: 148.23
nb steps/event neutral: 141.16 charged: 360.34
nb tracks/event neutral: 27.87 charged: 148.27
nb steps/event neutral: 141.21 charged: 217.54
nb of process calls per event:
eBrem eIoni compt phot mscTransportation conv annihil
26.195 187.84 113.31 25.441 144.89 0.999 1.4155 1.416
eBrem eIoni compt phot conv annihilTransportation msc
26.152 189.06 113.34 25.465 1.429 1.431 0.9785 0.895
---------------------------------------------------------
Primary particle :
true Range = 11.117 cm rms = 3.8519 cm
proj Range = 9.5829 cm rms = 3.5673 cm
proj/true = 0.862
transverse dispersion at end = 1.7458 cm
mass true Range from simulation = 30.016 g/cm2
true Range = 11.188 cm rms = 3.8024 cm
proj Range = 9.6817 cm rms = 3.5072 cm
proj/true = 0.86537
transverse dispersion at end = 1.6744 cm
mass true Range from simulation = 30.207 g/cm2
from PhysicsTable (csda range) = 31.791 g/cm2
---------------------------------------------------------
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1518067820, 1468624748
Current couple of seeds = 635796452, 1715057552
----------------------------------------
#
/process/eLoss/verbose 0
@@ -344,7 +357,7 @@ Index : 0 used in the geometry : Yes recalculation needed : No
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1518067820, 1468624748
Current couple of seeds = 635796452, 1715057552
----------------------------------------
Start Run processing.
@@ -352,7 +365,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 2000
User=180.14s Real=317.87s Sys=17.19s
User=262.73s Real=299.52s Sys=16.05s
======================== run summary ======================
@@ -360,29 +373,29 @@ Run Summary
============================================================
total energy deposit: 99.804 MeV
total energy deposit: 99.807 MeV
nb tracks/event neutral: 36.715 charged: 292.17
nb steps/event neutral: 148.23 charged: 774.58
nb tracks/event neutral: 36.588 charged: 290.52
nb steps/event neutral: 145.99 charged: 487.88
nb of process calls per event:
eIoni eBrem msc phot conv annihil comptTransportation
450.68 34.889 287.6 34.344 1.414 1.415 111.52 0.965
eIoni eBrem phot compt conv annihilTransportation msc
450.32 34.772 34.252 109.41 1.4235 1.4235 0.9185 1.3595
---------------------------------------------------------
Primary particle :
true Range = 11.099 cm rms = 3.8352 cm
proj Range = 9.6044 cm rms = 3.546 cm
proj/true = 0.86534
transverse dispersion at end = 1.7575 cm
mass true Range from simulation = 29.967 g/cm2
true Range = 11.181 cm rms = 3.7948 cm
proj Range = 9.6756 cm rms = 3.5108 cm
proj/true = 0.86535
transverse dispersion at end = 1.7596 cm
mass true Range from simulation = 30.189 g/cm2
from PhysicsTable (csda range) = 31.791 g/cm2
---------------------------------------------------------
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 2000278172, 2144462017
Current couple of seeds = 693892311, 266689939
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -89,18 +89,20 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
Lorentz Factor XTR photon number
@@ -156,7 +158,7 @@ Lorentz Factor XTR photon number
8.085e+04 3.149
9.283e+04 3.149
total time for build X-ray TR energy loss tables = 0.44 s
total time for build X-ray TR energy loss tables = 0.93 s
SynRad: Incoherent Synchrotron Radiation
good description for long magnets at all energies
@@ -164,13 +166,14 @@ SynRad: Incoherent Synchrotron Radiation
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -230,21 +233,24 @@ Lorentz Factor XTR photon number
8.085e+04 3.149
9.283e+04 3.149
total time for build X-ray TR energy loss tables = 0.44 s
total time for build X-ray TR energy loss tables = 0.91 s
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -284,19 +290,22 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
========= Table of registered couples ==============================
@@ -338,26 +347,26 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 1000
User=28.68s Real=32.3s Sys=3.34s
User=65.15s Real=72.62s Sys=7.43s
================== run summary =====================
end of Run TotNbofEvents = 1000
mean charged track length in absorber=114.629 +- 2.11901 mm
mean charged track length in absorber=111.915 +- 2.13442 mm
mean energy deposit in absorber=0.0512368 +- 0.000839775 MeV
mean energy deposit in absorber=0.0503287 +- 0.000857444 MeV
mean number of steps in absorber (charged) =60.95 +- 1.51948
mean number of steps in absorber (neutral) =2.871 +- 0.0527481
mean number of steps in absorber (charged) =58.997 +- 1.51059
mean number of steps in absorber (neutral) =2.869 +- 0.0556762
mean number of charged secondaries = 5.083 +- 0.101302
mean number of charged secondaries = 4.98 +- 0.102954
mean number of neutral secondaries = 0.149 +- 0.0121983
mean number of neutral secondaries = 0.135 +- 0.0121151
mean number of e-s =5.083 and e+s =0
mean number of e-s =4.98 and e+s =0
(number) transmission coeff=0.569 reflection coeff=0.066
(number) transmission coeff=0.544 reflection coeff=0.08
energy deposit distribution
#entries=1000 #underflows=0 #overflows=51
#entries=1000 #underflows=0 #overflows=46
bin nb Elow entries normalized
0 0 0 0
1 1.53846 0 0
@@ -367,71 +376,71 @@ Run Summary
5 7.69231 0 0
6 9.23077 0 0
7 10.7692 0 0
8 12.3077 1 0.001
9 13.8462 5 0.005
10 15.3846 15 0.015
11 16.9231 12 0.012
12 18.4615 10 0.01
13 20 23 0.023
14 21.5385 17 0.017
15 23.0769 22 0.022
16 24.6154 15 0.015
17 26.1538 31 0.031
18 27.6923 34 0.034
8 12.3077 4 0.004
9 13.8462 4 0.004
10 15.3846 10 0.01
11 16.9231 13 0.013
12 18.4615 15 0.015
13 20 14 0.014
14 21.5385 21 0.021
15 23.0769 27 0.027
16 24.6154 30 0.03
17 26.1538 28 0.028
18 27.6923 32 0.032
19 29.2308 26 0.026
20 30.7692 24 0.024
21 32.3077 31 0.031
22 33.8462 36 0.036
23 35.3846 32 0.032
24 36.9231 25 0.025
25 38.4615 33 0.033
26 40 24 0.024
27 41.5385 32 0.032
28 43.0769 28 0.028
29 44.6154 27 0.027
30 46.1538 31 0.031
31 47.6923 30 0.03
32 49.2308 23 0.023
33 50.7692 21 0.021
34 52.3077 12 0.012
35 53.8462 31 0.031
36 55.3846 27 0.027
37 56.9231 19 0.019
38 58.4615 21 0.021
39 60 18 0.018
40 61.5385 18 0.018
41 63.0769 13 0.013
42 64.6154 12 0.012
43 66.1538 8 0.008
44 67.6923 15 0.015
20 30.7692 41 0.041
21 32.3077 23 0.023
22 33.8462 27 0.027
23 35.3846 26 0.026
24 36.9231 29 0.029
25 38.4615 34 0.034
26 40 35 0.035
27 41.5385 28 0.028
28 43.0769 35 0.035
29 44.6154 39 0.039
30 46.1538 27 0.027
31 47.6923 27 0.027
32 49.2308 21 0.021
33 50.7692 23 0.023
34 52.3077 15 0.015
35 53.8462 16 0.016
36 55.3846 23 0.023
37 56.9231 20 0.02
38 58.4615 10 0.01
39 60 21 0.021
40 61.5385 15 0.015
41 63.0769 14 0.014
42 64.6154 16 0.016
43 66.1538 16 0.016
44 67.6923 16 0.016
45 69.2308 12 0.012
46 70.7692 16 0.016
47 72.3077 13 0.013
48 73.8462 15 0.015
49 75.3846 8 0.008
50 76.9231 8 0.008
51 78.4615 7 0.007
52 80 11 0.011
53 81.5385 13 0.013
46 70.7692 17 0.017
47 72.3077 9 0.009
48 73.8462 13 0.013
49 75.3846 13 0.013
50 76.9231 4 0.004
51 78.4615 5 0.005
52 80 6 0.006
53 81.5385 9 0.009
54 83.0769 6 0.006
55 84.6154 4 0.004
56 86.1538 10 0.01
55 84.6154 6 0.006
56 86.1538 9 0.009
57 87.6923 4 0.004
58 89.2308 0 0
59 90.7692 5 0.005
60 92.3077 5 0.005
61 93.8462 5 0.005
62 95.3846 2 0.002
63 96.9231 1 0.001
64 98.4615 2 0.002
58 89.2308 4 0.004
59 90.7692 1 0.001
60 92.3077 2 0.002
61 93.8462 3 0.003
62 95.3846 3 0.003
63 96.9231 4 0.004
64 98.4615 3 0.003
Emp = 0.0338462 width= 0.0415385 MeV
Emp = 0.0307692 width= 0.0384615 MeV
ERROR: G4VisCommandsViewerUpdate::SetNewValue: no current viewer.
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1693453792, 80564918
Current couple of seeds = 1107565906, 1849160895
----------------------------------------
========= Table of registered couples ==============================
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -131,32 +131,35 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -165,24 +168,29 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -190,13 +198,15 @@ ionIoni: tables are built for GenericIon
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -238,20 +248,23 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -289,7 +302,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 20000
User=159.75s Real=271.78s Sys=47.23s
User=322.06s Real=702.43s Sys=129.03s
======================== run summary ======================
@@ -297,20 +310,20 @@ Run Summary
============================================================
Total Energy deposited = 451.298 keV +- 102.255 keV
Total Energy deposited = 448.957 keV +- 104.060 keV
Track length of primary track = 867.560 um +- 185.114 um
Track length of primary track = 872.644 um +- 187.763 um
Range from EmCalculator = 937.365 um (from full dE/dx)
Projected range = 337.244 um +- 204.936 um
Projected range = 339.833 um +- 206.808 um
Nb of steps of primary track = 87.27 +- 18.50 Step size= 9.932 um +- 94.328 nm
Nb of steps of primary track = 87.79 +- 18.76 Step size= 9.932 um +- 91.913 nm
absorbed = 79.29 % transmit = 5.07 % reflected = 15.64 %
absorbed = 78.31 % transmit = 5.38 % reflected = 16.30 %
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 249103066, 419417247
Current couple of seeds = 1541586117, 1104020368
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -1,4 +1,4 @@
$Id: History,v 1.11 2006/10/25 17:27:02 maire Exp $
$Id: History,v 1.13 2007/04/27 10:38:11 maire Exp $
-------------------------------------------------------------------
=========================================================
@@ -14,7 +14,12 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
27-04-07 mma (testem12-V08-02-01)
- HistoManager : by default, get csdaRange from G4EmCalculator
08-01-07 V.Ivant (testem12-V08-02-00)
- Uncomment hadron ionisation in Livermore builder
24-10-06 mma (testem12-V08-01-00)
- GNUmakefile : LOADLIBS
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -133,32 +133,35 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -167,24 +170,29 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -192,13 +200,15 @@ ionIoni: tables are built for GenericIon
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -240,20 +250,23 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 1 GeV in 70 bins.
@@ -307,7 +320,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 10000
User=639.23s Real=740.01s Sys=43.11s
User=1204.52s Real=1426.72s Sys=112.39s
======================== run summary ======================
@@ -315,18 +328,18 @@ Run Summary
============================================================
Total Energy deposited = 3.937 MeV +- 222.512 keV
Total Energy deposited = 3.937 MeV +- 227.712 keV
Track length of primary track = 2.020 cm +- 2.729 mm
Track length of primary track = 2.012 cm +- 2.787 mm
Range from EmCalculator = 2.021 cm (from full dE/dx)
Projected range = 1.315 cm +- 4.420 mm
Projected range = 1.314 cm +- 4.323 mm
Nb of steps of primary track = 238.75 +- 30.39 Step size= 84.595 um +- 4.546 um
Nb of steps of primary track = 238.10 +- 30.94 Step size= 84.472 um +- 4.581 um
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1061622923, 978064961
Current couple of seeds = 1876977844, 634096150
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: HistoManager.hh,v 1.3 2006/06/29 16:42:10 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: HistoManager.hh,v 1.4 2007/04/27 10:38:11 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -58,7 +58,7 @@ class HistoManager
void SetFileName (const G4String& name) { fileName[0] = name;};
void SetFileType (const G4String& name) { fileType = name;};
void SetFileOption (const G4String& name) { fileOption = name;};
void book();
void book(G4double);
void save();
void SetHisto (G4int,G4int,G4double,G4double,const G4String& unit="none");
void FillHisto(G4int id, G4double e, G4double weight = 1.0);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.hh,v 1.3 2006/06/29 16:42:47 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: RunAction.hh,v 1.4 2007/04/27 10:38:11 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -59,7 +59,8 @@ class RunAction : public G4UserRunAction
void AddProjRange (G4double x) { projRange += x; projRange2 += x*x;};
void AddStepSize (G4int nb, G4double s)
{ nbOfSteps += nb; nbOfSteps2 += nb*nb;
stepSize += s ; stepSize2 += s*s; };
stepSize += s ; stepSize2 += s*s; };
private:
DetectorConstruction* detector;
@@ -72,6 +73,8 @@ class RunAction : public G4UserRunAction
G4double projRange, projRange2;
G4int nbOfSteps, nbOfSteps2;
G4double stepSize, stepSize2;
G4double csdaRange;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,4 +1,4 @@
# $Id: run01.mac,v 1.5 2006/10/25 17:27:02 maire Exp $
# $Id: run01.mac,v 1.6 2007/04/27 10:38:11 maire Exp $
#
# limit the step size from histos 1 and 8
#
@@ -21,7 +21,7 @@
/testem/histo/setFileName run01
/testem/histo/setHisto 1 120 0. 2.4 cm #edep profile
/testem/histo/setHisto 3 100 0. 3. cm #true track length
/testem/histo/setcsdaRange 2.037 cm
###/testem/histo/setcsdaRange 2.037 cm
/testem/histo/setHisto 8 120 0. 1.2 none #normalized edep profile
#
/testem/applyStepMax true
@@ -1,4 +1,4 @@
# $Id: run02.mac,v 1.4 2006/10/25 17:27:02 maire Exp $
# $Id: run02.mac,v 1.5 2007/04/27 10:38:11 maire Exp $
#
# limit the step size by geometry
#
@@ -22,7 +22,7 @@
/testem/histo/setFileName run02
/testem/histo/setHisto 1 120 0. 2.4 cm #edep profile
/testem/histo/setHisto 3 100 0. 3. cm #true track length
/testem/histo/setcsdaRange 2.037 cm
###/testem/histo/setcsdaRange 2.037 cm
/testem/histo/setHisto 8 120 0. 1.2 none #normalized edep profile
#
/testem/applyStepMax false
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: HistoManager.cc,v 1.3 2006/06/29 16:43:09 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: HistoManager.cc,v 1.4 2007/04/27 10:38:11 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -65,7 +65,7 @@ HistoManager::HistoManager()
histoMessenger = new HistoMessenger(this);
csdaRange = 1*mm;
csdaRange = 0.;
stepMax = DBL_MAX;
}
@@ -82,7 +82,7 @@ HistoManager::~HistoManager()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::book()
void HistoManager::book(G4double range)
{
#ifdef G4ANALYSIS_USE
if(!af) return;
@@ -121,6 +121,8 @@ void HistoManager::book()
if (factoryOn)
G4cout << "\n----> Histogram Tree is opened in " << fileName[1] << G4endl;
#endif
if (csdaRange == 0.) csdaRange = range;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -209,7 +211,7 @@ void HistoManager::SetHisto(G4int ih,
G4cout << " stepMax = " << G4BestUnit(stepMax,"Length") << G4endl;
}
if (ih == 8) {
if ((ih == 8)&&(csdaRange>0.)) {
stepMax = std::min(stepMax,frac*Width[ih]*csdaRange);
G4cout << " stepMax = " << G4BestUnit(stepMax,"Length") << G4endl;
}
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: PhysListEmLivermore.cc,v 1.2 2006/06/29 16:43:19 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: PhysListEmLivermore.cc,v 1.3 2007/01/08 16:33:52 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -108,8 +108,8 @@ void PhysListEmLivermore::ConstructProcess()
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino
///pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
///pmanager->AddProcess(new G4hLowEnergyIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
pmanager->AddProcess(new G4hLowEnergyIonisation, -1, 2, 2);
}
}
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.cc,v 1.6 2006/06/29 16:43:36 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: RunAction.cc,v 1.7 2007/04/27 10:38:11 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -81,15 +81,26 @@ void RunAction::BeginOfRunAction(const G4Run* aRun)
//initialize mean step size
//
nbOfSteps = nbOfSteps2 = 0; stepSize = stepSize2 = 0.;
//get csdaRange from EmCalculator
//
G4EmCalculator emCalculator;
G4Material* material = detector->GetAbsorMaterial();
G4ParticleDefinition* particle = kinematic->GetParticleGun()
->GetParticleDefinition();
G4double energy = kinematic->GetParticleGun()->GetParticleEnergy();
csdaRange = 0.;
if (particle->GetPDGCharge() != 0.)
csdaRange = emCalculator.GetCSDARange(energy,particle,material);
//histograms
//
histoManager->book();
histoManager->book(csdaRange);
//set StepMax from histos
//
G4double stepMax = histoManager->GetStepMax();
physics->GetStepMaxProcess()->SetMaxStep(stepMax);
physics->GetStepMaxProcess()->SetMaxStep(stepMax);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -150,10 +161,10 @@ void RunAction::EndOfRunAction(const G4Run* aRun)
//compare with csda range
//
G4EmCalculator emCalculator;
G4double csdaRange = 0.;
if (particle->GetPDGCharge() != 0.)
csdaRange = emCalculator.GetCSDARange(energy,particle,material);
//G4EmCalculator emCalculator;
//G4double csdaRange = 0.;
//if (particle->GetPDGCharge() != 0.)
// csdaRange = emCalculator.GetCSDARange(energy,particle,material);
G4cout
<< "\n Range from EmCalculator = " << G4BestUnit(csdaRange,"Length")
<< " (from full dE/dx)" << G4endl;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.cc,v 1.3 2006/06/29 16:43:43 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: SteppingAction.cc,v 1.4 2007/04/27 10:38:11 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -70,7 +70,7 @@ void SteppingAction::UserSteppingAction(const G4Step* aStep)
histoManager->FillHisto(1, r, edep);
G4double r0 = histoManager->GetcsdaRange();
histoManager->FillHisto(8, r/r0, edep);
if (r0 > 0.) histoManager->FillHisto(8, r/r0, edep);
//step size of primary particle or charged secondaries
//
@@ -1,4 +1,4 @@
$Id: History,v 1.12 2006/10/24 16:04:30 maire Exp $
$Id: History,v 1.13 2007/04/06 16:00:50 maire Exp $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,9 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
06-04-07 mma (testem13-V08-02-00)
- vis.mac : suppress the command drawTracks
24-10-06 mma (testem13-V08-01-00)
- GNUmakefile : LOADLIBS
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -128,25 +128,27 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -156,23 +158,27 @@ annihil: Sampling according eplus2gg model
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
muIoni: tables are built for mu+
@@ -212,15 +218,17 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
Region <DefaultRegionForTheWorld> -- appears in <Water> world volume
@@ -273,7 +281,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100000
User=21.14s Real=21.18s Sys=0s
User=29.7s Real=29.73s Sys=0.01s
The run consists of 100000 gamma of 100 keV through 1 cm of Water (density: 1 g/cm3 )
@@ -340,7 +348,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100000
User=22.03s Real=22.06s Sys=0s
User=32.06s Real=32.07s Sys=0s
The run consists of 100000 e- of 100 MeV through 1 cm of Water (density: 1 g/cm3 )
@@ -27,6 +27,3 @@
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
#
/testem/event/drawTracks
@@ -1,4 +1,4 @@
$Id: History,v 1.8 2006/10/24 16:54:16 maire Exp $
$Id: History,v 1.9 2007/04/06 16:07:53 maire Exp $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,9 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
06-04-07 mma (testem14-V08-02-00)
- vis.mac : suppress command drawTracks
24-10-06 mma (testem14-V08-01-01)
- GNUmakefile : LOADLIBS
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -129,25 +129,27 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -157,23 +159,27 @@ annihil: Sampling according eplus2gg model
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
muIoni: tables are built for mu+
@@ -213,15 +219,17 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
Region <DefaultRegionForTheWorld> -- appears in <Water> world volume
@@ -274,7 +282,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100000
User=23s Real=23s Sys=0s
User=33s Real=33s Sys=0s
The run consists of 100000 gamma of 100 keV through 100 m of Water (density: 1 g/cm3 )
@@ -343,7 +351,7 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100000
User=23s Real=23s Sys=0s
User=34s Real=34s Sys=0s
The run consists of 100000 e- of 100 MeV through 100 m of Water (density: 1 g/cm3 )
@@ -1,5 +1,5 @@
#
# Macro file for the initialization phase of "TestEm13.cc"
# Macro file for the initialization phase of "TestEm14.cc"
#
# Sets some default verbose
# and initializes the graphic.
@@ -27,6 +27,3 @@
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
#
/testem/event/drawTracks
@@ -1,4 +1,4 @@
$Id: History,v 1.7 2006/10/24 10:28:10 maire Exp $
$Id: History,v 1.8 2007/03/15 15:52:39 maire Exp $
-------------------------------------------------------------------
=========================================================
@@ -15,6 +15,9 @@ track of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
15-03-07 mma (testem15-V08-02-00)
- SteppingAction: add protection if no lateralDisplacement
24-10-06 mma (testem15-V08-01-00)
- GNUmakefile : LOADLIBS
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -135,29 +135,32 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
@@ -167,35 +170,42 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -235,19 +245,22 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 1, integral: 0
Region <DefaultRegionForTheWorld> -- appears in <World> world volume
@@ -289,31 +302,31 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 10000
User=3.4s Real=3.4s Sys=0s
User=5.6s Real=5.6s Sys=0s
The run consists of 10000 e- of 5 MeV through 100 m of Water (density: 1 g/cm3 )
Process calls frequency ---> msc = 10000
truePathLength : 2.6311 cm +- 2.4801 mm
geomPathLength : 2.0081 cm +- 1.3007 mm
lateralDisplac : 1.1355 cm +- 1.1044 mm
Psi : 513.82 mrad +- 28.091 mrad (29.44 deg +- 1.6095 deg)
truePathLength : 2.7521 cm +- 3.269 nm
geomPathLength : 2.0696 cm +- 11.392 nm
lateralDisplac : 1.1482 cm +- 9.6993 nm
Psi : 506.49 mrad +- 0.00036931 mrad (29.02 deg +- 2.116e-05 deg)
Theta_plane : 1678.5 mrad (96.168 deg)
phi correlation: 0.28825 +- 0.17735 (std::cos(phi_pos - phi_dir))
Theta_plane : 1818.2 mrad (104.18 deg)
phi correlation: 0.26267 +- 0.058466 (std::cos(phi_pos - phi_dir))
Verification from G4EmCalculator.
transport mean free path : 8.346 cm
range from restrict dE/dx: 2.7521 cm
---> effective facRange : 0.31526
---> effective facRange : 1
compute theta0 from Highland : 605.2 mrad (34.676 deg)
compute theta0 from Highland : 620.13 mrad (35.531 deg)
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 178521571, 539724907
Current couple of seeds = 1055489048, 167744914
----------------------------------------
#
/gun/energy 100 keV
@@ -345,7 +358,7 @@ Index : 1 used in the geometry : Yes recalculation needed : No
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 178521571, 539724907
Current couple of seeds = 1055489048, 167744914
----------------------------------------
Start Run processing.
@@ -353,31 +366,31 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 10000
User=3.3s Real=3.3s Sys=0s
User=5.4s Real=5.4s Sys=0s
The run consists of 10000 e- of 100 keV through 100 m of Water (density: 1 g/cm3 )
Process calls frequency ---> msc = 10000
truePathLength : 6.3049 um +- 1.816 um
geomPathLength : 6.1688 um +- 1.7433 um
lateralDisplac : 958.03 nm +- 400.61 nm
Psi : 147.6 mrad +- 22.686 mrad (8.4567 deg +- 1.2998 deg)
truePathLength : 6.3051 um +- 5404.2 fm
geomPathLength : 6.1807 um +- 878.92 fm
lateralDisplac : 923.68 nm +- 256.83 fm
Psi : 148.35 mrad +- 8.7703e-05 mrad (8.4998 deg +- 5.025e-06 deg)
Theta_plane : 240.59 mrad (13.785 deg)
phi correlation: 0.087898 +- 0.13241 (std::cos(phi_pos - phi_dir))
Theta_plane : 241.37 mrad (13.83 deg)
phi correlation: 0.090798 +- 0.13131 (std::cos(phi_pos - phi_dir))
Verification from G4EmCalculator.
transport mean free path : 157.63 um
range from restrict dE/dx: 143.16 um
---> effective facRange : 0.039999
---> effective facRange : 0.04
compute theta0 from Highland : 180.68 mrad (10.352 deg)
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 382949488, 373885619
Current couple of seeds = 647930445, 779579682
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.cc,v 1.5 2006/06/29 16:47:20 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: SteppingAction.cc,v 1.6 2007/03/15 15:52:39 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -106,8 +106,10 @@ void SteppingAction::UserSteppingAction(const G4Step* aStep)
histoManager->FillHisto(7,phiPos);
G4double phiDir = std::atan2(zdir, ydir);
histoManager->FillHisto(8,phiDir);
G4double phiCorrel = (yend*ydir + zend*zdir)/lateralDisplacement;
G4double phiCorrel = 0.;
if (lateralDisplacement > 0.)
phiCorrel = (yend*ydir + zend*zdir)/lateralDisplacement;
runAction->SumPhiCorrel(phiCorrel);
histoManager->FillHisto(9,phiCorrel);
}
@@ -27,6 +27,4 @@
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
#
/testem/event/drawTracks
@@ -1,4 +1,4 @@
# $Id: GNUmakefile,v 1.3 2006/10/24 10:14:46 maire Exp $
# $Id: GNUmakefile,v 1.5 2007/01/18 10:24:35 vnivanch Exp $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
@@ -24,17 +24,15 @@ include $(G4INSTALL)/config/architecture.gmk
ifdef G4ANALYSIS_USE
# add -v to see what is going on.
# add RunAction.o such that the linker finds AIDA_createAnalysisFactory
# for the aida-config command see the README file
CPPFLAGS += `aida-config --include`
LOADLIBS += $(G4WORKDIR)/tmp/$(G4SYSTEM)/TestEm16/RunAction.o `aida-config --lib`
LOADLIBS += `aida-config --lib`
endif
include $(G4INSTALL)/config/binmake.gmk
histclean:
rm -f $(G4WORKDIR)/tmp/$(G4SYSTEM)/$(G4TARGET)/RunAction.o
rm -f $(G4WORKDIR)/tmp/$(G4SYSTEM)/$(G4TARGET)/SteppingAction.o
rm -f $(G4WORKDIR)/tmp/$(G4SYSTEM)/$(G4TARGET)/HistoManager.o
visclean:
rm -f g4*.prim g4*.eps g4*.wrl
@@ -1,4 +1,4 @@
$Id: History,v 1.5 2006/10/24 10:14:46 maire Exp $
$Id: History,v 1.6 2007/01/18 10:24:35 vnivanch Exp $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,11 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
18-01-07 V.Ivant (testem16-V08-02-00)
- GNUmakefile - minor fix
- HistoManager and HistoMessenger added (H.Burkhardt)
- Command to modify upper step limit is added (H.Burkhardt)
24-10-06 mma (testem16-V08-01-00)
- GNUmakefile : LOADLIBS
@@ -1,4 +1,4 @@
$Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
$Id: README,v 1.3 2007/01/18 09:07:20 hbu Exp $
-------------------------------------------------------------------
=========================================================
@@ -19,11 +19,11 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
The default is 500 m of vacuum.
A transverse uniform magnetic field can be applied.
The default geometry is constructed in DetectorConstruction class,
but all of the above parameters can be changed interactively via
the commands defined in the DetectorMessenger class.
2- PHYSICS LIST
The particle list is the one of novice/exampleN03 and TestEm6
@@ -31,7 +31,7 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
To make the synchrotron radiation easily visible, a very low
pressure "vaccuum" and a magnetic field of by default 1 Tesla
in z-direction is used.
3- AN EVENT : THE PRIMARY GENERATOR
The primary kinematic consists of a single particle which hits the
@@ -54,9 +54,9 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
The initialisation of the drawing is done via the command
> /control/execute vis.mac
> /run/beamOn 1
The detector has a default view which is a longitudinal view of the box.
The tracks are drawn at the end of event, and erased at the end of run.
Optionaly one can choose to draw all particles, only the charged one,
or none. This command is defined in EventActionMessenger class.
@@ -81,10 +81,10 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
- compile and link to generate an executable
% cd geant4/examples/extended/electromagnetic/TestEm16
% make
- execute Test in 'batch' mode from macro files
% TestEm16 run01.mac
- execute Test in 'interactive mode' with visualization
% TestEm16
....
@@ -92,7 +92,19 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
....
Idle> exit
7- HISTOGRAMS
7 - TRACKING : stepMax and setMaxStepLength
In order to control the accuracy of the deposition, the user can limit
'by hand' the maximum step size stepMax of charged particles.
The maximum tracking step length for computing of magnetic field lines
is by default set to 1 km.
Synchrotron radiation in very weak magnetic fields of the order of 1 Gauss
may require longer pathlength.
This can be achieved with using setMaxStepLength like
/testem/tracking/setMaxStepLength 100 km
8- HISTOGRAMS
TestEm16 produces 3 histograms which illustrate synchrotron radiation.
The photon energy spectrum (photons / energy bin) and the power spectrum
@@ -108,5 +120,5 @@ $Id: README,v 1.2 2006/05/24 12:58:49 maire Exp $
make
By default the histograms are saved as testem16.hbook
It is possible to choose the format of the histogram file (hbook, root, XML):
comment/uncomment 1 line in the constructor of RunAction.
It is possible to choose the format of the histogram file (hbook, root, XML)
and the binning using /testem/histo/ command, see run01.mac
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: TestEm16.cc,v 1.2 2006/06/29 16:47:24 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: TestEm16.cc,v 1.3 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -43,6 +43,7 @@
#include "RunAction.hh"
#include "EventAction.hh"
#include "SteppingAction.hh"
#include "HistoManager.hh"
#ifdef G4VIS_USE
#include "G4VisExecutive.hh"
@@ -73,12 +74,14 @@ int main(int argc,char** argv) {
visManager->Initialize();
#endif
//set user action classes
RunAction* RunAct;
HistoManager* histo = new HistoManager();
runManager->SetUserAction(RunAct = new RunAction);
//set user action classes
RunAction* RunAct;
runManager->SetUserAction(RunAct = new RunAction(histo));
runManager->SetUserAction(new EventAction);
runManager->SetUserAction(new SteppingAction(RunAct));
runManager->SetUserAction(new SteppingAction(RunAct,histo));
//get the pointer to the User Interface manager
G4UImanager* UI = G4UImanager::GetUIpointer();
@@ -1,4 +1,4 @@
# $Id: TestEm16.in,v 1.3 2006/05/24 12:58:49 maire Exp $
# $Id: TestEm16.in,v 1.4 2007/01/18 09:07:20 hbu Exp $
#
# Macro file for "TestEm16.cc"
# (can be run in batch, without graphic)
@@ -20,7 +20,7 @@
/process/inactivate compt
/process/inactivate conv
#
/testem/det/setField 0.1 tesla
/testem/det/setField 1.0 tesla
#
/gun/particle e-
/gun/energy 9.9994890009 GeV
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -53,7 +53,6 @@ Registered filter factories:
originVolumeFilter
attributeFilter
G4ANALYSIS_USE was not set, there will be no AIDA histos
/run/verbose 2
#
/testem/det/setMat Vacuum
@@ -84,7 +83,7 @@ CutLength : 1 km
/process/inactivate conv
/run/physicsModified
#
/testem/det/setField 0.1 tesla
/testem/det/setField 1.0 tesla
#
/gun/particle e-
/gun/energy 9.9994890009 GeV
@@ -110,17 +109,19 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
@@ -130,12 +131,13 @@ SynRad: Incoherent Synchrotron Radiation
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
@@ -145,6 +147,7 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -207,29 +210,30 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Initial seed (index) = 0
Current couple of seeds = 9876, 54321
----------------------------------------
G4ANALYSIS_USE was not set, there will be no AIDA histos
Start Run processing.
---> Begin of Event: 0
G4SynchrotronRadiation::GetMeanFreePath :
MeanFreePath = 1.618 m
MeanFreePath = 16.18 cm
G4SynchrotronRadiation::GetRandomEnergySR :
Ecr = 6.65 keV
Emean = 2.048 keV
E_rms = 3.718 keV
Ecr = 66.5 keV
Emean = 20.48 keV
E_rms = 37.18 keV
Run terminated.
Run Summary
Number of events processed : 100
User=6.38s Real=7.26s Sys=0.03s
User=28.64s Real=29.93s Sys=0.08s
Summary for synchrotron radiation :
Number of photons = 27201
Emean = 2.016 +/- 0.02196 keV
E_rms = 3.621 keV
Energy Max / Mean = 24.16
MeanFreePath = 1.609 m
Number of photons = 64554
Emean = 20.24 +/- 0.1449 keV
E_rms = 36.82 keV
Energy Max / Mean = 29.54
MeanFreePath = 16.2 cm
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 818335740, 669122331
Current couple of seeds = 1554742231, 6856043
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: DetectorConstruction.hh,v 1.3 2006/06/29 16:47:26 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: DetectorConstruction.hh,v 1.4 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -57,6 +57,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction
void SetMaterial (G4String);
void SetMagField (G4double);
void SetMaxStepSize (G4double);
void SetMaxStepLength (G4double);
void UpdateGeometry();
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: DetectorMessenger.hh,v 1.3 2006/06/29 16:47:28 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: DetectorMessenger.hh,v 1.4 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -58,14 +58,15 @@ private:
G4UIdirectory* testemDir;
G4UIdirectory* detDir;
G4UIdirectory* trackdir;
G4UIcmdWithAString* MaterCmd;
G4UIcmdWithADoubleAndUnit* SizeCmd;
G4UIcmdWithADoubleAndUnit* MagFieldCmd;
G4UIcmdWithADoubleAndUnit* MaxStepCmd;
G4UIcmdWithADoubleAndUnit* MaxStepLength;
G4UIcmdWithoutParameter* UpdateCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,91 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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 HistoManager_h
#define HistoManager_h 1
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace AIDA {
class IAnalysisFactory;
class ITree;
class IHistogram1D;
}
class HistoMessenger;
const G4int MaxHisto = 4;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoManager
{
public:
HistoManager();
~HistoManager();
void SetFileName (const G4String& name) { fileName[0] = name;};
void SetFileType (const G4String& name) { fileType = name;};
void SetFileOption (const G4String& name) { fileOption = name;};
void book();
void save();
void SetHisto (G4int,G4int,G4double,G4double,const G4String& unit="none");
void FillHisto(G4int id, G4double e, G4double weight = 1.0);
void RemoveHisto (G4int);
G4bool HistoExist (G4int id) {return exist[id];}
G4double GetHistoUnit(G4int id) {return Unit[id];}
G4double GetBinWidth (G4int id) {return Width[id];}
private:
G4String fileName[2];
G4String fileType;
G4String fileOption;
AIDA::IAnalysisFactory* af;
AIDA::ITree* tree;
AIDA::IHistogram1D* histo[MaxHisto];
G4bool exist[MaxHisto];
G4String Label[MaxHisto];
G4String Title[MaxHisto];
G4int Nbins[MaxHisto];
G4double Vmin [MaxHisto];
G4double Vmax [MaxHisto];
G4double Unit [MaxHisto];
G4double Width[MaxHisto];
G4bool factoryOn;
HistoMessenger* histoMessenger;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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......
#ifndef HistoMessenger_h
#define HistoMessenger_h 1
#include "G4UImessenger.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoManager;
class G4UIdirectory;
class G4UIcommand;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoMessenger: public G4UImessenger
{
public:
HistoMessenger(HistoManager* );
~HistoMessenger();
void SetNewValue(G4UIcommand* ,G4String );
private:
HistoManager* histoManager;
G4UIdirectory* histoDir;
G4UIcmdWithAString* factoryCmd;
G4UIcmdWithAString* typeCmd;
G4UIcmdWithAString* optionCmd;
G4UIcommand* histoCmd;
G4UIcmdWithAnInteger* rmhistoCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.hh,v 1.4 2006/06/29 16:47:42 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: RunAction.hh,v 1.5 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -35,43 +35,31 @@
#include "G4UserRunAction.hh"
#include "globals.hh"
const int n_histos = 3;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4Run;
namespace AIDA {
class IAnalysisFactory;
class ITree;
class IHistogram1D;
}
class HistoManager;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class RunAction : public G4UserRunAction
{
public:
RunAction();
RunAction(HistoManager*);
~RunAction();
public:
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run*);
AIDA::IHistogram1D* GetHisto(G4int id) {return histo[id];}
G4int n_gam_sync; // number of synchrotron radiation photons generated
G4double e_gam_sync, e_gam_sync2, e_gam_sync_max; // energy of synchrotron radiation photons generated
G4double lam_gam_sync; // step length between synchrotron radiation photons
private:
AIDA::IAnalysisFactory* af;
AIDA::ITree* tree;
AIDA::IHistogram1D* histo[n_histos]; // 3 histograms
HistoManager* histoManager;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.hh,v 1.2 2006/06/29 16:47:44 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: SteppingAction.hh,v 1.3 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -36,20 +36,21 @@
#include "globals.hh"
class RunAction;
class HistoManager;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class SteppingAction : public G4UserSteppingAction
{
public:
SteppingAction(RunAction*);
SteppingAction(RunAction*, HistoManager*);
~SteppingAction();
void UserSteppingAction(const G4Step*);
private:
RunAction* runAction;
G4double muonMass;
HistoManager* histoManager;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -1,4 +1,4 @@
# $Id: run01.mac,v 1.3 2006/05/24 12:58:49 maire Exp $
# $Id: run01.mac,v 1.4 2007/01/18 09:07:20 hbu Exp $
#
# Macro file for "TestEm16.cc"
# (can be run in batch, without graphic)
@@ -6,20 +6,34 @@
#
/control/verbose 2
/run/verbose 2
/testem/det/setMat Vacuum
#
/testem/det/setMat Vacuum
#
/run/initialize
#
# /process/activate SynchrotronRadiation
#
# inactivate other processes to make SynchrotronRadiation more visible
/process/inactivate msc
/process/inactivate eIoni
/process/inactivate eBrem
/process/inactivate annihil
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
#
/testem/det/setField 1 tesla
#
/gun/particle e-
/gun/energy 9.9994890009 GeV
# set up histos. A reasonable choice for the upper limits is about 5*Ecr and 10*MeanFreePath
/testem/histo/setHisto 1 100 0 400 keV #SynRad Energy
/testem/histo/setHisto 2 100 0 400 keV #SynRad Power
/testem/histo/setHisto 3 100 0 1.6 m #Path Length
/testem/histo/setFileName testem16
/testem/histo/setFileType hbook
#
# next would be 30 degree angle sin 30deg = 0.5 cos 30 deg = 0.866025403
#/gun/direction 0.5 0 0.866025403
#
/run/beamOn 1000
@@ -0,0 +1,38 @@
#
# Macro file for "TestEm16.cc"
# (can be run in batch, without graphic)
#
#
/control/verbose 2
/run/verbose 2
/run/initialize
#
# /process/activate SynchrotronRadiation
#
# inactivate other processes to make SynchrotronRadiation more visible
/process/inactivate msc
/process/inactivate eIoni
/process/inactivate eBrem
/process/inactivate annihil
/process/inactivate phot
/process/inactivate compt
/process/inactivate conv
#
/gun/particle e-
/gun/energy 10 TeV
#
# set up histos. A reasonable choice for the upper limits is about 5*Ecr and 10*MeanFreePath
/testem/histo/setHisto 1 100 0 20 MeV #SynRad Energy
/testem/histo/setHisto 2 100 0 20 MeV #SynRad Power
/testem/histo/setHisto 3 100 0 32 km #Path Length
/testem/histo/setFileName testem16_run02
/testem/histo/setFileType hbook
#
/testem/det/setSize 200 km
/testem/det/setMat Vacuum
/testem/det/update
# very weak magnetic field, increase step length
/testem/det/setField 0.5 gauss
/testem/tracking/setMaxStepLength 100 km
#
/run/beamOn 1000
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: DetectorConstruction.cc,v 1.3 2006/06/29 16:47:48 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: DetectorConstruction.cc,v 1.4 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -37,6 +37,7 @@
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4UniformMagField.hh"
#include "G4PropagatorInField.hh"
#include "G4UserLimits.hh"
#include "G4GeometryManager.hh"
@@ -194,6 +195,23 @@ void DetectorConstruction::SetMaxStepSize(G4double val)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetMaxStepLength(G4double val)
{
// set the maximum length of tracking step
//
if (val <= DBL_MIN)
{ G4cout << "\n --->warning from SetMaxStepLength: maxStep "
<< val << " out of range. Command refused" << G4endl;
return;
}
G4TransportationManager* tmanager =
G4TransportationManager::GetTransportationManager();
tmanager->GetPropagatorInField()
->SetLargestAcceptableStep(val);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4RunManager.hh"
void DetectorConstruction::UpdateGeometry()
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: DetectorMessenger.cc,v 1.2 2006/06/29 16:47:50 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: DetectorMessenger.cc,v 1.3 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -79,6 +79,16 @@ DetectorMessenger::DetectorMessenger(DetectorConstruction * Det)
MaxStepCmd->SetRange("Size>0.");
MaxStepCmd->SetUnitCategory("Length");
MaxStepCmd->AvailableForStates(G4State_Idle);
trackdir = new G4UIdirectory("/testem/tracking/");
trackdir->SetGuidance("step length");
MaxStepLength = new G4UIcmdWithADoubleAndUnit("/testem/tracking/setMaxStepLength",this);
MaxStepLength->SetGuidance("Set the maximum length of tracking step");
MaxStepLength->SetGuidance("when integrating magnetic field line.");
MaxStepLength->SetParameterName("Size",false);
MaxStepLength->SetRange("Size>0.");
MaxStepLength->SetUnitCategory("Length");
MaxStepLength->AvailableForStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -90,8 +100,10 @@ DetectorMessenger::~DetectorMessenger()
delete MagFieldCmd;
delete UpdateCmd;
delete MaxStepCmd;
delete MaxStepLength;
delete detDir;
delete testemDir;
delete trackdir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -112,6 +124,9 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
if( command == MaxStepCmd )
{ Detector->SetMaxStepSize(MaxStepCmd->GetNewDoubleValue(newValue));}
if( command == MaxStepLength )
{ Detector->SetMaxStepLength(MaxStepLength->GetNewDoubleValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,218 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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 "HistoManager.hh"
#include "HistoMessenger.hh"
#include "G4UnitsTable.hh"
#ifdef G4ANALYSIS_USE
#include "AIDA/AIDA.h"
#endif
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoManager::HistoManager()
:af(0),tree(0),factoryOn(false)
{
#ifdef G4ANALYSIS_USE
// Creating the analysis factory
af = AIDA_createAnalysisFactory();
if(!af) {
G4cout << " HistoManager::HistoManager() :"
<< " problem creating the AIDA analysis factory."
<< G4endl;
}
#endif
fileName[0] = "testem16";
fileType = "hbook";
fileOption = "--noErrors uncompress";
// histograms
for (G4int k=0; k<MaxHisto; k++) {
histo[k] = 0;
exist[k] = false;
Unit[k] = 1.0;
Width[k] = 1.0;
}
histoMessenger = new HistoMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoManager::~HistoManager()
{
delete histoMessenger;
#ifdef G4ANALYSIS_USE
delete af;
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::book()
{
#ifdef G4ANALYSIS_USE
if(!af) {
G4cout << "HistoManager::book: WARNING AnalysisFactory is not created,"
<< " there will be no AIDA histos" << G4endl;
return;
}
G4cout << "\n----> Book AIDA histograms "<< G4endl;
// Creating a tree mapped to an hbook file.
fileName[1] = fileName[0] + "." + fileType;
G4bool readOnly = false;
G4bool createNew = true;
AIDA::ITreeFactory* tf = af->createTreeFactory();
tree = tf->create(fileName[1], fileType, readOnly, createNew, fileOption);
delete tf;
if(!tree) {
G4cout << "HistoManager::book() :"
<< " problem creating the AIDA tree with "
<< " storeName = " << fileName[1]
<< " storeType = " << fileType
<< " readOnly = " << readOnly
<< " createNew = " << createNew
<< " options = " << fileOption
<< G4endl;
return;
}
// Creating a histogram factory, whose histograms will be handled by the tree
AIDA::IHistogramFactory* hf = af->createHistogramFactory(*tree);
// create selected histograms
for (G4int k=0; k<MaxHisto; k++) {
if (exist[k]) {
histo[k] = hf->createHistogram1D( Label[k], Title[k],
Nbins[k], Vmin[k], Vmax[k]);
factoryOn = true;
}
}
delete hf;
if (factoryOn)
G4cout << "\n----> Histogram Tree is opened in " << fileName[1] << G4endl;
#else
G4cout << "G4ANALYSIS_USE was not set, there will be no AIDA histos"
<< G4endl;
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::save()
{
#ifdef G4ANALYSIS_USE
if (factoryOn) {
tree->commit(); // Writing the histograms to the file
tree->close(); // and closing the tree (and the file)
G4cout << "\n----> Histogram Tree is saved in " << fileName[1] << G4endl;
delete tree;
tree = 0;
factoryOn = false;
}
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::FillHisto(G4int ih, G4double e, G4double weight)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::FillHisto() : histo " << ih
<< "does not exist; e= " << e << " w= " << weight << G4endl;
return;
}
#ifdef G4ANALYSIS_USE
if(exist[ih]) histo[ih]->fill(e/Unit[ih], weight);
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::SetHisto(G4int ih,
G4int nbins, G4double valmin, G4double valmax, const G4String& unit)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::SetHisto() : histo " << ih
<< "does not exist" << G4endl;
return;
}
const G4String id[] = { "0", "1", "2", "3" };
const G4String title[] =
{ "dummy", //0
"SynRad Energy", //1
"SynRad Power ", //2
"Path Length" //3
};
G4String titl = title[ih];
G4double vmin = valmin, vmax = valmax;
Unit[ih] = 1.;
if (unit != "none") {
titl = title[ih] + " (" + unit + ")";
Unit[ih] = G4UnitDefinition::GetValueOf(unit);
vmin = valmin/Unit[ih]; vmax = valmax/Unit[ih];
}
exist[ih] = true;
Label[ih] = id[ih];
Title[ih] = titl;
Nbins[ih] = nbins;
Vmin[ih] = vmin;
Vmax[ih] = vmax;
Width[ih] = (valmax-valmin)/nbins;
G4cout << "----> SetHisto " << ih << ": " << titl << "; "
<< nbins << " bins from "
<< vmin << " " << unit << " to " << vmax << " " << unit << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::RemoveHisto(G4int ih)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::RemoveHisto() : histo " << ih
<< "does not exist" << G4endl;
return;
}
histo[ih] = 0; exist[ih] = false;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,132 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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 "HistoMessenger.hh"
#include <sstream>
#include "HistoManager.hh"
#include "G4UIdirectory.hh"
#include "G4UIcommand.hh"
#include "G4UIparameter.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoMessenger::HistoMessenger(HistoManager* manager)
:histoManager (manager)
{
histoDir = new G4UIdirectory("/testem/histo/");
histoDir->SetGuidance("histograms control");
factoryCmd = new G4UIcmdWithAString("/testem/histo/setFileName",this);
factoryCmd->SetGuidance("set name for the histograms file");
typeCmd = new G4UIcmdWithAString("/testem/histo/setFileType",this);
typeCmd->SetGuidance("set histograms file type: hbook, root, XML");
typeCmd->SetCandidates("hbook root XML");
optionCmd = new G4UIcmdWithAString("/testem/histo/setFileOption",this);
optionCmd->SetGuidance("set option for the histograms file");
histoCmd = new G4UIcommand("/testem/histo/setHisto",this);
histoCmd->SetGuidance("Set bining of the histo number ih :");
histoCmd->SetGuidance(" nbBins; valMin; valMax; unit (of vmin and vmax)");
//
G4UIparameter* ih = new G4UIparameter("ih",'i',false);
ih->SetGuidance("histo number : from 1 to MaxHisto");
ih->SetParameterRange("ih>0");
histoCmd->SetParameter(ih);
//
G4UIparameter* nbBins = new G4UIparameter("nbBins",'i',false);
nbBins->SetGuidance("number of bins");
nbBins->SetParameterRange("nbBins>0");
histoCmd->SetParameter(nbBins);
//
G4UIparameter* valMin = new G4UIparameter("valMin",'d',false);
valMin->SetGuidance("valMin, expressed in unit");
histoCmd->SetParameter(valMin);
//
G4UIparameter* valMax = new G4UIparameter("valMax",'d',false);
valMax->SetGuidance("valMax, expressed in unit");
histoCmd->SetParameter(valMax);
//
G4UIparameter* unit = new G4UIparameter("unit",'s',true);
unit->SetGuidance("if omitted, vmin and vmax are assumed dimensionless");
unit->SetDefaultValue("none");
histoCmd->SetParameter(unit);
rmhistoCmd = new G4UIcmdWithAnInteger("/testem/histo/removeHisto",this);
rmhistoCmd->SetGuidance("desactivate histo #id");
rmhistoCmd->SetParameterName("id",false);
rmhistoCmd->SetRange("id>0");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoMessenger::~HistoMessenger()
{
delete rmhistoCmd;
delete histoCmd;
delete optionCmd;
delete typeCmd;
delete factoryCmd;
delete histoDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoMessenger::SetNewValue(G4UIcommand* command, G4String newValues)
{
if (command == factoryCmd)
histoManager->SetFileName(newValues);
if (command == typeCmd)
histoManager->SetFileType(newValues);
if (command == optionCmd)
histoManager->SetFileOption(newValues);
if (command == histoCmd)
{ G4int ih,nbBins; G4double vmin,vmax; char unts[30];
const char* t = newValues;
std::istringstream is(t);
is >> ih >> nbBins >> vmin >> vmax >> unts;
G4String unit = unts;
G4double vUnit = 1. ;
if (unit != "none") vUnit = G4UIcommand::ValueOf(unit);
histoManager->SetHisto (ih,nbBins,vmin*vUnit,vmax*vUnit,unit);
}
if (command == rmhistoCmd)
histoManager->RemoveHisto(rmhistoCmd->GetNewIntValue(newValues));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.cc,v 1.6 2006/06/29 16:48:02 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: RunAction.cc,v 1.8 2007/01/18 10:24:35 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -36,82 +36,24 @@
#include "G4UnitsTable.hh"
#include "Randomize.hh"
#ifdef G4ANALYSIS_USE
#include "AIDA/AIDA.h"
#endif
#include "HistoManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RunAction::RunAction()
:af(0), tree(0)
RunAction::RunAction(HistoManager* histo)
:histoManager(histo)
{
for (G4int j=0; j<n_histos; j++) histo[j] = 0;
n_gam_sync = 0;
e_gam_sync = 0;
e_gam_sync2 = 0;
e_gam_sync_max =0;
lam_gam_sync = 0;
#ifdef G4ANALYSIS_USE
// Creating the analysis factory
af = AIDA_createAnalysisFactory();
if (af) {
// Creating the tree factory
AIDA::ITreeFactory* tf = af->createTreeFactory();
// Creating a tree mapped to an hbook file.
G4bool readOnly = false;
G4bool createNew = true;
G4String options = "--noErrors uncompress";
tree = tf->create("testem16.hbook","hbook",readOnly,createNew,options);
//tree = tf->create("testem16.root", "root",readOnly,createNew,options);
//tree = tf->create("testem16.xml" ,"xml" ,readOnly,createNew,options);
delete tf;
if (tree) {
// Creating a histogram factory
AIDA::IHistogramFactory* hf = af->createHistogramFactory(*tree);
// Creating histograms
const G4double Ecr=66.5025;
histo[0] = hf->createHistogram1D("1","SynRad Energy in keV",100, 0 ,5.*Ecr);
histo[1] = hf->createHistogram1D("2","SynRad Power in keV",100, 0 ,5.*Ecr);
histo[2] = hf->createHistogram1D("3","Path Length in m",100, 0, 1.6);
delete hf;
G4cout << "\n----> Histogram tree is opened" << G4endl;
}
}
G4cout << "G4ANALYSIS_USE was set, there will be AIDA histos" << '\n';
#else
G4cout << "G4ANALYSIS_USE was not set, there will be no AIDA histos" << '\n';
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RunAction::~RunAction()
{
#ifdef G4ANALYSIS_USE
bool debug=true;
bool Commit_Ok=tree->commit(); // Writing the histograms to the file
if (Commit_Ok)
{ if(debug) G4cout << "tree->commit() ok. Writing of histogram file done"
<< '\n';
}
else if(!Commit_Ok)
{ G4cout << "tree->commit() not successful, no histogram file written"
<< '\n';
}
tree->close(); // and closing the tree (and the file)
delete tree;
delete af;
#endif
}
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -122,6 +64,9 @@ void RunAction::BeginOfRunAction(const G4Run* aRun)
// save Rndm status
G4RunManager::GetRunManager()->SetRandomNumberStore(true);
CLHEP::HepRandom::showEngineStatus();
//book histograms
histoManager->book();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -145,6 +90,10 @@ void RunAction::EndOfRunAction(const G4Run*)
// show Rndm status
CLHEP::HepRandom::showEngineStatus();
//save histograms
histoManager->save();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.cc,v 1.4 2006/06/29 16:48:04 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: SteppingAction.cc,v 1.5 2007/01/18 09:07:20 hbu Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -35,15 +35,12 @@
#include "G4VProcess.hh"
#include "G4ParticleTypes.hh"
#include "G4UnitsTable.hh"
#ifdef G4ANALYSIS_USE
#include "AIDA/IHistogram1D.h"
#endif
#include "HistoManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingAction::SteppingAction(RunAction* RuAct)
:runAction(RuAct)
SteppingAction::SteppingAction(RunAction* RuAct, HistoManager* histo)
:runAction(RuAct), histoManager(histo)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -96,17 +93,10 @@ void SteppingAction::UserSteppingAction(const G4Step* aStep)
<< " PGamma=" << G4BestUnit(PGamma,"Energy")
<< " #secondaries lp=" << lp
<< '\n';
}
#ifdef G4ANALYSIS_USE
// fill histos
if( runAction->GetHisto(0) ) // check the histos exist
{
runAction->GetHisto(0)->fill(Egamma/keV);
runAction->GetHisto(1)->fill(Egamma/keV,Egamma/keV);
runAction->GetHisto(2)->fill(aStep->GetStepLength()/m);
}
#endif
}
histoManager->FillHisto(1,Egamma);
histoManager->FillHisto(2,Egamma,Egamma/keV); // power spectrum : gamma weighted with its energy
histoManager->FillHisto(3,aStep->GetStepLength());
}
}
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -137,18 +137,18 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 10000
User=68.79s Real=92.16s Sys=3.33s
User=140.49s Real=246.11s Sys=6.32s
The run consists of 10000 mu+ of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 )
Number of process calls ---> muIoni : 469540 muPairProd : 63243 muBrems : 645
Number of process calls ---> muIoni : 468767 muPairProd : 63239 muBrems : 694
Simulation: total CrossSection = 0.53343 /cm MeanFreePath = 1.8747 cm massicCrossSection = 0.06778 cm2/g
Simulation: total CrossSection = 0.5327 /cm MeanFreePath = 1.8772 cm massicCrossSection = 0.067687 cm2/g
Theory: total CrossSection = 0.53938 /cm MeanFreePath = 1.854 cm massicCrossSection = 0.068536 cm2/g
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1519165414, 739182601
Current couple of seeds = 758590255, 1816922510
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
@@ -0,0 +1,38 @@
# $Id: GNUmakefile,v 1.1 2007/02/13 17:57:19 maire Exp $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
name := TestEm18
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
.PHONY: all
all: lib bin
#### G4ANALYSIS_USE := true
ifdef G4ANALYSIS_USE
CPPFLAGS += -DG4ANALYSIS_USE
endif
include $(G4INSTALL)/config/architecture.gmk
ifdef G4ANALYSIS_USE
# for the aida-config command see the README file
CPPFLAGS += `aida-config --include`
LOADLIBS += `aida-config --lib`
endif
include $(G4INSTALL)/config/binmake.gmk
visclean:
rm -f g4*.prim g4*.eps g4*.wrl
rm -f .DAWN_*
histclean:
rm ${G4WORKDIR}/tmp/${G4SYSTEM}/${G4TARGET}/HistoManager.o
@@ -0,0 +1,23 @@
$Id: History,v 1.2 2007/02/16 11:59:47 maire Exp $
----------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
TestEm18 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 *
----------------------------------------------------------
16-feb-07 mma (testem18-V08-02-01)
- add Water-vapor
- correct RunAction::GetEnergyFromRange()
14-feb-07 michel maire (testem18-V08-02-00)
- created
@@ -0,0 +1,152 @@
$Id: README,v 1.1 2007/02/13 17:57:19 maire Exp $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
TestEm18
--------
This example allows to study the energy lost by a charged particle in a
single layer, due to ionization and bremsstrahlung. Results are compared to
'reference' values.
1- GEOMETRY DEFINITION
It is a single box of homogeneous medium.
Two parameters define the geometry :
- the material of the box,
- the (full) size of the box.
The default geometry (1 cm of water) is constructed in DetectorConstruction,
but the above parameters can be changed interactively via the commands
defined in DetectorMessenger.
2- PHYSICS
The physics list contains the 'standard' electromagnetic processes.
However the MultipleScattering is not registered, in order to focuse on
fluctuations due to energy loss alone.
3- BEAM
The primary kinematic is a single particle starting at the edge
of the box. The type of the particle and its energy are set in
PrimaryGeneratorAction (e- 10 MeV), and can be changed via the G4
build-in commands of ParticleGun class.
4- RUN
During the tracking of the incident particle, the secondary particles
are immediately killed, after that their energy has been registered
(see StackingAction).
Therefore, we study here the total energy lost by the incident particle,
not the energy deposited in a layer of finite thickness.
At EndOfRun, the above results are compared with 'reference' values,
i.e. the values read from EnergyLoss tables.
5- HISTOGRAMS
The test contains 6 built-in 1D histograms, which are managed by the
HistoManager class and its Messenger.
1 continuous energy loss along primary track
2 energy from secondaries
3 total energy lost by primary track (1+2)
4 energy spectrum of e-+
5 energy spectrum of gamma
6 step size of primary track
The histos can be activated individually with the command :
/testem/histo/setHisto id nbBins valMin valMax unit
where 'unit' is the desired unit for the histo (MeV or KeV, cm or mm, etc..)
One can control the name and the type of the histograms file with
the commands:
/testem/histo/setFileName name (default testem18)
/testem/histo/setFileType name (default hbook)
Note that, by default, histograms are disabled. To activate them, uncomment
the flag G4ANALYSIS_USE in GNUmakefile.
6- VISUALIZATION
The Visualization Manager is set in the main().
The initialisation of the drawing is done via the commands
/vis/... in the macro vis.mac. To get visualisation:
> /control/execute vis.mac
The detector has a default view which is a longitudinal view of the box.
The tracks are drawn at the end of event, and erased at the end of run.
7- HOW TO START ?
compile and link to generate an executable
% cd geant4/examples/extended/electromagnetic/TestEm18
% gmake
execute TestEm18 in 'batch' mode from macro files :
% TestEm18 electron.mac.mac
execute TestEm18 in 'interactive mode' with visualization :
% TestEm18
Idle> control/execute vis.mac
....
Idle> type your commands
....
Idle> exit
8- USING HISTOGRAMS
By default the histograms are not activated. To activate histograms
the environment variable G4ANALYSIS_USE should be defined. For instance
uncomment the flag G4ANALYSIS_USE in GNUmakefile.
Before compilation of the example it is optimal to clean up old files:
gmake histclean
gmake
To use histograms, at least one of the AIDA implementations should be
available (see http://aida.freehep.org).
8a - PI
A package including AIDA and extended interfaces also using Python is PI,
available from: http://cern.ch/pi
Once installed PI or PI-Lite in a specified local area $MYPY, it is required
to add the installation path to $PATH, i.e. for example, for release 1.2.1 of
PI:
setenv PATH ${PATH}:$MYPI/1.2.1/app/releases/PI/PI_1_2_1/rh73_gcc32/bin
CERN users can use the PATH to the LCG area on AFS.
Before running the example the command should be issued:
eval `aida-config --runtime csh`
8b - OpenScientist
OpenScientist is available at http://OpenScientist.lal.in2p3.fr.
You have to "setup" the OpenScientist AIDA implementation before compiling
(then with G4ANALYSIS_USE set) and running your Geant4 application.
On UNIX you setup, with a csh flavoured shell :
csh> source <<OpenScientist install path>/aida-setup.csh
or with a sh flavoured shell :
sh> . <<OpenScientist install path>/aida-setup.sh
On Windows :
DOS> call <<OpenScientist install path>/aida-setup.bat
You can use various file formats for writing (AIDA-XML, hbook, root).
These formats are readable by the Lab onx interactive program
or the OpenPAW application. See the web pages.
With OpenPAW, on a run.hbook file, one can view the histograms
with something like :
OS> opaw
opaw> h/file 1 run.hbook ( or opaw> h/file 1 run.aida or run.root)
opaw> zone 2 2
opaw> h/plot 1
opaw> h/plot 2
@@ -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. *
// ********************************************************************
//
//
// $Id: TestEm18.cc,v 1.1 2007/02/13 17:57:19 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
#include "G4UItcsh.hh"
#include "Randomize.hh"
#ifdef G4VIS_USE
#include "G4VisExecutive.hh"
#endif
#include "DetectorConstruction.hh"
#include "PhysicsList.hh"
#include "PrimaryGeneratorAction.hh"
#include "RunAction.hh"
#include "EventAction.hh"
#include "SteppingAction.hh"
#include "SteppingVerbose.hh"
#include "StackingAction.hh"
#include "HistoManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
int main(int argc,char** argv) {
//choose the Random engine
CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine);
//my Verbose output class
G4VSteppingVerbose::SetInstance(new SteppingVerbose);
// Construct the default run manager
G4RunManager * runManager = new G4RunManager;
// set mandatory initialization classes
DetectorConstruction* detector;
detector = new DetectorConstruction;
runManager->SetUserInitialization(detector);
runManager->SetUserInitialization(new PhysicsList());
G4VisManager* visManager = 0;
HistoManager* histo = new HistoManager();
// set user action classes
//
//primaryGenerator
PrimaryGeneratorAction* primary = new PrimaryGeneratorAction(detector);
runManager->SetUserAction(primary);
//runAction
RunAction* runaction = new RunAction(detector,primary,histo);
runManager->SetUserAction(runaction);
//eventAction
EventAction* eventaction = new EventAction(runaction,histo);
runManager->SetUserAction(eventaction);
//stepAction
SteppingAction* steppingaction = new SteppingAction(runaction, eventaction,
histo);
runManager->SetUserAction(steppingaction);
//stackAction
StackingAction* stackingaction = new StackingAction(runaction, eventaction,
histo);
runManager->SetUserAction(stackingaction);
// get the pointer to the User Interface manager
G4UImanager* UI = G4UImanager::GetUIpointer();
if (argc==1) // Define UI terminal for interactive mode
{
#ifdef G4VIS_USE
// visualization manager
visManager = new G4VisExecutive;
visManager->Initialize();
#endif
G4UIsession * session = 0;
#ifdef G4UI_USE_TCSH
session = new G4UIterminal(new G4UItcsh);
#else
session = new G4UIterminal();
#endif
session->SessionStart();
delete session;
}
else // Batch mode
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UI->ApplyCommand(command+fileName);
}
// job termination
#ifdef G4VIS_USE
delete visManager;
#endif
delete histo;
delete runManager;
return 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,18 @@
# $Id: TestEm18.in,v 1.1 2007/02/13 17:57:19 maire Exp $
#
# macro file for TestEm18.cc
#
/control/verbose 2
/run/verbose 2
#
/testem/det/setMat Water
/testem/det/setSize 1 cm
#
/testem/phys/setCuts 1 mm
#
/run/initialize
#
/gun/particle e-
/gun/energy 10 MeV
#
/run/beamOn 100000
@@ -0,0 +1,282 @@
*************************************************************
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
*************************************************************
***** Table : Nb of materials = 11 *****
Material: Air density: 1.290 mg/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 285.161 m
---> Element: Nitrogen (N) Z = 7.0 N = 14.0 A = 14.01 g/mole ElmMassFraction: 70.00 % ElmAbundance 72.71 %
---> Element: Oxygen (O) Z = 8.0 N = 16.0 A = 16.00 g/mole ElmMassFraction: 30.00 % ElmAbundance 27.29 %
Material: Water density: 1.000 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 36.092 cm
---> Element: Hydrogen (H) Z = 1.0 N = 1.0 A = 1.01 g/mole ElmMassFraction: 11.21 % ElmAbundance 66.67 %
---> Element: Oxygen (O) Z = 8.0 N = 16.0 A = 16.00 g/mole ElmMassFraction: 88.79 % ElmAbundance 33.33 %
Material: Water_vapor density: 1.000 mg/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 360.925 m
---> Element: Hydrogen (H) Z = 1.0 N = 1.0 A = 1.01 g/mole ElmMassFraction: 11.21 % ElmAbundance 66.67 %
---> Element: Oxygen (O) Z = 8.0 N = 16.0 A = 16.00 g/mole ElmMassFraction: 88.79 % ElmAbundance 33.33 %
Material: Carbon density: 2.267 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 18.833 cm
---> Element: Carbon ( ) Z = 6.0 N = 12.0 A = 12.01 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Aluminium density: 2.700 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 8.893 cm
---> Element: Aluminium ( ) Z = 13.0 N = 27.0 A = 26.98 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Silicon density: 2.330 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 9.368 cm
---> Element: Silicon ( ) Z = 14.0 N = 28.1 A = 28.09 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: liquidArgon density: 1.390 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 14.065 cm
---> Element: liquidArgon ( ) Z = 18.0 N = 40.0 A = 39.95 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Iron density: 7.870 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 1.759 cm
---> Element: Iron ( ) Z = 26.0 N = 55.9 A = 55.85 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Germanium density: 5.323 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 2.301 cm
---> Element: Germanium ( ) Z = 32.0 N = 72.6 A = 72.61 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Tungsten density: 19.300 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 3.504 mm
---> Element: Tungsten ( ) Z = 74.0 N = 183.8 A = 183.85 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
Material: Lead density: 11.350 g/cm3 temperature: 273.15 K pressure: 1.00 atm RadLength: 5.612 mm
---> Element: Lead ( ) Z = 82.0 N = 207.2 A = 207.19 g/mole ElmMassFraction: 100.00 % ElmAbundance 100.00 %
/run/verbose 2
#
/testem/det/setMat Water
/testem/det/setSize 1 cm
#
/testem/phys/setCuts 1 mm
#
/run/initialize
userDetector->Construct() start.
The Box is 1 cm of Water
Water is registered to the default region.
physicsList->Construct() start.
physicsList->Construct() start.
physicsList->setCut() start.
PhysicsList::SetCuts:CutLength : 1 mm
#
/gun/particle e-
/gun/energy 10 MeV
#
/run/beamOn 100000
phot: Total cross sections from Sandia parametrisation.
Sampling according PhotoElectric model
compt: Total cross sections has a good parametrisation from 10 KeV to (100/Z) GeV
Sampling according Klein-Nishina model
tables are built for gamma
Lambda tables from 100 eV to 100 GeV in 90 bins.
conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV for all Z;
sampling secondary e+e- according Bethe-Heitler model
tables are built for gamma
Lambda tables from 1.022 MeV to 100 GeV in 100 bins.
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
tables are built for e+
Lambda tables from 100 eV to 100 TeV in 120 bins.
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
CSDA range table up to 100 TeV in 480 bins.
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
muIoni: tables are built for mu+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Bether-Bloch model for E > 0.2 MeV, parametrisation of Bragg peak below,
radiative corrections for E > 1 GeV
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
muBrems: tables are built for mu+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Parametrised model
muPairProd: tables are built for mu+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Parametrised model
muIoni: tables are built for mu-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Bether-Bloch model for E > 0.2 MeV, parametrisation of Bragg peak below,
radiative corrections for E > 1 GeV
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
muBrems: tables are built for mu-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Parametrised model
muPairProd: tables are built for mu-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Parametrised model
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 480 bins.
Lambda tables from threshold to 100 TeV in 480 bins.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
CSDA range table up to 100 TeV in 480 bins.
Region <DefaultRegionForTheWorld> -- appears in <Water> world volume
Materials : Water
Production cuts : gamma 1 mm e- 1 mm e+ 1 mm
========= Table of registered couples ==============================
Index : 0 used in the geometry : Yes recalculation needed : No
Material : Water
Range cuts : gamma 1 mm e- 1 mm e+ 1 mm
Energy thresholds : gamma 2.90186 keV e- 347.138 keV e+ 338.695 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
====================================================================
Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 0 kByte
Total CPU time elapsed for geometry optimisation: 0 seconds
### Run 0 start.
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 9876, 54321
----------------------------------------
Start Run processing.
---> Begin of Event: 0
---> Begin of Event: 10000
---> Begin of Event: 20000
---> Begin of Event: 30000
---> Begin of Event: 40000
---> Begin of Event: 50000
---> Begin of Event: 60000
---> Begin of Event: 70000
---> Begin of Event: 80000
---> Begin of Event: 90000
Run terminated.
Run Summary
Number of events processed : 100000
User=48.74s Real=48.78s Sys=0.02s
======================== run summary ======================
The run was 100000 e- of 10 MeV through 1 cm of Water (density: 1 g/cm3 )
===========================================================
trackLength= 1.0005 cm nb of steps= 1.5573 stepSize= 6.4242 mm
d-rays : eLoss/primary= 249.72 keV nb of d-rays= 0.23634 <Tkin>= 1.0566 MeV Tmin= 347.15 keV Tmax= 4.9638 MeV
brems : eLoss/primary= 173.41 keV nb of gammas= 0.30721 <Tkin>= 564.48 keV Tmin= 2.9024 keV Tmax= 9.6666 MeV
deposit : eLoss/primary= 1.7336 MeV <dEcut > table= 1.7348 MeV ---> simul/reference= 0.99936
total : eLoss/primary= 2.1568 MeV <dEfull> table= 2.1626 MeV ---> simul/reference= 0.99733
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1637293684, 1659265773
----------------------------------------
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserRunAction deleted.
UserPrimaryGenerator deleted.
G4 kernel has come to Quit state.
EventManager deleted.
Default detector region deleted.
UImanager deleted.
Units table cleared.
StateManager deleted.
RunManagerKernel is deleted.
RunManager is deleting.
@@ -0,0 +1,26 @@
# $Id: csda.mac,v 1.2 2007/02/16 11:59:47 maire Exp $
#
# macro file for TestEm18.cc
#
/control/verbose 2
/run/verbose 2
#
/testem/det/setMat Water
###/testem/det/setMat Water_vapor
/testem/det/setSize 1 cm
#
/testem/phys/setCuts 100 km
#
/run/initialize
#
/process/eLoss/fluct false
/process/eLoss/StepFunction 1 1 mm
#
/gun/particle e-
/gun/energy 20 MeV
#
/run/beamOn 1
#
/testem/stepMax 10 um
#
/run/beamOn 1
@@ -0,0 +1,28 @@
# $Id: electron.mac,v 1.1 2007/02/13 17:57:20 maire Exp $
#
# macro file for TestEm18.cc
#
/control/verbose 2
/run/verbose 2
#
/testem/det/setMat Water
/testem/det/setSize 1 cm
#
/testem/phys/setCuts 100 um
#
/run/initialize
#
/gun/particle e-
/gun/energy 10 MeV
#
/testem/histo/setFileName electron
/testem/histo/setHisto 1 100 0 10 MeV #continuous eLoss
/testem/histo/setHisto 2 100 0 10 MeV #secondary eLoss
/testem/histo/setHisto 3 100 0 10 MeV #total eLoss
/testem/histo/setHisto 4 100 0 10 MeV #e- energy spectrum
/testem/histo/setHisto 5 100 0 10 MeV #gamma energy spectrum
/testem/histo/setHisto 6 100 0 10 mm #step size
#
/testem/event/printModulo 100000
#
/run/beamOn 1000000
@@ -23,55 +23,68 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListIonBinaryCascade.hh,v 1.6 2006/08/10 08:44:39 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
//
// Class Description:
// This class is an derived class of G4VPhysicsConstructor
// It is provide PhysicsList for Binary Cascade for
// protons and neutrons with the energy E<3 GeV
//
// $Id: DetectorConstruction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef PhysListIonBinaryCascade_h
#define PhysListIonBinaryCascade_h 1
#ifndef DetectorConstruction_h
#define DetectorConstruction_h 1
#include "G4VPhysicsConstructor.hh"
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class G4LogicalVolume;
class G4Material;
class DetectorMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4DeuteronInelasticProcess;
class G4TritonInelasticProcess;
class G4AlphaInelasticProcess;
class G4HadronInelasticProcess;
class PhysListIonBinaryCascade : public G4VPhysicsConstructor
class DetectorConstruction : public G4VUserDetectorConstruction
{
public:
PhysListIonBinaryCascade(const G4String& name = "binary_ion");
virtual ~PhysListIonBinaryCascade();
public:
DetectorConstruction();
~DetectorConstruction();
public:
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
void ConstructParticle() {};
public:
G4VPhysicalVolume* Construct();
void SetSize (G4double);
void SetMaterial (G4String);
// 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();
private:
G4DeuteronInelasticProcess* theIPdeuteron;
G4TritonInelasticProcess* theIPtriton;
G4AlphaInelasticProcess* theIPalpha;
G4HadronInelasticProcess* theIPGenericIon;
void UpdateGeometry();
public:
const
G4VPhysicalVolume* GetWorld() {return pBox;};
G4double GetSize() {return BoxSize;};
G4Material* GetMaterial() {return aMaterial;};
void PrintParameters();
private:
G4VPhysicalVolume* pBox;
G4LogicalVolume* lBox;
G4double BoxSize;
G4Material* aMaterial;
DetectorMessenger* detectorMessenger;
private:
void DefineMaterials();
G4VPhysicalVolume* ConstructVolumes();
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: DetectorMessenger.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....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 G4UIcmdWithADoubleAndUnit;
class G4UIcmdWithoutParameter;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class DetectorMessenger: public G4UImessenger
{
public:
DetectorMessenger(DetectorConstruction* );
~DetectorMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
DetectorConstruction* Detector;
G4UIdirectory* testemDir;
G4UIdirectory* detDir;
G4UIcmdWithAString* MaterCmd;
G4UIcmdWithADoubleAndUnit* SizeCmd;
G4UIcmdWithoutParameter* UpdateCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: EventAction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef EventAction_h
#define EventAction_h 1
#include "G4UserEventAction.hh"
#include "globals.hh"
class RunAction;
class HistoManager;
class EventMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class EventAction : public G4UserEventAction
{
public:
EventAction(RunAction* , HistoManager*);
~EventAction();
public:
void BeginOfEventAction(const G4Event*);
void EndOfEventAction(const G4Event*);
void AddEnergyDeposit(G4double edep) {EnergyDeposit += edep;};
void AddSecondary(G4double ekin) {EnergySecondary += ekin;};
void SetDrawFlag(G4String val) {drawFlag = val;};
void SetPrintModulo(G4int val) {printModulo = val;};
private:
RunAction* runaction;
HistoManager* histoManager;
G4double EnergyDeposit;
G4double EnergySecondary;
G4String drawFlag;
G4int printModulo;
EventMessenger* eventMessenger;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: EventMessenger.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef EventMessenger_h
#define EventMessenger_h 1
#include "G4UImessenger.hh"
#include "globals.hh"
class EventAction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class EventMessenger: public G4UImessenger
{
public:
EventMessenger(EventAction*);
~EventMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
EventAction* eventAction;
G4UIdirectory* eventDir;
G4UIcmdWithAString* DrawCmd;
G4UIcmdWithAnInteger* PrintCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: HistoManager.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef HistoManager_h
#define HistoManager_h 1
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace AIDA {
class IAnalysisFactory;
class ITree;
class IHistogram1D;
}
class HistoMessenger;
const G4int MaxHisto = 7;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoManager
{
public:
HistoManager();
~HistoManager();
void SetFileName (const G4String& name) { fileName[0] = name;};
void SetFileType (const G4String& name) { fileType = name;};
void SetFileOption (const G4String& name) { fileOption = name;};
void book();
void save();
void SetHisto (G4int,G4int,G4double,G4double,const G4String& unit="none");
void FillHisto(G4int id, G4double e, G4double weight = 1.0);
void RemoveHisto (G4int);
G4bool HistoExist (G4int id) {return exist[id];}
G4double GetHistoUnit(G4int id) {return Unit[id];}
G4double GetBinWidth (G4int id) {return Width[id];}
private:
G4String fileName[2];
G4String fileType;
G4String fileOption;
AIDA::IAnalysisFactory* af;
AIDA::ITree* tree;
AIDA::IHistogram1D* histo[MaxHisto];
G4bool exist[MaxHisto];
G4String Label[MaxHisto];
G4String Title[MaxHisto];
G4int Nbins[MaxHisto];
G4double Vmin [MaxHisto];
G4double Vmax [MaxHisto];
G4double Unit [MaxHisto];
G4double Width[MaxHisto];
G4bool factoryOn;
HistoMessenger* histoMessenger;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: HistoMessenger.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef HistoMessenger_h
#define HistoMessenger_h 1
#include "G4UImessenger.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoManager;
class G4UIdirectory;
class G4UIcommand;
class G4UIcmdWithAString;
class G4UIcmdWithAnInteger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class HistoMessenger: public G4UImessenger
{
public:
HistoMessenger(HistoManager* );
~HistoMessenger();
void SetNewValue(G4UIcommand* ,G4String );
private:
HistoManager* histoManager;
G4UIdirectory* histoDir;
G4UIcmdWithAString* factoryCmd;
G4UIcmdWithAString* typeCmd;
G4UIcmdWithAString* optionCmd;
G4UIcommand* histoCmd;
G4UIcmdWithAnInteger* rmhistoCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -23,45 +23,35 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListHadronElastic.hh,v 1.5 2006/08/10 08:44:39 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
//
// Class Description:
// This class is an derived class of G4VPhysicsConstructor
// It is provide PhysicsList for hadron eleastic process
// $Id: PhysListEmLivermore.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef PhysListHadronElastic_h
#define PhysListHadronElastic_h 1
#ifndef PhysListEmLivermore_h
#define PhysListEmLivermore_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4UHadronElasticProcess;
class PhysListHadronElastic : public G4VPhysicsConstructor
class PhysListEmLivermore : public G4VPhysicsConstructor
{
public:
PhysListHadronElastic(const G4String& name = "elastic");
virtual ~PhysListHadronElastic();
PhysListEmLivermore(const G4String& name = "Livermore");
virtual ~PhysListEmLivermore();
public:
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
// This method is dummy for physics
void ConstructParticle() {};
// 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();
private:
// Elastic Process
G4UHadronElasticProcess* theElasticProcess;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,36 +23,34 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListEmPenelope.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef exrdmPhysListEmStandard_h
#define exrdmPhysListEmStandard_h 1
#ifndef PhysListEmPenelope_h
#define PhysListEmPenelope_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class exrdmPhysListEmStandard : public G4VPhysicsConstructor
class PhysListEmPenelope : public G4VPhysicsConstructor
{
public:
exrdmPhysListEmStandard(const G4String& name = "standard");
virtual ~exrdmPhysListEmStandard();
PhysListEmPenelope(const G4String& name = "penelope");
virtual ~PhysListEmPenelope();
public:
// This method is dummy for physics
virtual void ConstructParticle() {};
void ConstructParticle() {};
// 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();
private:
// name of used to differetiate usage with std-hadron phys
G4String name;
void ConstructProcess();
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,54 +23,44 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListBinaryCascade.hh,v 1.4 2006/08/10 08:44:39 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
//
// Class Description:
// This class is an derived class of G4VPhysicsConstructor
// It is provide PhysicsList for Binary Cascade for
// protons and neutrons with the energy E<3 GeV
// $Id: PhysListEmStandard.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef PhysListBinaryCascade_h
#define PhysListBinaryCascade_h 1
#ifndef PhysListEmStandard_h
#define PhysListEmStandard_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4ProtonInelasticProcess;
class G4NeutronInelasticProcess;
class G4HadronFissionProcess;
class G4HadronCaptureProcess;
class PhysListBinaryCascade : public G4VPhysicsConstructor
class PhysListEmStandard : public G4VPhysicsConstructor
{
public:
PhysListBinaryCascade(const G4String& name = "binary");
virtual ~PhysListBinaryCascade();
public:
PhysListEmStandard(const G4String& name = "standard");
virtual ~PhysListEmStandard();
public:
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
public:
// This method is dummy for physics
void ConstructParticle() {};
// 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
// registered to the process manager of each particle type
void ConstructProcess();
private:
G4ProtonInelasticProcess* theIPproton;
G4NeutronInelasticProcess* theIPneutron;
G4HadronFissionProcess* theFissionProcess;
G4HadronCaptureProcess* theCaptureProcess;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: PhysicsList.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....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();
void ConstructParticle();
void ConstructProcess();
void AddPhysicsList(const G4String& name);
void AddStepMax();
void SetCuts();
void SetCutForGamma(G4double);
void SetCutForElectron(G4double);
void SetCutForPositron(G4double);
private:
PhysicsListMessenger* pMessenger;
G4String emName;
G4VPhysicsConstructor* emPhysicsList;
G4double cutForGamma;
G4double cutForElectron;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: PhysicsListMessenger.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....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();
void SetNewValue(G4UIcommand*, G4String);
private:
PhysicsList* pPhysicsList;
G4UIdirectory* physDir;
G4UIcmdWithAString* pListCmd;
G4UIcmdWithADoubleAndUnit* gammaCutCmd;
G4UIcmdWithADoubleAndUnit* electCutCmd;
G4UIcmdWithADoubleAndUnit* allCutCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: PrimaryGeneratorAction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef PrimaryGeneratorAction_h
#define PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "G4ParticleGun.hh"
#include "globals.hh"
class G4Event;
class DetectorConstruction;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
PrimaryGeneratorAction(DetectorConstruction*);
~PrimaryGeneratorAction();
public:
void GeneratePrimaries(G4Event*);
G4ParticleGun* GetParticleGun() {return particleGun;};
private:
G4ParticleGun* particleGun;
DetectorConstruction* detector;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: RunAction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef RunAction_h
#define RunAction_h 1
#include "G4UserRunAction.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4Run;
class G4ParticleDefinition;
class G4Material;
class DetectorConstruction;
class PrimaryGeneratorAction;
class HistoManager;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class RunAction : public G4UserRunAction
{
public:
RunAction(DetectorConstruction*, PrimaryGeneratorAction*, HistoManager*);
~RunAction();
public:
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run*);
void AddEnergyDeposit (G4double edep)
{energyDeposit += edep;};
void AddTrackLength (G4double step)
{trackLength += step; nbSteps++;};
void AddChargedSecondary (G4double ekin)
{energyCharged += ekin; nbCharged++;
if (ekin<emin[0]) emin[0] = ekin;
if (ekin>emax[0]) emax[0] = ekin;
};
void AddNeutralSecondary (G4double ekin)
{energyNeutral += ekin; nbNeutral++;
if (ekin<emin[1]) emin[1] = ekin;
if (ekin>emax[1]) emax[1] = ekin;
};
public:
G4double GetEnergyFromRestrictedRange
(G4double,G4ParticleDefinition*,G4Material*,G4double);
G4double GetEnergyFromCSDARange
(G4double,G4ParticleDefinition*,G4Material*,G4double);
private:
G4double energyDeposit;
G4double trackLength;
G4double energyCharged, energyNeutral;
G4double emin[2], emax[2];
G4long nbSteps;
G4int nbCharged, nbNeutral;
DetectorConstruction* detector;
PrimaryGeneratorAction* primary;
HistoManager* histoManager;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: StackingAction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef StackingAction_h
#define StackingAction_h 1
#include "G4UserStackingAction.hh"
#include "globals.hh"
class RunAction;
class EventAction;
class HistoManager;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class StackingAction : public G4UserStackingAction
{
public:
StackingAction(RunAction*, EventAction*, HistoManager* );
~StackingAction();
G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*);
private:
RunAction* runaction;
EventAction* eventaction;
HistoManager* histoManager;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: StepMax.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef StepMax_h
#define StepMax_h 1
#include "globals.hh"
#include "G4VDiscreteProcess.hh"
#include "G4ParticleDefinition.hh"
#include "G4Step.hh"
class StepMaxMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class StepMax : public G4VDiscreteProcess
{
public:
StepMax(const G4String& processName ="UserStepMax");
~StepMax();
G4bool IsApplicable(const G4ParticleDefinition&);
void SetMaxStep(G4double);
G4double PostStepGetPhysicalInteractionLength( const G4Track& track,
G4double previousStepSize,
G4ForceCondition* condition);
G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
G4double GetMeanFreePath(const G4Track&, G4double, G4ForceCondition*)
{return DBL_MAX;}; // it is not needed here !
private:
G4double MaxChargedStep;
StepMaxMessenger* pMess;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: StepMaxMessenger.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef StepMaxMessenger_h
#define StepMaxMessenger_h 1
#include "G4UImessenger.hh"
#include "globals.hh"
class StepMax;
class G4UIcmdWithADoubleAndUnit;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class StepMaxMessenger: public G4UImessenger
{
public:
StepMaxMessenger(StepMax*);
~StepMaxMessenger();
void SetNewValue(G4UIcommand*, G4String);
private:
StepMax* pStepMax;
G4UIcmdWithADoubleAndUnit* StepMaxCmd;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: SteppingAction.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef SteppingAction_h
#define SteppingAction_h 1
#include "G4UserSteppingAction.hh"
#include "globals.hh"
class RunAction;
class EventAction;
class HistoManager;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class SteppingAction : public G4UserSteppingAction
{
public:
SteppingAction(RunAction*,EventAction*,HistoManager* );
~SteppingAction();
void UserSteppingAction(const G4Step*);
private:
RunAction* runaction;
EventAction* eventaction;
HistoManager* histoManager;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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. *
// ********************************************************************
//
// $Id: SteppingVerbose.hh,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
// This class manages the verbose outputs in G4SteppingManager.
// It inherits from G4SteppingVerbose.
// It shows how to extract informations during the tracking of a particle.
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#ifndef SteppingVerbose_h
#define SteppingVerbose_h 1
#include "G4SteppingVerbose.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class SteppingVerbose : public G4SteppingVerbose {
public:
SteppingVerbose();
~SteppingVerbose();
void StepInfo();
void TrackingStarted();
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,27 @@
# $Id: proton.mac,v 1.1 2007/02/13 17:57:20 maire Exp $
#
# macro file for TestEm18.cc
#
/control/verbose 2
/run/verbose 2
#
/testem/det/setMat Water
/testem/det/setSize 1 cm
#
/testem/phys/setCuts 100 um
#
/run/initialize
#
/gun/particle proton
/gun/energy 100 MeV
#
/testem/histo/setFileName proton
/testem/histo/setHisto 1 100 0 10 MeV #continuous eLoss
/testem/histo/setHisto 2 100 0 10 MeV #secondary eLoss
/testem/histo/setHisto 3 100 0 10 MeV #total eLoss
/testem/histo/setHisto 4 100 0 300 keV #e- energy spectrum
/testem/histo/setHisto 6 100 0 10 mm #step size
#
/testem/event/printModulo 100000
#
/run/beamOn 1000000
@@ -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. *
// ********************************************************************
//
// $Id: DetectorConstruction.cc,v 1.2 2007/02/16 11:59:47 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "DetectorConstruction.hh"
#include "DetectorMessenger.hh"
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4GeometryManager.hh"
#include "G4PhysicalVolumeStore.hh"
#include "G4LogicalVolumeStore.hh"
#include "G4SolidStore.hh"
#include "G4UnitsTable.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
DetectorConstruction::DetectorConstruction()
:pBox(0), lBox(0), aMaterial(0)
{
BoxSize = 1*cm;
DefineMaterials();
SetMaterial("Water");
detectorMessenger = new DetectorMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
DetectorConstruction::~DetectorConstruction()
{ delete detectorMessenger;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* DetectorConstruction::Construct()
{
return ConstructVolumes();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::DefineMaterials()
{
//
// define Elements
//
G4double z,a;
G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole);
G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole);
G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole);
//
// define materials
//
G4double density;
G4int ncomponents, natoms;
G4double fractionmass;
G4Material* Air =
new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
Air->AddElement(N, fractionmass=70.*perCent);
Air->AddElement(O, fractionmass=30.*perCent);
G4Material* H2O =
new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
H2O->AddElement(H, natoms=2);
H2O->AddElement(O, natoms=1);
H2O->GetIonisation()->SetMeanExcitationEnergy(75.0*eV);
G4Material* vapor =
new G4Material("Water_vapor", density= 1.000*mg/cm3, ncomponents=2);
vapor->AddElement(H, natoms=2);
vapor->AddElement(O, natoms=1);
vapor->GetIonisation()->SetMeanExcitationEnergy(75.0*eV);
new G4Material("Carbon" , z=6., a= 12.01*g/mole, density= 2.267*g/cm3);
new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.30*g/cm3);
new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
G4cout << *(G4Material::GetMaterialTable()) << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* DetectorConstruction::ConstructVolumes()
{
// Cleanup old geometry
G4GeometryManager::GetInstance()->OpenGeometry();
G4PhysicalVolumeStore::GetInstance()->Clean();
G4LogicalVolumeStore::GetInstance()->Clean();
G4SolidStore::GetInstance()->Clean();
G4Box*
sBox = new G4Box("Container", //its name
BoxSize/2,BoxSize/2,BoxSize/2); //its dimensions
lBox = new G4LogicalVolume(sBox, //its shape
aMaterial, //its material
aMaterial->GetName()); //its name
pBox = new G4PVPlacement(0, //no rotation
G4ThreeVector(), //at (0,0,0)
lBox, //its logical volume
aMaterial->GetName(), //its name
0, //its mother volume
false, //no boolean operation
0); //copy number
PrintParameters();
//always return the root volume
//
return pBox;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::PrintParameters()
{
G4cout << "\n The Box is " << G4BestUnit(BoxSize,"Length")
<< " of " << aMaterial->GetName() << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetMaterial(G4String materialChoice)
{
// search the material by its name
G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
if (pttoMaterial) {
aMaterial = pttoMaterial;
UpdateGeometry();
} else {
G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
<< materialChoice << " not found" << G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetSize(G4double value)
{
BoxSize = value;
UpdateGeometry();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4RunManager.hh"
void DetectorConstruction::UpdateGeometry()
{
if (pBox)
G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: DetectorMessenger.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "DetectorMessenger.hh"
#include "DetectorConstruction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "G4UIcmdWithoutParameter.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
DetectorMessenger::DetectorMessenger(DetectorConstruction * Det)
:Detector(Det)
{
testemDir = new G4UIdirectory("/testem/");
testemDir->SetGuidance("commands specific to this example");
detDir = new G4UIdirectory("/testem/det/");
detDir->SetGuidance("detector construction");
MaterCmd = new G4UIcmdWithAString("/testem/det/setMat",this);
MaterCmd->SetGuidance("Select material of the box.");
MaterCmd->SetParameterName("choice",false);
MaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
SizeCmd = new G4UIcmdWithADoubleAndUnit("/testem/det/setSize",this);
SizeCmd->SetGuidance("Set size of the box");
SizeCmd->SetParameterName("Size",false);
SizeCmd->SetRange("Size>0.");
SizeCmd->SetUnitCategory("Length");
SizeCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
UpdateCmd = new G4UIcmdWithoutParameter("/testem/det/update",this);
UpdateCmd->SetGuidance("Update calorimeter geometry.");
UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
UpdateCmd->SetGuidance("if you changed geometrical value(s).");
UpdateCmd->AvailableForStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
DetectorMessenger::~DetectorMessenger()
{
delete MaterCmd;
delete SizeCmd;
delete UpdateCmd;
delete detDir;
delete testemDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
{
if( command == MaterCmd )
{ Detector->SetMaterial(newValue);}
if( command == SizeCmd )
{ Detector->SetSize(SizeCmd->GetNewDoubleValue(newValue));}
if( command == UpdateCmd )
{ Detector->UpdateGeometry(); }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,82 +23,78 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListBinaryCascade.cc,v 1.4 2006/08/10 08:44:39 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: EventAction.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysListBinaryCascade.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4LFission.hh"
#include "G4LCapture.hh"
#include "G4Proton.hh"
#include "G4Neutron.hh"
#include "EventAction.hh"
#include "G4ProtonInelasticProcess.hh"
#include "G4NeutronInelasticProcess.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4HadronFissionProcess.hh"
#include "G4HadronCaptureProcess.hh"
#include "RunAction.hh"
#include "HistoManager.hh"
#include "EventMessenger.hh"
#include "G4BinaryCascade.hh"
#include "G4Event.hh"
#include "G4TrajectoryContainer.hh"
#include "G4Trajectory.hh"
#include "G4VVisManager.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListBinaryCascade::PhysListBinaryCascade(const G4String& name)
: G4VPhysicsConstructor(name)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListBinaryCascade::~PhysListBinaryCascade()
EventAction::EventAction(RunAction* RA, HistoManager* histo)
:runaction(RA),histoManager(histo),
drawFlag("none"),printModulo(10000)
{
delete theIPproton;
delete theIPneutron;
delete theFissionProcess;
delete theCaptureProcess;
eventMessenger = new EventMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListBinaryCascade::ConstructProcess()
EventAction::~EventAction()
{
// Binary Cascade
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
G4BinaryCascade* theBC = 0;
// proton
particle = G4Proton::Proton();
pmanager = particle->GetProcessManager();
theBC = new G4BinaryCascade();
theIPproton = new G4ProtonInelasticProcess();
theIPproton->RegisterMe(theBC);
theIPproton->AddDataSet(new G4ProtonInelasticCrossSection);
pmanager->AddDiscreteProcess(theIPproton);
// neutron
particle = G4Neutron::Neutron();
pmanager = particle->GetProcessManager();
theBC = new G4BinaryCascade();
theIPneutron = new G4NeutronInelasticProcess();
theIPneutron->RegisterMe(theBC);
theIPneutron->AddDataSet(new G4NeutronInelasticCrossSection);
pmanager->AddDiscreteProcess(theIPneutron);
// fission
theFissionProcess = new G4HadronFissionProcess;
G4LFission* theFissionModel = new G4LFission;
theFissionProcess->RegisterMe(theFissionModel);
pmanager->AddDiscreteProcess(theFissionProcess);
// capture
theCaptureProcess = new G4HadronCaptureProcess;
G4LCapture* theCaptureModel = new G4LCapture;
theCaptureProcess->RegisterMe(theCaptureModel);
pmanager->AddDiscreteProcess(theCaptureProcess);
delete eventMessenger;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void EventAction::BeginOfEventAction(const G4Event* evt)
{
G4int evtNb = evt->GetEventID();
//printing survey
if (evtNb%printModulo == 0)
G4cout << "\n---> Begin of Event: " << evtNb << G4endl;
// initialisation per event
EnergyDeposit = EnergySecondary = 0.;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void EventAction::EndOfEventAction(const G4Event* evt)
{
runaction->AddEnergyDeposit(EnergyDeposit);
histoManager->FillHisto(1, EnergyDeposit);
histoManager->FillHisto(2, EnergySecondary);
histoManager->FillHisto(3, EnergyDeposit+EnergySecondary);
if (G4VVisManager::GetConcreteInstance())
{
G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
G4int n_trajectories = 0;
if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
for (G4int i=0; i<n_trajectories; i++)
{ G4Trajectory* trj = (G4Trajectory*)
((*(evt->GetTrajectoryContainer()))[i]);
if (drawFlag == "all") trj->DrawTrajectory(1000);
else if ((drawFlag == "charged")&&(trj->GetCharge() != 0.))
trj->DrawTrajectory(1000);
else if ((drawFlag == "neutral")&&(trj->GetCharge() == 0.))
trj->DrawTrajectory(1000);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: EventMessenger.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "EventMessenger.hh"
#include "EventAction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
EventMessenger::EventMessenger(EventAction* EvAct)
:eventAction(EvAct)
{
eventDir = new G4UIdirectory("/testem/event/");
eventDir->SetGuidance("event control");
DrawCmd = new G4UIcmdWithAString("/testem/event/drawTracks",this);
DrawCmd->SetGuidance("Draw the tracks in the event");
DrawCmd->SetGuidance(" Choice : none,charged,neutral,all");
DrawCmd->SetParameterName("choice",true);
DrawCmd->SetDefaultValue("all");
DrawCmd->SetCandidates("none charged neutral all");
DrawCmd->AvailableForStates(G4State_Idle);
PrintCmd = new G4UIcmdWithAnInteger("/testem/event/printModulo",this);
PrintCmd->SetGuidance("Print events modulo n");
PrintCmd->SetParameterName("EventNb",false);
PrintCmd->SetRange("EventNb>0");
PrintCmd->AvailableForStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
EventMessenger::~EventMessenger()
{
delete DrawCmd;
delete PrintCmd;
delete eventDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void EventMessenger::SetNewValue(G4UIcommand* command,
G4String newValue)
{
if(command == DrawCmd)
{eventAction->SetDrawFlag(newValue);}
if(command == PrintCmd)
{eventAction->SetPrintModulo(PrintCmd->GetNewIntValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,215 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: HistoManager.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "HistoManager.hh"
#include "HistoMessenger.hh"
#include "G4UnitsTable.hh"
#ifdef G4ANALYSIS_USE
#include "AIDA/AIDA.h"
#endif
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoManager::HistoManager()
:af(0),tree(0),factoryOn(false)
{
#ifdef G4ANALYSIS_USE
// Creating the analysis factory
af = AIDA_createAnalysisFactory();
if(!af) {
G4cout << " HistoManager::HistoManager() :"
<< " problem creating the AIDA analysis factory."
<< G4endl;
}
#endif
fileName[0] = "testem18";
fileType = "hbook";
fileOption = "--noErrors uncompress";
// histograms
for (G4int k=0; k<MaxHisto; k++) {
histo[k] = 0;
exist[k] = false;
Unit[k] = 1.0;
Width[k] = 1.0;
}
histoMessenger = new HistoMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoManager::~HistoManager()
{
delete histoMessenger;
#ifdef G4ANALYSIS_USE
delete af;
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::book()
{
#ifdef G4ANALYSIS_USE
if(!af) return;
// Creating a tree mapped to an hbook file.
fileName[1] = fileName[0] + "." + fileType;
G4bool readOnly = false;
G4bool createNew = true;
AIDA::ITreeFactory* tf = af->createTreeFactory();
tree = tf->create(fileName[1], fileType, readOnly, createNew, fileOption);
delete tf;
if(!tree) {
G4cout << "HistoManager::book() :"
<< " problem creating the AIDA tree with "
<< " storeName = " << fileName[1]
<< " storeType = " << fileType
<< " readOnly = " << readOnly
<< " createNew = " << createNew
<< " options = " << fileOption
<< G4endl;
return;
}
// Creating a histogram factory, whose histograms will be handled by the tree
AIDA::IHistogramFactory* hf = af->createHistogramFactory(*tree);
// create selected histograms
for (G4int k=0; k<MaxHisto; k++) {
if (exist[k]) {
histo[k] = hf->createHistogram1D( Label[k], Title[k],
Nbins[k], Vmin[k], Vmax[k]);
factoryOn = true;
}
}
delete hf;
if(factoryOn)
G4cout << "\n----> Histogram Tree is opened in " << fileName[1] << G4endl;
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::save()
{
#ifdef G4ANALYSIS_USE
if (factoryOn) {
tree->commit(); // Writing the histograms to the file
tree->close(); // and closing the tree (and the file)
G4cout << "\n----> Histogram Tree is saved in " << fileName[1] << G4endl;
delete tree;
tree = 0;
factoryOn = false;
}
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::FillHisto(G4int ih, G4double e, G4double weight)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::FillHisto() : histo " << ih
<< "does not exist; e= " << e << " w= " << weight << G4endl;
return;
}
#ifdef G4ANALYSIS_USE
if(exist[ih]) histo[ih]->fill(e/Unit[ih], weight);
#endif
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::SetHisto(G4int ih,
G4int nbins, G4double valmin, G4double valmax, const G4String& unit)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::SetHisto() : histo " << ih
<< "does not exist" << G4endl;
return;
}
const G4String id[] = { "0", "1", "2", "3", "4", "5", "6" };
const G4String title[] =
{ "dummy", //0
"continuous energy loss along primary track", //1
"energy from secondaries", //2
"total energy lost by primary track", //3
"energy spectrum of e-+", //4
"energy spectrum of gamma", //5
"step size" //6
};
G4String titl = title[ih];
G4double vmin = valmin, vmax = valmax;
Unit[ih] = 1.;
if (unit != "none") {
titl = title[ih] + " (" + unit + ")";
Unit[ih] = G4UnitDefinition::GetValueOf(unit);
vmin = valmin/Unit[ih]; vmax = valmax/Unit[ih];
}
exist[ih] = true;
Label[ih] = id[ih];
Title[ih] = titl;
Nbins[ih] = nbins;
Vmin[ih] = vmin;
Vmax[ih] = vmax;
Width[ih] = (valmax-valmin)/nbins;
G4cout << "----> SetHisto " << ih << ": " << titl << "; "
<< nbins << " bins from "
<< vmin << " " << unit << " to " << vmax << " " << unit << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoManager::RemoveHisto(G4int ih)
{
if (ih > MaxHisto) {
G4cout << "---> warning from HistoManager::RemoveHisto() : histo " << ih
<< "does not exist" << G4endl;
return;
}
histo[ih] = 0; exist[ih] = false;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: HistoMessenger.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "HistoMessenger.hh"
#include <sstream>
#include "HistoManager.hh"
#include "G4UIdirectory.hh"
#include "G4UIcommand.hh"
#include "G4UIparameter.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoMessenger::HistoMessenger(HistoManager* manager)
:histoManager (manager)
{
histoDir = new G4UIdirectory("/testem/histo/");
histoDir->SetGuidance("histograms control");
factoryCmd = new G4UIcmdWithAString("/testem/histo/setFileName",this);
factoryCmd->SetGuidance("set name for the histograms file");
typeCmd = new G4UIcmdWithAString("/testem/histo/setFileType",this);
typeCmd->SetGuidance("set histograms file type: hbook, root, XML");
typeCmd->SetCandidates("hbook root XML");
optionCmd = new G4UIcmdWithAString("/testem/histo/setFileOption",this);
optionCmd->SetGuidance("set option for the histograms file");
histoCmd = new G4UIcommand("/testem/histo/setHisto",this);
histoCmd->SetGuidance("Set bining of the histo number ih :");
histoCmd->SetGuidance(" nbBins; valMin; valMax; unit (of vmin and vmax)");
//
G4UIparameter* ih = new G4UIparameter("ih",'i',false);
ih->SetGuidance("histo number : from 1 to MaxHisto");
ih->SetParameterRange("ih>0");
histoCmd->SetParameter(ih);
//
G4UIparameter* nbBins = new G4UIparameter("nbBins",'i',false);
nbBins->SetGuidance("number of bins");
nbBins->SetParameterRange("nbBins>0");
histoCmd->SetParameter(nbBins);
//
G4UIparameter* valMin = new G4UIparameter("valMin",'d',false);
valMin->SetGuidance("valMin, expressed in unit");
histoCmd->SetParameter(valMin);
//
G4UIparameter* valMax = new G4UIparameter("valMax",'d',false);
valMax->SetGuidance("valMax, expressed in unit");
histoCmd->SetParameter(valMax);
//
G4UIparameter* unit = new G4UIparameter("unit",'s',true);
unit->SetGuidance("if omitted, vmin and vmax are assumed dimensionless");
unit->SetDefaultValue("none");
histoCmd->SetParameter(unit);
rmhistoCmd = new G4UIcmdWithAnInteger("/testem/histo/removeHisto",this);
rmhistoCmd->SetGuidance("desactivate histo #id");
rmhistoCmd->SetParameterName("id",false);
rmhistoCmd->SetRange("id>0");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
HistoMessenger::~HistoMessenger()
{
delete rmhistoCmd;
delete histoCmd;
delete optionCmd;
delete typeCmd;
delete factoryCmd;
delete histoDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void HistoMessenger::SetNewValue(G4UIcommand* command, G4String newValues)
{
if (command == factoryCmd)
histoManager->SetFileName(newValues);
if (command == typeCmd)
histoManager->SetFileType(newValues);
if (command == optionCmd)
histoManager->SetFileOption(newValues);
if (command == histoCmd)
{ G4int ih,nbBins; G4double vmin,vmax; char unts[30];
const char* t = newValues;
std::istringstream is(t);
is >> ih >> nbBins >> vmin >> vmax >> unts;
G4String unit = unts;
G4double vUnit = 1. ;
if (unit != "none") vUnit = G4UIcommand::ValueOf(unit);
histoManager->SetHisto (ih,nbBins,vmin*vUnit,vmax*vUnit,unit);
}
if (command == rmhistoCmd)
histoManager->RemoveHisto(rmhistoCmd->GetNewIntValue(newValues));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
//
// $Id: PhysListEmLivermore.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysListEmLivermore.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4LowEnergyCompton.hh"
#include "G4LowEnergyGammaConversion.hh"
#include "G4LowEnergyPhotoElectric.hh"
#include "G4LowEnergyRayleigh.hh"
#include "G4LowEnergyIonisation.hh"
#include "G4LowEnergyBremsstrahlung.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4hLowEnergyIonisation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListEmLivermore::PhysListEmLivermore(const G4String& name)
: G4VPhysicsConstructor(name)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListEmLivermore::~PhysListEmLivermore()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListEmLivermore::ConstructProcess()
{
// Add LowEn or standard EM Processes
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4LowEnergyPhotoElectric);
pmanager->AddDiscreteProcess(new G4LowEnergyCompton);
pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion);
pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh);
} else if (particleName == "e-") {
//electron
pmanager->AddProcess(new G4LowEnergyIonisation, -1, 1, 1);
pmanager->AddProcess(new G4LowEnergyBremsstrahlung, -1,-1, 2);
} else if (particleName == "e+") {
//positron
pmanager->AddProcess(new G4eIonisation, -1, 1, 1);
pmanager->AddProcess(new G4eBremsstrahlung, -1, 2, 2);
pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 3);
} else if( particleName == "mu+" ||
particleName == "mu-" ) {
//muon
pmanager->AddProcess(new G4MuIonisation, -1, 1, 1);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 2, 2);
pmanager->AddProcess(new G4MuPairProduction, -1, 3, 3);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino
pmanager->AddProcess(new G4hLowEnergyIonisation, -1, 1, 1);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
//
// $Id: PhysListEmPenelope.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysListEmPenelope.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4PenelopeCompton.hh"
#include "G4PenelopeGammaConversion.hh"
#include "G4PenelopePhotoElectric.hh"
#include "G4PenelopeRayleigh.hh"
#include "G4PenelopeIonisation.hh"
#include "G4PenelopeBremsstrahlung.hh"
#include "G4PenelopeAnnihilation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListEmPenelope::PhysListEmPenelope(const G4String& name)
: G4VPhysicsConstructor(name)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListEmPenelope::~PhysListEmPenelope()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListEmPenelope::ConstructProcess()
{
// Add Penelope or standard EM Processes
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4PenelopePhotoElectric);
pmanager->AddDiscreteProcess(new G4PenelopeCompton);
pmanager->AddDiscreteProcess(new G4PenelopeGammaConversion);
pmanager->AddDiscreteProcess(new G4PenelopeRayleigh);
} else if (particleName == "e-") {
//electron
pmanager->AddProcess(new G4PenelopeIonisation, -1, 1, 1);
pmanager->AddProcess(new G4PenelopeBremsstrahlung, -1,-1, 2);
} else if (particleName == "e+") {
//positron
pmanager->AddProcess(new G4PenelopeIonisation, -1, 1, 1);
pmanager->AddProcess(new G4PenelopeBremsstrahlung, -1,-1, 2);
pmanager->AddProcess(new G4PenelopeAnnihilation, 0,-1, 3);
} else if( particleName == "mu+" ||
particleName == "mu-" ) {
//muon
pmanager->AddProcess(new G4MuIonisation, -1, 1, 1);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 2, 2);
pmanager->AddProcess(new G4MuPairProduction, -1, 3, 3);
} else if( particleName == "alpha" || particleName == "GenericIon" ) {
pmanager->AddProcess(new G4ionIonisation, -1, 1,1);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino
pmanager->AddProcess(new G4hIonisation, -1, 1, 1);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,9 +23,13 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListEmStandard.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "exrdmPhysListEmStandard.hh"
#include "PhysListEmStandard.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
@@ -33,8 +37,6 @@
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4MultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
@@ -48,20 +50,21 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
exrdmPhysListEmStandard::exrdmPhysListEmStandard(const G4String& na)
: G4VPhysicsConstructor(na)
{name = na;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
exrdmPhysListEmStandard::~exrdmPhysListEmStandard()
PhysListEmStandard::PhysListEmStandard(const G4String& name)
: G4VPhysicsConstructor(name)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void exrdmPhysListEmStandard::ConstructProcess()
PhysListEmStandard::~PhysListEmStandard()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListEmStandard::ConstructProcess()
{
// Add standard EM Processes
//
theParticleIterator->reset();
while( (*theParticleIterator)() ){
@@ -70,43 +73,37 @@ void exrdmPhysListEmStandard::ConstructProcess()
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
pmanager->AddDiscreteProcess(new G4ComptonScattering);
pmanager->AddDiscreteProcess(new G4GammaConversion);
} else if (particleName == "e-") {
pmanager->AddProcess(new G4MultipleScattering, -1, 1,1);
pmanager->AddProcess(new G4eIonisation, -1, 2,2);
pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3);
//electron
pmanager->AddProcess(new G4eIonisation, -1, 1,1);
pmanager->AddProcess(new G4eBremsstrahlung, -1, 2,2);
} else if (particleName == "e+") {
pmanager->AddProcess(new G4MultipleScattering, -1, 1,1);
pmanager->AddProcess(new G4eIonisation, -1, 2,2);
pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3);
pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4);
} else if( particleName == "mu+" ||
//positron
pmanager->AddProcess(new G4eIonisation, -1, 1,1);
pmanager->AddProcess(new G4eBremsstrahlung, -1, 2,2);
pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,3);
} else if (particleName == "mu+" ||
particleName == "mu-" ) {
pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
pmanager->AddProcess(new G4MuIonisation, -1, 2,2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3,3);
pmanager->AddProcess(new G4MuPairProduction, -1, 4,4);
} else if (particleName == "GenericIon") {
pmanager->AddProcess(new G4MultipleScattering,-1,1,1);
pmanager->AddProcess(new G4hIonisation, -1,2,2);
//muon
pmanager->AddProcess(new G4MuIonisation, -1, 1,1);
pmanager->AddProcess(new G4MuBremsstrahlung, -1, 2,2);
pmanager->AddProcess(new G4MuPairProduction, -1, 3,3);
} else if (particleName == "alpha" || particleName == "GenericIon" ) {
pmanager->AddProcess(new G4ionIonisation, -1, 1,1);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
// don't need these if standard hadron is used: std-h-em)
if (name != "std-h-em") {
pmanager->AddProcess(new G4MultipleScattering,-1,1,1);
pmanager->AddProcess(new G4hIonisation, -1,2,2);
}
//all others charged particles except geantino
pmanager->AddProcess(new G4hIonisation, -1,1,1);
}
}
}
@@ -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. *
// ********************************************************************
//
// $Id: PhysicsList.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysicsList.hh"
#include "PhysicsListMessenger.hh"
#include "PhysListEmStandard.hh"
#include "PhysListEmLivermore.hh"
#include "PhysListEmPenelope.hh"
#include "G4LossTableManager.hh"
#include "G4UnitsTable.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysicsList::PhysicsList() : G4VModularPhysicsList()
{
G4LossTableManager::Instance();
pMessenger = new PhysicsListMessenger(this);
// EM physics
emName = G4String("standard");
emPhysicsList = new PhysListEmStandard(emName);
defaultCutValue = 1.*mm;
cutForGamma = defaultCutValue;
cutForElectron = defaultCutValue;
SetVerboseLevel(1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysicsList::~PhysicsList()
{
delete emPhysicsList;
delete pMessenger;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysicsList::AddPhysicsList(const G4String& name)
{
if (verboseLevel>1) {
G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl;
}
if (name == emName) return;
if (name == "standard") {
emName = name;
delete emPhysicsList;
emPhysicsList = new PhysListEmStandard(name);
} else if (name == "livermore") {
emName = name;
delete emPhysicsList;
emPhysicsList = new PhysListEmLivermore(name);
} else if (name == "penelope") {
emName = name;
delete emPhysicsList;
emPhysicsList = new PhysListEmPenelope(name);
} else {
G4cout << "PhysicsList::AddPhysicsList: <" << name << ">"
<< " is not defined"
<< G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Bosons
#include "G4ChargedGeantino.hh"
#include "G4Geantino.hh"
#include "G4Gamma.hh"
// leptons
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4MuonPlus.hh"
#include "G4MuonMinus.hh"
// Mesons
#include "G4PionPlus.hh"
#include "G4PionMinus.hh"
#include "G4KaonPlus.hh"
#include "G4KaonMinus.hh"
// Baryons
#include "G4Proton.hh"
#include "G4AntiProton.hh"
#include "G4Neutron.hh"
#include "G4AntiNeutron.hh"
// Nuclei
#include "G4Deuteron.hh"
#include "G4Triton.hh"
#include "G4Alpha.hh"
#include "G4GenericIon.hh"
void PhysicsList::ConstructParticle()
{
// pseudo-particles
G4Geantino::GeantinoDefinition();
G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma
G4Gamma::GammaDefinition();
// leptons
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
// mesons
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
// baryons
G4Proton::ProtonDefinition();
G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition();
G4AntiNeutron::AntiNeutronDefinition();
// ions
G4Deuteron::DeuteronDefinition();
G4Triton::TritonDefinition();
G4Alpha::AlphaDefinition();
G4GenericIon::GenericIonDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4EmProcessOptions.hh"
void PhysicsList::ConstructProcess()
{
AddTransportation();
emPhysicsList->ConstructProcess();
AddStepMax();
G4EmProcessOptions emOptions;
emOptions.SetBuildCSDARange(true);
emOptions.SetMaxEnergyForCSDARange(100*TeV);
emOptions.SetDEDXBinningForCSDARange(480);
emOptions.SetDEDXBinning(480);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4ProcessManager.hh"
#include "StepMax.hh"
void PhysicsList::AddStepMax()
{
// Step limitation seen as a process
StepMax* stepMaxProcess = new StepMax();
theParticleIterator->reset();
while ((*theParticleIterator)()){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
if (stepMaxProcess->IsApplicable(*particle) && !particle->IsShortLived())
{
pmanager ->AddDiscreteProcess(stepMaxProcess);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysicsList::SetCuts()
{
if (verboseLevel >0){
G4cout << "PhysicsList::SetCuts:";
G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
}
// set cut values for gamma at first and for e- second and next for e+,
// because some processes for e+/e- need cut values for gamma
SetCutValue(cutForGamma, "gamma");
SetCutValue(cutForElectron, "e-");
SetCutValue(cutForElectron, "e+");
if (verboseLevel>0) DumpCutValuesTable();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysicsList::SetCutForGamma(G4double cut)
{
cutForGamma = cut;
SetParticleCuts(cutForGamma, G4Gamma::Gamma());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysicsList::SetCutForElectron(G4double cut)
{
cutForElectron = cut;
SetParticleCuts(cutForElectron, G4Electron::Electron());
SetParticleCuts(cutForElectron, G4Positron::Positron());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: PhysicsListMessenger.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysicsListMessenger.hh"
#include "PhysicsList.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys)
:pPhysicsList(pPhys)
{
physDir = new G4UIdirectory("/testem/phys/");
physDir->SetGuidance("physics list commands");
pListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics",this);
pListCmd->SetGuidance("Add modula physics list.");
pListCmd->SetParameterName("PList",false);
pListCmd->AvailableForStates(G4State_PreInit);
gammaCutCmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setGCut",this);
gammaCutCmd->SetGuidance("Set gamma cut.");
gammaCutCmd->SetParameterName("Gcut",false);
gammaCutCmd->SetUnitCategory("Length");
gammaCutCmd->SetRange("Gcut>0.0");
gammaCutCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
electCutCmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setECut",this);
electCutCmd->SetGuidance("Set e-/e+ cut.");
electCutCmd->SetParameterName("Ecut",false);
electCutCmd->SetUnitCategory("Length");
electCutCmd->SetRange("Ecut>0.0");
electCutCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
allCutCmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setCuts",this);
allCutCmd->SetGuidance("Set cut for all.");
allCutCmd->SetParameterName("cut",false);
allCutCmd->SetUnitCategory("Length");
allCutCmd->SetRange("cut>0.0");
allCutCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysicsListMessenger::~PhysicsListMessenger()
{
delete pListCmd;
delete gammaCutCmd;
delete electCutCmd;
delete allCutCmd;
delete physDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysicsListMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
{
if (command == pListCmd)
{pPhysicsList->AddPhysicsList(newValue);}
if (command == gammaCutCmd)
{pPhysicsList->SetCutForGamma(gammaCutCmd->GetNewDoubleValue(newValue));}
if (command == electCutCmd)
{pPhysicsList->SetCutForElectron(electCutCmd->GetNewDoubleValue(newValue));}
if (command == allCutCmd)
{
G4double cut = allCutCmd->GetNewDoubleValue(newValue);
pPhysicsList->SetCutForGamma(cut);
pPhysicsList->SetCutForElectron(cut);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: PrimaryGeneratorAction.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PrimaryGeneratorAction.hh"
#include "DetectorConstruction.hh"
#include "G4Event.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "Randomize.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det)
:detector(det)
{
particleGun = new G4ParticleGun(1);
G4ParticleDefinition* particle
= G4ParticleTable::GetParticleTable()->FindParticle("e-");
particleGun->SetParticleDefinition(particle);
particleGun->SetParticleEnergy(10*MeV);
particleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PrimaryGeneratorAction::~PrimaryGeneratorAction()
{
delete particleGun;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
//this function is called at the begining of event
//
G4double halfSize = 0.5*(detector->GetSize());
G4double x0 = - halfSize;
//randomize (y0,z0)
//
G4double beam = 0.8*halfSize;
G4double y0 = (2*G4UniformRand()-1.)*beam;
G4double z0 = (2*G4UniformRand()-1.)*beam;
particleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));
particleGun->GeneratePrimaryVertex(anEvent);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,275 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.cc,v 1.2 2007/02/16 11:59:47 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "RunAction.hh"
#include "DetectorConstruction.hh"
#include "PrimaryGeneratorAction.hh"
#include "HistoManager.hh"
#include "G4Run.hh"
#include "G4RunManager.hh"
#include "G4UnitsTable.hh"
#include "G4EmCalculator.hh"
#include "Randomize.hh"
#include <iomanip>
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin,
HistoManager* histo)
:detector(det), primary(kin), histoManager(histo)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
RunAction::~RunAction()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RunAction::BeginOfRunAction(const G4Run* run)
{
G4cout << "### Run " << run->GetRunID() << " start." << G4endl;
//initialisation
//
energyDeposit = 0.;
nbCharged = nbNeutral = 0;
energyCharged = energyNeutral = 0.;
emin[0] = emin[1] = DBL_MAX;
emax[0] = emax[1] = 0.;
nbSteps = 0;
trackLength = 0.;
histoManager->book();
// do not save Rndm status
G4RunManager::GetRunManager()->SetRandomNumberStore(false);
CLHEP::HepRandom::showEngineStatus();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void RunAction::EndOfRunAction(const G4Run* aRun)
{
G4int nbEvents = aRun->GetNumberOfEvent();
if (nbEvents == 0) return;
G4Material* material = detector->GetMaterial();
G4double length = detector->GetSize();
G4double density = material->GetDensity();
G4ParticleDefinition* particle = primary->GetParticleGun()
->GetParticleDefinition();
G4String partName = particle->GetParticleName();
G4double eprimary = primary->GetParticleGun()->GetParticleEnergy();
G4int prec = G4cout.precision(3);
G4cout << "\n ======================== run summary ======================\n";
G4cout << "\n The run was " << nbEvents << " " << partName << " of "
<< G4BestUnit(eprimary,"Energy") << " through "
<< G4BestUnit(length,"Length") << " of "
<< material->GetName() << " (density: "
<< G4BestUnit(density,"Volumic Mass") << ")";
G4cout << "\n ===========================================================\n";
G4cout << G4endl;
if (particle->GetPDGCharge() == 0.) return;
G4cout.precision(5);
//track length
//
G4double trackLPerEvent = trackLength/nbEvents;
G4double nbStepPerEvent = double(nbSteps)/nbEvents;
G4double stepSize = trackLength/nbSteps;
G4cout
<< "\n trackLength= "
<< G4BestUnit(trackLPerEvent, "Length")
<< "\t nb of steps= " << nbStepPerEvent
<< " stepSize= " << G4BestUnit(stepSize, "Length")
<< G4endl;
//charged secondaries (ionization, direct pair production)
//
G4double energyPerEvent = energyCharged/nbEvents;
G4double nbPerEvent = double(nbCharged)/nbEvents;
G4double meanEkin = 0.;
if (nbCharged) meanEkin = energyCharged/nbCharged;
G4cout
<< "\n d-rays : eLoss/primary= "
<< G4BestUnit(energyPerEvent, "Energy")
<< "\t nb of d-rays= " << nbPerEvent
<< " <Tkin>= " << G4BestUnit(meanEkin, "Energy")
<< " Tmin= " << G4BestUnit(emin[0], "Energy")
<< " Tmax= " << G4BestUnit(emax[0], "Energy")
<< G4endl;
//neutral secondaries (bremsstrahlung)
//
energyPerEvent = energyNeutral/nbEvents;
nbPerEvent = double(nbNeutral)/nbEvents;
meanEkin = 0.;
if (nbNeutral) meanEkin = energyNeutral/nbNeutral;
G4cout
<< "\n brems : eLoss/primary= "
<< G4BestUnit(energyPerEvent, "Energy")
<< "\t nb of gammas= " << nbPerEvent
<< " <Tkin>= " << G4BestUnit(meanEkin, "Energy")
<< " Tmin= " << G4BestUnit(emin[1], "Energy")
<< " Tmax= " << G4BestUnit(emax[1], "Energy")
<< G4endl;
G4EmCalculator emCal;
//local energy deposit
//
energyPerEvent = energyDeposit/nbEvents;
//
G4double r0 = emCal.GetRangeFromRestricteDEDX(eprimary,particle,material);
G4double r1 = r0 - trackLPerEvent;
G4double etry = eprimary - energyPerEvent;
G4double efinal = 0.;
if (r1 > 0.) efinal = GetEnergyFromRestrictedRange(r1,particle,material,etry);
G4double dEtable = eprimary - efinal;
G4double ratio = 0.;
if (dEtable > 0.) ratio = energyPerEvent/dEtable;
G4cout
<< "\n deposit : eLoss/primary= "
<< G4BestUnit(energyPerEvent, "Energy")
<< "\t <dEcut > table= "
<< G4BestUnit(dEtable, "Energy")
<< " ---> simul/reference= " << ratio
<< G4endl;
//total energy transferred
//
G4double energyTotal = energyDeposit + energyCharged + energyNeutral;
energyPerEvent = energyTotal/nbEvents;
//
r0 = emCal.GetCSDARange(eprimary,particle,material);
r1 = r0 - trackLPerEvent;
etry = eprimary - energyPerEvent;
efinal = 0.;
if (r1 > 0.) efinal = GetEnergyFromCSDARange(r1,particle,material,etry);
dEtable = eprimary - efinal;
ratio = 0.;
if (dEtable > 0.) ratio = energyPerEvent/dEtable;
G4cout
<< "\n total : eLoss/primary= "
<< G4BestUnit(energyPerEvent, "Energy")
<< "\t <dEfull> table= "
<< G4BestUnit(dEtable, "Energy")
<< " ---> simul/reference= " << ratio
<< G4endl;
G4cout.precision(prec);
histoManager->save();
// show Rndm status
CLHEP::HepRandom::showEngineStatus();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4double RunAction::GetEnergyFromRestrictedRange(G4double range,
G4ParticleDefinition* particle, G4Material* material, G4double Etry)
{
G4EmCalculator emCal;
G4double Energy = Etry, dE = 0., dEdx;
G4double r, dr;
G4double err = 1., errmax = 0.00001;
G4int iter = 0 , itermax = 10;
while (err > errmax && iter < itermax) {
iter++;
Energy -= dE;
r = emCal.GetRangeFromRestricteDEDX(Energy,particle,material);
dr = r - range;
dEdx = emCal.GetDEDX(Energy,particle,material);
dE = dEdx*dr;
err = std::abs(dE)/Energy;
}
if (iter == itermax) {
G4cout
<< "\n ---> warning: RunAction::GetEnergyFromRestRange() did not converge"
<< " Etry = " << G4BestUnit(Etry,"Energy")
<< " Energy = " << G4BestUnit(Energy,"Energy")
<< " err = " << err
<< " iter = " << iter << G4endl;
}
return Energy;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4double RunAction::GetEnergyFromCSDARange(G4double range,
G4ParticleDefinition* particle, G4Material* material, G4double Etry)
{
G4EmCalculator emCal;
G4double Energy = Etry, dE = 0., dEdx;
G4double r, dr;
G4double err = 1., errmax = 0.00001;
G4int iter = 0 , itermax = 10;
while (err > errmax && iter < itermax) {
iter++;
Energy -= dE;
r = emCal.GetCSDARange(Energy,particle,material);
dr = r - range;
dEdx = emCal.ComputeTotalDEDX(Energy,particle,material);
dE = dEdx*dr;
err = std::abs(dE)/Energy;
}
if (iter == itermax) {
G4cout
<< "\n ---> warning: RunAction::GetEnergyFromCSDARange() did not converge"
<< " Etry = " << G4BestUnit(Etry,"Energy")
<< " Energy = " << G4BestUnit(Energy,"Energy")
<< " err = " << err
<< " iter = " << iter << G4endl;
}
return Energy;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,51 +23,54 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: PhysListHadronElastic.cc,v 1.7 2006/08/10 08:44:39 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: StackingAction.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "PhysListHadronElastic.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4UHadronElasticProcess.hh"
#include "G4HadronElastic.hh"
#include "StackingAction.hh"
#include "RunAction.hh"
#include "EventAction.hh"
#include "HistoManager.hh"
#include "G4Track.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListHadronElastic::PhysListHadronElastic(const G4String& name)
: G4VPhysicsConstructor(name)
StackingAction::StackingAction(RunAction* RA,EventAction* EA, HistoManager* HM)
:runaction(RA), eventaction(EA), histoManager(HM)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListHadronElastic::~PhysListHadronElastic()
{
delete theElasticProcess;
}
StackingAction::~StackingAction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListHadronElastic::ConstructProcess()
G4ClassificationOfNewTrack
StackingAction::ClassifyNewTrack(const G4Track* track)
{
// Hadron elastic process
theElasticProcess = new G4UHadronElasticProcess("hElastic");
theElasticProcess->RegisterMe( new G4HadronElastic() );
//keep primary particle
if (track->GetParentID() == 0) return fUrgent;
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
if (theElasticProcess->IsApplicable(*particle)) {
particle->GetProcessManager()->AddDiscreteProcess(theElasticProcess);
G4cout << "### Elastic process is registered for "
<< particle->GetParticleName()
<< G4endl;
}
//energy spectrum of secondaries
//
G4double energy = track->GetKineticEnergy();
G4bool charged = (track->GetDefinition()->GetPDGCharge() != 0.);
if (charged) {
runaction->AddChargedSecondary(energy);
histoManager->FillHisto(4,energy);
} else {
runaction->AddNeutralSecondary(energy);
histoManager->FillHisto(5,energy);
}
eventaction->AddSecondary(energy);
return fKill;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: StepMax.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "StepMax.hh"
#include "StepMaxMessenger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
StepMax::StepMax(const G4String& processName)
: G4VDiscreteProcess(processName),MaxChargedStep(DBL_MAX)
{
pMess = new StepMaxMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
StepMax::~StepMax() { delete pMess; }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4bool StepMax::IsApplicable(const G4ParticleDefinition& particle)
{
return (particle.GetPDGCharge() != 0.);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void StepMax::SetMaxStep(G4double step) {MaxChargedStep = step;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4double StepMax::PostStepGetPhysicalInteractionLength(const G4Track&,
G4double,
G4ForceCondition* condition )
{
// condition is set to "Not Forced"
*condition = NotForced;
return MaxChargedStep;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VParticleChange* StepMax::PostStepDoIt(const G4Track& aTrack, const G4Step&)
{
// do nothing
aParticleChange.Initialize(aTrack);
return &aParticleChange;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: StepMaxMessenger.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "StepMaxMessenger.hh"
#include "StepMax.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
StepMaxMessenger::StepMaxMessenger(StepMax* stepM)
:pStepMax(stepM)
{
StepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this);
StepMaxCmd->SetGuidance("Set max allowed step length");
StepMaxCmd->SetParameterName("mxStep",false);
StepMaxCmd->SetRange("mxStep>0.");
StepMaxCmd->SetUnitCategory("Length");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
StepMaxMessenger::~StepMaxMessenger()
{
delete StepMaxCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void StepMaxMessenger::SetNewValue(G4UIcommand* command, G4String newValue)
{
if (command == StepMaxCmd)
{ pStepMax->SetMaxStep(StepMaxCmd->GetNewDoubleValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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. *
// ********************************************************************
//
// $Id: SteppingAction.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "SteppingAction.hh"
#include "RunAction.hh"
#include "EventAction.hh"
#include "HistoManager.hh"
#include "G4Step.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingAction::SteppingAction(RunAction* RA, EventAction* EA, HistoManager* HM)
:runaction(RA), eventaction(EA), histoManager(HM)
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingAction::~SteppingAction()
{ }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SteppingAction::UserSteppingAction(const G4Step* step)
{
//continuous energy deposit per event
eventaction->AddEnergyDeposit (step->GetTotalEnergyDeposit());
//step size
G4double stepSize = step->GetStepLength();
runaction->AddTrackLength(stepSize);
histoManager->FillHisto(6,stepSize);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,180 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingVerbose.cc,v 1.1 2007/02/13 17:57:20 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "SteppingVerbose.hh"
#include "G4SteppingManager.hh"
#include "G4UnitsTable.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingVerbose::SteppingVerbose()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingVerbose::~SteppingVerbose()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SteppingVerbose::StepInfo()
{
CopyState();
G4int prec = G4cout.precision(3);
if( verboseLevel >= 1 ){
if( verboseLevel >= 4 ) VerboseTrack();
if( verboseLevel >= 3 ){
G4cout << G4endl;
G4cout << std::setw( 5) << "#Step#" << " "
<< std::setw( 6) << "X" << " "
<< std::setw( 6) << "Y" << " "
<< std::setw( 6) << "Z" << " "
<< std::setw( 9) << "KineE" << " "
<< std::setw( 9) << "dEStep" << " "
<< std::setw(10) << "StepLeng"
<< std::setw(10) << "TrakLeng"
<< std::setw(10) << "Volume" << " "
<< std::setw(10) << "Process" << G4endl;
}
G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " "
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
<< " ";
// if( fStepStatus != fWorldBoundary){
if( fTrack->GetNextVolume() != 0 ) {
G4cout << std::setw(10) << fTrack->GetVolume()->GetName();
} else {
G4cout << std::setw(10) << "OutOfWorld";
}
if(fStep->GetPostStepPoint()->GetProcessDefinedStep() != NULL){
G4cout << " "
<< std::setw(10) << fStep->GetPostStepPoint()
->GetProcessDefinedStep()->GetProcessName();
} else {
G4cout << " UserLimit";
}
G4cout << G4endl;
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()
<< " ---------------"
<< G4endl;
for(size_t lp1=(*fSecondary).size()-tN2ndariesTot;
lp1<(*fSecondary).size(); lp1++){
G4cout << " : "
<< std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length")
<< std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length")
<< std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length")
<< std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy")
<< std::setw(10)
<< (*fSecondary)[lp1]->GetDefinition()->GetParticleName();
G4cout << G4endl;
}
G4cout << " :-----------------------------"
<< "----------------------------------"
<< "-- EndOf2ndaries Info ---------------"
<< G4endl;
}
}
}
G4cout.precision(prec);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void SteppingVerbose::TrackingStarted()
{
CopyState();
G4int prec = G4cout.precision(3);
if( verboseLevel > 0 ){
G4cout << std::setw( 5) << "Step#" << " "
<< std::setw( 6) << "X" << " "
<< std::setw( 6) << "Y" << " "
<< std::setw( 6) << "Z" << " "
<< std::setw( 9) << "KineE" << " "
<< std::setw( 9) << "dEStep" << " "
<< std::setw(10) << "StepLeng"
<< std::setw(10) << "TrakLeng"
<< std::setw(10) << "Volume" << " "
<< std::setw(10) << "Process" << G4endl;
G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " "
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< std::setw(6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< std::setw(6) << G4BestUnit(fTrack->GetTrackLength(),"Length")
<< " ";
if(fTrack->GetNextVolume()){
G4cout << std::setw(10) << fTrack->GetVolume()->GetName();
} else {
G4cout << std::setw(10) << "OutOfWorld";
}
G4cout << " initStep" << G4endl;
}
G4cout.precision(prec);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,28 @@
#
# Macro file for the initialization phase of "TestEm5.cc"
# Sets some default verbose
# and initializes the graphic.
#
/control/verbose 2
/run/verbose 2
/run/initialize
#
# Create empty scene ("world" is default)
/vis/scene/create
#
# Create a scene handler for a specific graphics system
# Edit the next line(s) to choose another graphic system
#
/vis/open DAWNFILE
/vis/open OGLIX
#
# Draw scene
/vis/viewer/zoom 1.4
/vis/viewer/flush
#
# for drawing the tracks
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
#
/testem/event/drawTracks
@@ -1,4 +1,4 @@
$Id: History,v 1.66 2006/10/20 16:03:39 maire Exp $
$Id: History,v 1.67 2007/01/08 16:32:20 vnivanch Exp $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,9 @@ track of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
08-01-07 V.Ivant (testem2-V08-02-00)
- Uncomment hadron ionisation in Livermore builder
20-10-06 mma (testem2-V08-01-00)
- GNUmakefile : LOADLIBS
@@ -1,6 +1,6 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
@@ -126,30 +126,33 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -158,35 +161,42 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -226,19 +236,22 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
Region <DefaultRegionForTheWorld> -- appears in <Ecal> world volume
@@ -281,25 +294,25 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100
User=160.76s Real=178.85s Sys=16.33s
User=251.23s Real=268.16s Sys=14.49s
SUMMARY
energy deposit : 94.82 % E0 +- 0.80 % E0
charged traklen: 486.89 radl +- 4.33 radl
neutral traklen: 4464.64 radl +- 136.84 radl
energy deposit : 94.56 % E0 +- 0.81 % E0
charged traklen: 482.86 radl +- 4.45 radl
neutral traklen: 4468.40 radl +- 133.74 radl
90.00 % confinement: radius = 3.05 radl (2.72 cm )
90.00 % confinement: radius = 3.13 radl (2.79 cm )
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 1762442429, 271121094
Current couple of seeds = 1259944231, 254399950
----------------------------------------
<<<<ACCEPTANCE>>>> 100 events for Total Energy in Absorber
Edep: 0.94819548 delEdep= 0.0031954754 nrms= 3.3286202
Erms: 0.0080173114 delErms= -0.0015826886 nrms= -1.648634
<<<<END>>>> IS NOT ACCEPTED
Edep: 0.94558756 delEdep= 0.00058755881 nrms= 0.61204043
Erms: 0.0080584593 delErms= -0.0015415407 nrms= -1.6057716
<<<<END>>>> IS ACCEPTED
Graphics systems deleted.
Visualization Manager deleting...
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: PhysListEmLivermore.cc,v 1.2 2006/06/29 16:50:30 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: PhysListEmLivermore.cc,v 1.3 2007/01/08 16:32:20 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -108,8 +108,8 @@ void PhysListEmLivermore::ConstructProcess()
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino
///pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
///pmanager->AddProcess(new G4hLowEnergyIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MultipleScattering, -1, 1, 1);
pmanager->AddProcess(new G4hLowEnergyIonisation, -1, 2, 2);
}
}
}
@@ -1,4 +1,4 @@
$Id: History,v 1.95 2006/11/22 19:16:09 vnivanch Exp $
$Id: History,v 1.102 2007/04/25 10:07:27 vnivanch Exp $
-------------------------------------------------------------------
=========================================================
@@ -15,6 +15,29 @@ track of all tags.
* Reverse chronological order (last date on top), please *
---------------------------------------------------------
25-04-07 V.Ivant (testem3-V08-02-04)
- fix compilation problem at SUN
24-04-07 V.Ivant (testem3-V08-02-03)
- add command "/testem/run/limitEdep" allowing to compute restricted
mean values to supress big statistical fluctuations
- update command "/testem/run/acceptance"
- skin=1 is a default PhysList
06-04-07 mma (testem3-V08-02-02)
- add macro emtutor.mac
- pl names : penelope, livermore
- restaure random seed storage
19-03-07 V.Ivant (testem3-V08-02-01)
return back Z-position computation;
19-03-07 V.Ivant (testem3-V08-02-00)
- By default do not store random seed;
add G4standard_exp PhysList;
add material Lucite;
do not activate VisManager in batch.
22-11-06 V.Ivant (testem3-V08-01-01)
- Fix names of standard EM builders
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: TestEm3.cc,v 1.20 2006/06/29 16:51:03 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: TestEm3.cc,v 1.22 2007/04/06 17:41:54 maire Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -70,16 +70,14 @@ int main(int argc,char** argv) {
// histograms for this example
HistoManager* histo = new HistoManager();
//
// primary generator
PrimaryGeneratorAction* primary = new PrimaryGeneratorAction(detector,histo);
runManager->SetUserAction(primary);
#ifdef G4VIS_USE
// visualization manager
G4VisManager* visManager = new G4VisExecutive;
visManager->Initialize();
G4VisManager* visManager = 0;
#endif
// set user action classes
RunAction* runAct = new RunAction(detector,primary,histo);
EventAction* evtAct = new EventAction(detector,runAct,histo);
@@ -96,6 +94,11 @@ int main(int argc,char** argv) {
if (argc==1) // Define UI session for interactive mode.
{
#ifdef G4VIS_USE
// visualization manager
visManager = new G4VisExecutive;
visManager->Initialize();
#endif
// G4UIterminal is a (dumb) terminal.
G4UIsession * session = 0;
#ifdef G4UI_USE_TCSH
@@ -116,7 +119,7 @@ int main(int argc,char** argv) {
// job termination
#ifdef G4VIS_USE
delete visManager;
if(visManager) delete visManager;
#endif
delete histo;
@@ -1,42 +1,11 @@
*************************************************************
Geant4 version Name: global-V08-01-05 (15-December-2006)
Geant4 version Name: geant4-08-03-cand-00 (5-May-2007)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
*************************************************************
Visualization Manager instantiating...
Visualization Manager initialising...
Registering graphics systems...
You have successfully registered the following graphics systems.
Current available graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
GAGTree (GAGTree)
G4HepRep (HepRepXML)
G4HepRepFile (HepRepFile)
RayTracer (RayTracer)
VRML1FILE (VRML1FILE)
VRML2FILE (VRML2FILE)
Registering model factories...
You have successfully registered the following model factories.
Registered model factories:
generic
drawByCharge
drawByParticleID
drawByOriginVolume
drawByAttribute
Registered filter factories:
chargeFilter
particleFilter
originVolumeFilter
attributeFilter
/run/verbose 2
#
/testem/phys/addPhysics standard
@@ -110,30 +79,33 @@ conv: Total cross sections has a good parametrisation from 1.5 MeV to 100 GeV f
msc: Model variant of multiple scattering for e-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 1
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
eIoni: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
eIoni: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Delta cross sections from Moller+Bhabha, good description from 1 KeV to 100 GeV.
Delta cross sections and sampling from MollerBhabha model
Good description from 1 KeV to 100 GeV.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
eBrem: tables are built for e+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Total cross sections from a parametrisation based on the EEDL data library.
Total cross sections and sampling from StandBrem model (based on the EEDL data library)
Good description from 1 KeV to 100 GeV, log scale extrapolation above 100 GeV.
annihil: Sampling according eplus2gg model
@@ -142,35 +114,42 @@ annihil: Sampling according eplus2gg model
msc: Model variant of multiple scattering for proton
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 1
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for GenericIon
LateralDisplacementFlag= 0 Skin= 0
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
ionIoni: tables are built for GenericIon
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for alpha particles below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from BraggIon for protons below.
Stopping Power data for 8 ion/material pairs are used.
Step function: finalRange(mm)= 0.1, dRoverRange= 0.1, integral: 1
hIoni: tables are built for anti_proton
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 2 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 2 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for mu+
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 1
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
muIoni: tables are built for mu+
@@ -210,19 +189,22 @@ muPairProd: tables are built for mu-
hIoni: tables are built for pi+
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
msc: Model variant of multiple scattering for pi-
Lambda tables from 100 eV to 100 TeV in 120 bins.
LateralDisplacementFlag= 1 Skin= 1
Boundary/stepping algorithm is active with facrange= 0.02 Step limitation 1
hIoni: tables are built for pi-
dE/dx and range tables from 100 eV to 100 TeV in 120 bins.
Lambda tables from threshold to 100 TeV in 120 bins.
Scaling relation is used to proton dE/dx and range
Bether-Bloch model for Escaled > 0.297504 MeV, ICRU49 parametrisation for protons below.
Scaling relation is used from proton dE/dx and range.
Delta cross sections and sampling from BetheBloch model for scaled energy > 0.297504 MeV
Parametrisation from Bragg for protons below.
Step function: finalRange(mm)= 1, dRoverRange= 0.2, integral: 1
Region <DefaultRegionForTheWorld> -- appears in <World> world volume
@@ -258,18 +240,18 @@ Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 1 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
------- ---------- ---------- -------- ----------
0.00 0.00 0.00 2k Calorimeter
100.00 0.01 0.00 2k Calorimeter
0.00 0.00 0.00 0k Layer
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
91.70 1k 1 50 50 0.00 Calorimeter
91.70 1k 1 50 50 0.01 Calorimeter
8.30 0k 1 3 4 0.00 Layer
### Run 0 start.
@@ -285,31 +267,29 @@ Start Run processing.
Run terminated.
Run Summary
Number of events processed : 100
User=100.2s Real=112.47s Sys=10.23s
User=199.23s Real=228.98s Sys=28.48s
------------------------------------------------------------
material Total Edep sqrt(E0(GeV))*rmsE/Emean total tracklen
material Total Edep sqrt(E0(GeV))*rmsE/Emean total tracklen
Lead: 784.78 MeV +- 15.66 MeV 1.995 +- 0.1995 % 54.1 cm +- 1.2 cm
liquidArgon: 205.09 MeV +- 14.75 MeV 7.192 +- 0.7192 % 1.02 m +- 7.72 cm
Lead: 783.24 MeV +- 15.76 MeV 2.013 +- 0.2013 % 53.9 cm +- 1.2 cm
liquidArgon: 204.82 MeV +- 14.94 MeV 7.296 +- 0.7296 % 1.01 m +- 7.72 cm
------------------------------------------------------------
Energy deposition from Energy flow balance :
material Total Edep
Lead: 784.779 MeV
liquidArgon: 205.104 MeV
Lead: 783.237 MeV
liquidArgon: 204.824 MeV
------------------------------------------------------------
--------- Ranecu engine status ---------
Initial seed (index) = 0
Current couple of seeds = 474290945, 1957549042
Current couple of seeds = 536502410, 2064128558
----------------------------------------
Graphics systems deleted.
Visualization Manager deleting...
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserRunAction deleted.
@@ -0,0 +1,20 @@
# $Id: emtutor.mac,v 1.1 2007/04/06 17:41:54 maire Exp $
#
# Macro file for "TestEm3.cc"
#
# water 1 layer;
#
/control/verbose 2
#
/testem/det/setNbOfLayers 1
/testem/det/setNbOfAbsor 1
/testem/det/setAbsor 1 Aluminium 10 cm
/testem/det/setSizeYZ 10 cm
#
/testem/phys/setCuts 2 cm
#
/run/initialize
#
/control/execute vis.mac
#
/testem/gun/setDefault
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: RunAction.hh,v 1.17 2006/06/29 16:52:07 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: RunAction.hh,v 1.18 2007/04/22 16:25:21 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -52,45 +52,49 @@ class G4Run;
class RunAction : public G4UserRunAction
{
public:
public:
RunAction(DetectorConstruction*, PrimaryGeneratorAction*, HistoManager*);
~RunAction();
RunAction(DetectorConstruction*, PrimaryGeneratorAction*, HistoManager*);
virtual ~RunAction();
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run*);
void BeginOfRunAction(const G4Run*);
void EndOfRunAction(const G4Run*);
void fillPerEvent(G4int,G4double,G4double);
void fillPerEvent(G4int,G4double,G4double);
void sumEnergyFlow(G4int plane, G4double Eflow)
void sumEnergyFlow(G4int plane, G4double Eflow)
{EnergyFlow[plane] += Eflow;};
void sumLateralEleak(G4int cell, G4double Eflow)
void sumLateralEleak(G4int cell, G4double Eflow)
{lateralEleak[cell] += Eflow;};
void PrintDedxTables();
void PrintDedxTables();
// Acceptance parameters
void SetEdepAndRMS(G4int, G4ThreeVector);
G4double GetAverageEdep(G4int i) const {return edeptrue[i];};
G4double GetRMSEdep(G4int i) const {return rmstrue[i];};
G4double GetLimitEdep(G4int i) const {return limittrue[i];};
private:
DetectorConstruction* Detector;
PrimaryGeneratorAction* Primary;
RunActionMessenger* runMessenger;
HistoManager* histoManager;
// Acceptance parameters
void SetEdepAndRMS(G4int, G4double, G4double, G4double);
G4double GetAverageEdep(G4int i) const {return edeptrue[i];};
G4double GetRMSEdep(G4int i) const {return rmstrue[i];};
G4double GetLimitEdep(G4int i) const {return limittrue[i];};
void SetApplyLimit(G4bool val) {applyLimit = val;};
G4double sumEAbs [MaxAbsor], sum2EAbs [MaxAbsor];
G4double sumLAbs [MaxAbsor], sum2LAbs [MaxAbsor];
private:
DetectorConstruction* Detector;
PrimaryGeneratorAction* Primary;
RunActionMessenger* runMessenger;
HistoManager* histoManager;
G4double sumEAbs [MaxAbsor], sum2EAbs [MaxAbsor];
G4double sumLAbs [MaxAbsor], sum2LAbs [MaxAbsor];
std::vector<G4double> EnergyFlow;
std::vector<G4double> lateralEleak;
std::vector<G4double> EnergyFlow;
std::vector<G4double> lateralEleak;
std::vector<G4double> energyDeposit[MaxAbsor];
G4double edeptrue [MaxAbsor];
G4double rmstrue [MaxAbsor];
G4double limittrue[MaxAbsor];
G4double edeptrue [MaxAbsor];
G4double rmstrue [MaxAbsor];
G4double limittrue[MaxAbsor];
G4bool applyLimit;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

Some files were not shown because too many files have changed in this diff Show More