Import Geant4 11.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2021-12-12 17:16:06 +01:00
parent 80e2389dd8
commit 84f33a068c
593 changed files with 68589 additions and 1 deletions
@@ -0,0 +1,158 @@
///\file "eventgenerator/particleGun/.README.txt"
///\brief Example ParticleGun README page
/*! \page ExampleparticleGun Example particleGun
History:
- 10-06-2010 : Makoto Asai - merge into one example
- 13-05-2010 : Michel Maire - create as three examples
This example demonstrates 5 ways of the usage of G4ParticleGun shooting
primary particles in different cases. These are
-# uniform particle direction in a given solid angle
-# Generate several vertices and particles per event
-# Show how to sample a tabulated function (eg. energy spectrum)
-# Divergent beam in an arbitrary direction
-# Shooting primaries in spherical coordinates with rotation matrix.
These usages can be chosen by a UI command
\verbatim
/gunExample/selectGunAction actionID
\endverbatim
where <i>actionID</i> corresponds to above cases.
\section ParticleGun_s1 Geometry construction
It is a simple box which represents an 'infinite' homogeneous medium.
\section ParticleGun_s2 Physics list
PhysicsList.cc defines only geantino and transportation process.
\section ParticleGun_s3 Primary generator
There are 5 concrete primary generator action classes
(PrimaryGeneratorActionN, N=0,1,2,3,4) which can be used as an independent sample
code.
PrimaryGeneratorAction is the class which uses and switches between these
5 concrete action classes. Each concrete generator action shoots geantinoes
in a distribution decribed below.
\subsection ParticleGun_sub_s30 0. Uniform particle direction in a given solid angle
spherical angles (alpha,psi) respective to z axis
Histograms 5,6 show momentum direction in master frame.
\subsection ParticleGun_sub_s31 1. Generate several vertices and particles per event
- particle 1 : a geantino uniformly randomized on a cylinder surface.
- particle 2 and 3 : symetric to particle 1.
In addition, time_zero of each event is randomized.
\subsection ParticleGun_sub_s32 2. Show how to sample a tabulated function (energy spectrum)
Energy is sampled from a tabulated function defined in InitFunction().
The function is assumed positive, linear per segment, continuous.
Two sampling methods are illustrated : RejectAccept() and InverseCumul()
(see Particle Data book, Monte Carlo techniques).
Histogram 1 shows generated energy spectrum.
\subsection ParticleGun_sub_s33 3. Divergent beam in an arbitrary direction with rotation matrix
A geantino uniformly randomized around a given direction (theta, phi).
One wants to limit particle direction uniformly around this direction.
First, one generates momentum direction in the master frame (eg. World).
AlphaMax = opening angle around z axis.
Then one rotates momentum in local frame, using rotateUz() function.
RotateUz() transforms uz to newUz. It is composition of two simple rotations:
theta around oy, then phi around oz (non commutative). \n
See:
http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html \n
Histograms 5,6 show momentum direction in local frame.
\subsection ParticleGun_sub_s34 4. Shooting primaries in spherical coordinates with rotation matrix
a geantino uniformly randomized within a spherical shell.
a) Vertex position
One wishes to shoot uniformly within a spherical shell.
One works in spherical coordinates. One uses inverse cumulative method with
analytical formulae. \n
Histograms 2,3,4 demonstrate uniform distribution of vertex position.
b) Momentum direction
One wants to limit particle direction uniformly within (alphaMin, alphaMax).
First, one generates momentum direction in the master frame (eg. World).
Then, one rotates momentum in vertex_position frame, using rotateUz() function.
RotateUz() transforms uz to ur. It is composition of two elementary rotations:
theta around oy, then phi around oz (non commutative). \n
See:
http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html \n
Histograms 5,6 show momentum direction in vertex_position frame.
\section ParticleGun_s4 Visualisation
Visualization Manager is set in the main () (see particleGun.cc).
Initialisation of the drawing is done via the commands
/vis/.. in the macro vis.mac. This macro is automatically read from the main
in case of interactive running mode.
\section ParticleGun_s5 How to start ?
- Execute particleGun in 'batch' mode from macro files
\verbatim
% ParticleGun run1.mac
\endverbatim
- Execute particleGun2 in 'interactive mode' with visualization
\verbatim
% particleGun
....
Idle> ---> type your commands. For instance:
Idle> /gunExample/selectGunAction 1
Idle> /run/beamOn 10
....
Idle> exit
\endverbatim
\section ParticleGun_s6 Histograms
particleGun produces several 1D histograms which are saved as
particleGun.root by default.
- 1 : energy spectrum dN/dE = f(E)
- 2 : vertex position: radial distr dN/dv = f(r)
- 3 : vertex position: cos(theta)
- 4 : vertex position: phi
- 5 : particle direction in local frame: cos(alpha)
- 6 : particle direction in local frame: psi
Please note that histogram 1 will be filled only if you use
PrimaryGeneratorAction2, histos 5,6 with PrimaryGeneratorAction0 and 3
and 2 through 6 will be filled with PrimaryGeneratorAction4.
The histograms are managed by the HistoManager class and its Messenger.
The histos can be individually activated with the command :
\verbatim
/analysis/h1/set id nbBins valMin valMax unit
\endverbatim
where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..)
One can control the name of the histograms file with the command:
\verbatim
/analysis/h1/setFileName name (default particleGun)
\endverbatim
It is possible to choose the format of the histogram file : root (default),
xml, csv, by using namespace in HistoManager.hh
It is also possible to print selected histograms on an ascii file:
\verbatim
/analysis/h1/setAscii id
\endverbatim
All selected histos will be written on a file name.ascii (default gunExample)
*/
@@ -0,0 +1,152 @@
-------------------------------------------------------------------
=========================================================
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
=========================================================
ParticleGun
-----------
History:
10-06-2010 : Makoto Asai - merge into one example
13-05-2010 : Michel Maire - create as three examples
This example demonstrates 5 ways of the usage of G4ParticleGun shooting
primary particles in different cases. These are
0) uniform particle direction in a given solid angle
1) Generate several vertices and particles per event
2) Show how to sample a tabulated function (eg. energy spectrum)
3) Divergent beam in an arbitrary direction
4) Shooting primaries in spherical coordinates with rotation matrix.
These usages can be chosen by a UI command
/gunExample/selectGunAction <actionID>
where <actionID> corresponds to above cases.
1- Geometry construction
---------------------
It is a simple box which represents an 'infinite' homogeneous medium.
2- Physics list
------------
PhysicsList.cc defines only geantino and transportation process.
3- Primary generator
-----------------
There are 5 concrete primary generator action classes
(PrimaryGeneratorActionN, N=0,1,2,3,4) which can be used as an independent sample
code.
PrimaryGeneratorAction is the class which uses and switches between these
5 concrete action classes. Each concrete generator action shoots geantinoes
in a distribution decribed below.
3.0- uniform particle direction in a given solid angle
-------------------------------------------------
spherical angles (alpha,psi) respective to z axis
Histograms 5,6 show momentum direction in master frame.
3.1- Generate several vertices and particles per event
-------------------------------------------------
particle 1 : a geantino uniformly randomized on a cylinder surface.
particle 2 and 3 : symetric to particle 1.
In addition, time_zero of each event is randomized.
3.2- Show how to sample a tabulated function (energy spectrum)
---------------------------------------------------------
Energy is sampled from a tabulated function defined in InitFunction().
The function is assumed positive, linear per segment, continuous.
Two sampling methods are illustrated : RejectAccept() and InverseCumul()
(see Particle Data book, Monte Carlo techniques).
Histogram 1 shows generated energy spectrum.
3.3- Divergent beam in an arbitrary direction with rotation matrix
-------------------------------------------------------------
A geantino uniformly randomized around a given direction (theta, phi).
One wants to limit particle direction uniformly around this direction.
First, one generates momentum direction in the master frame (eg. World).
AlphaMax = opening angle around z axis.
Then one rotates momentum in local frame, using rotateUz() function.
RotateUz() transforms uz to newUz. It is composition of two simple rotations:
theta around oy, then phi around oz (non commutative).
http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html
Histograms 5,6 show momentum direction in local frame.
3.4- Shooting primaries in spherical coordinates with rotation matrix
----------------------------------------------------------------
a geantino uniformly randomized within a spherical shell.
a) Vertex position
One wishes to shoot uniformly within a spherical shell.
One works in spherical coordinates. One uses inverse cumulative method with
analytical formulae.
Histograms 2,3,4 demonstrate uniform distribution of vertex position.
b) Momentum direction
One wants to limit particle direction uniformly within (alphaMin, alphaMax).
First, one generates momentum direction in the master frame (eg. World).
Then, one rotates momentum in vertex_position frame, using rotateUz() function.
RotateUz() transforms uz to ur. It is composition of two elementary rotations:
theta around oy, then phi around oz (non commutative).
http://proj-clhep.web.cern.ch/proj-clhep/manual/UserGuide/VectorDefs/node49.html
Histograms 5,6 show momentum direction in vertex_position frame.
4- Visualisation
-------------
Visualization Manager is set in the main().
Initialisation of the drawing is done via the commands
/vis/.. in the macro vis.mac. This macro is automatically read from the main
in case of interactive running mode.
5- How to start ?
--------------
- execute particleGun in 'batch' mode from macro files
% ParticleGun run1.mac
- execute particleGun2 in 'interactive mode' with visualization
% particleGun
....
Idle> ---> type your commands. For instance:
Idle> /gunExample/selectGunAction 1
Idle> /run/beamOn 10
....
Idle> exit
6- Histograms
----------
particleGun produces several 1D histograms which are saved as
particleGun.root by default.
1 : energy spectrum dN/dE = f(E)
2 : vertex position: radial distr dN/dv = f(r)
3 : vertex position: cos(theta)
4 : vertex position: phi
5 : particle direction in local frame: cos(alpha)
6 : particle direction in local frame: psi
Please note that histogram 1 will be filled only if you use
PrimaryGeneratorAction2, histos 5,6 with PrimaryGeneratorAction0 and 3
and 2 through 6 will be filled with PrimaryGeneratorAction4.
The histograms are managed by the HistoManager class and its Messenger.
The histos can be individually activated with the command :
/analysis/h1/set id nbBins valMin valMax unit
where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..)
One can control the name of the histograms file with the command:
/analysis/h1/setFileName name (default particleGun)
It is possible to choose the format of the histogram file : root (default),
xml, csv, by using namespace in HistoManager.hh
It is also possible to print selected histograms on an ascii file:
/analysis/h1/setAscii id
All selected histos will be written on a file name.ascii (default gunExample)