Import Geant4 10.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 12:08:39 +02:00
parent 286caacf06
commit c9b32a6c0a
5770 changed files with 1050949 additions and 367105 deletions
+9 -2
View File
@@ -84,11 +84,11 @@ This demonstrates a customised "flat" physics implementation with the addition
of biasing. Complementary approach to the modular physics lists of B01 and B02
\section biasing_s2 Generic biasing examples GB01, GB02
\section biasing_s2 Generic biasing examples GB01, GB02, GB03, GB04
These examples illustrate the usage of a biasing scheme implemented since
version Geant4 10.0.
The scheme is meant to be extensible, not limited to these two examples.
The scheme is meant to be extensible, not limited to these four examples.
\link ExampleGB01 Example GB01 \endlink
@@ -98,6 +98,13 @@ This example illustrates how to bias process cross-sections in this scheme.
Illustrates a force collision scheme similar to the MCNP one.
\link ExampleGB03 Example GB03 \endlink
Illustrates geometry based biasing.
\link ExampleGB04 Example GB04 \endlink
Illustrates a bremsstrahlung splitting.
\section biasing_s3 Reverse MonteCarlo Technique example
File diff suppressed because it is too large Load Diff
+4
View File
@@ -17,6 +17,10 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Nov 20th, 2014 M. Asai - B03-V10-00-00
- B03PhysicsList.cc : replace obsolete G4ParallelWorldScoringProcess
with G4ParallelWorldProcess.
Nov 24th, 2013 A. Howard - B03-V09-06-04
- Set default number of MT cores back to two
+559 -296
View File
@@ -1,319 +1,582 @@
**********************************************
Geant4 version $Name: not supported by cvs2svn $
(31-Jul-2002)
Copyright : Geant4 Collaboration
**********************************************
phot: Total cross sections from Sandia parametrisation.
B02PhysicsList::SetCuts:CutLength : 1 (mm)
############################################
!!! WARNING - FPE detection is activated !!!
############################################
conv: Total cross sections from a parametrisation. Good description from 1.5 MeV to 100 GeV for all Z.
e+e- energies according Bethe-Heitler
PhysicsTables from 1.022 MeV to 100 GeV in 100 bins.
*************************************************************
Geant4 version Name: geant4-10-01-ref-00 (5-December-2014)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
*************************************************************
compt: Total cross sections from a parametrisation. Good description from 10 KeV to (100/Z) GeV.
Scattered gamma energy according Klein-Nishina.
PhysicsTables from 1 keV to 100 GeV in 80 bins.
constructing parallel world
B03ImportanceDetectorConstruction:: ghostWorldName = ParallelBiasingWorld
G4PhysicsListHelper::AddTransportation()--- G4CoupledTransportation is used
Preparing Importance Sampling with GhostWorld ParallelBiasingWorld
G4IStore:: Creating new Parallel IStore ParallelBiasingWorld
G4IStore:: ParallelWorldName = ParallelBiasingWorld
G4IStore:: fParallelWorldVolume = ParallelBiasingWorld
G4GeometrySampler:: preparing importance sampling WorldName is
G4ImportanceConfigurator:: entering importance configure, paraflag 1
msc: Tables of transport mean free paths.
New model of MSC , computes the lateral
displacement of the particle , too.
PhysicsTables from 100 eV to 100 TeV in 100 bins.
eIoni: delta cross sections from Moller+Bhabha. Good description from 1 KeV to 100 GeV.
delta ray energy sampled from differential Xsection.
PhysicsTables from 1 keV to 100 TeV in 100 bins.
eBrem: Total cross sections from a NEW parametrisation based on the EEDL data library.
Good description from 1 KeV to 100 GeV.
log scale extrapolation above 100 GeV
Gamma energy sampled from a parametrised formula.
PhysicsTables from 1 keV to 100 TeV in 100 bins.
G4ImportanceProcess:: Creating
G4ImportanceProcess:: importance process paraflag is: 1
annihil: Total cross section from Heilter formula(annihilation into 2 photons).
gamma energies sampled according Heitler
PhysicsTables from 10 keV to 10 TeV in 100 bins.
msc: Tables of transport mean free paths.
New model of MSC , computes the lateral
displacement of the particle , too.
PhysicsTables from 100 eV to 100 TeV in 100 bins.
hIoni: Knock-on electron cross sections .
Good description above the mean excitation energy.
delta ray energy sampled from differential Xsection.
PhysicsTables from 1 keV to 100 TeV in 100 bins.
msc: Tables of transport mean free paths.
New model of MSC , computes the lateral
displacement of the particle , too.
PhysicsTables from 100 eV to 100 TeV in 100 bins.
MuIoni: Knock-on electron cross sections .
Good description above the mean excitation energy.
delta ray energy sampled from differential Xsection.
PhysicsTables from 1 keV to 1000 PeV in 150 bins.
MuBrems: theoretical cross section
Good description up to 1000 PeV.
PhysicsTables from 1 keV to 1000 PeV in 150 bins.
MuPairProd: theoretical cross sections
Good description up to 1000 PeV.
PhysicsTables from 1 keV to 1000 PeV in 150 bins.
+++ G4ProcessPlacer::G4ProcessPlacer: for: neutron
=== G4ProcessPlacer::AddProcessAsSecondDoIt ===
ProcessName: PScoreProcess
The initial Vectors:
G4ImportanceProcess:: SetParallelWorld name = ParallelBiasingWorld
=== G4ProcessPlacer::AddProcessAsSecondDoIt: for: neutron
Modifying Process Order for ProcessName: ImportanceProcess
The initial AlongStep Vectors:
GPIL Vector:
Decay
LCapture
LFission
inelastic
LElastic
Transportation
ParaWorldProc_ParallelBiasingWorld
CoupledTransportation
DoIt Vector:
Transportation
LElastic
inelastic
LFission
LCapture
Decay
The final Vectors:
CoupledTransportation
ParaWorldProc_ParallelBiasingWorld
The initial PostStep Vectors:
GPIL Vector:
Decay
LCapture
LFission
inelastic
LElastic
PScoreProcess
Transportation
ParaWorldProc_ParallelBiasingWorld
CoupledTransportation
DoIt Vector:
Transportation
PScoreProcess
LElastic
inelastic
LFission
LCapture
Decay
CoupledTransportation
ParaWorldProc_ParallelBiasingWorld
The final AlongStep Vectors:
GPIL Vector:
ParaWorldProc_ParallelBiasingWorld
ImportanceProcess
CoupledTransportation
DoIt Vector:
CoupledTransportation
ImportanceProcess
ParaWorldProc_ParallelBiasingWorld
The final PostStep Vectors:
GPIL Vector:
ParaWorldProc_ParallelBiasingWorld
ImportanceProcess
CoupledTransportation
DoIt Vector:
CoupledTransportation
ImportanceProcess
ParaWorldProc_ParallelBiasingWorld
================================================
=== G4ProcessPlacer::AddProcessAsSecondDoIt ===
ProcessName: ParallelTransport
The initial Vectors:
GPIL Vector:
Decay
LCapture
LFission
inelastic
LElastic
PScoreProcess
Transportation
DoIt Vector:
Transportation
PScoreProcess
LElastic
inelastic
LFission
LCapture
Decay
The final Vectors:
GPIL Vector:
Decay
LCapture
LFission
inelastic
LElastic
PScoreProcess
ParallelTransport
Transportation
DoIt Vector:
Transportation
ParallelTransport
PScoreProcess
LElastic
inelastic
LFission
LCapture
Decay
================================================
output pScorer, scoring detector, neutron
Volume name = score_worldCylinder_phys, Replica number = -1
HistorysEntering
entries : 331
Sum(w) : 331
Sum(w*x) : 331
Sum(w*x*x) : 331
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 331
Sum(x^2) : 331
EnergyEnteringHistory
entries : 331
Sum(w) : 331
Sum(w*x) : 2868.82
Sum(w*x*x) : 26144.9
mean=Sum(w*x) / Sum(w) : 8.66714
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 1.96678
Sum(x) : 2868.82
Sum(x^2) : 26144.9
Volume name = scorecell: M1, Replica number = 0
HistorysEntering
entries : 1794
Sum(w) : 1794
Sum(w*x) : 1794
Sum(w*x*x) : 1794
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 1794
Sum(x^2) : 1794
EnergyEnteringHistory
entries : 1794
Sum(w) : 1794
Sum(w*x) : 17426.6
Sum(w*x*x) : 171284
mean=Sum(w*x) / Sum(w) : 9.71383
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 1.05729
Sum(x) : 17426.6
Sum(x^2) : 171284
Collisions
entries : 1263
Sum(w) : 1263
Sum(w*x) : 1263
Sum(w*x*x) : 1263
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 1263
Sum(x^2) : 1263
Volume name = scorecell: D1, Replica number = 0
HistorysEntering
entries : 858
Sum(w) : 858
Sum(w*x) : 858
Sum(w*x*x) : 858
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 858
Sum(x^2) : 858
EnergyEnteringHistory
entries : 858
Sum(w) : 858
Sum(w*x) : 8292.88
Sum(w*x*x) : 81250.1
mean=Sum(w*x) / Sum(w) : 9.66536
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 1.13047
Sum(x) : 8292.88
Sum(x^2) : 81250.1
Collisions
entries : 512
Sum(w) : 512
Sum(w*x) : 512
Sum(w*x*x) : 512
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 512
Sum(x^2) : 512
Volume name = scorecell: M2, Replica number = 0
HistorysEntering
entries : 845
Sum(w) : 845
Sum(w*x) : 845
Sum(w*x*x) : 845
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 845
Sum(x^2) : 845
EnergyEnteringHistory
entries : 845
Sum(w) : 845
Sum(w*x) : 7918.1
Sum(w*x*x) : 76692.5
mean=Sum(w*x) / Sum(w) : 9.37053
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 1.71858
Sum(x) : 7918.1
Sum(x^2) : 76692.5
Collisions
entries : 696
Sum(w) : 696
Sum(w*x) : 696
Sum(w*x*x) : 696
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 696
Sum(x^2) : 696
Volume name = scorecell: D2, Replica number = 0
HistorysEntering
entries : 392
Sum(w) : 392
Sum(w*x) : 392
Sum(w*x*x) : 392
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 392
Sum(x^2) : 392
EnergyEnteringHistory
entries : 392
Sum(w) : 392
Sum(w*x) : 3630.15
Sum(w*x*x) : 34992.4
mean=Sum(w*x) / Sum(w) : 9.26058
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 1.87297
Sum(x) : 3630.15
Sum(x^2) : 34992.4
Collisions
entries : 233
Sum(w) : 233
Sum(w*x) : 233
Sum(w*x*x) : 233
mean=Sum(w*x) / Sum(w) : 1
sigma=sqrt(Sum(w*x*x)/Sum(w)-mean^2): 0
Sum(x) : 233
Sum(x^2) : 233
GeomSampler Configured!!!
Running in singlethreaded mode!!!
B03PhysicsList::SetCuts:CutLength : 1 (mm)
ghost world: ParallelBiasingWorld
adding cell: 1 replica: 0 name: cell_01
adding cell: 2 replica: 0 name: cell_02
adding cell: 3 replica: 0 name: cell_03
adding cell: 4 replica: 0 name: cell_04
adding cell: 5 replica: 0 name: cell_05
adding cell: 6 replica: 0 name: cell_06
adding cell: 7 replica: 0 name: cell_07
adding cell: 8 replica: 0 name: cell_08
adding cell: 9 replica: 0 name: cell_09
adding cell: 10 replica: 0 name: cell_10
adding cell: 11 replica: 0 name: cell_11
adding cell: 12 replica: 0 name: cell_12
adding cell: 13 replica: 0 name: cell_13
adding cell: 14 replica: 0 name: cell_14
adding cell: 15 replica: 0 name: cell_15
adding cell: 16 replica: 0 name: cell_16
adding cell: 17 replica: 0 name: cell_17
adding cell: 18 replica: 0 name: cell_18
----------------------------------------------
Volume name | AV E/Track | sigma | Coll_Ent.Tr|
score_worldCylinder_phys. | 8.66714 | 1.96678 | 0 |
scorecell: M1............ | 9.71383 | 1.05729 | 0.704013 |
scorecell: D1............ | 9.66536 | 1.13047 | 0.596737 |
scorecell: M2............ | 9.37053 | 1.71858 | 0.823669 |
scorecell: D2............ | 9.26058 | 1.87297 | 0.594388 |
+++ G4ProcessPlacer::G4ProcessPlacer: for: neutron
ProcessName: PScoreProcess, will be removed!
The initial Vectors:
conv: for gamma SubType= 14 BuildTable= 1
Lambda table from 1.022 MeV to 10 TeV, 20 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
BetheHeitler : Emin= 0 eV Emax= 80 GeV
BetheHeitlerLPM : Emin= 80 GeV Emax= 10 TeV
compt: for gamma SubType= 13 BuildTable= 1
Lambda table from 100 eV to 1 MeV, 7 bins per decade, spline: 1
LambdaPrime table from 1 MeV to 10 TeV in 49 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
Klein-Nishina : Emin= 0 eV Emax= 10 TeV
phot: for gamma SubType= 12 BuildTable= 0
LambdaPrime table from 200 keV to 10 TeV in 54 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
PhotoElectric : Emin= 0 eV Emax= 10 TeV AngularGenSauterGavrila
msc: for e- SubType= 10
RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
eIoni: for e- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 10 TeV
eBrem: for e- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
LPM flag: 1 for E > 1 GeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen
eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen
msc: for e+ SubType= 10
RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
eIoni: for e+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 10 TeV
eBrem: for e+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
LPM flag: 1 for E > 1 GeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen
eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen
annihil: for e+, integral: 1 SubType= 5 BuildTable= 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 10 TeV
msc: for proton SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for proton SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
msc: for GenericIon SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV
hIoni: for GenericIon SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
msc: for alpha SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for alpha SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 7.9452 MeV
BetheBloch : Emin= 7.9452 MeV Emax= 10 TeV
msc: for anti_proton SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for anti_proton SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
msc: for kaon+ SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for kaon+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 1.05231 MeV
BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV
msc: for kaon- SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for kaon- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 1.05231 MeV
BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV
msc: for mu+ SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
muIoni: for mu+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 10 TeV
muBrems: for mu+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 10 TeV
muPairProd: for mu+ SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 17x1001 from 1 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 10 TeV
msc: for mu- SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
muIoni: for mu- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 10 TeV
muBrems: for mu- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 10 TeV
muPairProd: for mu- SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 17x1001 from 1 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 10 TeV
msc: for pi+ SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for pi+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 297.505 keV
BetheBloch : Emin= 297.505 keV Emax= 10 TeV
msc: for pi- SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for pi- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 297.505 keV
BetheBloch : Emin= 297.505 keV Emax= 10 TeV
====================================================================
HADRONIC PROCESSES SUMMARY (verbose level 1)
---------------------------------------------------
Hadronic Processes for alpha
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: Binary Light Ion Cascade: 0 eV ---> 110 MeV
Model: QMDModel: 100 MeV ---> 10 GeV
Cr_sctns: TripathiLightIons: 0 eV ---> 100 TeV
Cr_sctns: Tripathi: 0 eV ---> 100 TeV
Cr_sctns: IonsShen: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for anti_neutron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: ANTI-FTFP: 0 eV ---> 20 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for anti_proton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: ANTI-FTFP: 0 eV ---> 20 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for deuteron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: Binary Light Ion Cascade: 0 eV ---> 110 MeV
Model: QMDModel: 100 MeV ---> 10 GeV
Cr_sctns: TripathiLightIons: 0 eV ---> 100 TeV
Cr_sctns: Tripathi: 0 eV ---> 100 TeV
Cr_sctns: IonsShen: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for kaon+
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for kaon-
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for lambda
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for neutron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: nFission
Model: G4LFission: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaFissionXS: 0 eV ---> 100 TeV
Process: nCapture
Model: nRadCapture: 0 eV ---> 100 TeV
Cr_sctns: GheishaCaptureXS: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for pi+
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for pi-
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for proton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: BertiniCascade: 0 eV ---> 22 MeV
Model: TheoFSGenerator: 19 GeV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for triton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: inelastic
Model: Binary Light Ion Cascade: 0 eV ---> 110 MeV
Model: QMDModel: 100 MeV ---> 10 GeV
Cr_sctns: TripathiLightIons: 0 eV ---> 100 TeV
Cr_sctns: Tripathi: 0 eV ---> 100 TeV
Cr_sctns: IonsShen: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
================================================================
++ ConcreteSD/Collisions id 0
++ ConcreteSD/CollWeight id 1
++ ConcreteSD/Population id 2
++ ConcreteSD/TrackEnter id 3
++ ConcreteSD/SL id 4
++ ConcreteSD/SLW id 5
++ ConcreteSD/SLWE id 6
++ ConcreteSD/SLW_V id 7
++ ConcreteSD/SLWE_V id 8
### Run 0 start.
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : GeomBias1001
issued by : G4ImportanceAlgorithm::Warning()
Calculate() - ipre_over_ipost ! in [0.25, 4].
ipre_over_ipost = 256.
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
###### EndOfRunAction
getting hits map ConcreteSD/Collisions
getting hits map ConcreteSD/CollWeight
getting hits map ConcreteSD/Population
getting hits map ConcreteSD/TrackEnter
getting hits map ConcreteSD/SL
getting hits map ConcreteSD/SLW
getting hits map ConcreteSD/SLWE
getting hits map ConcreteSD/SLW_V
getting hits map ConcreteSD/SLWE_V
--------------------End of Global Run-----------------------
Number of event processed : 100
=============================================================
=============================================================
Volume | Tr.Entering | Population | Collisions | Coll*WGT | NumWGTedE | FluxWGTedE | Av.Tr.WGT | SL | SLW | SLW_v | SLWE | SLWE_v |
cell_00 | 28 | 126 | 0 | 0 | 0.24653 | 1.12975 | 1 | 6123.56 | 6123.56 | 1535.16 | 6918.11 | 378.463 |
cell_01 | 157 | 196 | 589 | 589 | 0.519157 | 3.98663 | 1 | 25100.1 | 25100.1 | 5503.47 | 100065 | 2857.16 |
cell_02 | 187 | 301 | 1308 | 654 | 0.298906 | 2.69296 | 0.5 | 49727.2 | 24863.6 | 7364.84 | 66956.6 | 2201.4 |
cell_03 | 274 | 402 | 1994 | 498.5 | 0.211892 | 2.25769 | 0.25 | 70502.9 | 17625.7 | 6468.67 | 39793.4 | 1370.66 |
cell_04 | 347 | 545 | 2738 | 342.25 | 0.169715 | 1.81031 | 0.125 | 89955 | 11244.4 | 4464.54 | 20355.9 | 757.701 |
cell_05 | 323 | 515 | 2896 | 181 | 0.130864 | 1.70198 | 0.0625 | 88009.2 | 5500.57 | 2576.55 | 9361.86 | 337.177 |
cell_06 | 322 | 518 | 2853 | 89.1562 | 0.132658 | 1.6839 | 0.03125 | 88842.5 | 2776.33 | 1272.82 | 4675.06 | 168.849 |
cell_07 | 340 | 537 | 2958 | 46.2188 | 0.143564 | 1.62176 | 0.015625 | 93941.7 | 1467.84 | 620.432 | 2380.48 | 89.0716 |
cell_08 | 376 | 572 | 3033 | 23.6953 | 0.13496 | 1.67955 | 0.0078125 | 95409.4 | 745.386 | 339.046 | 1251.91 | 45.7577 |
cell_09 | 389 | 598 | 3263 | 12.7461 | 0.126354 | 1.68231 | 0.00390625 | 105212 | 410.983 | 200.556 | 691.4 | 25.3409 |
cell_10 | 383 | 578 | 3116 | 6.08594 | 0.139875 | 1.62876 | 0.00195312 | 98837.3 | 193.042 | 84.7017 | 314.419 | 11.8477 |
cell_11 | 372 | 600 | 3403 | 3.32324 | 0.137027 | 1.59122 | 0.000976562 | 103050 | 100.635 | 43.7067 | 160.132 | 5.98898 |
cell_12 | 325 | 535 | 2692 | 1.31445 | 0.14033 | 1.76076 | 0.000488281 | 86835.7 | 42.4003 | 19.3945 | 74.6567 | 2.72162 |
cell_13 | 330 | 528 | 2782 | 0.679199 | 0.146267 | 1.82682 | 0.000244141 | 92000.7 | 22.4611 | 10.274 | 41.0325 | 1.50274 |
cell_14 | 375 | 575 | 3190 | 0.389404 | 0.136959 | 1.55763 | 0.00012207 | 99527.3 | 12.1493 | 5.336 | 18.9241 | 0.730815 |
cell_15 | 390 | 593 | 3234 | 0.197388 | 0.120701 | 1.50083 | 6.10352e-05 | 104329 | 6.36771 | 3.08747 | 9.55686 | 0.372661 |
cell_16 | 378 | 572 | 3035 | 0.0926208 | 0.129377 | 1.46981 | 3.05176e-05 | 94395 | 2.88071 | 1.31929 | 4.23408 | 0.170686 |
cell_17 | 343 | 529 | 3033 | 0.0462799 | 0.115232 | 1.2854 | 1.52588e-05 | 91999.7 | 1.4038 | 0.663498 | 1.80445 | 0.076456 |
cell_18 | 197 | 398 | 1990 | 0.0151825 | 0.133304 | 1.45563 | 7.62939e-06 | 62381.4 | 0.475933 | 0.213064 | 0.692782 | 0.0284023 |
cell_19 | 122 | 122 | 0 | 0 | 0.258259 | 2.36529 | 7.62939e-06 | 18021.4 | 0.137492 | 0.0453717 | 0.325208 | 0.0117177 |
=============================================
=== G4ProcessPlacer::RemoveProcess: for: neutron
ProcessName: ImportanceProcess, will be removed!
The initial AlongStep Vectors:
GPIL Vector:
Decay
LCapture
LFission
inelastic
LElastic
PScoreProcess
ParallelTransport
Transportation
ParaWorldProc_ParallelBiasingWorld
ImportanceProcess
CoupledTransportation
DoIt Vector:
Transportation
ParallelTransport
PScoreProcess
LElastic
inelastic
LFission
LCapture
Decay
The final Vectors:
CoupledTransportation
ImportanceProcess
ParaWorldProc_ParallelBiasingWorld
The initial PostStep Vectors:
GPIL Vector:
ParaWorldProc_ParallelBiasingWorld
Decay
LCapture
LFission
nCapture
nFission
inelastic
LElastic
ParallelTransport
Transportation
hadElastic
ImportanceProcess
CoupledTransportation
DoIt Vector:
Transportation
ParallelTransport
LElastic
CoupledTransportation
ImportanceProcess
hadElastic
inelastic
LFission
LCapture
nFission
nCapture
Decay
WARNING - Attempt to delete the physical volume store while geometry closed !
WARNING - Attempt to delete the logical volume store while geometry closed !
WARNING - Attempt to delete the solid store while geometry closed !
ParaWorldProc_ParallelBiasingWorld
The final AlongStep Vectors:
GPIL Vector:
ParaWorldProc_ParallelBiasingWorld
CoupledTransportation
DoIt Vector:
CoupledTransportation
ParaWorldProc_ParallelBiasingWorld
The final PostStep Vectors:
GPIL Vector:
ParaWorldProc_ParallelBiasingWorld
Decay
nCapture
nFission
inelastic
hadElastic
CoupledTransportation
DoIt Vector:
CoupledTransportation
hadElastic
inelastic
nFission
nCapture
Decay
ParaWorldProc_ParallelBiasingWorld
================================================
Total navigation history collections cleaned: 42
@@ -639,29 +639,26 @@ void B03PhysicsList::SetCuts()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4ParallelWorldScoringProcess.hh"
#include "G4ParallelWorldProcess.hh"
void B03PhysicsList::AddScoringProcess(){
G4int npw = fParaWorldName.size();
for ( G4int i = 0; i < npw; i++){
G4ParallelWorldScoringProcess* theParallelWorldScoringProcess
= new G4ParallelWorldScoringProcess("ParaWorldScoringProc");
theParallelWorldScoringProcess->SetParallelWorld(fParaWorldName[i]);
G4String procName = "ParaWorldProc_"+fParaWorldName[i];
G4ParallelWorldProcess* theParallelWorldProcess
= new G4ParallelWorldProcess(procName);
theParallelWorldProcess->SetParallelWorld(fParaWorldName[i]);
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
if ( !particle->IsShortLived() ){
G4ProcessManager* pmanager = particle->GetProcessManager();
pmanager->AddProcess(theParallelWorldScoringProcess);
pmanager->SetProcessOrderingToLast(theParallelWorldScoringProcess
,idxAtRest);
pmanager->SetProcessOrdering(theParallelWorldScoringProcess
,idxAlongStep,1);
pmanager->SetProcessOrderingToLast(theParallelWorldScoringProcess
,idxPostStep);
}
}
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
pmanager->AddProcess(theParallelWorldProcess);
if(theParallelWorldProcess->IsAtRestRequired(particle))
{pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9999);}
pmanager->SetProcessOrdering(theParallelWorldProcess, idxAlongStep, 1);
pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9999);
}
}
}
+2
View File
@@ -7,4 +7,6 @@ add_subdirectory(B02)
add_subdirectory(B03)
add_subdirectory(GB01)
add_subdirectory(GB02)
add_subdirectory(GB03)
add_subdirectory(GB04)
add_subdirectory(ReverseMC01)
+15
View File
@@ -17,6 +17,21 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Nov 14, 2014, M. Verderi
- Fix in GB01BOptrChangeCrossSection, which was not properly using the
new cross-section value in case of an UpdateForStep(...). A trick
is used with operation->UpdateForStep( 0.0 ) to make it working.
- GB01-V10-00-02
Nov 09, 2014, M. Verderi
- Fix compilation warnings in GB01BOptrChangeCrossSection.
- GB01-V10-00-01
Nov 07, 2014, M. Verderi
- Adapt to MT
- Adapt to evolved generic biasing scheme
- tag : GB01-V10-00-00
Nov 29, 2013, I. Hrivnacova
- Added GNUmakefile, .README
File diff suppressed because it is too large Load Diff
@@ -47,7 +47,6 @@
#include "G4VBiasingOperator.hh"
class G4BOptnChangeCrossSection;
class G4ParticleDefinition;
class G4VProcess;
#include <map>
@@ -59,6 +58,8 @@ public:
GB01BOptrChangeCrossSection(G4String particleToBias, G4String name = "ChangeXS");
virtual ~GB01BOptrChangeCrossSection();
// -- method called at beginning of run:
virtual void StartRun();
private:
// -----------------------------
@@ -95,7 +96,6 @@ private:
// -- List of associations between processes and biasing operations:
std::map< const G4BiasingProcessInterface*,
G4BOptnChangeCrossSection* > fChangeCrossSectionOperations;
const G4VProcess *fFirstProcess, *fLastProcess;
G4bool fSetup;
const G4ParticleDefinition* fParticleToBias;
@@ -48,6 +48,7 @@ public:
public:
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
};
@@ -33,11 +33,11 @@
#include "Randomize.hh"
#include "G4InteractionLawPhysical.hh"
GB01BOptrChangeCrossSection::GB01BOptrChangeCrossSection(G4String particleName,
G4String name)
: G4VBiasingOperator(name),
fFirstProcess(0),
fLastProcess(0),
fSetup(true)
{
fParticleToBias = G4ParticleTable::GetParticleTable()->FindParticle(particleName);
@@ -61,40 +61,49 @@ GB01BOptrChangeCrossSection::~GB01BOptrChangeCrossSection()
it++ ) delete (*it).second;
}
void GB01BOptrChangeCrossSection::StartRun()
{
// --------------
// -- Setup stage:
// ---------------
// -- Start by collecting processes under biasing, create needed biasing
// -- operations and associate these operations to the processes:
if ( fSetup )
{
const G4ProcessManager* processManager = fParticleToBias->GetProcessManager();
const G4BiasingProcessSharedData* sharedData =
G4BiasingProcessInterface::GetSharedData( processManager );
if ( sharedData ) // -- sharedData tested, as is can happen a user attaches an operator to a
// -- volume but without defined BiasingProcessInterface processes.
{
for ( size_t i = 0 ; i < (sharedData->GetPhysicsBiasingProcessInterfaces()).size(); i++ )
{
const G4BiasingProcessInterface* wrapperProcess =
(sharedData->GetPhysicsBiasingProcessInterfaces())[i];
G4String operationName = "XSchange-" +
wrapperProcess->GetWrappedProcess()->GetProcessName();
fChangeCrossSectionOperations[wrapperProcess] =
new G4BOptnChangeCrossSection(operationName);
}
}
fSetup = false;
}
}
G4VBiasingOperation*
GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface*
callingProcess)
{
// -----------------------------------------------------
// -- Check if current particle type is the one to bias:
// -----------------------------------------------------
if ( track->GetDefinition() != fParticleToBias ) return 0;
// -----------------------------------------------------------------------
// -- Setup stage ( Might consider moving this in a less called method. ):
// -----------------------------------------------------------------------
// -- Start by collecting processes under biasing, create needed biasing operations
// -- and assocation operations to these processes:
if ( fSetup )
{
if ( ( fFirstProcess == 0 ) &&
( callingProcess->GetIsFirstPostStepGPILInterface() ) ) fFirstProcess = callingProcess;
if ( fLastProcess == 0 )
{
G4String operationName = "XSchange-" +
callingProcess->GetWrappedProcess()->GetProcessName();
fChangeCrossSectionOperations[callingProcess] =
new G4BOptnChangeCrossSection(operationName);
if ( callingProcess->GetIsLastPostStepGPILInterface() )
{
fLastProcess = callingProcess;
fSetup = false;
}
}
}
// ---------------------------------------------------------------------
// -- select and setup the biasing operation for current callingProcess:
// ---------------------------------------------------------------------
@@ -154,14 +163,17 @@ GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperation(const G4Track*
}
else
{
// -- update the 'interaction length' and underneath 'number of interaction lengths'
// -- for past step (this takes into accout the previous step cross-section value)
operation->UpdateForStep( callingProcess->GetPreviousStepSize() );
// -- update the cross-section value:
operation->SetBiasedCrossSection( XStransformation * analogXS );
// -- forces recomputation of the 'interaction length' taking into account above
// -- new cross-section value [tricky : to be improved]
operation->UpdateForStep( 0.0 );
}
}
// operation->SetBiasedCrossSection( XStransformation * analogXS );
// operation->Sample();
return operation;
}
@@ -30,6 +30,8 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4SystemOfUnits.hh"
GB01BOptrMultiParticleChangeCrossSection::GB01BOptrMultiParticleChangeCrossSection()
: G4VBiasingOperator("TestManyExponentialTransform")
{}
@@ -60,14 +62,14 @@ GB01BOptrMultiParticleChangeCrossSection::
ProposeOccurenceBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess)
{
// -- examples of limitations imposed to applied the biasing:
// -- examples of limitations imposed to apply the biasing:
// -- limit application of biasing to primary particles only:
if ( track->GetParentID() != 0 ) return 0;
// -- limit to at most 5 biased interactions:
if ( fnInteractions > 4 ) return 0;
// -- and limit to a weight of at least 0.05:
if ( track->GetWeight() < 0.05 ) return 0;
if ( fCurrentOperator ) return fCurrentOperator->
GetProposedOccurenceBiasingOperation(track, callingProcess);
else return 0;
@@ -33,6 +33,7 @@
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4UniformMagField.hh"
#include "G4LogicalVolumeStore.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
@@ -62,17 +63,17 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct()
G4VSolid* solidWorld = new G4Box("World", 10*m, 10*m, 10*m );
G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, //its solid
worldMaterial, //its material
"World"); //its name
G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid
worldMaterial, // its material
"World"); // its name
G4PVPlacement* physiWorld = new G4PVPlacement(0, //no rotation
G4ThreeVector(), //at (0,0,0)
logicWorld, //its logical volume
"World", //its name
0, //its mother volume
false, //no boolean operation
0); //copy number
G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation
G4ThreeVector(), // at (0,0,0)
logicWorld, // its logical volume
"World", // its name
0, // its mother volume
false, // no boolean operation
0); // copy number
// -----------------------------------
// -- volume where biasing is applied:
@@ -80,19 +81,28 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct()
G4double halfZ = 10*cm;
G4VSolid* solidTest = new G4Box("test.solid", 1*m, 1*m, halfZ );
G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, //its solid
defaultMaterial, //its material
"test.logical"); //its name
G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, // its solid
defaultMaterial, // its material
"test.logical"); // its name
new G4PVPlacement(0, // no rotation
G4ThreeVector(0,0, halfZ), // volume entrance at (0,0,0)
logicTest, // its logical volume
"test.phys", // its name
logicWorld, // its mother volume
false, // no boolean operation
0); // copy number
new G4PVPlacement(0, // no rotation
G4ThreeVector(0,0, halfZ), // volume entrance at (0,0,0)
logicTest, // its logical volume
"test.phys", // its name
logicWorld, // its mother volume
false, // no boolean operation
0); // copy number
return physiWorld;
}
void GB01DetectorConstruction::ConstructSDandField()
{
// -- Fetch volume for biasing:
G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical");
// ----------------------------------------------
// -- operator creation and attachment to volume:
// ----------------------------------------------
@@ -104,6 +114,4 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct()
G4cout << " Attaching biasing operator " << testMany->GetName()
<< " to logical volume " << logicTest->GetName()
<< G4endl;
return physiWorld;
}
+5
View File
@@ -17,6 +17,11 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Oct 14, 2014, M. Verderi
- Adapt to evolved biasing generic scheme
- requires proc-biasgen-V10-00-00 and proc-biasmng-V10-00-00
- tag : GB02-V10-00-00
Nov 29, 2013, I. Hrivnacova
- Added GNUmakefile, .README
@@ -119,9 +119,9 @@ int main(int argc,char** argv)
biasingPhysics->Bias("kaon0L");
biasingPhysics->Bias("kaon0S");
physicsList->RegisterPhysics(biasingPhysics);
G4cout << " ********************************************* " << G4endl;
G4cout << " ********** processes are wrapped ************ " << G4endl;
G4cout << " ********************************************* " << G4endl;
G4cout << " ********************************************************* " << G4endl;
G4cout << " ********** processes are wrapped for biasing ************ " << G4endl;
G4cout << " ********************************************************* " << G4endl;
}
else
{
File diff suppressed because it is too large Load Diff
@@ -51,11 +51,11 @@ private:
ProposeNonPhysicsBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess);
virtual G4VBiasingOperation*
ProposeOccurenceBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess);
ProposeOccurenceBiasingOperation (const G4Track* track,
const G4BiasingProcessInterface* callingProcess);
virtual G4VBiasingOperation*
ProposeFinalStateBiasingOperation(const G4Track*,
const G4BiasingProcessInterface*) {return 0;}
ProposeFinalStateBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess);
private:
// -- Avoid compiler complaining for (wrong) method shadowing,
@@ -76,6 +76,16 @@ ProposeNonPhysicsBiasingOperation(const G4Track* track,
else return 0;
}
G4VBiasingOperation*
GB02BOptrMultiParticleForceCollision::
ProposeFinalStateBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess)
{
if ( fCurrentOperator ) return fCurrentOperator->
GetProposedFinalStateBiasingOperation(track, callingProcess);
else return 0;
}
void GB02BOptrMultiParticleForceCollision::StartTracking( const G4Track* track )
{
+55
View File
@@ -0,0 +1,55 @@
//$Id$
///\file "biasing/GB03/.README"
///\brief Example GB03 README page
/*! \page ExampleGB03 Example GB03
\section ExampleGB03_s1 Geometry based biasing
This example illustrates a use of generic biasing classes to implement a
technique near to "geometry importance biasing".
The geometry is the same than in EM tests, with the sampling calorimeter
made of a series of layers of absorber and gap.
The biasing applies to neutrons only.
Instead of explicitely assigning "importance" values to the layers, we
split neutrons moving forward and kill the ones moving backward, when they
reach the exit of an absorber volume.
The splitting factor can be controlled by command line, eg:
\verbatim
/GB03/biasing/setSplittingFactor 2
\endverbatim
which also determines the killing probability : 1/(splitting factor).
It can be seen than when defining 10 layers (see exampleGB03.in), a
splitting factor 2 works fine : we don't suffer from under- or over-splitting.
If going to 20 layers, then a splitting with a factor 2 is too large,
and the biasing suffers from over-splitting. (And we can not go lower than
"2", which would mean "1" and hence, no biasing...)
To alleviate the over-splitting, we introduce a probability to apply the
splitting (and killing) (this is one solution, others can be considered), that
can be changed as:
\verbatim
/GB03/biasing/setApplyProbability 0.5
\endverbatim
With above value, we can see that we recover a satisfactory biasing scheme,
with neutrons penetrating the entire setup, without over-splitting.
The classes involved are:
- GB03BOptnSplitOrKillOnBoundary : which is the biasing operation making
the splitting and killing;
- GB03BOptrGeometryBasedBiasing : which is the biasing operator, making
decision to use above operation, and configuring it, passing it the
splitting factor and probability to apply the biasing.
*/
@@ -0,0 +1,66 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(GB03project)
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
# to build a batch mode only executable
#
option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON)
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
endif()
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
include(${Geant4_USE_FILE})
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
include_directories(${PROJECT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR})
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(exampleGB03 exampleGB03.cc ${sources} ${headers})
target_link_libraries(exampleGB03 ${Geant4_LIBRARIES} )
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we build
# GB03project. This is so that we can run the executable directly
# because it relies on these scripts being in the current working directory.
#
set(GB03project_SCRIPTS
exampleGB03.in
exampleGB03.out
vis.mac
)
foreach(_script ${GB03project_SCRIPTS})
configure_file(
${PROJECT_SOURCE_DIR}/${_script}
${PROJECT_BINARY_DIR}/${_script}
COPYONLY
)
endforeach()
#----------------------------------------------------------------------------
# Add program to the project targets
# (this avoids the need of typing the program name after make)
#
add_custom_target(GB03project DEPENDS exampleGB03)
#----------------------------------------------------------------------------
# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX
#
install(TARGETS exampleGB03 DESTINATION bin)
@@ -0,0 +1,17 @@
# $Id: GNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
name := exampleGB03
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/binmake.gmk
+45
View File
@@ -0,0 +1,45 @@
$Id: History 70477 2013-05-31 08:35:08Z ahoward $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Category History file
---------------------
This file should be used by G4 developers and category coordinators
to briefly summarize all major modifications introduced in the code
and keep track of all category-tags.
It DOES NOT substitute the CVS log-message one should put at every
committal in the CVS repository !
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Nov 29, 2014, I. Hrivnacova
- Fixed .README
- tag GB03-V10-00-05
Nov 10, 2014, M. Verderi
- update exampleGB03.out
- tag GB03-V10-00-04
Nov 10, 2014, M. Verderi
- Typo in GB03BOptnSplitOrKillOnBoundary: GetApplyProbabilty()
(missing "i" : Probability())
- tag GB03-V10-00-03
Nov 9, 2014, I. Hrivnacova
- Added GNUmakefile
- tag GB03-V10-00-02
Nov 8, 2014, I. Hrivnacova
- Added .README, files descriptions and separators
- tag GB03-V10-00-01
Nov 7, 2014, M. Verderi
- Creation
- tag GB03-V10-00-00
+45
View File
@@ -0,0 +1,45 @@
Example GB03 : geometry based biasing
-------------------------------------
This example illustrates a use of generic biasing classes to implement a
technique near to "geometry importance biasing".
The geometry is the same than in EM tests, with the sampling calorimeter
made of a series of layers of absorber and gap.
The biasing applies to neutrons only.
Instead of explicitely assigning "importance" values to the layers, we
split neutrons moving forward and kill the ones moving backward, when they
reach the exit of an absorber volume.
The splitting factor can be controlled by command line, eg:
/GB03/biasing/setSplittingFactor 2
which also determines the killing probability : 1/(splitting factor).
It can be seen than when defining 10 layers (see exampleGB03.in), a
splitting factor 2 works fine : we don't suffer from under- or over-splitting.
If going to 20 layers, then a splitting with a factor 2 is too large,
and the biasing suffers from over-splitting. (And we can not go lower than
"2", which would mean "1" and hence, no biasing...)
To alleviate the over-splitting, we introduce a probability to apply the
splitting (and killing) (this is one solution, others can be considered), that
can be changed as:
/GB03/biasing/setApplyProbability 0.5
With above value, we can see that we recover a satisfactory biasing scheme,
with neutrons penetrating the entire setup, without over-splitting.
The classes involved are:
- GB03BOptnSplitOrKillOnBoundary : which is the biasing operation making
the splitting and killing;
- GB03BOptrGeometryBasedBiasing : which is the biasing operator, making
decision to use above operation, and configuring it, passing it the
splitting factor and probability to apply the biasing.
@@ -0,0 +1,119 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifdef G4MULTITHREADED
#include "G4MTRunManager.hh"
#else
#include "G4RunManager.hh"
#endif
#ifdef G4VIS_USE
#include "G4VisExecutive.hh"
#endif
#ifdef G4UI_USE
#include "G4UIExecutive.hh"
#endif
#include "G4UImanager.hh"
#include "GB03DetectorConstruction.hh"
#include "GB03PrimaryGeneratorAction.hh"
#include "GB03ActionInitialization.hh"
#include "FTFP_BERT.hh"
#include "G4GenericBiasingPhysics.hh"
int main(int argc,char** argv)
{
// -- Construct the run manager : MT or sequential one
#ifdef G4MULTITHREADED
G4MTRunManager * runManager = new G4MTRunManager;
G4cout << " ********** Run Manager constructed in MT mode ************ " << G4endl;
// -- Choose 4 threads:
runManager->SetNumberOfThreads(4);
#else
G4RunManager * runManager = new G4RunManager;
G4cout << " ********** Run Manager constructed in sequential mode ************ " << G4endl;
#endif
// -- Set mandatory initialization classes
G4VUserDetectorConstruction* detector = new GB03DetectorConstruction;
runManager->SetUserInitialization(detector);
G4VModularPhysicsList* physicsList = new FTFP_BERT;
// -- Setup biasing for neutron only. As will not bias any
// -- physics process, require the G4GenericBiasingPhysics()
// -- to modify the physics list just for "non-physics" biasing:
G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics();
biasingPhysics->NonPhysicsBias("neutron");
physicsList->RegisterPhysics(biasingPhysics);
runManager->SetUserInitialization(physicsList);
// -- Set user action initialization class
G4VUserActionInitialization* actions = new GB03ActionInitialization;
runManager->SetUserInitialization(actions);
#ifdef G4VIS_USE
// Visualization manager
//
G4VisManager* visManager = new G4VisExecutive;
visManager->Initialize();
#endif
// Initialize G4 kernel
//
runManager->Initialize();
// Get the pointer to the User Interface manager
//
G4UImanager* UImanager = G4UImanager::GetUIpointer();
if (argc==1) // Define UI session for interactive mode
{
#ifdef G4UI_USE
G4UIExecutive * ui = new G4UIExecutive(argc,argv);
#ifdef G4VIS_USE
UImanager->ApplyCommand("/control/execute vis.mac");
#endif
ui->SessionStart();
delete ui;
#endif
}
else // Batch mode
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UImanager->ApplyCommand(command+fileName);
}
#ifdef G4VIS_USE
delete visManager;
#endif
delete runManager;
return 0;
}
@@ -0,0 +1,18 @@
/run/verbose 2
/GB03/verbose 2
/gun/particle neutron
# 10 layers, splitting with factor 2 is fine:
/GB03/numberOfLayers 10
/GB03/biasing/setSplittingFactor 2
/GB03/biasing/setApplyProbability 1.0
/run/beamOn 10
# 20 layers, splitting with factor 2 is too high
# to alleviate the "over-splitting", apply
# splitting in only 50% of the cases:
/GB03/numberOfLayers 20
/GB03/biasing/setApplyProbability 0.5
/run/beamOn 10
@@ -0,0 +1,880 @@
############################################
!!! WARNING - FPE detection is activated !!!
############################################
*************************************************************
Geant4 version Name: geant4-10-01-ref-00 (5-December-2014)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
*************************************************************
********** Run Manager constructed in sequential mode ************
<<< Geant4 Physics List simulation engine: FTFP_BERT 2.0
Visualization Manager instantiating with verbosity "warnings (3)"...
Visualization Manager initialising...
Registering graphics systems...
You have successfully registered the following graphics systems.
Current available graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRep (HepRepXML)
G4HepRepFile (HepRepFile)
OpenGLImmediateX (OGLIX)
OpenGLImmediateXm (OGLI, OGLIXm)
OpenGLStoredX (OGLSX)
OpenGLStoredXm (OGL, OGLS, OGLSXm)
RayTracer (RayTracer)
RayTracerX (RayTracerX)
VRML1FILE (VRML1FILE)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
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
You have successfully registered the following user vis actions.
Run Duration User Vis Actions: none
End of Event User Vis Actions: none
End of Run User Vis Actions: none
Some /vis commands (optionally) take a string to specify colour.
Available colours:
black, blue, brown, cyan, gray, green, grey, magenta, red, white, yellow
--------------------------------------------------------
Absorber is made of Lead
Gap is made of Scintillator
--------------------------------------------------------
G4SDManager::AddNewCollection : the collection <Calor_abs/eDep> is registered at 1
G4SDManager::AddNewCollection : the collection <Calor_abs/nNeutral> is registered at 2
G4SDManager::AddNewCollection : the collection <Calor_abs/nCharged> is registered at 3
New sensitive detector <Calor_abs> is registored at /
G4SDManager::AddNewCollection : the collection <Calor_gap/eDep> is registered at 4
G4SDManager::AddNewCollection : the collection <Calor_gap/nNeutral> is registered at 5
G4SDManager::AddNewCollection : the collection <Calor_gap/nCharged> is registered at 6
New sensitive detector <Calor_gap> is registored at /
### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0
phot: for gamma SubType= 12 BuildTable= 0
LambdaPrime table from 200 keV to 10 TeV in 54 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
PhotoElectric : Emin= 0 eV Emax= 10 TeV AngularGenSauterGavrila FluoActive
compt: for gamma SubType= 13 BuildTable= 1
Lambda table from 100 eV to 1 MeV, 7 bins per decade, spline: 1
LambdaPrime table from 1 MeV to 10 TeV in 49 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
Klein-Nishina : Emin= 0 eV Emax= 10 TeV
conv: for gamma SubType= 14 BuildTable= 1
Lambda table from 1.022 MeV to 10 TeV, 20 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
BetheHeitler : Emin= 0 eV Emax= 80 GeV
BetheHeitlerLPM : Emin= 80 GeV Emax= 10 TeV
msc: for e- SubType= 10
RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 MeV Table with 42 bins Emin= 100 eV Emax= 100 MeV
WentzelVIUni : Emin= 100 MeV Emax= 10 TeV Table with 35 bins Emin= 100 MeV Emax= 10 TeV
eIoni: for e- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 10 TeV
eBrem: for e- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
LPM flag: 1 for E > 1 GeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen
eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen
CoulombScat: for e-, integral: 1 SubType= 1 BuildTable= 1
Lambda table from 100 MeV to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 100 MeV Emax= 10 TeV
msc: for e+ SubType= 10
RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 100 MeV Table with 42 bins Emin= 100 eV Emax= 100 MeV
WentzelVIUni : Emin= 100 MeV Emax= 10 TeV Table with 35 bins Emin= 100 MeV Emax= 10 TeV
eIoni: for e+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 10 TeV
eBrem: for e+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
LPM flag: 1 for E > 1 GeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen
eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen
annihil: for e+, integral: 1 SubType= 5 BuildTable= 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
eplus2gg : Emin= 0 eV Emax= 10 TeV
CoulombScat: for e+, integral: 1 SubType= 1 BuildTable= 1
Lambda table from 100 MeV to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 100 MeV Emax= 10 TeV
msc: for proton SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for proton SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
hBrems: for proton SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for proton SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 13x1001 from 7.50618 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for proton, integral: 1 SubType= 1 BuildTable= 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for GenericIon SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV
ionIoni: for GenericIon SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02
Stopping Power data for 17 ion/material pairs
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
msc: for alpha SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
ionIoni: for alpha SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax= 7.9452 MeV
BetheBloch : Emin= 7.9452 MeV Emax= 10 TeV
msc: for anti_proton SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for anti_proton SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
hBrems: for anti_proton SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for anti_proton SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 13x1001 from 7.50618 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for anti_proton, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for kaon+ SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for kaon+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 1.05231 MeV
BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV
hBrems: for kaon+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for kaon+ SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 14x1001 from 3.94942 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for kaon+, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for kaon- SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for kaon- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 1.05231 MeV
BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV
hBrems: for kaon- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for kaon- SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 14x1001 from 3.94942 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for kaon-, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for mu+ SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
muIoni: for mu+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 10 TeV
muBrems: for mu+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 10 TeV
muPairProd: for mu+ SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 17x1001 from 1 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for mu+, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for mu- SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
muIoni: for mu- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 200 keV
BetheBloch : Emin= 200 keV Emax= 1 GeV
MuBetheBloch : Emin= 1 GeV Emax= 10 TeV
muBrems: for mu- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
MuBrem : Emin= 0 eV Emax= 10 TeV
muPairProd: for mu- SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 17x1001 from 1 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
muPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for mu-, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for pi+ SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for pi+ SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 297.505 keV
BetheBloch : Emin= 297.505 keV Emax= 10 TeV
hBrems: for pi+ SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for pi+ SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 16x1001 from 1.11656 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for pi+, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
msc: for pi- SubType= 10
RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180
===== EM models for the G4Region DefaultRegionForTheWorld ======
WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for pi- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 297.505 keV
BetheBloch : Emin= 297.505 keV Emax= 10 TeV
hBrems: for pi- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
hBrem : Emin= 0 eV Emax= 10 TeV
hPairProd: for pi- SubType= 4
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
Sampling table 16x1001 from 1.11656 GeV to 10 TeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
hPairProd : Emin= 0 eV Emax= 10 TeV
CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Lambda table from threshold to 10 TeV, 7 bins per decade, spline: 1
180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 10 TeV
====================================================================
HADRONIC PROCESSES SUMMARY (verbose level 1)
---------------------------------------------------
Hadronic Processes for neutron
Process: hadElastic
Model: hElasticCHIPS: 0 eV ---> 100 TeV
Cr_sctns: ChipsNeutronElasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: neutronInelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: nCapture
Model: nRadCapture: 0 eV ---> 100 TeV
Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaCaptureXS: 0 eV ---> 100 TeV
Process: nKiller
---------------------------------------------------
Hadronic Processes for GenericIon
Process: ionInelastic
Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for He3
Process: He3Inelastic
Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for alpha
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: alphaInelastic
Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for anti_He3
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100.1 MeV
Model: AntiAElastic: 100 MeV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_He3Inelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
---------------------------------------------------
Hadronic Processes for anti_alpha
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100.1 MeV
Model: AntiAElastic: 100 MeV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_alphaInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
---------------------------------------------------
Hadronic Processes for anti_deuteron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100.1 MeV
Model: AntiAElastic: 100 MeV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_deuteronInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
---------------------------------------------------
Hadronic Processes for anti_neutron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_neutronInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for anti_proton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100.1 MeV
Model: AntiAElastic: 100 MeV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_protonInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
---------------------------------------------------
Hadronic Processes for anti_triton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100.1 MeV
Model: AntiAElastic: 100 MeV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_tritonInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
---------------------------------------------------
Hadronic Processes for deuteron
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: dInelastic
Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for e+
Process: positronNuclear
Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV
Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for e-
Process: electronNuclear
Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV
Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for gamma
Process: photonNuclear
Model: BertiniCascade: 0 eV ---> 3.5 GeV
Model: TheoFSGenerator: 3 GeV ---> 100 TeV
Cr_sctns: PhotoNuclearXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for kaon+
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: kaon+Inelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: ChipsKaonPlusInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for kaon-
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: kaon-Inelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: ChipsKaonMinusInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hBertiniCaptureAtRest
---------------------------------------------------
Hadronic Processes for lambda
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: lambdaInelastic
Model: BertiniCascade: 0 eV ---> 6 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: ChipsHyperonInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for mu+
Process: muonNuclear
Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV
Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for mu-
Process: muonNuclear
Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV
Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV
Process: muMinusCaptureAtRest
---------------------------------------------------
Hadronic Processes for pi+
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 1.0001 GeV
Model: hElasticGlauber: 1 GeV ---> 100 TeV
Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: pi+Inelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: G4CrossSectionPairGG: 0 eV ---> 100 TeV
G4CrossSectionPairGG: G4PiNuclearCrossSection cross sections
below 91 GeV, Glauber-Gribov above
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for pi-
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 1.0001 GeV
Model: hElasticGlauber: 1 GeV ---> 100 TeV
Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: pi-Inelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: G4CrossSectionPairGG: 0 eV ---> 100 TeV
G4CrossSectionPairGG: G4PiNuclearCrossSection cross sections
below 91 GeV, Glauber-Gribov above
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hBertiniCaptureAtRest
---------------------------------------------------
Hadronic Processes for proton
Process: hadElastic
Model: hElasticCHIPS: 0 eV ---> 100 TeV
Cr_sctns: ChipsProtonElasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: protonInelastic
Model: FTFP: 4 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 5 GeV
Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for triton
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: tInelastic
Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV
Model: FTFP: 2 GeV ---> 100 TeV
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
================================================================
Region <DefaultRegionForTheWorld> -- -- appears in <World> world volume
This region is in the mass world.
Root logical volume(s) : World
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials : Galactic Lead Scintillator
Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Region <DefaultRegionForParallelWorld> -- -- is not associated to any world.
Root logical volume(s) :
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials :
Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
========= Table of registered couples ==============================
Index : 0 used in the geometry : Yes
Material : Galactic
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 1 used in the geometry : Yes
Material : Lead
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 94.5861 keV e- 1.00386 MeV e+ 951.321 keV proton 70 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 2 used in the geometry : Yes
Material : Scintillator
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 2.09434 keV e- 281.891 keV e+ 276.265 keV proton 70 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
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
0.00 0.00 0.00 1k Calor
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
100.00 0k 1 10 10 0.00 Calor
GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and probability for applying the technique 1 .
### Run 0 starts.
Run terminated.
Run Summary
Number of events processed : 10
User=0.17s Real=0.17s Sys=0s
Region <DefaultRegionForTheWorld> -- -- appears in <World> world volume
This region is in the mass world.
Root logical volume(s) : World
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials : Galactic Lead Scintillator
Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Region <DefaultRegionForParallelWorld> -- -- is not associated to any world.
Root logical volume(s) :
Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0]
Materials :
Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
========= Table of registered couples ==============================
Index : 0 used in the geometry : Yes
Material : Galactic
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 1 used in the geometry : Yes
Material : Lead
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 94.5861 keV e- 1.00386 MeV e+ 951.321 keV proton 70 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 2 used in the geometry : Yes
Material : Scintillator
Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um
Energy thresholds : gamma 2.09434 keV e- 281.891 keV e+ 276.265 keV proton 70 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
====================================================================
Start closing geometry.
G4GeometryManager::ReportVoxelStats -- Voxel Statistics
Total memory consumed for geometry optimisation: 1 kByte
Total CPU time elapsed for geometry optimisation: 0 seconds
Voxelisation: top CPU users:
Percent Total CPU System CPU Memory Volume
------- ---------- ---------- -------- ----------
0.00 0.00 0.00 1k Calor
Voxelisation: top memory users:
Percent Memory Heads Nodes Pointers Total CPU Volume
------- -------- ------ ------ -------- ---------- ----------
100.00 1k 1 20 20 0.00 Calor
GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and probability for applying the technique 0.5 .
### Run 1 starts.
Run terminated.
Run Summary
Number of events processed : 10
User=1.27s Real=1.28s Sys=0.01s
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
UserDetectorConstruction deleted.
UserPhysicsList deleted.
UserActionInitialization deleted.
UserPrimaryGenerator deleted.
RunManager is deleting RunManagerKernel.
G4SDManager deleted.
EventManager deleted.
Units table cleared.
Total navigation history collections cleaned: 95
================== Deleting memory pools ===================
Number of memory pools allocated: 12 of which, static: 0
Dynamic pools deleted: 12 / Total memory freed: 0.16 Mb
============================================================
G4Allocator objects are deleted.
UImanager deleted.
StateManager deleted.
RunManagerKernel is deleted. Good bye :)
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
/// \file GB03ActionInitialization.hh
/// \brief Definition of the GB03ActionInitialization class
#ifndef GB03ActionInitialization_H
#define GB03ActionInitialization_H 1
#include "globals.hh"
#include "G4VUserActionInitialization.hh"
class GB03ActionInitialization : public G4VUserActionInitialization
{
public:
GB03ActionInitialization();
virtual ~GB03ActionInitialization();
virtual void Build() const;
virtual void BuildForMaster() const;
};
#endif
@@ -0,0 +1,108 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id$
//
/// \file GB03BOptnSplitOrKillOnBoundary.hh
/// \brief Definition of the GB03BOptnSplitOrKillOnBoundary class
#ifndef GB03BOptnSplitOrKillOnBoundary_hh
#define GB03BOptnSplitOrKillOnBoundary_hh 1
#include "G4VBiasingOperation.hh"
#include "G4ParticleChange.hh"
#include "G4ParticleChangeForNothing.hh"
class G4LogicalVolume;
class GB03BOptnSplitOrKillOnBoundary : public G4VBiasingOperation {
public:
// -- Constructor :
GB03BOptnSplitOrKillOnBoundary(G4String name);
// -- destructor:
virtual ~GB03BOptnSplitOrKillOnBoundary();
public:
// ----------------------------------------------
// -- Methods from G4VBiasingOperation interface:
// ----------------------------------------------
// -- Unused:
virtual const G4VBiasingInteractionLaw*
ProvideOccurenceBiasingInteractionLaw( const G4BiasingProcessInterface*,
G4ForceCondition& ) {return 0;}
virtual G4VParticleChange*
ApplyFinalStateBiasing ( const G4BiasingProcessInterface*,
const G4Track*,
const G4Step*,
G4bool& ) {return 0;}
// -- Used methods ("non-physics biasing methods"):
// ------------------------------------------------
// -- Method to return the distance or the condition under which
// -- requesting the biasing. The "condition" flag will be indeed
// -- used to apply the operation on the geometry boundary.
virtual G4double
DistanceToApplyOperation ( const G4Track*,
G4double,
G4ForceCondition* condition );
// -- Method the generate the final state, ie, either the final states
// -- corresponding to the splitting or killing cases:
virtual G4VParticleChange*
GenerateBiasingFinalState ( const G4Track*,
const G4Step* );
// -- Specific to this example:
// ----------------------------
// -- Set the integer splitting factor (should be >= 2):
// -- This determines also the killing probability : 1/splittingFactor
void SetSplittingFactor( G4int splittingFactor )
{ fSplittingFactor = splittingFactor; }
// -- An "invention" (?) of this example: defines a probability
// -- to apply the splitting(killing) techniques:
// -- - If proba == 1, the technique is applied normally
// -- - if proba < 1 (say 70%) then the splitting(killing) is
// -- applied in only 70% of the cases.
// -- This "trick" is useful when the desired splitting factor
// -- would rather be a non-integer value, ie in case where:
// -- splittingFactor = k is (a bit) too small
// -- splittingFactor = k+1 is (a bit) too large
// -- then the proba can allow to tune an in between application
// -- of the technique.
// -- Specially useful when wanting to split between "1 and 2".
void SetApplyProbability( G4double proba )
{ fApplyProbability = proba; }
G4int GetSplittingFactor() const { return fSplittingFactor; }
G4double GetApplyProbability() const { return fApplyProbability; }
private:
G4ParticleChange fParticleChange;
G4ParticleChangeForNothing fParticleChangeForNothing;
G4int fSplittingFactor;
G4double fApplyProbability;
};
#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. *
// ********************************************************************
//
// $Id$
//
/// \file GB03BOptrGeometryBasedBiasing.hh
/// \brief Definition of the GB03BOptrGeometryBasedBiasing class
#ifndef GB03BOptrGeometryBasedBiasing_h
#define GB03BOptrGeometryBasedBiasing_h 1
#include "G4VBiasingOperator.hh"
#include "GB03BOptnSplitOrKillOnBoundary.hh"
class G4GenericMessenger;
/// Biasing operator class.
class GB03BOptrGeometryBasedBiasing : public G4VBiasingOperator
{
public:
GB03BOptrGeometryBasedBiasing();
virtual ~GB03BOptrGeometryBasedBiasing();
public:
// ------------------------------
// Method added for this example:
// ------------------------------
GB03BOptnSplitOrKillOnBoundary* GetSplitAndKillOperation() const
{ return fSplitAndKillOperation; }
// -------------------------
// Optional from base class:
// -------------------------
void StartRun();
private:
// --------------------------
// Mandatory from base class:
// --------------------------
// Used for splitting/killing:
virtual G4VBiasingOperation*
ProposeNonPhysicsBiasingOperation( const G4Track* track,
const G4BiasingProcessInterface* callingProcess );
// Not used here:
virtual G4VBiasingOperation*
ProposeOccurenceBiasingOperation( const G4Track*,
const G4BiasingProcessInterface* ) { return 0; }
// Not used here:
virtual G4VBiasingOperation*
ProposeFinalStateBiasingOperation( const G4Track*,
const G4BiasingProcessInterface* ) { return 0; }
private:
GB03BOptnSplitOrKillOnBoundary* fSplitAndKillOperation;
G4int fSplittingFactor;
G4double fApplyProbability;
// Messengers to change the
G4GenericMessenger* fSplittingFactorMessenger;
G4GenericMessenger* fApplyProbabilityMessenger;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -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$
//
/// \file GB03DetectorConstruction.hh
/// \brief Definition of the GB03DetectorConstruction class
#ifndef GB03DetectorConstruction_h
#define GB03DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class G4LogicalVolume;
class G4VPhysicalVolume;
class G4PVReplica;
class G4Material;
class G4Box;
class GB03DetectorMessenger;
class GB03DetectorConstruction : public G4VUserDetectorConstruction
{
public:
GB03DetectorConstruction();
virtual ~GB03DetectorConstruction();
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
void PrintCalorParameters() const;
void SetAbsorberMaterial(G4String materialChoice);
G4String GetAbsorberMaterial() const;
void SetGapMaterial(G4String materialChoice);
G4String GetGapMaterial() const;
void SetNumberOfLayers(G4int nl);
static G4int GetNumberOfLayers() { return fNumberOfLayers; }
G4int GetVerboseLevel() const { return fVerboseLevel; }
void SetVerboseLevel(G4int val) { fVerboseLevel = val; }
private:
void DefineMaterials();
void SetupGeometry();
void SetupDetectors();
void SetupBiasing();
// data members
static G4int fNumberOfLayers;
G4double fTotalThickness; /// total thinkness of one calorimeter
G4double fLayerThickness; /// = fTotalThickness / fNumberOfLayers
G4bool fConstructed;
static G4ThreadLocal G4bool fConstructedSDandField;
G4String fCalName;
G4Material* fWorldMaterial;
G4Material* fAbsorberMaterial;
G4Material* fGapMaterial;
G4Box* fLayerSolid;
G4Box* fGapSolid;
G4LogicalVolume* fWorldLogical;
G4LogicalVolume* fCalorLogical;
G4LogicalVolume* fLayerLogical;
G4LogicalVolume* fGapLogical;
G4VPhysicalVolume* fWorldPhysical;
G4VPhysicalVolume* fCalorPhysical;
G4PVReplica* fLayerPhysical;
G4VPhysicalVolume* fGapPhysical;
GB03DetectorMessenger* fDetectorMessenger;
G4int fVerboseLevel;
};
#endif
@@ -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$
//
/// \file GB03DetectorMessenger.hh
/// \brief Definition of the GB03DetectorMessenger class
#ifndef GB03DetectorMessenger_h
#define GB03DetectorMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
class GB03DetectorConstruction;
class G4UIdirectory;
class G4UIcmdWithAString;
class G4UIcmdWithABool;
class G4UIcmdWithAnInteger;
class GB03DetectorMessenger: public G4UImessenger
{
public:
GB03DetectorMessenger(GB03DetectorConstruction* );
virtual ~GB03DetectorMessenger();
virtual void SetNewValue(G4UIcommand*, G4String);
virtual G4String GetCurrentValue(G4UIcommand * command);
private:
GB03DetectorConstruction* fDetector;
G4UIdirectory* fDirectory;
G4UIcmdWithAString* fAbsMaterialCmd;
G4UIcmdWithAString* fGapMaterialCmd;
G4UIcmdWithAnInteger* fNumLayerCmd;
G4UIcmdWithAnInteger* fVerboseCmd;
};
#endif
@@ -0,0 +1,55 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
/// \file GB03PrimaryGeneratorAction.hh
/// \brief Definition of the GB03PrimaryGeneratorAction class
#ifndef GB03PrimaryGeneratorAction_h
#define GB03PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "globals.hh"
class G4ParticleGun;
class G4Event;
class GB03PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
GB03PrimaryGeneratorAction();
virtual ~GB03PrimaryGeneratorAction();
virtual void GeneratePrimaries(G4Event*);
private:
G4ParticleGun* fParticleGun;
};
#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$
//
/// \file GB03ActionInitialization.cc
/// \brief Implementation of the GB03ActionInitialization class
#include "GB03ActionInitialization.hh"
#include "GB03PrimaryGeneratorAction.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03ActionInitialization::GB03ActionInitialization()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03ActionInitialization::~GB03ActionInitialization()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03ActionInitialization::Build() const
{
SetUserAction(new GB03PrimaryGeneratorAction);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03ActionInitialization::BuildForMaster() const
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,171 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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$
//
/// \file GB03BOptnSplitOrKillOnBoundary.cc
/// \brief Implementation of the GB03BOptnSplitOrKillOnBoundary class
#include "Randomize.hh"
#include "GB03BOptnSplitOrKillOnBoundary.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03BOptnSplitOrKillOnBoundary::GB03BOptnSplitOrKillOnBoundary(G4String name)
: G4VBiasingOperation(name),
fParticleChange(),
fParticleChangeForNothing()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03BOptnSplitOrKillOnBoundary::~GB03BOptnSplitOrKillOnBoundary()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4double GB03BOptnSplitOrKillOnBoundary::
DistanceToApplyOperation( const G4Track*,
G4double,
G4ForceCondition* condition)
{
// -- return "infinite" distance for interaction, but asks for GenerateBiasingFinalState
// -- being called anyway at the end of the step, by returning the "Forced" condition
// -- flag.
*condition = Forced;
return DBL_MAX;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VParticleChange*
GB03BOptnSplitOrKillOnBoundary::GenerateBiasingFinalState( const G4Track* track,
const G4Step* step )
{
// Check if step is limited by the geometry: as we attached the biasing operator
// to the absorber layer, this volume boundary is the one of the absorber.
// (check of current step # of track is inelegant, but is to fix a "feature"
// that a cloned track can wrongly be seen in the wrong volume, because of numerical
// precision issue. In this case it makes a tiny step, which should be disregarded).
if ( ( step->GetPostStepPoint()->GetStepStatus() == fGeomBoundary ) &&
( track->GetCurrentStepNumber() != 1 ) )
{
// -- Before deciding for killing or splitting, we make decision on applying
// -- the technique or not:
G4double trial = G4UniformRand(); // -- Note: G4UniformRand() is thread-safe
// -- engine for random numbers
if ( trial <= fApplyProbability )
{
// -- Get z component of track, to see if it moves forward or backward:
G4double pz = track->GetMomentum().z();
if ( pz > 0.0 )
{
// -------------------------------------------------
// Here, we are moving "forward". We do "splitting":
// -------------------------------------------------
// Get track weight:
G4double initialWeight = track->GetWeight();
// Define the tracks weight:
G4double weightOfTrack = initialWeight/fSplittingFactor;
// The "particle change" is the object to be used to communicate to
// the tracking the update of the primary state and/or creation
// secondary tracks.
fParticleChange.Initialize(*track);
// ask currect track weight to be changed to new value:
fParticleChange.ProposeParentWeight( weightOfTrack );
// Now make clones of this track (this is the actual splitting):
// we will then have the primary and N-1 clones of it, hence the
// splitting by a factor N:
fParticleChange.SetNumberOfSecondaries( fSplittingFactor-1 );
for ( G4int iSplit = 1 ; iSplit < fSplittingFactor ; iSplit++ )
{
G4Track* clone = new G4Track( *track );
clone->SetWeight( weightOfTrack );
fParticleChange.AddSecondary( clone );
}
fParticleChange.SetSecondaryWeightByProcess(true); // -- tricky
// -- take it as is ;) [though not necessary here, put for safety]
// this new final state is returned to the tracking;
return &fParticleChange;
}
else
{
// --------------------------------------------------------------
// Here, we are moving backward. We do killing, playing a russian
// roulette, killing 1/fSplittingFactor of the tracks in average:
// --------------------------------------------------------------
// Get track weight:
G4double initialWeight = track->GetWeight();
// The "particle change" is the object to be used to communicate to
// the tracking the update of the primary state and/or creation
// secondary tracks.
fParticleChange.Initialize(*track);
// Shoot a random number (in ]0,1[ segment):
G4double random = G4UniformRand();
// Decide to kill with 1/fSplittingFactor probability:
G4double killingProbability = 1.0/fSplittingFactor;
if ( random < killingProbability )
{
// We ask for the the track to be killed:
fParticleChange.ProposeTrackStatus(fStopAndKill);
}
else
{
// In this case, the track survives. We change its weight
// to conserve weight among killed and survival tracks:
fParticleChange.ProposeParentWeight( initialWeight*fSplittingFactor );
}
// this new final state is returned to the tracking;
return &fParticleChange;
}
} // -- end of : if ( trial > probaForApplying )
} // -- end of : if ( ( step->GetPostStepPoint()->GetStepStatus() ==
// fGeomBoundary ) ...
// Here, the step was not limited by the geometry (but certainly by a physics
// process). We do nothing: ie we make no change to the current track.
fParticleChangeForNothing.Initialize(*track);
return &fParticleChangeForNothing;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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$
//
/// \file GB03BOptrGeometryBasedBiasing.cc
/// \brief Implementation of the GB03BOptrGeometryBasedBiasing class
#include "GB03BOptrGeometryBasedBiasing.hh"
#include "G4Track.hh"
#include "G4SystemOfUnits.hh"
#include "G4GenericMessenger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03BOptrGeometryBasedBiasing::GB03BOptrGeometryBasedBiasing()
: G4VBiasingOperator("GB03BOptrGeometryBasedBiasing"),
fSplittingFactor(2),
fApplyProbability(1.0)
{
fSplitAndKillOperation = new GB03BOptnSplitOrKillOnBoundary("splitAndkill");
// -- Define messengers:
fSplittingFactorMessenger =
new G4GenericMessenger(this, "/GB03/biasing/","Biasing control" );
G4GenericMessenger::Command& splittingFactorCmd =
fSplittingFactorMessenger->DeclareProperty("setSplittingFactor", fSplittingFactor,
"Define the splitting factor." );
splittingFactorCmd.SetStates(G4State_Idle);
fApplyProbabilityMessenger =
new G4GenericMessenger(this, "/GB03/biasing/","Biasing control" );
G4GenericMessenger::Command& applyProbCmd =
fApplyProbabilityMessenger->DeclareProperty("setApplyProbability", fApplyProbability,
"Define the probability to apply the splitting/killing." );
applyProbCmd.SetStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03BOptrGeometryBasedBiasing::~GB03BOptrGeometryBasedBiasing()
{
delete fSplitAndKillOperation;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03BOptrGeometryBasedBiasing::StartRun()
{
fSplitAndKillOperation->SetSplittingFactor ( fSplittingFactor );
fSplitAndKillOperation->SetApplyProbability( fApplyProbability );
G4cout << GetName() << " : starting run with splitting factor = " << fSplittingFactor
<< ", and probability for applying the technique " << fApplyProbability
<< " . " << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VBiasingOperation*
GB03BOptrGeometryBasedBiasing::
ProposeNonPhysicsBiasingOperation( const G4Track* /* track */,
const G4BiasingProcessInterface* /* callingProcess */ )
{
// Here, we always return the split and kill biasing operation:
return fSplitAndKillOperation;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,413 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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$
//
/// \file GB03DetectorConstruction.cc
/// \brief Implementation of the GB03DetectorConstruction class
#include "GB03DetectorConstruction.hh"
#include "G4RunManager.hh"
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4PVReplica.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4SDManager.hh"
#include "G4MultiFunctionalDetector.hh"
#include "G4PSEnergyDeposit.hh"
#include "G4PSFlatSurfaceFlux.hh"
#include "G4SDNeutralFilter.hh"
#include "G4SDChargedFilter.hh"
#include "G4ios.hh"
#include "GB03DetectorMessenger.hh"
#include "GB03BOptrGeometryBasedBiasing.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
G4int GB03DetectorConstruction::fNumberOfLayers = 40;
G4ThreadLocal G4bool GB03DetectorConstruction::fConstructedSDandField = false;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03DetectorConstruction::GB03DetectorConstruction()
: G4VUserDetectorConstruction(),
fTotalThickness (2.0*m), fLayerThickness(0.),
fConstructed(false),
fWorldMaterial(0), fAbsorberMaterial(0), fGapMaterial(0),
fLayerSolid(0), fGapSolid(0),
fWorldLogical(0), fCalorLogical(0), fLayerLogical(0), fGapLogical(0),
fWorldPhysical(0), fCalorPhysical(0), fLayerPhysical(0), fGapPhysical(0),
fDetectorMessenger(0), fVerboseLevel(1)
{
fLayerThickness = fTotalThickness / fNumberOfLayers;
fCalName = "Calor";
fDetectorMessenger = new GB03DetectorMessenger(this);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03DetectorConstruction::~GB03DetectorConstruction()
{ delete fDetectorMessenger;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* GB03DetectorConstruction::Construct()
{
if(!fConstructed)
{
fConstructed = true;
DefineMaterials();
SetupGeometry();
}
if (GetVerboseLevel()>0)
{ PrintCalorParameters(); }
return fWorldPhysical;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::ConstructSDandField()
{
if(!fConstructedSDandField)
{
fConstructedSDandField = true;
SetupDetectors();
SetupBiasing();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::DefineMaterials()
{
G4String name, symbol; //a=mass of a mole;
G4double a, z, density; //z=mean number of protons;
G4int iz; //iz=number of protons in an isotope;
G4int n; // n=number of nucleons in an isotope;
G4int ncomponents, natoms;
G4double abundance, fractionmass;
G4double temperature, pressure;
//
// define Elements
//
a = 1.01*g/mole;
G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
a = 12.01*g/mole;
G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
a = 14.01*g/mole;
G4Element* N = new G4Element(name="Nitrogen",symbol="N" , z= 7., a);
a = 16.00*g/mole;
G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
//
// define an Element from isotopes, by relative abundance
//
G4Isotope* U5 = new G4Isotope(name="U235", iz=92, n=235, a=235.01*g/mole);
G4Isotope* U8 = new G4Isotope(name="U238", iz=92, n=238, a=238.03*g/mole);
G4Element* U = new G4Element(name="enriched Uranium",symbol="U",ncomponents=2);
U->AddIsotope(U5, abundance= 90.*perCent);
U->AddIsotope(U8, abundance= 10.*perCent);
//
// define simple materials
//
new G4Material(name="Aluminium", z=13., a=26.98*g/mole, density=2.700*g/cm3);
new G4Material(name="Silicon", z=14., a= 28.09*g/mole, density= 2.33*g/cm3);
new G4Material(name="Iron", z=26., a=55.85*g/mole, density=7.87*g/cm3);
new G4Material(name="ArgonGas",z=18., a= 39.95*g/mole, density=1.782*mg/cm3);
new G4Material(name="He", z=2., a=4.0*g/mole, density=0.1786e-03*g/cm3);
density = 1.390*g/cm3;
a = 39.95*g/mole;
new G4Material(name="liquidArgon", z=18., a, density);
density = 11.35*g/cm3;
a = 207.19*g/mole;
G4Material* Pb = new G4Material(name="Lead" , z=82., a, density);
//
// define a material from elements. case 1: chemical molecule
//
density = 1.000*g/cm3;
G4Material* H2O = new G4Material(name="Water", density, ncomponents=2);
H2O->AddElement(H, natoms=2);
H2O->AddElement(O, natoms=1);
density = 1.032*g/cm3;
G4Material* Sci = new G4Material(name="Scintillator", density, ncomponents=2);
Sci->AddElement(C, natoms=9);
Sci->AddElement(H, natoms=10);
//
// define a material from elements. case 2: mixture by fractional mass
//
density = 1.290*mg/cm3;
G4Material* Air = new G4Material(name="Air" , density, ncomponents=2);
Air->AddElement(N, fractionmass=0.7);
Air->AddElement(O, fractionmass=0.3);
//
// examples of vacuum
//
density = universe_mean_density;
pressure = 3.e-18*pascal;
temperature = 2.73*kelvin;
G4Material* Vacuum = new G4Material(name="Galactic", z=1., a=1.01*g/mole,
density,kStateGas,temperature,pressure);
if (GetVerboseLevel()>1) {
G4cout << *(G4Material::GetMaterialTable()) << G4endl;
}
//default materials of the calorimeter
fWorldMaterial = Vacuum;
fAbsorberMaterial = Pb;
fGapMaterial = Sci;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetupGeometry()
{
//
// World
//
G4VSolid* worldSolid = new G4Box("World",2.*m,2.*m,fTotalThickness*2.);
fWorldLogical = new G4LogicalVolume(worldSolid,fWorldMaterial,"World");
fWorldPhysical = new G4PVPlacement(0,G4ThreeVector(),fWorldLogical,"World",
0,false,0);
//
// Calorimeter
//
G4VSolid* calorSolid = new G4Box("Calor",0.5*m,0.5*m,fTotalThickness/2.);
fCalorLogical = new G4LogicalVolume(calorSolid,fAbsorberMaterial,fCalName);
fCalorPhysical = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),
fCalorLogical,fCalName,fWorldLogical,false,0);
//
// Layers --- as absorbers
//
fLayerSolid = new G4Box("Layer",0.5*m,0.5*m,fLayerThickness/2.);
fLayerLogical
= new G4LogicalVolume(fLayerSolid,fAbsorberMaterial,fCalName+"_LayerLog");
fLayerPhysical
= new G4PVReplica(fCalName+"_Layer",fLayerLogical,fCalorLogical,
kZAxis,fNumberOfLayers,fLayerThickness);
//
// Gap
//
fGapSolid = new G4Box("Gap",0.5*m,0.5*m,fLayerThickness/4.);
fGapLogical = new G4LogicalVolume(fGapSolid,fGapMaterial,fCalName+"_Gap");
fGapPhysical = new G4PVPlacement(0,G4ThreeVector(0.,0.,fLayerThickness/4.),
fGapLogical,fCalName+"_gap",fLayerLogical,false,0);
//
// Visualization attributes
//
fWorldLogical->SetVisAttributes(G4VisAttributes::Invisible);
G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0));
simpleBoxVisAtt->SetVisibility(true);
fCalorLogical->SetVisAttributes(simpleBoxVisAtt);
fLayerLogical->SetVisAttributes(simpleBoxVisAtt);
fGapLogical->SetVisAttributes(simpleBoxVisAtt);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetupDetectors()
{
G4SDManager::GetSDMpointer()->SetVerboseLevel(1);
G4String filterName;
G4SDNeutralFilter* neutralFilter
= new G4SDNeutralFilter(filterName="neutralFilter");
G4SDChargedFilter* chargedFilter
= new G4SDChargedFilter(filterName="chargedFilter");
for(G4int j=0;j<2;j++)
{
// Loop counter j = 0 : absorber
// = 1 : gap
G4String detName = fCalName;
if(j==0)
{ detName += "_abs"; }
else
{ detName += "_gap"; }
G4MultiFunctionalDetector* det = new G4MultiFunctionalDetector(detName);
// The second argument in each primitive means the "level" of geometrical
// hierarchy, the copy number of that level is used as the key of the
// G4THitsMap.
// For absorber (j = 0), the copy number of its own physical volume is used.
// For gap (j = 1), the copy number of its mother physical volume is used,
// since there is only one physical volume of gap is placed with respect
// to its mother.
G4VPrimitiveScorer* primitive;
primitive = new G4PSEnergyDeposit("eDep",j);
det->RegisterPrimitive(primitive);
primitive = new G4PSFlatSurfaceFlux("nNeutral",1,j);
primitive->SetFilter(neutralFilter);
det->RegisterPrimitive(primitive);
primitive = new G4PSFlatSurfaceFlux("nCharged",1,j);
primitive->SetFilter(chargedFilter);
det->RegisterPrimitive(primitive);
if(j==0)
{ SetSensitiveDetector(fLayerLogical, det); }
else
{ SetSensitiveDetector(fGapLogical, det);}
}
G4SDManager::GetSDMpointer()->SetVerboseLevel(0);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetupBiasing()
{
GB03BOptrGeometryBasedBiasing* biasingOperator = new GB03BOptrGeometryBasedBiasing();
biasingOperator->AttachTo(fLayerLogical);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::PrintCalorParameters() const
{
G4cout
<< "--------------------------------------------------------" << G4endl;
G4cout
<< " Absorber is made of " << fAbsorberMaterial->GetName() << G4endl
<< " Gap is made of " << fGapMaterial->GetName() << G4endl
<< "--------------------------------------------------------" << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetAbsorberMaterial(G4String materialChoice)
{
// search the material by its name
G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
if(pttoMaterial)
{
fAbsorberMaterial = pttoMaterial;
if(fConstructed)
{
fCalorLogical->SetMaterial(fAbsorberMaterial);
fLayerLogical->SetMaterial(fAbsorberMaterial);
}
G4RunManager::GetRunManager()->GeometryHasBeenModified();
if (GetVerboseLevel()>1) {
PrintCalorParameters();
}
}
else
{
G4cerr
<< materialChoice << " is not defined. - Command is ignored." << G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4String GB03DetectorConstruction::GetAbsorberMaterial() const
{ return fAbsorberMaterial->GetName(); }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetGapMaterial(G4String materialChoice)
{
// search the material by its name
G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
if(pttoMaterial)
{
fGapMaterial = pttoMaterial;
if(fConstructed)
{ fGapLogical->SetMaterial(fGapMaterial); }
G4RunManager::GetRunManager()->GeometryHasBeenModified();
if (GetVerboseLevel()>1) {
PrintCalorParameters();
}
}
else
{
G4cerr
<< materialChoice << " is not defined. - Command is ignored." << G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4String GB03DetectorConstruction::GetGapMaterial() const
{ return fGapMaterial->GetName(); }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorConstruction::SetNumberOfLayers(G4int nl)
{
fNumberOfLayers = nl;
fLayerThickness = fTotalThickness/fNumberOfLayers;
if(!fConstructed) return;
fLayerSolid->SetZHalfLength(fLayerThickness/2.);
fGapSolid->SetZHalfLength(fLayerThickness/4.);
fCalorLogical->RemoveDaughter(fLayerPhysical);
delete fLayerPhysical;
fLayerPhysical
= new G4PVReplica(fCalName+"_Layer",fLayerLogical,fCalorLogical,
kZAxis,fNumberOfLayers,fLayerThickness);
fGapPhysical->SetTranslation(G4ThreeVector(0.,0.,fLayerThickness/4.));
G4RunManager::GetRunManager()->GeometryHasBeenModified();
}
//....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. *
// ********************************************************************
//
// $Id$
//
/// \file GB03/src/GB03DetectorMessenger.cc
/// \brief Implementation of the GB03DetectorMessenger class
#include "GB03DetectorMessenger.hh"
#include "GB03DetectorConstruction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithABool.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "G4Material.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03DetectorMessenger::GB03DetectorMessenger(GB03DetectorConstruction* det)
: G4UImessenger(), fDetector(det)
{
fDirectory = new G4UIdirectory("/GB03/");
fDirectory->SetGuidance("UI commands of this example");
G4String matList;
const G4MaterialTable* matTbl = G4Material::GetMaterialTable();
for(size_t i=0;i<G4Material::GetNumberOfMaterials();i++)
{
matList += (*matTbl)[i]->GetName();
matList += " ";
}
fAbsMaterialCmd = new G4UIcmdWithAString("/GB03/setAbsMat",this);
fAbsMaterialCmd->SetGuidance("Select Material of the Absorber.");
fAbsMaterialCmd->SetParameterName("choice",false);
fAbsMaterialCmd->AvailableForStates(G4State_Idle);
fAbsMaterialCmd->SetCandidates(matList);
fGapMaterialCmd = new G4UIcmdWithAString("/GB03/setGapMat",this);
fGapMaterialCmd->SetGuidance("Select Material of the Gap.");
fGapMaterialCmd->SetParameterName("choice",false);
fGapMaterialCmd->AvailableForStates(G4State_Idle);
fGapMaterialCmd->SetCandidates(matList);
fNumLayerCmd = new G4UIcmdWithAnInteger("/GB03/numberOfLayers",this);
fNumLayerCmd->SetGuidance("Set number of layers.");
fNumLayerCmd->SetParameterName("nl",false);
fNumLayerCmd->AvailableForStates(G4State_Idle);
fNumLayerCmd->SetRange("nl>0");
fVerboseCmd = new G4UIcmdWithAnInteger("/GB03/verbose",this);
fVerboseCmd->SetGuidance("Set verbosity level");
fVerboseCmd->SetParameterName("verbose",false);
fVerboseCmd->AvailableForStates(G4State_Idle);
fVerboseCmd->SetRange("verbose>=0");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03DetectorMessenger::~GB03DetectorMessenger()
{
delete fAbsMaterialCmd;
delete fGapMaterialCmd;
delete fNumLayerCmd;
delete fVerboseCmd;
delete fDirectory;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
{
if( command == fAbsMaterialCmd ) {
fDetector->SetAbsorberMaterial(newValue);
} else if( command == fGapMaterialCmd ){
fDetector->SetGapMaterial(newValue);
} else if( command == fNumLayerCmd ) {
fDetector->SetNumberOfLayers(fNumLayerCmd->GetNewIntValue(newValue));
} else if( command == fVerboseCmd ) {
fDetector->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValue));
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4String GB03DetectorMessenger::GetCurrentValue(G4UIcommand * command)
{
G4String ans;
if( command == fAbsMaterialCmd ){
ans=fDetector->GetAbsorberMaterial();
} else if( command == fGapMaterialCmd ){
ans=fDetector->GetGapMaterial();
} else if( command == fNumLayerCmd ) {
ans=fNumLayerCmd->ConvertToString(GB03DetectorConstruction::GetNumberOfLayers());
} else if( command == fVerboseCmd ) {
ans=fVerboseCmd->ConvertToString(fDetector->GetVerboseLevel());
}
return ans;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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$
//
/// \file GB03PrimaryGeneratorAction.cc
/// \brief Implementation of the GB03PrimaryGeneratorAction class
#include "GB03PrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "G4SystemOfUnits.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03PrimaryGeneratorAction::GB03PrimaryGeneratorAction()
: G4VUserPrimaryGeneratorAction()
{
G4int n_particle = 1;
fParticleGun = new G4ParticleGun(n_particle);
// default particle kinematic
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4ParticleDefinition* particle
= particleTable->FindParticle(particleName="neutron");
fParticleGun->SetParticleDefinition(particle);
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.));
fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,-3.5*m));
fParticleGun->SetParticleEnergy(100.*MeV);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB03PrimaryGeneratorAction::~GB03PrimaryGeneratorAction()
{
delete fParticleGun;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB03PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
fParticleGun->GeneratePrimaryVertex(anEvent);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+56
View File
@@ -0,0 +1,56 @@
# Use this open statement to create an OpenGL view:
/vis/open OGL 600x600-0+0
#
# Disable auto refresh and quieten vis messages whilst scene and
# trajectories are established:
/vis/viewer/set/autoRefresh false
/vis/verbose errors
#
# Draw geometry:
/vis/drawVolume worlds
#
# Specify view angle:
/vis/viewer/set/viewpointThetaPhi 105 165 deg
#
# Specify zoom value:
###/vis/viewer/zoom 1.5
#
# Specify style (surface or wireframe):
#/vis/viewer/set/style wireframe
#
# Draw coordinate axes:
#/vis/scene/add/axes 0 0 0 1 m
#
# Draw smooth trajectories at end of event, showing trajectory points
# as markers 2 pixels wide:
/vis/scene/add/trajectories smooth
/vis/modeling/trajectories/create/drawByCharge
/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true
/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2
# (if too many tracks cause core dump => /tracking/storeTrajectory 0)
#
# Draw hits at end of event:
#/vis/scene/add/hits
#
# To draw only gammas:
#/vis/filtering/trajectories/create/particleFilter
#/vis/filtering/trajectories/particleFilter-0/add gamma
#
# To invert the above, drawing all particles except gammas,
# keep the above two lines but also add:
#/vis/filtering/trajectories/particleFilter-0/invert true
#
# Many other options are available with /vis/modeling and /vis/filtering.
# For example, to select colour by particle ID:
#/vis/modeling/trajectories/create/drawByParticleID
#/vis/modeling/trajectories/drawByParticleID-0/set e- blue
#
# To superimpose all of the events from a given run:
/vis/scene/endOfEventAction accumulate
#
# Re-establish auto refreshing and verbosity:
/vis/viewer/set/autoRefresh true
/vis/verbose warnings
#
# For file-based drivers, use this to create an empty detector view:
#/vis/viewer/flush
+42
View File
@@ -0,0 +1,42 @@
//$Id$
///\file "biasing/GB04/.README"
///\brief Example GB04 README page
/*! \page ExampleGB04 Example GB04
\section ExampleGB04_s1 bremsstrahlung splitting
This example illustrates the use of the generic biasing classes to create
a bremsstrahlung splitting technique.
Note that the EM package also offers a bremsstrahlung splitting, that is
built-in to the package.
- GB04BOptnBremSplitting
The bremsstrahlung splitting is implemented in the GB04BOptnBremSplitting
class (BOptn = Biasing Operation), which acts on the final state creation
of the bremsstrahlung process.
- GB04BOptrBremSplitting
Decisions when to apply the GB04BOptnBremSplitting biasing operation are
taken by the GB04BOptrBremSplitting (BOptr = Biasing Operator) operator. This
one also configures the biasing operation, setting it the splitting factor
and its behavior regarding electrons to be biased : only the primary one, or
all, and only the first bremsstrahlung operation, or all. These are
controled by this specific example commands:
\verbatim
/GB04/biasing/setSplittingFactor [N splitting]
/GB04/biasing/biasPrimaryOnly [true/false]
/GB04/biasing/biasOnlyOnce [true/false]
\endverbatim
The geometry is minimal : a single volume to which an instance of
GB04BOptrBremSplitting is attached to.
The wrapping of physics processes by G4BiasingProcessInterface processes
is simply handled by the G4GenericBiasingPhysics physics constructor, as shown
in the main program.
*/
@@ -0,0 +1,65 @@
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(GB04project)
#----------------------------------------------------------------------------
# Find Geant4 package, activating all available UI and Vis drivers by default
# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
# to build a batch mode only executable
#
option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON)
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
endif()
#----------------------------------------------------------------------------
# Setup Geant4 include directories and compile definitions
#
include(${Geant4_USE_FILE})
#----------------------------------------------------------------------------
# Locate sources and headers for this project
#
include_directories(${PROJECT_SOURCE_DIR}/include
${Geant4_INCLUDE_DIR})
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
#----------------------------------------------------------------------------
# Add the executable, and link it to the Geant4 libraries
#
add_executable(exampleGB04 exampleGB04.cc ${sources} ${headers})
target_link_libraries(exampleGB04 ${Geant4_LIBRARIES} )
#----------------------------------------------------------------------------
# Copy all scripts to the build directory, i.e. the directory in which we build
# GB04project. This is so that we can run the executable directly
# because it relies on these scripts being in the current working directory.
#
set(GB04project_SCRIPTS
exampleGB04.in
exampleGB04.out
)
foreach(_script ${GB04project_SCRIPTS})
configure_file(
${PROJECT_SOURCE_DIR}/${_script}
${PROJECT_BINARY_DIR}/${_script}
COPYONLY
)
endforeach()
#----------------------------------------------------------------------------
# Add program to the project targets
# (this avoids the need of typing the program name after make)
#
add_custom_target(GB04project DEPENDS exampleGB04)
#----------------------------------------------------------------------------
# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX
#
install(TARGETS exampleGB04 DESTINATION bin)
@@ -0,0 +1,17 @@
# $Id: GNUmakefile 66241 2012-12-13 18:34:42Z gunter $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
name := exampleGB04
G4TARGET := $(name)
G4EXLIB := true
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/binmake.gmk
+32
View File
@@ -0,0 +1,32 @@
$Id: History 70477 2013-05-31 08:35:08Z ahoward $
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
Category History file
---------------------
This file should be used by G4 developers and category coordinators
to briefly summarize all major modifications introduced in the code
and keep track of all category-tags.
It DOES NOT substitute the CVS log-message one should put at every
committal in the CVS repository !
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Nov 20, 2014, G. Cosmo (GB04-V10-00-03)
- Again included correction in GNUmakefile introduced in tag -01 which
was lost in previous tag...
Nov 14, 2014, I. Hrivnacova (GB04-V10-00-02)
- Added files descriptions
- Coding guidelines (data member names, separators)
Nov 13, 2014, G. Cosmo (GB04-V10-00-01)
- Corrected GNUmakefile to point to correct main() translation unit.
Nov 12, 2014, M. Verderi (GB04-V10-00-00)
- Created.
+36
View File
@@ -0,0 +1,36 @@
Example GB04 : bremsstrahlung splitting
---------------------------------------
This example illustrates the use of the generic biasing classes to create
a bremsstrahlung splitting technique.
Note that the EM package also offers a bremsstrahlung splitting, that is
built-in to the package.
GB04BOptnBremSplitting
The bremsstrahlung splitting is implemented in the GB04BOptnBremSplitting
class (BOptn = Biasing Operation), which acts on the final state creation
of the bremsstrahlung process.
GB04BOptrBremSplitting
Decisions when to apply the GB04BOptnBremSplitting biasing operation are
taken by the GB04BOptrBremSplitting (BOptr = Biasing Operator) operator. This
one also configures the biasing operation, setting it the splitting factor
and its behavior regarding electrons to be biased : only the primary one, or
all, and only the first bremsstrahlung operation, or all. These are
controled by this specific example commands:
/GB04/biasing/setSplittingFactor [N splitting]
/GB04/biasing/biasPrimaryOnly [true/false]
/GB04/biasing/biasOnlyOnce [true/false]
The geometry is minimal : a single volume to which an instance of
GB04BOptrBremSplitting is attached to.
The wrapping of physics processes by G4BiasingProcessInterface processes
is simply handled by the G4GenericBiasingPhysics physics constructor, as shown
in the main program.
@@ -0,0 +1,190 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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$
//
/// \file exampleGB04.cc
/// \brief Main program of the GB04 example
//
#ifdef G4MULTITHREADED
#include "G4MTRunManager.hh"
#else
#include "G4RunManager.hh"
#endif
#include "GB04ActionInitialization.hh"
#include "G4UImanager.hh"
#include "GB04DetectorConstruction.hh"
#include "GB04PrimaryGeneratorAction.hh"
#include "FTFP_BERT.hh"
#include "G4GenericBiasingPhysics.hh"
#ifdef G4VIS_USE
#include "G4VisExecutive.hh"
#endif
#ifdef G4UI_USE
#include "G4UIExecutive.hh"
#endif
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace {
void PrintUsage() {
G4cerr << " Usage: " << G4endl;
G4cerr << " ./exampleGB04 [-m macro ] "
<< " [-b biasing {'on','off'}]"
<< "\n or\n ./exampleGB04 [macro.mac]"
<< G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
int main(int argc,char** argv)
{
// Evaluate arguments
//
if ( argc > 5 ) {
PrintUsage();
return 1;
}
G4String macro("");
G4String onOffBiasing("");
if ( argc == 2 ) macro = argv[1];
else
{
for ( G4int i=1; i<argc; i=i+2 )
{
if ( G4String(argv[i]) == "-m" ) macro = argv[i+1];
else if ( G4String(argv[i]) == "-b" ) onOffBiasing = argv[i+1];
else
{
PrintUsage();
return 1;
}
}
}
if ( onOffBiasing == "" ) onOffBiasing = "on";
// -- Construct the run manager : MT or sequential one
#ifdef G4MULTITHREADED
G4MTRunManager * runManager = new G4MTRunManager;
G4cout << " ********** Run Manager constructed in MT mode ************ "
<< G4endl;
// -- Choose 4 threads:
runManager->SetNumberOfThreads(4);
#else
G4RunManager * runManager = new G4RunManager;
G4cout << " ********** Run Manager constructed in sequential mode ************ "
<< G4endl;
#endif
// -- Set mandatory initialization classes
GB04DetectorConstruction* detector = new GB04DetectorConstruction();
runManager->SetUserInitialization(detector);
// -- Select a physics list
FTFP_BERT* physicsList = new FTFP_BERT;
// -- And augment it with biasing facilities:
G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics();
if ( onOffBiasing == "on" )
{
// -- Create list of physics processes to be biased: only brem. in this case:
std::vector< G4String > processToBias;
processToBias.push_back("eBrem");
// -- Pass the list to the G4GenericBiasingPhysics, which will wrap the eBrem
// -- process of e- and e+ to activate the biasing of it:
biasingPhysics->PhysicsBias("e-", processToBias);
biasingPhysics->PhysicsBias("e+", processToBias);
physicsList->RegisterPhysics(biasingPhysics);
G4cout << " ********************************************************* "
<< G4endl;
G4cout << " ********** processes are wrapped for biasing ************ "
<< G4endl;
G4cout << " ********************************************************* "
<< G4endl;
}
else
{
G4cout << " ************************************************* " << G4endl;
G4cout << " ********** processes are not wrapped ************ " << G4endl;
G4cout << " ************************************************* " << G4endl;
}
runManager->SetUserInitialization(physicsList);
// -- Action initialization:
runManager->SetUserInitialization(new GB04ActionInitialization);
// Initialize G4 kernel
runManager->Initialize();
#ifdef G4VIS_USE
// Initialize visualization
G4VisManager* visManager = new G4VisExecutive;
// G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
visManager->Initialize();
#endif
// Get the pointer to the User Interface manager
G4UImanager* UImanager = G4UImanager::GetUIpointer();
if ( macro != "" ) // batch mode
{
G4String command = "/control/execute ";
UImanager->ApplyCommand(command+macro);
}
else
{ // interactive mode : define UI session
#ifdef G4UI_USE
G4UIExecutive* ui = new G4UIExecutive(argc, argv);
#ifdef G4VIS_USE
// UImanager->ApplyCommand("/control/execute vis.mac");
#endif
// if (ui->IsGUI())
// UImanager->ApplyCommand("/control/execute gui.mac");
ui->SessionStart();
delete ui;
#endif
}
#ifdef G4VIS_USE
delete visManager;
#endif
delete runManager;
return 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
@@ -0,0 +1,14 @@
#
/run/verbose 2
/tracking/verbose 1
#
/GB04/biasing/setSplittingFactor 1
/run/beamOn 10
#
/GB04/biasing/setSplittingFactor 10
/run/beamOn 10
#
/GB04/biasing/biasPrimaryOnly false
/GB04/biasing/biasOnlyOnce false
/run/beamOn 10
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,51 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: GB04ActionInitialization.hh 68058 2013-03-13 14:47:43Z gcosmo $
//
/// \file GB04ActionInitialization.hh
/// \brief Definition of the GB04ActionInitialization class
#ifndef GB04ActionInitialization_hh
#define GB04ActionInitialization_hh 1
#include "G4VUserActionInitialization.hh"
/// Action initialization class.
///
class GB04ActionInitialization : public G4VUserActionInitialization
{
public:
GB04ActionInitialization();
virtual ~GB04ActionInitialization();
virtual void BuildForMaster() const;
virtual void Build() const;
};
#endif
@@ -0,0 +1,97 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
/// \file GB04BOptnBremSplitting.hh
/// \brief Definition of the GB04BOptnBremSplitting class
//
//---------------------------------------------------------------
//
// GB04BOptnBremSplitting
//
// Class Description:
// A G4VBiasingOperation to change a process cross-section.
//
//
//---------------------------------------------------------------
// Initial version Nov. 2014 M. Verderi
#ifndef GB04BOptnBremSplitting_hh
#define GB04BOptnBremSplitting_hh 1
#include "G4VBiasingOperation.hh"
#include "G4ParticleChange.hh"
class GB04BOptnBremSplitting : public G4VBiasingOperation {
public:
// -- Constructor :
GB04BOptnBremSplitting(G4String name);
// -- destructor:
virtual ~GB04BOptnBremSplitting();
public:
// ----------------------------------------------
// -- Methods from G4VBiasingOperation interface:
// ----------------------------------------------
// -- Unused:
virtual const G4VBiasingInteractionLaw*
ProvideOccurenceBiasingInteractionLaw( const G4BiasingProcessInterface*,
G4ForceCondition& )
{ return 0; }
// --Used:
virtual G4VParticleChange* ApplyFinalStateBiasing( const G4BiasingProcessInterface*,
const G4Track*,
const G4Step*,
G4bool& );
// -- Unsued:
virtual G4double DistanceToApplyOperation( const G4Track*,
G4double,
G4ForceCondition*)
{return DBL_MAX;}
virtual G4VParticleChange* GenerateBiasingFinalState( const G4Track*,
const G4Step* )
{return 0;}
public:
// ----------------------------------------------
// -- Additional methods, specific to this class:
// ----------------------------------------------
// -- Splitting factor:
void SetSplittingFactor(G4int splittingFactor)
{ fSplittingFactor = splittingFactor; }
G4int GetSplittingFactor() const { return fSplittingFactor; }
private:
G4int fSplittingFactor;
G4ParticleChange fParticleChange;
};
#endif
@@ -0,0 +1,89 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
///
/// \file GB04BOptrBremSplitting.hh
/// \brief Definition of the GB04BOptrBremSplitting class
#ifndef GB04BOptrBremSplitting_hh
#define GB04BOptrBremSplitting_hh 1
#include "G4VBiasingOperator.hh"
class GB04BOptnBremSplitting;
class G4GenericMessenger;
class GB04BOptrBremSplitting : public G4VBiasingOperator {
public:
GB04BOptrBremSplitting();
virtual ~GB04BOptrBremSplitting() {}
public:
// -------------------------
// Optional from base class:
// -------------------------
// -- Call at run start:
virtual void StartRun();
// -- Call at each track starting:
virtual void StartTracking( const G4Track* track );
private:
// -----------------------------
// -- Mandatory from base class:
// -----------------------------
// -- Unused:
virtual G4VBiasingOperation*
ProposeNonPhysicsBiasingOperation(const G4Track* /* track */,
const G4BiasingProcessInterface* /* callingProcess */)
{ return 0; }
virtual G4VBiasingOperation*
ProposeOccurenceBiasingOperation (const G4Track* /* track */,
const G4BiasingProcessInterface* /* callingProcess */)
{ return 0; }
// -- Used:
virtual G4VBiasingOperation*
ProposeFinalStateBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* callingProcess);
private:
// -- Avoid compiler complaining for (wrong) method shadowing,
// -- this is because other virtual method with same name exists.
using G4VBiasingOperator::OperationApplied;
private:
GB04BOptnBremSplitting* fBremSplittingOperation;
G4int fSplittingFactor;
G4bool fBiasPrimaryOnly;
G4bool fBiasOnlyOnce;
G4int nInteractions;
// Messengers to change the
G4GenericMessenger* fSplittingFactorMessenger;
G4GenericMessenger* fBiasPrimaryOnlyMessenger;
G4GenericMessenger* fBiasOnlyOnceMessenger;
};
#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$
//
/// \file GB04DetectorConstruction.hh
/// \brief Definition of the GB04DetectorConstruction class
#ifndef GB04DetectorConstruction_h
#define GB04DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"
class G4Box;
class G4LogicalVolume;
class G4VPhysicalVolume;
class G4Material;
class G4UniformMagField;
class DetectorMessenger;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class GB04DetectorConstruction : public G4VUserDetectorConstruction
{
public:
GB04DetectorConstruction();
~GB04DetectorConstruction();
public:
virtual G4VPhysicalVolume* Construct();
virtual void ConstructSDandField();
};
#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$
//
/// \file GB04PrimaryGeneratorAction.hh
/// \brief Definition of the GB04PrimaryGeneratorAction class
#ifndef GB04PrimaryGeneratorAction_h
#define GB04PrimaryGeneratorAction_h 1
#include "G4VUserPrimaryGeneratorAction.hh"
#include "globals.hh"
class G4ParticleGun;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class GB04PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
{
public:
GB04PrimaryGeneratorAction();
virtual ~GB04PrimaryGeneratorAction();
virtual void GeneratePrimaries(G4Event*);
private:
G4ParticleGun* fParticleGun; //pointer a to G4 class
};
//....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: GB04ActionInitialization.cc 68058 2013-03-13 14:47:43Z gcosmo $
//
/// \file GB04ActionInitialization.cc
/// \brief Implementation of the GB04ActionInitialization class
#include "GB04ActionInitialization.hh"
#include "GB04PrimaryGeneratorAction.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04ActionInitialization::GB04ActionInitialization()
: G4VUserActionInitialization()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04ActionInitialization::~GB04ActionInitialization()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04ActionInitialization::BuildForMaster() const
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04ActionInitialization::Build() const
{
SetUserAction(new GB04PrimaryGeneratorAction);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,141 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on 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$
//
/// \file GB04BOptnBremSplitting.cc
/// \brief Implementation of the GB04BOptnBremSplitting class
#include "GB04BOptnBremSplitting.hh"
#include "G4BiasingProcessInterface.hh"
#include "G4ParticleChangeForLoss.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04BOptnBremSplitting::GB04BOptnBremSplitting(G4String name)
: G4VBiasingOperation(name),
fSplittingFactor(1),
fParticleChange()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04BOptnBremSplitting::~GB04BOptnBremSplitting()
{
}
G4VParticleChange*
GB04BOptnBremSplitting::
ApplyFinalStateBiasing( const G4BiasingProcessInterface* callingProcess,
const G4Track* track,
const G4Step* step,
G4bool& )
{
// -- Collect brem. process (wrapped process) final state:
G4VParticleChange* processFinalState =
callingProcess->GetWrappedProcess()->PostStepDoIt(*track, *step);
// -- if no splitting requested, let the brem. process to return directly its
// -- generated final state:
if ( fSplittingFactor == 1 ) return processFinalState;
// -- a special case here: the brem. process corrects for cross-section change
// -- over the step due to energy loss by sometimes "abandoning" the interaction,
// -- returning an unchanged incoming electron/positron.
// -- We respect this correction, and if no secondary is produced, its means this
// -- case is happening:
if ( processFinalState->GetNumberOfSecondaries() == 0 ) return processFinalState;
// -- Now start the biasing:
// -- - the electron state will be taken as the first one produced by the brem.
// -- process, hence the one stored in above processFinalState particle change.
// -- This state will be stored in our fParticleChange object.
// -- - the photon accompagnying the electron will be stored also this way.
// -- - we will then do fSplittingFactor - 1 call to the brem. process to collect
// -- fSplittingFactor - 1 additionnal gammas. All these will be stored in our
// -- fParticleChange object.
// -- We called the brem. process above. Its concrete particle change is indeed
// -- a "G4ParticleChangeForLoss" object. We cast this particle change to access
// -- methods of the concrete G4ParticleChangeForLoss type:
G4ParticleChangeForLoss* actualParticleChange =
( G4ParticleChangeForLoss* ) processFinalState ;
fParticleChange.Initialize(*track);
// -- Store electron final state:
fParticleChange.
ProposeTrackStatus ( actualParticleChange->GetTrackStatus() );
fParticleChange.
ProposeEnergy ( actualParticleChange->GetProposedKineticEnergy() );
fParticleChange.
ProposeMomentumDirection( actualParticleChange->GetProposedMomentumDirection() );
// -- Now deal with the gamma's:
// -- their common weight:
G4double gammaWeight = track->GetWeight() / fSplittingFactor;
// -- inform we will have fSplittingFactor gamma's:
fParticleChange.SetNumberOfSecondaries( fSplittingFactor );
// -- Store first gamma:
G4Track* gammaTrack = actualParticleChange->GetSecondary(0);
gammaTrack->SetWeight( gammaWeight );
fParticleChange.AddSecondary( gammaTrack );
// -- and clean-up the brem. process particle change:
actualParticleChange->Clear();
// -- now start the fSplittingFactor-1 calls to the brem. process to store each
// -- related gamma:
G4int nCalls = 1;
while ( nCalls < fSplittingFactor )
{
// ( note: we don't need to cast to actual type here, as methods for accessing
// secondary particles are from base class G4VParticleChange )
processFinalState = callingProcess->GetWrappedProcess()->PostStepDoIt(*track, *step);
if ( processFinalState->GetNumberOfSecondaries() == 1 )
{
gammaTrack = processFinalState->GetSecondary(0);
gammaTrack->SetWeight( gammaWeight );
fParticleChange.AddSecondary( gammaTrack );
nCalls++;
}
// -- very rare special case: we ignore for now.
else if ( processFinalState->GetNumberOfSecondaries() > 1 )
{
for ( G4int i = 0 ; i < processFinalState->GetNumberOfSecondaries() ; i++)
delete processFinalState->GetSecondary(i);
}
processFinalState->Clear();
}
// -- we are done:
return &fParticleChange;
}
//....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$
//
/// \file GB04BOptrBremSplitting.cc
/// \brief Implementation of the GB04BOptrBremSplitting class
#include "GB04BOptrBremSplitting.hh"
#include "GB04BOptnBremSplitting.hh"
#include "G4BiasingProcessInterface.hh"
#include "G4GenericMessenger.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04BOptrBremSplitting::GB04BOptrBremSplitting()
: G4VBiasingOperator("BremSplittingOperator"),
fSplittingFactor(1),
fBiasPrimaryOnly(true),
fBiasOnlyOnce(true)
{
fBremSplittingOperation = new GB04BOptnBremSplitting("BremSplittingOperation");
// -- Define messengers:
// -- Splitting factor:
fSplittingFactorMessenger =
new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" );
G4GenericMessenger::Command& splittingFactorCmd =
fSplittingFactorMessenger->DeclareProperty("setSplittingFactor", fSplittingFactor,
"Define the brem. splitting factor." );
splittingFactorCmd.SetStates(G4State_Idle);
// -- Bias ony primary particle:
fBiasPrimaryOnlyMessenger =
new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" );
G4GenericMessenger::Command& biasPrimaryCmd =
fBiasPrimaryOnlyMessenger->DeclareProperty("biasPrimaryOnly", fBiasPrimaryOnly,
"Chose if brem. splitting applies to primary particles only." );
biasPrimaryCmd.SetStates(G4State_Idle);
// -- Bias ony primary particle:
fBiasOnlyOnceMessenger =
new G4GenericMessenger(this, "/GB04/biasing/","Biasing control" );
G4GenericMessenger::Command& biasOnlyOnceCmd =
fBiasPrimaryOnlyMessenger->DeclareProperty("biasOnlyOnce", fBiasOnlyOnce,
"Chose if apply the brem. splitting only once for the track." );
biasOnlyOnceCmd.SetStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04BOptrBremSplitting::StartRun()
{
fBremSplittingOperation->SetSplittingFactor ( fSplittingFactor );
G4cout << GetName() << " : starting run with brem. splitting factor = "
<< fSplittingFactor;
if ( fBiasPrimaryOnly ) G4cout << ", biasing only primaries ";
else G4cout << ", biasing primary and secondary tracks ";
if ( fBiasOnlyOnce ) G4cout << ", biasing only once per track ";
else G4cout << ", biasing several times per track ";
G4cout << " . " << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04BOptrBremSplitting::StartTracking( const G4Track* /* track */ )
{
// -- reset the number of times the brem. splitting was applied:
nInteractions = 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VBiasingOperation*
GB04BOptrBremSplitting::
ProposeFinalStateBiasingOperation(const G4Track* track,
const G4BiasingProcessInterface* /* callingProcess */)
{
// -- Check if biasing of primary particle only is requested. If so, and
// -- if particle is not a primary one, don't ask for biasing:
if ( fBiasPrimaryOnly && ( track->GetParentID() !=0 ) ) return 0;
// -- Check if brem. splitting should be applied only once to the track,
// -- and if so, and if brem. splitting already occured, don't ask for biasing:
if ( fBiasOnlyOnce && ( nInteractions > 0 ) ) return 0;
// -- Count the number of times the brem. splitting is applied:
nInteractions++;
// -- Return the brem. splitting operation:
return fBremSplittingOperation;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,123 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
//
/// \file GB04DetectorConstruction.cc
/// \brief Implementation of the GB04DetectorConstruction class
#include "GB04DetectorConstruction.hh"
#include "G4SystemOfUnits.hh"
#include "G4Material.hh"
#include "G4NistManager.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4LogicalVolumeStore.hh"
#include "G4PVPlacement.hh"
#include "G4UniformMagField.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4NistManager.hh"
#include "GB04BOptrBremSplitting.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04DetectorConstruction::GB04DetectorConstruction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04DetectorConstruction::~GB04DetectorConstruction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4VPhysicalVolume* GB04DetectorConstruction::Construct()
{
G4Material* worldMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic");
G4Material* defaultMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_Al");
G4VSolid* solidWorld = new G4Box("World", 10*m, 10*m, 10*m );
G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, //its solid
worldMaterial, //its material
"World"); //its name
G4PVPlacement* physiWorld = new G4PVPlacement(0, //no rotation
G4ThreeVector(), //at (0,0,0)
logicWorld, //its logical volume
"World", //its name
0, //its mother volume
false, //no boolean operation
0); //copy number
// -----------------------------------
// -- volume where biasing is applied:
// -----------------------------------
G4double halfZ = 5*mm;
G4VSolid* solidTest = new G4Box("test.solid", 1*m, 1*m, halfZ );
G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, //its solid
defaultMaterial, //its material
"test.logical"); //its name
new G4PVPlacement(0, // no rotation
G4ThreeVector(0,0, halfZ), // volume entrance at (0,0,0)
logicTest, // its logical volume
"test.phys", // its name
logicWorld, // its mother volume
false, // no boolean operation
0); // copy number
return physiWorld;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04DetectorConstruction::ConstructSDandField()
{
// -- Fetch volume for biasing:
G4LogicalVolume* logicTest =
G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical");
// ----------------------------------------------
// -- operator creation and attachment to volume:
// ----------------------------------------------
GB04BOptrBremSplitting* bremSplittingOperator = new GB04BOptrBremSplitting();
bremSplittingOperator->AttachTo(logicTest);
G4cout << " Attaching biasing operator " << bremSplittingOperator->GetName()
<< " to logical volume " << logicTest->GetName()
<< G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -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$
//
/// \file GB04PrimaryGeneratorAction.cc
/// \brief Implementation of the GB04PrimaryGeneratorAction class
#include "GB04PrimaryGeneratorAction.hh"
#include "G4SystemOfUnits.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "Randomize.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
GB04PrimaryGeneratorAction::GB04PrimaryGeneratorAction()
: G4VUserPrimaryGeneratorAction(),
fParticleGun(0)
{
G4int n_particle = 1;
fParticleGun = new G4ParticleGun(n_particle);
// default particle kinematic
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4ParticleDefinition* particle = particleTable->FindParticle(particleName="e-");
fParticleGun->SetParticleDefinition(particle);
fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.));
fParticleGun->SetParticleEnergy(100.*MeV);
fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,-100*cm));
}
GB04PrimaryGeneratorAction::~GB04PrimaryGeneratorAction()
{
delete fParticleGun;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void GB04PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
fParticleGun->GeneratePrimaryVertex(anEvent);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+2 -2
View File
@@ -1,4 +1,4 @@
# $Id: GNUmakefile 77475 2013-11-25 09:38:51Z gcosmo $
# $Id: GNUmakefile 86517 2014-11-13 09:13:55Z gcosmo $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 08/04/02.
# --------------------------------------------------------------
@@ -9,7 +9,7 @@ endif
include $(G4INSTALL)/config/architecture.gmk
SUBDIRS = B01 B02 B03 GB01 GB02 ReverseMC01
SUBDIRS = B01 B02 B03 GB01 GB02 GB03 GB04 ReverseMC01
.PHONY : all clean clean_libs
+13 -1
View File
@@ -1,4 +1,4 @@
$Id: History 78124 2013-12-03 17:40:38Z gcosmo $
$Id: History 87259 2014-11-28 08:09:17Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -17,6 +17,18 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
Nov 27, 2014 I.Hrivnacova - exbiasing-V10-00-03
- Fixed top README, .README
Nov 12, 2014 M. Verderi - exbiasing-V10-00-02
- Creation of GB04
Nov 08, 2014 I.Hrivnacova - exbiasing-V10-00-01
- Updated README files for adding GB03
Nov 07, 2014 M. Verderi - exbiasing-V10-00-00
- Creation of GB03
Dec 03, 2013 I.Hrivnacova - exbiasing-V09-06-06
- Fixed files description (for Doxygen)
+16 -3
View File
@@ -86,12 +86,12 @@ of biasing. Complementary approach to the modular physics lists of B01 and B02
___________________________________________________________________________
Generic biasing examples GB01, GB02
------------------------------------
Generic biasing examples GB01, GB02, GB03, GB04
-----------------------------------------------
These examples illustrate the usage of a biasing scheme implemented since
version Geant4 10.0.
The scheme is meant to be extensible, not limited to these two examples.
The scheme is meant to be extensible, not limited to these four examples.
Example GB01:
=============
@@ -105,6 +105,19 @@ Example GB02:
Illustrates a force collision scheme similar to the MCNP one.
Example GB03:
=============
Illustrates geometry based biasing.
Example GB04:
=============
Illustrates a bremsstrahlung splitting.
___________________________________________________________________________
@@ -0,0 +1,404 @@
############################################
!!! WARNING - FPE detection is activated !!!
############################################
*************************************************************
Geant4 version Name: geant4-10-01-ref-00 (5-December-2014)
Copyright : Geant4 Collaboration
Reference : NIM A 506 (2003), 250-303
WWW : http://cern.ch/geant4
*************************************************************
Visualization Manager instantiating with verbosity "warnings (3)"...
Visualization Manager initialising...
Registering graphics systems...
You have successfully registered the following graphics systems.
Current available graphics systems are:
ASCIITree (ATree)
DAWNFILE (DAWNFILE)
G4HepRep (HepRepXML)
G4HepRepFile (HepRepFile)
OpenGLImmediateX (OGLIX)
OpenGLImmediateXm (OGLI, OGLIXm)
OpenGLStoredX (OGLSX)
OpenGLStoredXm (OGL, OGLS, OGLSXm)
RayTracer (RayTracer)
RayTracerX (RayTracerX)
VRML1FILE (VRML1FILE)
VRML2FILE (VRML2FILE)
gMocrenFile (gMocrenFile)
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
You have successfully registered the following user vis actions.
Run Duration User Vis Actions: none
End of Event User Vis Actions: none
End of Run User Vis Actions: none
Some /vis commands (optionally) take a string to specify colour.
Available colours:
black, blue, brown, cyan, gray, green, grey, magenta, red, white, yellow
G4AdjointPhysicsList::SetCuts:CutLength : 1 mm
G4AdjointPhysicsList::SetCuts:CutLength : 10 um
/adjoint/DefineExtSourceOnExtSurfaceOfAVolume Shielding
/adjoint/SetExtSourceEmax 10. MeV
/adjoint/DefineAdjSourceOnExtSurfaceOfAVolume SensitiveVolume
/adjoint/SetAdjSourceEmin 1. keV
/adjoint/SetAdjSourceEmax 10. MeV
/RMC01/analysis/SetExponentialSpectrumForAdjointSim e- 1. cm-2 1. 1e-3 10. MeV
/RMC01/analysis/SetExpectedPrecisionOfResults 1.
/run/verbose 1
/tracking/verbose 0
/adjoint/start_run 100000
****************************************************************
*** Geant4 Reverse/Adjoint Monte Carlo mode ***
*** Author: L.Desorgher ***
*** Company: SpaceIT GmbH, Bern, Switzerland ***
*** Sponsored by: ESA/ESTEC contract contract 21435/08/NL/AT ***
****************************************************************
compt: for gamma SubType= 13 BuildTable= 1
Lambda table from 100 eV to 1 MeV, 7 bins per decade, spline: 1
LambdaPrime table from 1 MeV to 10 TeV in 49 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
Klein-Nishina : Emin= 0 eV Emax= 10 TeV
phot: for gamma SubType= 12 BuildTable= 0
LambdaPrime table from 200 keV to 10 TeV in 54 bins
===== EM models for the G4Region DefaultRegionForTheWorld ======
PhotoElectric : Emin= 0 eV Emax= 10 TeV AngularGenSauterGavrila
msc: for e- SubType= 10
RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
eIoni: for e- SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
MollerBhabha : Emin= 0 eV Emax= 10 TeV
eBrem: for e- SubType= 3
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
LPM flag: 1 for E > 1 GeV
===== EM models for the G4Region DefaultRegionForTheWorld ======
eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen
eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen
msc: for proton SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV
hIoni: for proton SubType= 2
dE/dx and range tables from 100 eV to 10 TeV in 77 bins
Lambda tables from threshold to 10 TeV, 7 bins per decade, spline: 1
finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV
BetheBloch : Emin= 2 MeV Emax= 10 TeV
========== Computation of cross section matrices for adjoint models ==========
Build adjoint cross section matrices for Inv_eIon_model
Build adjoint cross section matrices for AdjointeBremModel
The model AdjointeBremModel does not use cross section matrices
Build adjoint cross section matrices for AdjointCompton
The model AdjointCompton does not use cross section matrices
Build adjoint cross section matrices for AdjointPEEffect
The model AdjointPEEffect does not use cross section matrices
Build adjoint cross section matrices for Adjoint_hIonisation
The model Adjoint_hIonisation does not use cross section matrices
All adjoint cross section matrices are computed!
======================================================================
========= Table of registered couples ==============================
Index : 0 used in the geometry : Yes
Material : Vacuum
Range cuts : gamma 10 um e- 10 um e+ 10 um proton 10 um
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 1 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 1 used in the geometry : Yes
Material : Aluminum
Range cuts : gamma 10 um e- 10 um e+ 10 um proton 10 um
Energy thresholds : gamma 990 eV e- 34.1725 keV e+ 33.9436 keV proton 1 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 2 used in the geometry : Yes
Material : Air
Range cuts : gamma 10 um e- 10 um e+ 10 um proton 10 um
Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 1 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 3 used in the geometry : Yes
Material : Silicon
Range cuts : gamma 10 um e- 10 um e+ 10 um proton 10 um
Energy thresholds : gamma 990 eV e- 31.9516 keV e+ 31.7376 keV proton 1 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
Index : 4 used in the geometry : Yes
Material : Tantalum
Range cuts : gamma 10 um e- 10 um e+ 10 um proton 10 um
Energy thresholds : gamma 6.90363 keV e- 75.0136 keV e+ 73.5164 keV proton 1 keV
Region(s) which use this couple :
DefaultRegionForTheWorld
====================================================================
### Run 0 starts.
### Run 0 start.
-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : Analysis_W012
issued by : G4VFileManager::SetHistoDirectoryName()
Cannot set Histo directory name as its value was already used.
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------
----> Histogram Tree is opened in adjoint_sim.root
nb event 0
nb event 1
nb event 2
nb event 3
nb event 4
nb event 5
nb event 6
nb event 7
nb event 8
nb event 9
nb event 10
nb event 11
nb event 12
nb event 13
nb event 14
nb event 15
nb event 16
nb event 17
nb event 18
nb event 19
nb event 20
nb event 21
nb event 22
nb event 23
nb event 24
nb event 25
nb event 26
nb event 27
nb event 28
nb event 29
nb event 30
nb event 31
nb event 32
nb event 33
nb event 34
nb event 35
nb event 36
nb event 37
nb event 38
nb event 39
nb event 40
nb event 41
nb event 42
nb event 43
nb event 44
nb event 45
nb event 46
nb event 47
nb event 48
nb event 49
nb event 50
nb event 51
nb event 52
nb event 53
nb event 54
nb event 55
nb event 56
nb event 57
nb event 58
nb event 59
nb event 60
nb event 61
nb event 62
nb event 63
nb event 64
nb event 65
nb event 66
nb event 67
nb event 68
nb event 69
nb event 70
nb event 71
nb event 72
nb event 73
nb event 74
nb event 75
nb event 76
nb event 77
nb event 78
nb event 79
nb event 80
nb event 81
nb event 82
nb event 83
nb event 84
nb event 85
nb event 86
nb event 87
nb event 88
nb event 89
nb event 90
nb event 91
nb event 92
nb event 93
nb event 94
nb event 95
nb event 96
nb event 97
nb event 98
nb event 99
nb event 100
nb event 200
nb event 300
nb event 400
nb event 500
nb event 1000
nb event 1500
nb event 2000
nb event 2500
nb event 3000
nb event 3500
nb event 4000
nb event 4500
nb event 5000
nb event 10000
nb event 15000
nb event 20000
nb event 25000
nb event 30000
nb event 35000
nb event 40000
nb event 45000
nb event 50000
nb event 55000
nb event 60000
nb event 65000
nb event 70000
nb event 75000
nb event 80000
nb event 85000
nb event 90000
nb event 95000
nb event 100000
nb event 105000
nb event 110000
nb event 115000
nb event 120000
nb event 125000
nb event 130000
nb event 135000
nb event 140000
nb event 145000
nb event 150000
nb event 155000
nb event 160000
nb event 165000
nb event 170000
nb event 175000
nb event 180000
nb event 185000
nb event 190000
nb event 195000
nb event 200000
nb event 205000
nb event 210000
nb event 215000
nb event 220000
nb event 225000
nb event 230000
nb event 235000
nb event 240000
nb event 245000
nb event 250000
nb event 255000
nb event 260000
nb event 265000
nb event 270000
nb event 275000
nb event 280000
nb event 285000
nb event 290000
nb event 295000
nb event 300000
nb event 305000
nb event 310000
nb event 315000
nb event 320000
nb event 325000
nb event 330000
nb event 335000
nb event 340000
nb event 345000
nb event 350000
nb event 355000
nb event 360000
nb event 365000
nb event 370000
nb event 375000
nb event 380000
nb event 385000
nb event 390000
nb event 395000
nb event 400000
nb event 405000
nb event 410000
nb event 415000
nb event 420000
nb event 425000
nb event 430000
nb event 435000
nb event 440000
nb event 445000
1% Precision reached!
Run terminated.
Run Summary
Run Aborted after 449720 events processed.
User=595.38s Real=597.28s Sys=0.06s
Results of reverse/adjoint simulation!
normalised edep [MeV] = 0.00158921
error[MeV] = 1.58921e-05
----> Histogram Tree is saved in adjoint_sim.root
Graphics systems deleted.
Visualization Manager deleting...
G4 kernel has come to Quit state.
Total navigation history collections cleaned: 19
================== Deleting memory pools ===================
Number of memory pools allocated: 12 of which, static: 1
Dynamic pools deleted: 11 / Total memory freed: 0.037 Mb
============================================================
RunManagerKernel is deleted. Good bye :)