Import Geant4 10.5.0 source tree

This commit is contained in:
Gabriele Cosmo
2018-12-07 15:15:39 +01:00
parent 6aa23be517
commit db49709b53
11370 changed files with 187480 additions and 160142 deletions
+152 -51
View File
@@ -1,14 +1,16 @@
//$Id$
///\file "optical/OpNovice2/.README.txt"
///\brief Example OpNovice2 README page
///\brief Example AnaEx01 README page
/*! \page ExampleOpNovice2 Example OpNovice2
/*! \page ExampleOpNovice2 Example OpNovice2
OpNovice2
---------
Investigate optical properties and parameters. Details of optical
photon boundary interactions on a surface are recorded. Details
of optical photon generation and transport are recorded.
\section OpNovice2_s1 GEOMETRY DEFINITION
@@ -18,7 +20,6 @@
in the DetectorMessenger class.
Material properties may be added using the macro commands:
\verbatim
# for the box:
/opnovice2/boxProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn]
/opnovice2/boxConstProperty NAME VALUE
@@ -27,7 +28,6 @@
/opnovice2/worldConstProperty NAME VALUE
# for the surface:
/opnovice2/surfaceProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn]
\verbatim
Multiple energy and value pairs may be specified for the energy-dependent
properties.
@@ -35,9 +35,7 @@
Values are in Geant4 internal units. Energy is in MeV.
Example:
\verbatim
/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000005 1.32 0.000008 1.34
\verbatim
sets the refractive index of the box to 1.3 at 2 eV, 1.32 at 5 eV, and
1.34 at 8 eV.
@@ -59,70 +57,173 @@
The Visualization Manager is set in the main().
The initialisation of the drawing is done via the commands
/vis/... in the macro vis.mac. To get visualisation:
\verbatim
> /control/execute vis.mac
\endverbatim
or run the program with no command line arguments:
\verbatim
$ ./OpNovice2
\endverbatim
\section OpNovice2_s5 HOW TO START ?
- Execute OpNovice2 in 'batch' mode from macro files
\verbatim
% OpNovice2 surface.mac
\endverbatim
- Execute OpNovice2 in 'interactive mode' with visualization
\verbatim
% OpNovice2
....
Idle> type your commands
....
Idle> exit
\endverbatim
6- RESULTS
\section OpNovice2_s6 RESULTS
A table of optical photon events is printed at the end of the run.
7- HISTOGRAMS
\section OpNovice2_s7 HISTOGRAMS
OpNovice2 has several predefined 1D histograms :
1 : Cerenkov spectrum
2 : scintillation spectrum
3 : boundary process status
4 : X momentum dir of scattered photons with px < 0
5 : Y momentum dir of scattered photons with px < 0
6 : Z momentum dir of scattered photons with px < 0
7 : X momentum dir of scattered photons with px >= 0
8 : Y momentum dir of scattered photons with px >= 0
9 : Z momentum dir of scattered photons with px >= 0
10 : X momentum dir of Fresnel-refracted photons
11 : Y momentum dir of Fresnel-refracted photons
12 : Z momentum dir of Fresnel-refracted photons
OpNovice2 has several predefined 1D histograms :
1 : Cerenkov spectrum
2 : scintillation spectrum
3 : boundary process status
4 : X momentum dir of scattered photons with px < 0
5 : Y momentum dir of scattered photons with px < 0
6 : Z momentum dir of scattered photons with px < 0
7 : X momentum dir of scattered photons with px >= 0
8 : Y momentum dir of scattered photons with px >= 0
9 : Z momentum dir of scattered photons with px >= 0
10 : X momentum dir of Fresnel-refracted photons
11 : Y momentum dir of Fresnel-refracted photons
12 : Z momentum dir of Fresnel-refracted photons
Histograms 4-12 are recorded for photons scattered from the +X
surface of the cube. Only the first interaction is recorded.
The histograms are managed by G4Analysis classes.
The histos can be individually activated with the command:
\verbatim
/analysis/h1/set id nbBins valMin valMax unit
\endverbatim
where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..)
Histograms 4-12 are recorded for photons scattered from the +X
surface of the cube. Only the first interaction is recorded.
One can control the name of the histograms file with the command:
\verbatim
/analysis/setFileName name (default opnovice2)
The histograms are managed by G4Analysis classes.
The histos can be individually activated with the command :
/analysis/h1/set id nbBins valMin valMax unit
where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..)
One can control the name of the histograms file with the command:
/analysis/setFileName name (default opnovice2)
It is possible to choose the format of the histogram file : root (default),
hbook, xml, csv, by using namespace in HistoManager.hh
It is also possible to print selected histograms on an ascii file:
/analysis/h1/setAscii id
All selected histos will be written on a file name.ascii (default opnovice2)
///\file "analysis/AnaEx01/.README.txt"
///\brief Example AnaEx01 README page
/*! \page ExampleAnaEx01 Example AnaEx01
Examples AnaEx01, AnaEx02 and AnaEx03 show the usage of histogram and tuple
manipulations using G4Analysis, ROOT and AIDA compliant systems on the same
scenario. All analysis manipulations (histo booking, filling, saving histos
in a file, etc...) are located in one class : HistoManager, implementation of
which is different in each example. All the other classes are same in all
three examples.
This example shows the usage of histogram and tuple manipulations using
G4Analysis system.
The example is an adaptation of examples/novice/N03. It describes a simple
sampling calorimeter setup.
\section AnaEx01_s1 Detector description
The calorimeter is a box made of a given number of layers. A layer
consists of an absorber plate and of a detection gap. The layer is
replicated.
Six parameters define the calorimeter :
- the material of the absorber,
- the thickness of an absorber plate,
- the material of the detection gap,
- the thickness of a gap,
- the number of layers,
- the transverse size of the calorimeter (the input face is a square).
The default geometry is constructed in DetectorConstruction class,
but all of the above parameters can be modified interactively via
the commands defined in the DetectorMessenger class.
<pre>
|<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
| | | |
==========================================================================
|| | || | || | ||
|| | || | || | ||
beam || absorber | gap || absorber | gap || absorber | gap ||
======> || | || | || | ||
|| | || | || | ||
==========================================================================
</pre>
\section AnaEx01_s2 Physics list
The particle's type and the physic processes which will be available
in this example are set in the FTFP_BERT physics list.
\section AnaEx01_s3 Action Initialization
A newly introduced class, ActionInitialization,
instantiates and registers to Geant4 kernel all user action classes
which are defined thread-local and a run action class
which is defined both thread-local and global.
The thread-local action classes are defined in
ActionInitialization::Build()
and the global run action class is defined in
ActionInitialization::BuildForMaster().
Note that ActionInitialization::Build() is also used to
instatiate user action clasess in sequential mode.
\section AnaEx01_s4 An event : PrimaryGeneratorAction
The primary kinematic consists of a single particle which hits the
calorimeter perpendicular to the input face. The type of the particle
and its energy are set in the PrimaryGeneratorAction class, and can
be changed via the G4 build-in commands of ParticleGun class.
\section AnaEx01_s5 Histograms
AnaEx01 can produce 4 histograms :
- EAbs : total energy deposit in absorber per event
- EGap : total energy deposit in gap per event
- LAbs : total track length of charged particles in absorber per event
- LGap : total track length of charged particles in gap per event
And 2 Ntuples :
- Ntuple1:
- one row per event : EnergyAbs EnergyGap
- Ntuple2:
- one row per event : TrackLAbs TrackLGap
These histos and ntuples are booked in HistoManager and filled from
EventAction.
One can control the name of the histograms file and its format:
- default name : AnaEx01
The format of the histogram file can be : root (default),
xml, csv. Include correct g4nnn.hh in HistoManager.hh
\section AnaEx01_s7 How to build
An additional step is needed when building the example with GNUmake
due to using the extra shared directory:
\verbatim
% cd path_to_AnaEx01/AnaEx01
% gmake setup
% gmake
\endverbatim
It is possible to choose the format of the histogram file : root (default),
hbook, xml, csv, by using namespace in HistoManager.hh
It is also possible to print selected histograms on an ascii file:
\verbatim
/analysis/h1/setAscii id
This will copy the files from shared in the example include and src;
to remove these files:
\verbatim
% gmake clean_setup
\endverbatim
All selected histos will be written on a file name.ascii (default opnovice2)
*/
@@ -1,4 +1,3 @@
# $Id: GNUmakefile 66335 2012-12-17 22:37:39Z gum $
# --------------------------------------------------------------
# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------
@@ -13,6 +13,17 @@ track of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
October 26, 2018 D.Sawkey (OpNovice2-V10-04-07)
- SteppingAction.cc: fix Histo in multithreaded
- HistoManager.hh: add commented g4csv include
September 20, 2018 D.Sawkey (OpNovice2-V10-04-06)
- add scintillation and Cerenkov GetNumPhotons to SteppingAction
August 16, 2018 D.Sawkey (OpNovice2-V10-04-05)
- messenger command to allow different materials for tank, world
- fix initialization of material property tables
June 2, 2018 D.Sawkey (OpNovice2-V10-04-04)
- fix GNUmakefile
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: LXe.cc 110190 2018-05-17 10:50:30Z allison $
//
/// \file optical/OpNovice2/OpNovice2.cc
/// \brief Main program of the optical/OpNovice2 example
@@ -1,8 +1,6 @@
/control/verbose 2
/tracking/verbose 0
/run/initialize
/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000008 1.4
/opnovice2/boxProperty ABSLENGTH 0.000002 1000000 0.000005 2000000 0.000008 3000000
@@ -18,6 +16,7 @@
/opnovice2/surfaceProperty BACKSCATTERCONSTANT 0.000002 .05 0.000008 .05
/opnovice2/surfaceProperty REFLECTIVITY 0.000002 .99 0.000008 .99
/run/initialize
#
/gun/particle opticalphoton
/gun/energy 3 eV
+69 -104
View File
@@ -4,7 +4,7 @@
############################################
**************************************************************
Geant4 version Name: geant4-10-05-beta-01 (29-June-2018)
Geant4 version Name: geant4-10-05-ref-00 (7-December-2018)
Copyright : Geant4 Collaboration
References : NIM A 506 (2003), 250-303
: IEEE-TNS 53 (2006), 270-278
@@ -63,26 +63,6 @@ End of Run User Vis Actions: none
Some /vis commands (optionally) take a string to specify colour.
"/vis/list" to see available colours.
/tracking/verbose 0
/run/initialize
opticalSurface->DumpInfo
Surface type = 1
Surface finish = 0
Surface model = 1
Surface parameter
-----------------
0
FTFP_BERT : new threshold between BERT and FTFP is over the interval
for pions : 3 to 12 GeV
for kaons : 3 to 12 GeV
for proton : 3 to 12 GeV
for neutron : 3 to 12 GeV
### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0
### Birks coefficients used in run time
G4_WATER 0.126 mm/MeV 0.0126 g/cm^2/MeV massFactor= 85.0756 effCharge= 62.0606
/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000008 1.4
The MPT for the box is now:
0: RINDEX
@@ -182,6 +162,27 @@ The MPT for the surface is now:
2e-06 0.05
8e-06 0.05
.............
/run/initialize
****** opticalSurface->DumpInfo:
Surface type = 1
Surface finish = 3
Surface model = 1
Surface parameter
-----------------
1.1
****** end of opticalSurface->DumpInfo
FTFP_BERT : new threshold between BERT and FTFP is over the interval
for pions : 3 to 12 GeV
for kaons : 3 to 12 GeV
for proton : 3 to 12 GeV
for neutron : 3 to 12 GeV
### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0
### Birks coefficients used in run time
G4_WATER 0.126 mm/MeV 0.0126 g/cm^2/MeV massFactor= 85.0756 effCharge= 62.0606
#
/gun/particle opticalphoton
/gun/energy 3 eV
@@ -202,8 +203,7 @@ The MPT for the surface is now:
/run/beamOn 100000
### === Deexcitation model UAtomDeexcitation is activated for 1 region:
DefaultRegionForTheWorld 1 1 0
### === Auger cascade flag: 1
DefaultRegionForTheWorld 1 0 0
### === Ignore cuts flag: 0
phot: for gamma SubType= 12 BuildTable= 0
@@ -221,7 +221,8 @@ compt: for gamma SubType= 13 BuildTable= 1
conv: for gamma SubType= 14 BuildTable= 1
Lambda table from 1.022 MeV to 100 TeV, 20 bins per decade, spline: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
PenConversion : Emin= 0 eV Emax= 80 GeV
PenConversion : Emin= 0 eV Emax= 20 MeV
BetheHeitler : Emin= 20 MeV Emax= 80 GeV AngularGenUrban
BetheHeitlerLPM : Emin= 80 GeV Emax= 100 TeV AngularGenUrban
Rayl: for gamma SubType= 11 BuildTable= 1
@@ -241,8 +242,8 @@ eIoni: for e- SubType= 2
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
PenIoni : Emin= 0 eV Emax= 1 MeV
MollerBhabha : Emin= 1 MeV Emax= 100 TeV deltaVI
LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI
MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI
eBrem: for e- SubType= 3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
@@ -276,8 +277,8 @@ eIoni: for e+ SubType= 2
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
PenIoni : Emin= 0 eV Emax= 1 MeV
MollerBhabha : Emin= 1 MeV Emax= 100 TeV deltaVI
PenIoni : Emin= 0 eV Emax= 100 keV
MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI
eBrem: for e+ SubType= 3
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
@@ -312,7 +313,7 @@ msc: for proton SubType= 10
hIoni: for proton SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 2 MeV deltaVI
BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI
@@ -336,10 +337,6 @@ CoulombScat: for proton, integral: 1 SubType= 1 BuildTable= 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
nuclearStopping: for proton SubType= 8 BuildTable= 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV
msc: for GenericIon SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -364,7 +361,7 @@ msc: for alpha SubType= 10
ionIoni: for alpha SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02
===== EM models for the G4Region DefaultRegionForTheWorld ======
BraggIon : Emin= 0 eV Emax= 7.9452 MeV deltaVI
BetheBloch : Emin= 7.9452 MeV Emax= 100 TeV deltaVI
@@ -381,7 +378,7 @@ msc: for anti_proton SubType= 10
hIoni: for anti_proton SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI
BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI
@@ -405,10 +402,6 @@ CoulombScat: for anti_proton, integral: 1 SubType= 1 BuildTable= 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
eCoulombScattering : Emin= 0 eV Emax= 100 TeV
nuclearStopping: for anti_proton SubType= 8 BuildTable= 0
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV
msc: for kaon+ SubType= 10
RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 1
===== EM models for the G4Region DefaultRegionForTheWorld ======
@@ -417,7 +410,7 @@ msc: for kaon+ SubType= 10
hIoni: for kaon+ SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 1.05231 MeV deltaVI
BetheBloch : Emin= 1.05231 MeV Emax= 100 TeV deltaVI
@@ -449,7 +442,7 @@ msc: for kaon- SubType= 10
hIoni: for kaon- SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 1.05231 MeV deltaVI
BetheBloch : Emin= 1.05231 MeV Emax= 100 TeV deltaVI
@@ -481,7 +474,7 @@ msc: for mu+ SubType= 10
muIoni: for mu+ SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 200 keV deltaVI
BetheBloch : Emin= 200 keV Emax= 1 GeV deltaVI
@@ -514,7 +507,7 @@ msc: for mu- SubType= 10
muIoni: for mu- SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI
BetheBloch : Emin= 200 keV Emax= 1 GeV deltaVI
@@ -547,7 +540,7 @@ msc: for pi+ SubType= 10
hIoni: for pi+ SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
Bragg : Emin= 0 eV Emax= 297.505 keV deltaVI
BetheBloch : Emin= 297.505 keV Emax= 100 TeV deltaVI
@@ -579,7 +572,7 @@ msc: for pi- SubType= 10
hIoni: for pi- SubType= 2
dE/dx and range tables from 100 eV to 100 TeV in 240 bins
Lambda tables from threshold to 100 TeV, 20 bins per decade, spline: 1
finalRange(mm)= 0.01, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01
finalRange(mm)= 0.02, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.01
===== EM models for the G4Region DefaultRegionForTheWorld ======
ICRU73QO : Emin= 0 eV Emax= 297.505 keV deltaVI
BetheBloch : Emin= 297.505 keV Emax= 100 TeV deltaVI
@@ -612,18 +605,15 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticCHIPS: 0 eV ---> 100 TeV
Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: neutronInelastic
Model: FTFP: 3 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 12 GeV
Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: Barashenkov-Glauber: 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
@@ -633,7 +623,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: ionInelastic
Model: Binary Light Ion Cascade: 0 eV /n ---> 4 GeV/n
Model: FTFP: 2 GeV/n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
@@ -641,13 +631,13 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: He3Inelastic
Model: Binary Light Ion Cascade: 0 eV /n ---> 4 GeV/n
Model: FTFP: 2 GeV/n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
@@ -660,7 +650,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: alphaInelastic
Model: Binary Light Ion Cascade: 0 eV /n ---> 4 GeV/n
Model: FTFP: 2 GeV/n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
@@ -669,12 +659,12 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n
Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_He3Inelastic
Model: FTFP: 0 eV /n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
@@ -685,12 +675,12 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n
Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_alphaInelastic
Model: FTFP: 0 eV /n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
@@ -701,12 +691,12 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n
Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_deuteronInelastic
Model: FTFP: 0 eV /n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
@@ -720,7 +710,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: anti_neutronInelastic
Model: FTFP: 0 eV ---> 100 TeV
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
@@ -729,12 +719,12 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
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: AntiAGlauber: 0 eV ---> 100 TeV
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: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
@@ -745,12 +735,12 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n
Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: anti_tritonInelastic
Model: FTFP: 0 eV /n ---> 100 TeV/n
Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J
Cr_sctns: AntiAGlauber: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
Process: hFritiofCaptureAtRest
@@ -765,7 +755,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: dInelastic
Model: Binary Light Ion Cascade: 0 eV /n ---> 4 GeV/n
Model: FTFP: 2 GeV/n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
---------------------------------------------------
@@ -774,7 +764,6 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
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-
@@ -782,7 +771,6 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
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
@@ -791,20 +779,19 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
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: Glauber-Gribov: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: kaon+Inelastic
Model: FTFP: 3 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 12 GeV
Cr_sctns: Glauber-Gribov: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV
Cr_sctns: ChipsKaonPlusInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
@@ -813,13 +800,13 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticLHEP: 0 eV ---> 100 TeV
Cr_sctns: Glauber-Gribov: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Process: kaon-Inelastic
Model: FTFP: 3 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 12 GeV
Cr_sctns: Glauber-Gribov: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV
Cr_sctns: ChipsKaonMinusInelasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
@@ -865,10 +852,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: pi+Inelastic
Model: FTFP: 3 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 12 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
Cr_sctns: Barashenkov-Glauber-Gribov: 0 eV ---> 100 TeV
---------------------------------------------------
Hadronic Processes for pi-
@@ -881,10 +865,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: pi-Inelastic
Model: FTFP: 3 GeV ---> 100 TeV
Model: BertiniCascade: 0 eV ---> 12 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
Cr_sctns: Barashenkov-Glauber-Gribov: 0 eV ---> 100 TeV
Process: hBertiniCaptureAtRest
@@ -893,8 +874,7 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: hadElastic
Model: hElasticCHIPS: 0 eV ---> 100 TeV
Cr_sctns: ChipsProtonElasticXS: 0 eV ---> 100 TeV
Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV
Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV
Process: protonInelastic
Model: FTFP: 3 GeV ---> 100 TeV
@@ -911,39 +891,24 @@ CoulombScat: for pi-, integral: 1 SubType= 1 BuildTable= 1
Process: tInelastic
Model: Binary Light Ion Cascade: 0 eV /n ---> 4 GeV/n
Model: FTFP: 2 GeV/n ---> 100 TeV/n
Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J
Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 100 TeV
Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV
================================================================
=======================================================================
====== Pre-compound/De-excitation Physics Parameters ========
=======================================================================
Type of pre-compound inverse x-section 3
Pre-compound model active 1
Pre-compound low energy (MeV) 0.1
Type of de-excitation inverse x-section 3
Type of de-excitation factory Evaporation
Number of de-excitation channels 8
Min excitation energy (keV) 0.01
Min energy per nucleon for multifragmentation (MeV) 1e+05
Level density (1/MeV) 0.1
Time limit for long lived isomeres (ns) 1e+12
Internal e- conversion flag 1
Store e- internal conversion data 0
Electron internal conversion ID 2
Correlated gamma emission flag 0
Max 2J for sampling of angular correlations 10
=======================================================================
### Run 0 start.
... open Root analysis file : opnovice2.root - done
number of event = 100000 User=1.310000s Real=1.315921s Sys=0.000000s
number of event = 100000 User=1.230000s Real=1.242451s Sys=0.000000s
Run Summary
---------------------------------
Primary particle was: opticalphoton with energy 3 eV .
OpAbsorption per event: 0
Material of world: G4_AIR
Material of tank: G4_WATER
Surface events (on +X surface) this run:
Average number of OpRayleigh per event: 0
Average number of OpAbsorption per event: 0
Surface events (on +X surface, maximum one per photon) this run:
# of primary particles: 100000
OpAbsorption before surface: 76
Total # of surface events: 99924
@@ -1,4 +1,3 @@
$Id: README 96329 2016-04-06 15:53:16Z gcosmo $
-------------------------------------------------------------------
==================================================
@@ -1,8 +1,10 @@
/control/verbose 2
/tracking/verbose 0
/opnovice2/boxProperty RAYLEIGH .000002 1 .000008 1
/opnovice2/boxMaterial G4_PLEXIGLASS
/opnovice2/worldMaterial G4_WATER
/opnovice2/boxProperty RAYLEIGH .000002 1 .000008 1
/opnovice2/boxProperty RINDEX .000002 1.3 .000008 1.4
/opnovice2/boxProperty ABSLENGTH .000002 1 .000005 2 .000008 3
/opnovice2/boxProperty FASTCOMPONENT .000002 1.0 .000008 1.0
@@ -13,10 +15,6 @@
/opnovice2/boxConstProperty YIELDRATIO 0.8
/opnovice2/boxConstProperty RESOLUTIONSCALE 1
/run/initialize
/opnovice2/surfaceModel unified
/opnovice2/surfaceType dielectric_dielectric
/opnovice2/surfaceFinish ground
@@ -25,10 +23,11 @@
/opnovice2/worldProperty RINDEX 0.000002 1.01 0.000008 1.01
/opnovice2/worldProperty ABSLENGTH 0.000002 1000000 0.000005 2000000 0.000008 3000000
/run/initialize
/analysis/h1/set 1 100 0 .000010
/analysis/h1/set 2 100 0 .000010
#
/gun/particle e-
/gun/energy 500 keV
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ActionInitialization.hh 68058 2013-03-13 14:47:43Z gcosmo $
//
//
/// \file optical/OpNovice2/include/ActionInitialization.hh
@@ -77,10 +77,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction
void SetSurfaceSigmaAlpha(G4double v);
void AddBoxMPV(const char* c, G4MaterialPropertyVector* mpv);
void AddBoxMPCV(const char* c, G4double v);
G4MaterialPropertiesTable* GetBoxMaterialPropertiesTable()
{return fBoxMPT;}
void AddTankMPV(const char* c, G4MaterialPropertyVector* mpv);
void AddTankMPCV(const char* c, G4double v);
G4MaterialPropertiesTable* GetTankMaterialPropertiesTable()
{return fTankMPT;}
void AddWorldMPV(const char* c, G4MaterialPropertyVector* mpv);
void AddWorldMPCV(const char* c, G4double v);
@@ -91,6 +91,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction
G4MaterialPropertiesTable* GetSurfaceMaterialPropertiesTable()
{return fSurfaceMPT;}
void SetWorldMaterial(const G4String&);
G4Material* GetWorldMaterial() const {return fWorldMaterial;}
void SetTankMaterial(const G4String&);
G4Material* GetTankMaterial() const {return fTankMaterial;}
virtual G4VPhysicalVolume* Construct();
@@ -105,11 +109,17 @@ class DetectorConstruction : public G4VUserDetectorConstruction
G4double fTank_y;
G4double fTank_z;
G4LogicalVolume* fWorld_LV;
G4LogicalVolume* fTank_LV;
G4Material* fWorldMaterial;
G4Material* fTankMaterial;
G4OpticalSurface* fSurface;
DetectorMessenger* fDetectorMessenger;
G4MaterialPropertiesTable* fBoxMPT;
G4MaterialPropertiesTable* fTankMPT;
G4MaterialPropertiesTable* fWorldMPT;
G4MaterialPropertiesTable* fSurfaceMPT;
};
@@ -26,7 +26,6 @@
/// \file optical/OpNovice2/include/DetectorMessenger.hh
/// \brief Definition of the DetectorMessenger class
//
// $Id: DetectorMessenger.hh 77288 2013-11-22 10:52:58Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -71,12 +70,14 @@ class DetectorMessenger: public G4UImessenger
G4UIcmdWithAString* fSurfaceMatPropVectorCmd;
// the box
G4UIcmdWithAString* fBoxMatPropVectorCmd;
G4UIcmdWithAString* fBoxMatConstPropVectorCmd;
G4UIcmdWithAString* fTankMatPropVectorCmd;
G4UIcmdWithAString* fTankMatConstPropVectorCmd;
G4UIcmdWithAString* fTankMaterialCmd;
// the world
G4UIcmdWithAString* fWorldMatPropVectorCmd;
G4UIcmdWithAString* fWorldMatConstPropVectorCmd;
G4UIcmdWithAString* fWorldMaterialCmd;
};
@@ -27,7 +27,6 @@
/// \brief Definition of the HistoManager class
//
//
// $Id: HistoManager.hh 76464 2013-11-11 10:22:56Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -39,6 +38,7 @@
#include "g4root.hh"
//#include "g4xml.hh"
//#include "g4csv.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.hh 69469 2013-05-05 21:42:35Z ihrivnac $
//
/// \file optical/OpNovice2/include/SteppingAction.hh
/// \brief Definition of the SteppingAction class
@@ -46,6 +45,8 @@ class SteppingAction : public G4UserSteppingAction
// method from the base class
virtual void UserSteppingAction(const G4Step*);
private:
G4int fVerbose;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -27,7 +27,6 @@
/// \brief Definition of the TrackInformation class
//
//
// $Id: RE01TrackInformation.hh 97671 2016-06-07 08:25:00Z gcosmo $
//
#ifndef TrackInformation_h
@@ -26,7 +26,6 @@
/// \file optical/OpNovice2/include/TrackingAction.hh
/// \brief Definition of the TrackingAction class
//
// $Id: TrackingAction.hh 66379 2012-12-18 09:46:33Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: ActionInitialization.cc 68058 2013-03-13 14:47:43Z gcosmo $
//
/// \file optical/OpNovice2/src/ActionInitialization.cc
/// \brief Implementation of the ActionInitialization class
@@ -56,12 +56,23 @@ DetectorConstruction::DetectorConstruction()
fTank_x = fTank_y = fTank_z = 1.0*m;
fTank = nullptr;
fSurface = nullptr;
fBoxMPT = new G4MaterialPropertiesTable();
fWorldMPT = new G4MaterialPropertiesTable();
fTankMPT = new G4MaterialPropertiesTable();
fWorldMPT = new G4MaterialPropertiesTable();
fSurfaceMPT = new G4MaterialPropertiesTable();
fSurface = new G4OpticalSurface("Surface");
fSurface->SetType(dielectric_dielectric);
fSurface->SetFinish(ground);
fSurface->SetModel(unified);
fSurface->SetMaterialPropertiesTable(fSurfaceMPT);
fTank_LV = nullptr;
fWorld_LV = nullptr;
fTankMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER");
fWorldMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR");
fDetectorMessenger = new DetectorMessenger(this);
}
@@ -76,61 +87,42 @@ DetectorConstruction::~DetectorConstruction()
G4VPhysicalVolume* DetectorConstruction::Construct()
{
fTankMaterial->SetMaterialPropertiesTable(fTankMPT);
fTankMaterial->GetIonisation()->SetBirksConstant(0.126*mm/MeV);
// ------------- Materials -------------
G4NistManager* man = G4NistManager::Instance();
G4Material* air = man->FindOrBuildMaterial("G4_AIR");
G4Material* water = man->FindOrBuildMaterial("G4_WATER");
//
// ------------ Generate & Add Material Properties Table ------------
//
water->SetMaterialPropertiesTable(fBoxMPT);
water->GetIonisation()->SetBirksConstant(0.126*mm/MeV);
air->SetMaterialPropertiesTable(fWorldMPT);
fWorldMaterial->SetMaterialPropertiesTable(fWorldMPT);
// ------------- Volumes --------------
// The experimental Hall
G4Box* world_box = new G4Box("World", fExpHall_x, fExpHall_y, fExpHall_z);
G4LogicalVolume* world_LV
= new G4LogicalVolume(world_box,air, "World", 0, 0, 0);
fWorld_LV
= new G4LogicalVolume(world_box, fWorldMaterial, "World", 0, 0, 0);
G4VPhysicalVolume* world_PV
= new G4PVPlacement(0, G4ThreeVector(), world_LV, "World", 0, false, 0);
= new G4PVPlacement(0, G4ThreeVector(), fWorld_LV, "World", 0, false, 0);
// The Water Tank
G4Box* waterTank_box = new G4Box("Tank",fTank_x,fTank_y,fTank_z);
// The tank
G4Box* tank_box = new G4Box("Tank", fTank_x, fTank_y, fTank_z);
G4LogicalVolume* waterTank_log
= new G4LogicalVolume(waterTank_box,water,"Tank",0,0,0);
fTank_LV
= new G4LogicalVolume(tank_box, fTankMaterial, "Tank", 0, 0, 0);
fTank
= new G4PVPlacement(0, G4ThreeVector(), waterTank_log, "Tank",
world_LV, false, 0);
= new G4PVPlacement(0, G4ThreeVector(), fTank_LV, "Tank",
fWorld_LV, false, 0);
// ------------- Surface --------------
fSurface = new G4OpticalSurface("Surface");
fSurface->SetType(dielectric_dielectric);
fSurface->SetFinish(polished);
fSurface->SetModel(unified);
fSurface->SetMaterialPropertiesTable(fSurfaceMPT);
G4LogicalBorderSurface* surface =
new G4LogicalBorderSurface("Surface",
fTank, world_PV, fSurface);
G4OpticalSurface* opticalSurface = dynamic_cast <G4OpticalSurface*>
(surface->GetSurface(fTank,world_PV)->GetSurfaceProperty());
G4cout << "opticalSurface->DumpInfo" << G4endl;
if (opticalSurface) opticalSurface->DumpInfo();
G4cout << "****** opticalSurface->DumpInfo:" << G4endl;
if (opticalSurface) { opticalSurface->DumpInfo(); }
G4cout << "****** end of opticalSurface->DumpInfo" << G4endl;
return world_PV;
}
@@ -145,12 +137,12 @@ void DetectorConstruction::SetSurfaceSigmaAlpha(G4double v) {
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::AddBoxMPV(const char* c,
void DetectorConstruction::AddTankMPV(const char* c,
G4MaterialPropertyVector* mpv) {
mpv->SetSpline(true);
fBoxMPT->AddProperty(c, mpv);
fTankMPT->AddProperty(c, mpv);
G4cout << "The MPT for the box is now: " << G4endl;
fBoxMPT->DumpTable();
fTankMPT->DumpTable();
G4cout << "............." << G4endl;
}
@@ -175,10 +167,10 @@ void DetectorConstruction::AddSurfaceMPV(const char* c,
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::AddBoxMPCV(const char* c, G4double v) {
fBoxMPT->AddConstProperty(c, v);
void DetectorConstruction::AddTankMPCV(const char* c, G4double v) {
fTankMPT->AddConstProperty(c, v);
G4cout << "The MPT for the box is now: " << G4endl;
fBoxMPT->DumpTable();
fTankMPT->DumpTable();
G4cout << "............." << G4endl;
}
@@ -188,5 +180,35 @@ void DetectorConstruction::AddWorldMPCV(const char* c, G4double v) {
G4cout << "The MPT for the world is now: " << G4endl;
fWorldMPT->DumpTable();
G4cout << "............." << G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetWorldMaterial(const G4String& mat) {
G4Material* pmat = G4NistManager::Instance()->FindOrBuildMaterial(mat);
if (pmat && fWorldMaterial != pmat) {
fWorldMaterial = pmat;
if (fWorld_LV) {
fWorld_LV->SetMaterial(fWorldMaterial);
fWorldMaterial->SetMaterialPropertiesTable(fWorldMPT);
}
G4RunManager::GetRunManager()->PhysicsHasBeenModified();
G4cout << "World material set to " << fWorldMaterial->GetName()
<< G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void DetectorConstruction::SetTankMaterial(const G4String& mat) {
G4Material* pmat = G4NistManager::Instance()->FindOrBuildMaterial(mat);
if (pmat && fTankMaterial != pmat) {
fTankMaterial = pmat;
if (fTank_LV) {
fTank_LV->SetMaterial(fTankMaterial);
fTankMaterial->SetMaterialPropertiesTable(fTankMPT);
fTankMaterial->GetIonisation()->SetBirksConstant(0.126*mm/MeV);
}
G4RunManager::GetRunManager()->PhysicsHasBeenModified();
G4cout << "Tank material set to " << fTankMaterial->GetName()
<< G4endl;
}
}
@@ -26,7 +26,6 @@
/// \file optical/OpNovice2/src/DetectorMessenger.cc
/// \brief Implementation of the DetectorMessenger class
//
// $Id: DetectorMessenger.cc 77288 2013-11-22 10:52:58Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -86,18 +85,24 @@ DetectorMessenger::DetectorMessenger(DetectorConstruction * Det)
fSurfaceMatPropVectorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fSurfaceMatPropVectorCmd->SetToBeBroadcasted(false);
fBoxMatPropVectorCmd = new G4UIcmdWithAString("/opnovice2/boxProperty", this);
fBoxMatPropVectorCmd->SetGuidance("Set material property vector for ");
fBoxMatPropVectorCmd->SetGuidance("the box.");
fBoxMatPropVectorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fBoxMatPropVectorCmd->SetToBeBroadcasted(false);
fTankMatPropVectorCmd =
new G4UIcmdWithAString("/opnovice2/boxProperty", this);
fTankMatPropVectorCmd->SetGuidance("Set material property vector for ");
fTankMatPropVectorCmd->SetGuidance("the box.");
fTankMatPropVectorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fTankMatPropVectorCmd->SetToBeBroadcasted(false);
fBoxMatConstPropVectorCmd =
fTankMatConstPropVectorCmd =
new G4UIcmdWithAString("/opnovice2/boxConstProperty", this);
fBoxMatConstPropVectorCmd->SetGuidance("Set material constant property ");
fBoxMatConstPropVectorCmd->SetGuidance("for the box.");
fBoxMatConstPropVectorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fBoxMatConstPropVectorCmd->SetToBeBroadcasted(false);
fTankMatConstPropVectorCmd->SetGuidance("Set material constant property ");
fTankMatConstPropVectorCmd->SetGuidance("for the box.");
fTankMatConstPropVectorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fTankMatConstPropVectorCmd->SetToBeBroadcasted(false);
fTankMaterialCmd = new G4UIcmdWithAString("/opnovice2/boxMaterial", this);
fTankMaterialCmd->SetGuidance("Set material of box.");
fTankMaterialCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fTankMaterialCmd->SetToBeBroadcasted(false);
fWorldMatPropVectorCmd =
new G4UIcmdWithAString("/opnovice2/worldProperty", this);
@@ -114,6 +119,11 @@ DetectorMessenger::DetectorMessenger(DetectorConstruction * Det)
AvailableForStates(G4State_PreInit, G4State_Idle);
fWorldMatConstPropVectorCmd->SetToBeBroadcasted(false);
fWorldMaterialCmd = new G4UIcmdWithAString("/opnovice2/worldMaterial", this);
fWorldMaterialCmd->SetGuidance("Set material of world.");
fWorldMaterialCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fWorldMaterialCmd->SetToBeBroadcasted(false);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -125,10 +135,12 @@ DetectorMessenger::~DetectorMessenger()
delete fSurfaceModelCmd;
delete fSurfaceSigmaAlphaCmd;
delete fSurfaceMatPropVectorCmd;
delete fBoxMatPropVectorCmd;
delete fBoxMatConstPropVectorCmd;
delete fTankMatPropVectorCmd;
delete fTankMatConstPropVectorCmd;
delete fTankMaterialCmd;
delete fWorldMatPropVectorCmd;
delete fWorldMatConstPropVectorCmd;
delete fWorldMaterialCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -311,7 +323,7 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
fDetector->SetSurfaceSigmaAlpha(
G4UIcmdWithADouble::GetNewDoubleValue(newValue));
}
else if (command == fBoxMatPropVectorCmd) {
else if (command == fTankMatPropVectorCmd) {
// got a string. need to convert it to physics vector.
// string format is property name, then pairs of energy, value
// specify units for each value, eg 3.0*eV
@@ -333,7 +345,7 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
}
const char* c = prop.c_str();
fDetector->AddBoxMPV(c, mpv);
fDetector->AddTankMPV(c, mpv);
}
else if (command == fWorldMatPropVectorCmd) {
// Convert string to physics vector
@@ -378,7 +390,7 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
fDetector->AddSurfaceMPV(c, mpv);
}
else if (command == fBoxMatConstPropVectorCmd) {
else if (command == fTankMatConstPropVectorCmd) {
// Convert string to physics vector
// string format is property name, then value
// space delimited
@@ -389,7 +401,7 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
instring >> tmp;
G4double val = G4UIcommand::ConvertToDouble(tmp);
const char* c = prop.c_str();
fDetector->AddBoxMPCV(c, val);
fDetector->AddTankMPCV(c, val);
}
else if (command == fWorldMatConstPropVectorCmd) {
// Convert string to physics vector
@@ -402,7 +414,13 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
instring >> tmp;
G4double val = G4UIcommand::ConvertToDouble(tmp);
const char* c = prop.c_str();
fDetector->AddBoxMPCV(c, val);
fDetector->AddTankMPCV(c, val);
}
else if (command == fWorldMaterialCmd) {
fDetector->SetWorldMaterial(newValue);
}
else if (command == fTankMaterialCmd) {
fDetector->SetTankMaterial(newValue);
}
}
@@ -27,7 +27,6 @@
/// \brief Implementation of the HistoManager class
//
//
// $Id: HistoManager.cc 104417 2017-05-30 08:30:48Z gcosmo $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+15 -6
View File
@@ -26,7 +26,6 @@
/// \file optical/OpNovice2/src/Run.cc
/// \brief Implementation of the Run class
//
// $Id: Run.cc 71376 2013-06-14 07:44:50Z maire $
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -34,6 +33,7 @@
#include <numeric>
#include "Run.hh"
#include "DetectorConstruction.hh"
#include "G4OpBoundaryProcess.hh"
#include "G4SystemOfUnits.hh"
@@ -110,6 +110,9 @@ void Run::EndOfRun()
G4int TotNbofEvents = numberOfEvent;
if (TotNbofEvents == 0) return;
const DetectorConstruction* det = (const DetectorConstruction*)
(G4RunManager::GetRunManager()->GetUserDetectorConstruction());
std::ios::fmtflags mode = G4cout.flags();
G4int prec = G4cout.precision(2);
@@ -118,6 +121,11 @@ void Run::EndOfRun()
G4cout << "Primary particle was: " << fParticle->GetParticleName()
<< " with energy " << G4BestUnit(fEkin, "Energy") << "." << G4endl;
G4cout << "Material of world: " << det->GetWorldMaterial()->GetName()
<< G4endl;
G4cout << "Material of tank: " << det->GetTankMaterial()->GetName()
<< G4endl << G4endl;
if (fParticle->GetParticleName() != "opticalphoton") {
G4cout << "Average energy of Cerenkov photons created per event: "
<< (fCerenkovEnergy/eV)/TotNbofEvents << " eV." << G4endl;
@@ -135,13 +143,14 @@ void Run::EndOfRun()
G4cout << " Average energy: " << (fScintEnergy/eV)/fScintCount << " eV."
<< G4endl;
}
G4cout << "Average number of OpRayleigh scatters per event: "
<< fRayleighCount/TotNbofEvents << G4endl;
G4cout << "\n";
}
G4cout << "OpAbsorption per event: " << fOpAbsorption/TotNbofEvents
G4cout << "Average number of OpRayleigh per event: "
<< fRayleighCount/TotNbofEvents << G4endl;
G4cout << "Average number of OpAbsorption per event: "
<< fOpAbsorption/TotNbofEvents << G4endl;
G4cout <<
"\nSurface events (on +X surface, maximum one per photon) this run:"
<< G4endl;
G4cout << "\nSurface events (on +X surface) this run:" << G4endl;
G4cout << "# of primary particles: " << std::setw(8) << TotNbofEvents
<< G4endl;
G4cout << "OpAbsorption before surface: " << std::setw(8)
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: SteppingAction.cc 71007 2013-06-09 16:14:59Z maire $
//
/// \file optical/OpNovice2/src/SteppingAction.cc
/// \brief Implementation of the SteppingAction class
@@ -53,7 +52,8 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
SteppingAction::SteppingAction()
: G4UserSteppingAction()
: G4UserSteppingAction(),
fVerbose(0)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -65,7 +65,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step)
{
static G4ParticleDefinition* opticalphoton =
G4OpticalPhoton::OpticalPhotonDefinition();
static G4AnalysisManager* analysisMan = G4AnalysisManager::Instance();
G4AnalysisManager* analysisMan = G4AnalysisManager::Instance();
Run* run = static_cast<Run*>(
G4RunManager::GetRunManager()->GetNonConstCurrentRun());
@@ -269,9 +269,37 @@ void SteppingAction::UserSteppingAction(const G4Step* step)
}
else { // particle != opticalphoton
// print how many Cerenkov and scint photons produced this step
// this demonstrates use of GetNumPhotons()
auto proc_man = track->GetDynamicParticle()->GetParticleDefinition()
->GetProcessManager();
G4int n_proc = proc_man->GetPostStepProcessVector()->entries();
G4ProcessVector* proc_vec = proc_man->GetPostStepProcessVector(typeDoIt);
G4int n_scint = 0;
G4int n_cer = 0;
for (G4int i = 0; i < n_proc; ++i) {
if ((*proc_vec)[i]->GetProcessName().compare("Cerenkov") == 0) {
auto cer = (G4Cerenkov*)(*proc_vec)[i];
n_cer = cer->GetNumPhotons();
}
else if ((*proc_vec)[i]->GetProcessName().compare("Scintillation") == 0) {
auto scint = (G4Scintillation*)(*proc_vec)[i];
n_scint = scint->GetNumPhotons();
}
}
if (fVerbose > 0) {
if (n_cer > 0 || n_scint > 0) {
G4cout << "In this step, " << n_cer
<< " Cerenkov and " << n_scint
<< " scintillation photons were produced." << G4endl;
}
}
// loop over secondaries, create statistics
const std::vector<const G4Track*>* secondaries =
step->GetSecondaryInCurrentStep();
for (auto sec : *secondaries) {
if (sec->GetDynamicParticle()->GetParticleDefinition() == opticalphoton){
if (sec->GetCreatorProcess()->GetProcessName().compare("Cerenkov")==0){
@@ -27,7 +27,6 @@
/// \brief Implementation of the TrackInformation class
//
//
// $Id: TrackInformation.cc 97671 2016-06-07 08:25:00Z gcosmo $
//
#include "TrackInformation.hh"
@@ -26,7 +26,6 @@
/// \file optical/OpNovice2/src/TrackingAction.cc
/// \brief Implementation of the TrackingAction class
//
// $Id: TrackingAction.cc 66379 2012-12-18 09:46:33Z gcosmo $
//
#include "TrackingAction.hh"
@@ -1,8 +1,6 @@
/control/verbose 2
/tracking/verbose 0
/run/initialize
/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000008 1.4
/opnovice2/boxProperty ABSLENGTH 0.000002 1000000 0.000005 2000000 0.000008 3000000
@@ -18,6 +16,7 @@
/opnovice2/surfaceProperty BACKSCATTERCONSTANT 0.000002 .05 0.000008 .05
/opnovice2/surfaceProperty REFLECTIVITY 0.000002 .99 0.000008 .99
/run/initialize
#
/gun/particle opticalphoton
/gun/energy 3 eV
-231
View File
@@ -1,231 +0,0 @@
//$Id$
///\file "optical/OpNovice2/.README.txt"
///\brief Example AnaEx01 README page
/*! \page ExampleOpNovice2 Example OpNovice2
OpNovice2
---------
Investigate optical properties and parameters. Details of optical
photon boundary interactions on a surface are recorded. Details
of optical photon generation and transport are recorded.
\section OpNovice2_s1 GEOMETRY DEFINITION
The geometry consists of a cube "box" with a side of 2 m inside
the world cube of side 20 m. Optical properties of the box, the world,
and the surface may be set interactively via the commands defined
in the DetectorMessenger class.
Material properties may be added using the macro commands:
# for the box:
/opnovice2/boxProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn]
/opnovice2/boxConstProperty NAME VALUE
# for the world:
/opnovice2/worldProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn]
/opnovice2/worldConstProperty NAME VALUE
# for the surface:
/opnovice2/surfaceProperty NAME EN1 V1 EN2 V2 [ .. ENn Vn]
Multiple energy and value pairs may be specified for the energy-dependent
properties.
Values are in Geant4 internal units. Energy is in MeV.
Example:
/opnovice2/boxProperty RINDEX 0.000002 1.3 0.000005 1.32 0.000008 1.34
sets the refractive index of the box to 1.3 at 2 eV, 1.32 at 5 eV, and
1.34 at 8 eV.
\section OpNovice2_s2 PHYSICS LIST
The FTFP_BERT physics list is used, with electromagnetic option
EMZ (option4) and G4OpticalPhysics for the optical physics.
\section OpNovice2_s3 AN EVENT : THE PRIMARY GENERATOR
The primary kinematic consists of a single particle. The type of
the particle, its energy, position, and direction, are set
in the PrimaryGeneratorAction class, and can be changed via the G4
build-in commands of G4ParticleGun class (see the macros provided with
this example).
\section OpNovice2_s4 VISUALIZATION
The Visualization Manager is set in the main().
The initialisation of the drawing is done via the commands
/vis/... in the macro vis.mac. To get visualisation:
> /control/execute vis.mac
or run the program with no command line arguments:
$ ./OpNovice2
\section OpNovice2_s5 HOW TO START ?
- Execute OpNovice2 in 'batch' mode from macro files
% OpNovice2 surface.mac
- Execute OpNovice2 in 'interactive mode' with visualization
% OpNovice2
....
Idle> type your commands
....
Idle> exit
\section OpNovice2_s6 RESULTS
A table of optical photon events is printed at the end of the run.
\section OpNovice2_s7 HISTOGRAMS
OpNovice2 has several predefined 1D histograms :
1 : Cerenkov spectrum
2 : scintillation spectrum
3 : boundary process status
4 : X momentum dir of scattered photons with px < 0
5 : Y momentum dir of scattered photons with px < 0
6 : Z momentum dir of scattered photons with px < 0
7 : X momentum dir of scattered photons with px >= 0
8 : Y momentum dir of scattered photons with px >= 0
9 : Z momentum dir of scattered photons with px >= 0
10 : X momentum dir of Fresnel-refracted photons
11 : Y momentum dir of Fresnel-refracted photons
12 : Z momentum dir of Fresnel-refracted photons
Histograms 4-12 are recorded for photons scattered from the +X
surface of the cube. Only the first interaction is recorded.
The histograms are managed by G4Analysis classes.
The histos can be individually activated with the command :
/analysis/h1/set id nbBins valMin valMax unit
where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..)
One can control the name of the histograms file with the command:
/analysis/setFileName name (default opnovice2)
It is possible to choose the format of the histogram file : root (default),
hbook, xml, csv, by using namespace in HistoManager.hh
It is also possible to print selected histograms on an ascii file:
/analysis/h1/setAscii id
All selected histos will be written on a file name.ascii (default opnovice2)
//$Id$
///\file "analysis/AnaEx01/.README.txt"
///\brief Example AnaEx01 README page
/*! \page ExampleAnaEx01 Example AnaEx01
Examples AnaEx01, AnaEx02 and AnaEx03 show the usage of histogram and tuple
manipulations using G4Analysis, ROOT and AIDA compliant systems on the same
scenario. All analysis manipulations (histo booking, filling, saving histos
in a file, etc...) are located in one class : HistoManager, implementation of
which is different in each example. All the other classes are same in all
three examples.
This example shows the usage of histogram and tuple manipulations using
G4Analysis system.
The example is an adaptation of examples/novice/N03. It describes a simple
sampling calorimeter setup.
\section AnaEx01_s1 Detector description
The calorimeter is a box made of a given number of layers. A layer
consists of an absorber plate and of a detection gap. The layer is
replicated.
Six parameters define the calorimeter :
- the material of the absorber,
- the thickness of an absorber plate,
- the material of the detection gap,
- the thickness of a gap,
- the number of layers,
- the transverse size of the calorimeter (the input face is a square).
The default geometry is constructed in DetectorConstruction class,
but all of the above parameters can be modified interactively via
the commands defined in the DetectorMessenger class.
<pre>
|<----layer 0---------->|<----layer 1---------->|<----layer 2---------->|
| | | |
==========================================================================
|| | || | || | ||
|| | || | || | ||
beam || absorber | gap || absorber | gap || absorber | gap ||
======> || | || | || | ||
|| | || | || | ||
==========================================================================
</pre>
\section AnaEx01_s2 Physics list
The particle's type and the physic processes which will be available
in this example are set in the FTFP_BERT physics list.
\section AnaEx01_s3 Action Initialization
A newly introduced class, ActionInitialization,
instantiates and registers to Geant4 kernel all user action classes
which are defined thread-local and a run action class
which is defined both thread-local and global.
The thread-local action classes are defined in
ActionInitialization::Build()
and the global run action class is defined in
ActionInitialization::BuildForMaster().
Note that ActionInitialization::Build() is also used to
instatiate user action clasess in sequential mode.
\section AnaEx01_s4 An event : PrimaryGeneratorAction
The primary kinematic consists of a single particle which hits the
calorimeter perpendicular to the input face. The type of the particle
and its energy are set in the PrimaryGeneratorAction class, and can
be changed via the G4 build-in commands of ParticleGun class.
\section AnaEx01_s5 Histograms
AnaEx01 can produce 4 histograms :
- EAbs : total energy deposit in absorber per event
- EGap : total energy deposit in gap per event
- LAbs : total track length of charged particles in absorber per event
- LGap : total track length of charged particles in gap per event
And 2 Ntuples :
- Ntuple1:
- one row per event : EnergyAbs EnergyGap
- Ntuple2:
- one row per event : TrackLAbs TrackLGap
These histos and ntuples are booked in HistoManager and filled from
EventAction.
One can control the name of the histograms file and its format:
- default name : AnaEx01
The format of the histogram file can be : root (default),
xml, csv. Include correct g4nnn.hh in HistoManager.hh
\section AnaEx01_s7 How to build
An additional step is needed when building the example with GNUmake
due to using the extra shared directory:
\verbatim
% cd path_to_AnaEx01/AnaEx01
% gmake setup
% gmake
\endverbatim
This will copy the files from shared in the example include and src;
to remove these files:
\verbatim
% gmake clean_setup
\endverbatim
*/