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
+139
View File
@@ -0,0 +1,139 @@
Expat, Release 2.1.0
This is Expat, a C library for parsing XML, written by James Clark.
Expat is a stream-oriented XML parser. This means that you register
handlers with the parser before starting the parse. These handlers
are called when the parser discovers the associated structures in the
document being parsed. A start tag is an example of the kind of
structures for which you may register handlers.
Windows users should use the expat_win32bin package, which includes
both precompiled libraries and executables, and source code for
developers.
Expat is free software. You may copy, distribute, and modify it under
the terms of the License contained in the file COPYING distributed
with this package. This license is the same as the MIT/X Consortium
license.
Versions of Expat that have an odd minor version (the middle number in
the release above), are development releases and should be considered
as beta software. Releases with even minor version numbers are
intended to be production grade software.
If you are building Expat from a check-out from the CVS repository,
you need to run a script that generates the configure script using the
GNU autoconf and libtool tools. To do this, you need to have
autoconf 2.58 or newer. Run the script like this:
./buildconf.sh
Once this has been done, follow the same instructions as for building
from a source distribution.
To build Expat from a source distribution, you first run the
configuration shell script in the top level distribution directory:
./configure
There are many options which you may provide to configure (which you
can discover by running configure with the --help option). But the
one of most interest is the one that sets the installation directory.
By default, the configure script will set things up to install
libexpat into /usr/local/lib, expat.h into /usr/local/include, and
xmlwf into /usr/local/bin. If, for example, you'd prefer to install
into /home/me/mystuff/lib, /home/me/mystuff/include, and
/home/me/mystuff/bin, you can tell configure about that with:
./configure --prefix=/home/me/mystuff
Another interesting option is to enable 64-bit integer support for
line and column numbers and the over-all byte index:
./configure CPPFLAGS=-DXML_LARGE_SIZE
However, such a modification would be a breaking change to the ABI
and is therefore not recommended for general use - e.g. as part of
a Linux distribution - but rather for builds with special requirements.
After running the configure script, the "make" command will build
things and "make install" will install things into their proper
location. Have a look at the "Makefile" to learn about additional
"make" options. Note that you need to have write permission into
the directories into which things will be installed.
If you are interested in building Expat to provide document
information in UTF-16 encoding rather than the default UTF-8, follow
these instructions (after having run "make distclean"):
1. For UTF-16 output as unsigned short (and version/error
strings as char), run:
./configure CPPFLAGS=-DXML_UNICODE
For UTF-16 output as wchar_t (incl. version/error strings),
run:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Edit the MakeFile, changing:
LIBRARY = libexpat.la
to:
LIBRARY = libexpatw.la
(Note the additional "w" in the library name.)
3. Run "make buildlib" (which builds the library only).
Or, to save step 2, run "make buildlib LIBRARY=libexpatw.la".
4. Run "make installlib" (which installs the library only).
Or, if step 2 was omitted, run "make installlib LIBRARY=libexpatw.la".
Using DESTDIR or INSTALL_ROOT is enabled, with INSTALL_ROOT being the default
value for DESTDIR, and the rest of the make file using only DESTDIR.
It works as follows:
$ make install DESTDIR=/path/to/image
overrides the in-makefile set DESTDIR, while both
$ INSTALL_ROOT=/path/to/image make install
$ make install INSTALL_ROOT=/path/to/image
use DESTDIR=$(INSTALL_ROOT), even if DESTDIR eventually is defined in the
environment, because variable-setting priority is
1) commandline
2) in-makefile
3) environment
Note: This only applies to the Expat library itself, building UTF-16 versions
of xmlwf and the tests is currently not supported.
Note for Solaris users: The "ar" command is usually located in
"/usr/ccs/bin", which is not in the default PATH. You will need to
add this to your path for the "make" command, and probably also switch
to GNU make (the "make" found in /usr/ccs/bin does not seem to work
properly -- appearantly it does not understand .PHONY directives). If
you're using ksh or bash, use this command to build:
PATH=/usr/ccs/bin:$PATH make
When using Expat with a project using autoconf for configuration, you
can use the probing macro in conftools/expat.m4 to determine how to
include Expat. See the comments at the top of that file for more
information.
A reference manual is available in the file doc/reference.html in this
distribution.
The homepage for this project is http://www.libexpat.org/. There
are links there to connect you to the bug reports page. If you need
to report a bug when you don't have access to a browser, you may also
send a bug report by email to expat-bugs@mail.libexpat.org.
Discussion related to the direction of future expat development takes
place on expat-discuss@mail.libexpat.org. Archives of this list and
other Expat-related lists may be found at:
http://mail.libexpat.org/mailman/listinfo/
+40
View File
@@ -0,0 +1,40 @@
---
Checks: "-*,\
google-readability-casting,\
misc-*,\
-misc-incorrect-roundings,\
-misc-macro-parentheses,\
-misc-misplaced-widening-cast,\
-misc-static-assert,\
modernize-*,\
-modernize-deprecated-headers,\
-modernize-pass-by-value,\
-modernize-raw-string-literal,\
-modernize-return-braced-init-list,\
-modernize-use-auto,\
-modernize-use-default-member-init,\
-modernize-use-emplace,\
-modernize-use-equals-default,\
-modernize-use-equals-delete,\
-modernize-use-noexcept,\
-modernize-use-transparent-functors,\
-modernize-use-using,\
performance-*,\
-performance-inefficient-string-concatenation,\
readability-*,\
-readability-function-size,\
-readability-identifier-naming,\
-readability-implicit-bool-cast,\
-readability-inconsistent-declaration-parameter-name,\
-readability-named-parameter,\
-readability-redundant-declaration,\
-readability-redundant-member-init,\
-readability-simplify-boolean-expr,\
"
HeaderFilterRegex: 'source/[^/]*\.(hh|cc)$'
CheckOptions:
- key: readability-braces-around-statements.ShortStatementLines
value: '2'
- key: readability-implicit-bool-conversion.AllowPointerConditions
value: '1'
...
+2
View File
@@ -0,0 +1,2 @@
# Parallel Tasking Library (PTL)
Lightweight C++11 multithreading tasking system featuring thread-pool, task-groups, and lock-free task queue
+157
View File
@@ -0,0 +1,157 @@
Gunter Folger - 12 June 2018
============================
- Switch to original zlib sources, using zlib 1.2.11. Use C as compiler.
Keep sources.cmake, this has most of zlib CMakeLists.txt code.
Gunter Folger - 17 June 2015
============================
- Update to zlib-1.2.8, keeping Geant4 specific structure of files.
Compare files to new zlib, and transfer changes, keeping local
modifications, like function declarationss, and removed register keyword.
Gunter Folger - 27-March 2013
=============================
Update to zlib 1.2.7
Again, rename source files to .cc.
Add files for reading zlib format, i.e. zlib is now complete.
Re-modify functions to compile with C++ compiler, "type-name" rather than
"name { type" in all .cc code.
In {gzlib,gzread,gzwrite}.cc, introduced several casts to avoid compile error for invalid
converion
- May 2013:
Adapt to Geant4 cmake; copied portions of zlib CMakeLists.tzt to sources.cmake,
using standard G4 CMakeLists.txt. Private header are in src, include only has
zlib.h; zconf.h is configured and put into build tree; these two header files
are installed.
Mark Donszelmann - 4 May 2005
=============================
Files renamed to .cc
Removed all files for reading zlib format.
Functions were modified to compile with C++ compiler, "type-name" rather than
"name { type", in:
adler32.cc, compress.cc, crc32.cc, deflate.cc, trees.cc
In: deflate.cc and trees.cc all strings are casted to (char*) to avoid warnings.
=============================================================
Original zlib README:
=====================
ZLIB DATA COMPRESSION LIBRARY
zlib 1.2.7 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
rfc1952 (gzip format).
All functions of the compression library are documented in the file zlib.h
(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
of the library is given in the file test/example.c which also tests that
the library is working correctly. Another example is given in the file
test/minigzip.c. The compression library itself is composed of all source
files in the root directory.
To compile all files and run the test program, follow the instructions given at
the top of Makefile.in. In short "./configure; make test", and if that goes
well, "make install" should work for most flavors of Unix. For Windows, use
one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
make_vms.com.
Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
<info@winimage.com> for the Windows DLL version. The zlib home page is
http://zlib.net/ . Before reporting a problem, please check this site to
verify that you have the latest version of zlib; otherwise get the latest
version and check whether the problem still exists or not.
PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
The changes made in version 1.2.7 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
zlib is available in Java using the java.util.zip package, documented at
http://java.sun.com/developer/technicalArticles/Programming/compression/ .
A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
at CPAN (Comprehensive Perl Archive Network) sites, including
http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
available in Python 1.5 and later versions, see
http://docs.python.org/library/zlib.html .
zlib is built into tcl: http://wiki.tcl.tk/4610 .
An experimental package to read and write files in .zip format, written on top
of zlib by Gilles Vollant <info@winimage.com>, is available in the
contrib/minizip directory of zlib.
Notes for some targets:
- For Windows DLL versions, please see win32/DLL_FAQ.txt
- For 64-bit Irix, deflate.c must be compiled without any optimization. With
-O, one libpng test fails. The test works in 32 bit mode (with the -n32
compiler flag). The compiler bug has been reported to SGI.
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
when compiled with cc.
- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
necessary to get gzprintf working correctly. This is done by configure.
- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
other compilers. Use "make test" to check your compiler.
- gzdopen is not supported on RISCOS or BEOS.
- For PalmOs, see http://palmzlib.sourceforge.net/
Acknowledgments:
The deflate format used by zlib was defined by Phil Katz. The deflate and
zlib specifications were written by L. Peter Deutsch. Thanks to all the
people who reported problems and suggested various improvements in zlib; they
are too numerous to cite here.
Copyright notice:
(C) 1995-2012 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly Mark Adler
jloup@gzip.org madler@alumni.caltech.edu
If you use the zlib library in a product, we would appreciate *not* receiving
lengthy legal documents to sign. The sources are provided for free but without
warranty of any kind. The library has been entirely written by Jean-loup
Gailly and Mark Adler; it does not include third-party code.
If you redistribute modified sources, we would appreciate that you include in
the file ChangeLog history information documenting your changes. Please read
the FAQ for more information on the distribution of modified source versions.
+105
View File
@@ -0,0 +1,105 @@
G3toG4
------
G3toG4 is the Geant4 facility to convert Geant3 geometries into Geant4.
This is done in two stages.
First, the user supplies a Geant3 .rz file containing the initialization
data structures. An executable, rztog4, reads this file and produces an
ascii ("call list") file containing instructions on how to build the
geometry. The source code for this is fortran.
Second, a call list interpreter (G4BuildGeom.cc) reads these instructions
and builds the geometry in the user's G4 client code.
Two examples of how to use the call list interpreter are supplied in
examples/extended/g3tog4:
- the first example, cltog4, is a simple example which simply invokes the
call list interpreter method G4BuildGeom from G3toG4DetectorConstruction
class, builds the geometry and exits.
- the second example, clGeometry, is more complete and is patterned after
the novice G4 examples. It also invokes the call list interpreter, but
in addition, allows the geometry to be visualized and particles to be
tracked. Currently, G3toG4 does not provide a method for scoring hits
in G4.
To build these examples, especially the one involving visualization, the
user must have one or more of the following environment variables set:
setenv G4VIS_BUILD_<driver>_DRIVER
setenv G4VIS_USE_<driver>
where the G4-supported drivers are listed in source/visualization/README.
To use the freeware Mesa API, you must have the environment variable
OGLHOME defined to point to the directory containing the Mesa lib/ directory
specific to your platform.
To compile and build the G3toG4 libraries, simply type
gmake
from the top-level G3toG4 directory.
To build the converter executable "rztog4", simply type
gmake bin
To make everything, simply type:
gmake global
To remove all G3toG4 libraries, executables and .d files, simply type
gmake clean
the implementation (April 1999)
----------------------------------------
- PGON, PCON are built using the CSG classes G4Polycone and G4Polyhedra.
- G3 MANY feature has not been tested.
- GsROTM is fully implemented and supports rotations and mirror reflections
- GSPOSP implemented via individual logical volumes for each instantiation
(G4PVIndexed doesn't exist yet)
- GSDV* routines for dividing volumes implemented, using
G4PVReplicas, G4PVParametrised
- GSROTM is implemented
- hits are not implemented. Hit code is do-nothing. (It is
coded up, but hit class references are commented out.)
The digits+hits code has to be updated before G3toG4's
hit code can be activated.
- GSPART has to be updated.
- Usage of magnetic field class has to be turned on.
the implementation (February 2001)
----------------------------------------
- Supported shapes: all G3 shapes except for
"HYPE", "GTRA", "CTUB"
- G3 MANY feature is not supported.
- GSDV* routines for dividing volumes implemented, using
G4PVReplicas, for shapes:
"BOX", "TUBE", "TUBS", "PARA" - all axes;
"CONE", "CONS" - axes 2, 3;
"TRD1", "TRD2", "TRAP" - axis 3;
"PGON", "PCON" - axis 2;
"PARA" -axis 1; axis 2,3 for a special case
Unsupported shapes:
"SPHE", "ELTU", "HYPE", "GTRA", "CTUB"
the implementation (November 2001)
----------------------------------------
- Support for G3 MANY feature:
MANY positions are resolved in G3toG4MANY function,
which has to be processed before G3toG4BuildTree
(it is not called by default).
In order to resolve MANY user code has to provide
additional info using G4gsbool(G4String volName, G4String manyVolName)
function) for all overlapping volumes. Daughters of
overlapping volumes are then resolved automatically
and should not be specified via Gsbool.
Limitation: a volume with a MANY position can have only this
one position; if more than one position is needed a new volume
has to be defined (gsvolu) for each position.
See History file for modification history.
@@ -0,0 +1,14 @@
-------------------------------------------------------------------
G4DecayPhysics
--------------
G4RadioactiveDecayPhysics
-------------------------
G4SpinDecayPhysics
------------------
G4UnknownDecayPhysics
---------------------
@@ -0,0 +1,91 @@
-------------------------------------------------------------------
G4EmDNAChemistry
----------------
G4EmDNAPhysics
--------------
G4EmDNAPhysicsActivator
-----------------------
G4EmDNAPhysics_option1
----------------------
G4EmDNAPhysics_option2
----------------------
G4EmDNAPhysics_option3
----------------------
G4EmDNAPhysics_option4
----------------------
G4EmDNAPhysics_option5
----------------------
G4EmDNAPhysics_option7
----------------------
G4EmLEPTSPhysics
----------------
G4EmLivermorePhysics
--------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmLivermorePolarizedPhysics
-----------------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmLowEPPhysics
----------------
G4EmModelActivator
------------------
G4EmPenelopePhysics
-------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysics
-------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysicsGS
---------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysicsSS
---------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysicsWVI
----------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysics_option1
---------------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysics_option2
---------------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysics_option3
---------------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4EmStandardPhysics_option4
---------------------------
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
G4OpticalPhysics
----------------
G4OpticalPhysicsMessenger
-------------------------
G4OpticalProcessIndex
---------------------
@@ -0,0 +1,9 @@
-------------------------------------------------------------------
G4PhysicsConstructorFactory
---------------------------
G4PhysicsConstructorRegistry
----------------------------
@@ -0,0 +1,48 @@
-------------------------------------------------------------------
G4BertiniElectroNuclearBuilder
------------------------------
It includes gamma-nuclear, electron-nuclear and positron-nuclear
processes.
For gamma-nuclear, it uses Bertini (BERT) model for gamma below 6 GeV,
and Quark-Gluon-String (QGS) model above 3 GeV.
For electron-nuclear and positron-nuclear, it uses the equivalent photon
approximation in which the incoming lepton generates a virtual photon,
and then the virtual photon is converted to a real photon. This real
photon is handled by BERT if its energy is below 10 GeV; if it is above
10 GeV, then the real photon is transformed into a (on-shell) pi0 and
then handled by Fritiof (FTF) string model.
G4EmExtraPhysics
----------------
It uses G4BertiniElectroNuclearBuilder for gamma-nuclear, electron-nuclear
and positron-nuclear.
Moreover, it includes muon-nuclear process (for mu- and mu+), and
synchrotron process (either for electron & positron, or for all
charged particles).
The muon-nuclear process is treated similarly as for electrons and
positrons (i.e. the equivalent photon approximation in which the incoming
lepton generates a virtual photon, and then the virtual photon is converted
to a real photon, which is handled by BERT below 10 GeV or by FTF as a pi0
above 10 GeV).
By default, gamma-nuclear, electron-nuclear, positron-nuclear, and
muon-nuclear are switched on, whereas synchrotron process is switched off
for all particles. It is however possible, at run time via macro commands,
to change this default (see G4EmMessenger below).
G4EmMessenger
-------------
Used by G4EmExtraPhysics to be able to switch on/off:
- synchrotron radiation for electron and positron
(note: electron and positron together, not individually)
- synchrotron radiation for all charged particles
(note: all charged particles together, not individually)
- gamma-nuclear, electron-nuclear and positron-nuclear
(note: all these three particles together, not individually)
- muon-nuclear
(note: mu- and mu+ together, not individually)
at run time, via macro commands.
@@ -0,0 +1,104 @@
-------------------------------------------------------------------
G4HadronElasticPhysics
----------------------
Hadron nuclear elastic process for all hadrons:
- proton
- cross section: Barashenkov-Glauber-Gribov
- final-state: Chips
- neutron:
- cross section: G4NeutronElasticXS
- final-state: Chips
- charged pions:
- cross section: Barashenkov-Glauber-Gribov
- final-state: Starkov's model (G4ElasticHadrNucleusHE) for all energies
- kaons, hyperons, anti-hyperons, charm and bottom hadrons
- cross section: Glauber-Gribov
- final-state: Gheisha
- deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3,
anti_alpha
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
Gheisha below.
G4HadronElasticPhysicsHP
------------------------
As G4HadronElasticPhysics, with the only difference that for neutrons
below 20 MeV, NeutronHP elastic is used (for both cross section and
final-state model).
G4HadronElasticPhysicsLEND
--------------------------
As G4HadronElasticPhysics, with the only difference that for neutrons
below 20 MeV, LEND elastic is used (for both cross section and
final-state model).
G4HadronElasticPhysicsXS
------------------------
Now exactly as G4HadronElasticPhysics.
G4HadronHElasticPhysics
-----------------------
- proton
- cross section: Barashenkov-Glauber-Gribov
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- neutron:
- cross section: G4NeutronElasticXS
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- charged pions:
- cross section: Barashenkov-Glauber-Gribov
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- kaons, hyperons, anti-hyperons, charm and bottom hadrons
- cross section: Glauber-Gribov
- final-state: Gheisha
- deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
- anti_proton, anti_neutron
- cross section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
Chips below.
- anti_deuteron, anti_triton, anti_He3, anti_alpha
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
Gheisha below.
G4IonElasticPhysics
-------------------
As G4HadronElasticPhysics, with the addition of elastic process for
generic ion:
- cross section: Glauber-Gribov
- final-state: Diffuse model
G4HadronDElasticPhysics
-----------------------
Hadron nuclear elastic process for all hadrons:
- proton and charged pions:
- cross section: Barashenkov-Glauber-Gribov
- final-state: Diffuse model where applicable, else Gheisha
- neutron:
- cross section: G4NeutronElasticXS
- final-state: Diffuse model where applicable, else Gheisha
- kaons, hyperons, anti-hyperons, charm and bottom hadrons,
deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3,
anti_alpha
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
Gheisha below.
G4ChargeExchangePhysics
-----------------------
Hadron nuclear coherent charge exchange, used in this constructor
only for nucleons and charged pions.
@@ -0,0 +1,282 @@
-------------------------------------------------------------------
G4HadronInelasticQBBC
---------------------
Hadron nuclear inelastic processes for all hadrons:
- proton inelastic:
- cross section: G4ParticleInelasticXS
- final-state: Fritiof coupled with Precompound/de-excitation (FTFP) above 3 GeV;
Bertini (BERT) between 1 and 6 GeV;
Binary coupled with Precompound/de-excitation (BIC) below 1.5 GeV
- neutron inelastic:
- cross section: G4NeutronInelasticXS
- final-state: FTFP > 3 GeV; 1 GeV < BERT < 6 GeV; BIC < 1.5 GeV
neutron capture:
- cross section: G4NeutronCaptureXS
- final-state: G4NeutronRadCapture
- charged pions inelastic:
- cross section: Barashenkov-Glauber-Gribov
- final-state: FTFP > 3 GeV; 1 GeV < BERT < 12 GeV; BIC < 1.5 GeV
- kaons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- charm and bottom hadrons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
G4HadronPhysicsFTFP_BERT
------------------------
Hadron nuclear inelastic processes for all hadrons:
- proton inelastic:
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- neutron inelastic:
- cross section: G4NeutronInelasticXS
- final-state: FTFP > 3 GeV; BERT < 6 GeV
neutron capture:
- cross section: G4NeutronCaptureXS
- final-state: G4NeutronRadCapture
- charged pions inelastic:
- cross section: Barashenkov-Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- kaons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- charm and bottom hadrons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
G4HadronPhysicsFTFP_BERT_ATL
----------------------------
Similar to G4HadronPhysicsFTFP_BERT, with the difference that for proton,
neutron, pions and kaons, the FTFP is used above 9 GeV and BERT below 12 GeV
(i.e. transition between these two models is in the interval [9, 12] GeV
for the most frequent hadrons).
G4HadronPhysicsFTFP_BERT_HP
--------------------------
Similar to G4HadronPhysicsFTFP_BERT, but with a different treatment of
low-energy neutrons:
- neutron inelastic: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section;
final-state: BERT between 19.9 MeV and 6 GeV,
FTFP above 3 GeV.
- neutron capture: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section
and G4NeutronRadCapture final-state.
- neutron fission: use NeutronHP (for both cross section and final state)
below 20 MeV; above Gheisha (cross section and final state).
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
G4HadronPhysicsFTFP_BERT_TRV
----------------------------
The same as G4HadronPhysicsFTFP_BERT.
G4HadronPhysicsFTF_BIC
----------------------
Similar to G4HadronPhysicsFTFP_BERT, with the following differences:
- For proton and neutron, BIC is used (instead of BERT) below 6 GeV
- For pions, BIC is used below 1.5 GeV, whereas BERT is used in the
interval 1 GeV < BERT < 6 GeV
- FTF is coupled with BIC (instead of directly to Precompound/de-excitation).
G4HadronPhysicsQGS_BIC
----------------------
Similar to G4HadronPhysicsFTP_BIC, except that QGSP is used above 12 GeV
and FTFP below 25 GeV.
G4HadronPhysicsFTFQGSP_BERT
---------------------------
Similar to G4HadronPhysicsFTFP_BERT, but with QGS fragmentation of strings
(instead of the Lund string fragmentation).
G4HadronPhysicsINCLXX
---------------------
Similar to QGSP_BERT except for:
- proton inelastic:
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
- neutron inelastic:
- cross section: G4NeutronInelasticXS
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
- charged pions inelastic:
- cross section: Barashenkov-Glauber-Gribov
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
- kaons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 14 GeV; BERT < 15 GeV
Note: it is possible to specify in the constructor the use of FTFP
instead of QGSP;
moreover, NeutronHP can also be activated in the constructor,
in which case inelastic, capture and fission below 20 MeV are
taken from NeutronHP (both cross section and final-state).
G4HadronPhysicsNuBeam
---------------------
Similar to FTFP_BERT, except for the final-state models of proton:
- proton : QGSP with Lund string fragmentation > 100 GeV;
3 GeV < FTFP < 101 GeV; BERT < 6 GeV
G4HadronPhysicsQGSP_BERT
------------------------
Hadron nuclear inelastic processes for all hadrons:
- proton inelastic:
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- neutron inelastic:
- cross section: G4NeutronInelasticXS
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
neutron capture:
- cross section: G4NeutronCaptureXS
- final-state: G4NeutronRadCapture
- charged pions inelastic:
- cross section: Barashenkov-Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- kaons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton and anti_neutron inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- charm and bottom hadrons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
G4HadronPhysicsQGSP_FTFP_BERT
-----------------------------
Currently it is the same as QGSP_BERT (this was not the case before G4 10.6).
It might be removed in future versions of Geant4.
G4HadronPhysicsQGSP_BERT_HP
---------------------------
Similar to G4HadronPhysicsQGSP_BERT, but with a different treatment of
low-energy neutrons:
- neutron inelastic: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section;
final-state: BERT between 19.9 MeV and 6 GeV,
FTFP between 3 and 25 GeV, QGSP above 12 GeV.
- neutron capture: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section
and G4NeutronRadCapture final-state.
- neutron fission: use NeutronHP (for both cross section and final state)
below 20 MeV; above Gheisha (cross section and final state).
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
G4HadronPhysicsQGSP_BIC
-----------------------
Hadron nuclear inelastic processes for all hadrons:
- proton inelastic:
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV
- neutron inelastic:
- cross section: G4NeutronInelasticXS
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV
neutron capture:
- cross section: G4NeutronCaptureXS
- final-state: G4NeutronRadCapture
- charged pions inelastic:
- cross section: Barashenkov-Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- kaons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton and anti_neutron inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
G4HadronPhysicsQGSP_BIC_HP
--------------------------
Similar to G4HadronPhysicsQGSP_BIC, but with a different treatment of
low-energy neutrons:
- neutron inelastic: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section;
final-state: BIC between 19.9 MeV and 6 GeV,
FTFP between 3 and 25 GeV, QGSP above 12 GeV.
- neutron capture: use NeutronHP (for both cross section and final state)
below 20 MeV; above G4NeutronCaptureXS cross section
and G4NeutronRadCapture final-state.
- neutron fission: use NeutronHP (for both cross section and final state)
below 20 MeV; above Gheisha (cross section and final state).
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
G4HadronPhysicsQGSP_BIC_AllHP
-----------------------------
Similar to G4HadronPhysicsQGSP_BIC_HP, but with a different treatment of
low-energy protons:
ParticleHP is used (for both cross section and final state) below 200 MeV;
above it: Barashenkov-Glauber-Gribov inelastic cross section;
final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; 190 MeV < BIC < 6 GeV.
G4HadronPhysicsShielding
------------------------
Similar to G4HadronPhysicsFTFP_BERT_HP except for using
JENDLHEInelasticCrossSection for the neutron inelastic cross section
above 20 MeV.
Note: the variant "M" of the Shielding physics list has a transition region
between FTFP and BERT for pions between 9.5 and 9.9 GeV
(instead of 3-6 GeV).
G4HadronPhysicsShieldingLEND
----------------------------
Similar to G4HadronPhysicsShielding, except that LEND is used for neutrons
below 20 MeV instead of NeutronHP.
G4VHadronPhysics
----------------
Utility class which provides useful methods.
@@ -0,0 +1,44 @@
-------------------------------------------------------------------
G4IonBinaryCascadePhysics
-------------------------
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
generic ion projectiles), with Glauber-Gribov cross section and
Binary Light Ion (BIC, with Precompound/de-excitation) and Fritiof (FTF)
string model (with Precompound/de-excitation) for the final state.
BIC is used for projectiles of kinetic energies below 6 GeV/nucleon, and
FTF above 3 GeV/nucleon.
G4IonINCLXXPhysics
------------------
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
generic ion projectiles), with Glauber-Gribov cross section and
INCLXX and FTFP for the final state. INCLXX is used below 3 GeV/nucleon,
and FTF above 2.9 GeV/nucleon.
G4IonPhysics
------------
Currently equivalent to G4IonBinaryCascadePhysics.
G4IonPhysicsXS
--------------
As G4IonPhysics, except that for deuteron, triton, He3 and alpha
the corresponding G4ParticleInelasticXS cross section is used
(instead of G4ComponentGGNuclNuclXsc).
G4IonPhysicsPHP
---------------
Similar to G4IonBinaryCascadePhysics, except that ParticleHP (for both
cross sections and final states) is used below 200 MeV/n for deuteron,
triton, He3 and alpha (and BIC used above 190 MeV/n for these light ions).
G4IonQMDPhysic
--------------
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
generic ion projectiles), with Glauber-Gribov cross section and
BIC, QMD and FTFP for the final state. These three final-state models
are used in the following intervals of projectile kinetic energy:
- BIC below 110 MeV/nucleon;
- QMD between 100 and 6'000 MeV/nucleon;
- FTF above 5990 MeV/nucleon.
@@ -0,0 +1,72 @@
contructors/limiters
--------------------
This directory contains "technical" constructors in the sense they do not
add processes with physics content but add processes or modify physics lists to
allow for step limitation in parallel geometries, biasing, etc.
G4FastSimulationPhysics:
------------------------
Constructor that modifies a given physics list to allow for fast simulation.
One, or several, G4FastSimulationManagerProcess objects are added to the
process manager of particles for which a fast simulation is requested.
The fast simulation may be associated to regions in the mass geometry, in
what case a call like fastSimPhys->ActivateFastSimulation("e-") must be
done to allow for fast simulation of electrons.
Parallel geometries can be used also in what case the geometry is specified
by its name like fastSimPhys->ActivateFastSimulation("e-","parallelGeom") to
allow for fast simulation of electrons, with fast simulation models attached
to regions in "parallelGeom".
G4GenericBiasingPhysics:
------------------------
Constructor that modifies a given physics list to allow for generic biasing.
It provides three type of functionnalities:
- wrap physics processes with G4BiasingProcessInterface processes to
make the generic biasing to control them (allowing change of
interaction law, change of final state generation).
- add G4BiasingProcessInterface processes, but without wrapping a
physics process, in what case these processes will be used for
"non-physics based biasing" : ie, spliting and killing
- add G4ParallelGeometriesLimiterProcess process (at most one per
process manager) that provides step limitation on the parallel
geometries used in generic biasing. A process can handle several
parallel geometries associated to one particle type.
Various methods are provided to activate these functionnalities per
particle, set of particles, to activate physics-based only or
non-physics-based only or both functionnalities, and to activate the
parallel geometry functionnality.
This is documented in include/G4GenericBiasingPhysics.hh .
G4ImportanceBiasing:
-------------------
G4MaxTimeCuts:
--------------
G4MinEkineCuts:
---------------
G4NeutronTrackingCut:
---------------------
G4ParallelWorldPhysics:
-----------------------
G4SpecialCuts:
--------------
G4StepLimiterPhysics:
---------------------
G4WeightWindowBiasing:
----------------------
@@ -0,0 +1,19 @@
-------------------------------------------------------------------
G4StoppingPhysics
-----------------
It uses Bertini/Precompound (i.e. Bertini followed by the official
Precompound/deexcitation of Geant4, not the internal one of Bertini)
for nuclear capture of: pi-, K-, Sigma-, Xi- and Omega-.
It uses Fritiof/Precompound model for nuclear capture of: anti_proton,
anti_neutron, anti_Lambda, anti_Sigma0, anti_Sigma+, anti_Xi0,
anti_deuteron, anti_triton, anti_He3, and anti_alpha.
For mu-, Bertini model is used for nuclear capture, together with
default element selector, EM cascade sampling and bound decay sampling.
G4StoppingPhysicsFritiofWithBinaryCascade
-----------------------------------------
The same as G4StoppingPhysics, except that for anti-proton and anti-neutron
annihilation at rest it uses Fritiof coupled with Binary Cascade.
@@ -0,0 +1,81 @@
The photo-evaporation database contains nuclear deexcitation data starting
from a given nuclear level. Each file contains data for a given isotope,
identified by Z and A.
The database must first be downloaded from
http://geant4.web.cern.ch/geant4/support/download.shtml
and stored in a local directory. The environment variable
G4LEVELGAMMADATA must then be set to point to this directory.
**************************************************
Each line describes a de-excitation *step* from a given energy level to a lower
one (which might be the ground state). It contains data for gamma de-excitation
and internal conversion. Notice that if multiple de-excitation
channels are allowed for the starting energy level, these channels will be
described in more lines (all having the same starting level).
Each line contains 17 columns:
1) Energy of the starting nuclear level (keV)
As mentioned before, it is possible to have more lines describing the same
starting level, in the case where multiple de-excitation schemes are
allowed.
2) Energy of the transition (keV)
This is the energy difference between the initial and the final level.
3) Gamma transition probability (Ig in %)
Note1: if the probability is less than minProbability = 1e-8%, it is forced
to be 1e-8%.
Note2: see column 7 how total branching ratio is computed.
4) Polarity
Spin-parity variation in the transition
[never used in real simulation]
5) Level half-life (s)
6) Angular Momentum
Spin of the initial level
[never used in real simulation]
7) Total internal conversion coefficient : alpha = Ic/Ig
Note1: total transition is the sum of gamma de-excitation and internal
conversion. Therefore total branching ratio is proportional to
(1+alpha)*Ig
Note2: total branching ratios from a given level do not always sum up to
100%. They are re-normalized internally.
Note3: relative probabilities for gamma de-excitation and internal conversion
are 1/(1+alpha) and alpha/(1+alpha) respectively
8-17) Partial conversion probabilities for
K-shell
L1-3 shells
M1-5 shells
Outer shells (shellID = 9 is used, when applicable)
Note: if the nuclear excitation energy does not match any of the known levels,
the *nearest* level is always considered. In G4RadioactiveDecay,
metastable states are treated correctly if the excitation energy is
within 2.0 keV of the values in $G4RADIOACTIVEDATA.
For instance: take file $G4LEVELGAMMADATA/z28.a60 (Ni-60)
Co-60 radioactive decay populates the 1332.5080-keV level of
Ni-60 (0.12%) or the 2505.7480-keV level of Ni-60 (99.88%).
Deexcitation from the 2505.7480-keV level is described in lines
6-8 of $G4LEVELGAMMADATA/z28.a60 (Ni-60)
Here, internal conversion coefficients are negligeable (column 7)
Therefore the nucleus will release
1) 347 keV with 7.6e-3% probability, ending up in the 2158-keV level
(following de-excitation hence takes place, lines 2-4 of the file)
2) 1173 keV with 100% probability, ending up in the 1332-keV
excited state (following de-excitation hence takes place, line 1)
3) 2505 keV with 2e-6% probability ending up in the ground state.
@@ -0,0 +1,2 @@
The tuning of resonances can still improve in a iteration on short-lived particles.
@@ -0,0 +1,38 @@
This README file provides instructions for reading the radioactive decay
schemes in the files zXX.aYYY found in the directory RadioactiveDecay3.2
(most recent version). This directory, as well as previous versions, is
available from the Geant4 download page
http://geant4.web.cern.ch/geant4/support/download.shtml
under the Data files heading. In order to use the radioactive decay module
correctly, you must download and unpack the above directory in your local
area, and set the environment variable
G4RADIOACTIVEDATA
to point to it.
**************************************************************************
In each of the files, lines beginning with either a 'W' or a '#' are
comments.
Lines beginning with a 'P' are headers, each of which describes a level of
the nucleus. The first number is the excitation energy in keV, the second
is the half life in seconds. Indented lines under the 'P' lines are decay
modes for that excitation. There are two type of records here,
distinguished by the number of columns.
If there are 3 columns only, this is a header which describes all decays of
that type from this level. The first column is the decay mode, the second
column is zero, and the third column in the branching ratio to this mode,
as a fraction of unity. Therefore, the third columns of all the 3-column
records under a given 'P' line should sum to 1.0.
If there are four columns, this is a record which describes a subset of the
decay type, specific to a given lower level in the daughter species. The
first column is the decay type, the second column is the excitation level
of the daughter (in keV), and the third column is the branching ratio as a
percentage (! note... not a fraction of unity) of the total branching ratio
which came from the 3-column record for this decay.
+38
View File
@@ -0,0 +1,38 @@
Contains processes for phonon propagation and interaction in materials.
G4LatticeManager: Singleton (TLS) for logical and physical lattices
associated with materials and volumes.
G4LatticeReader: Driver to create logical lattices by reading in
configuration files and velocity map tables. NOTE: This class will
be moved to source/materials/ once Release 10.0 is deployed.
The lattice data files should be stored under $G4LATTICEDATA (set to
"./CrystalMaps" by default, to support the extended example). The
configuration and velocity map files for a given material should be stored
in a subdirectory with that material's name (e.g., "Ge").
Documentation for the lattice configuration files will be expanded in the
future.
G4VPhononProcess: Virtual base class for all processes below, providing
some utility functions.
G4PhononDownconversion: Process to convert single longitudinal phonons
either into pairs of two transverse phonons, or to emit a transverse
phonon.
G4PhononReflection: Placeholder process to reflect phonons off of crystal
surfaces. Currently phonons are absorbed, or converted to hits.
G4PhononScattering: Process to scatter phonons off the surrounding
lattice. Currently handles "transportation" as well, but each
scatter destroys the phonon and creates a new one.
G4PhononPolarization: Enum with conversion functions to map the three
phonon particle definitions onto internal codes (L=0, TS=1, TF=2).
G4PhononTrackMap: Singleton (TLS) map file to connect tracks with
wavevectors. for temporary use until wavevector is added to G4Track
as a data member, after Release 10.0.
+131
View File
@@ -0,0 +1,131 @@
GEANT4
This directory contains several examples of GEANT4 main programs,
from very simple cases (a purely batch program),
to interactive programs based on the G4 command line interface,
to more complex cases programs touching most of the G4 functionality.
Those main programs provide just examples of initialization and usage
of the GEANT4 toolkit classes, but the user is also free to define his
own way and functions to initialize G4 and write the main program.
A typical GEANT4 main program looks like the following:
int main() {
// Create Run Manager
G4RunManager * runManager = new G4RunManager;
// Register User Classes to the RunManager
// Mandatory classes -----------------------
// Detector geometry
runManager-> set_userInitialization(new MyDetectorConstruction);
// Physics List
runManager-> set_userInitialization(new MyPhysicsList);
// Primary Generator
runManager->set_userAction(new MyPrimaryGeneratorAction);
// Optiolnal classes -----------------------
// User Actions
runManager->set_userAction(new MyRunAction);
runManager->set_userAction(new MyEventAction);
runManager->set_userAction(new MyStackingAction);
runManager->set_userAction(new MyTrackingAction);
runManager->set_userAction(new MySteppingAction);
// Define (G)UI terminal for interactive mode
G4UIsession * session = new G4UIterminal;
// User interactions
session->sessionStart();
// Termination
delete session;
delete runManager;
return 0;
}
First of all, user must create the RunManager. The RunManager controles
run sequence by receiving messages from the user via UIsession.
The following are a part of commands for run controle;
/run/initialize * Initialize G4 kernel.
/run/beamOn * Start a Run.
/run/verbose * Set the verbose level of G4RunManager.
/run/abort * Abort current run processing.
For example, event loop will start by using "/run/beamOn" commands.
In order to execute simulation, user must provide geometrical
configuration of his own detector. In addition information of
primary events must be given with a list of particle types and
processes for them.
So, user must provide his own classes derived from the following
three abstract classes by implementing their pure virtual functions
and register those user classes to the RunManager.
G4VUserDetectorConstruction - Detector Geometry, Materials
pure virtual functions
G4VPhysicalVolume* construct()
- construct detectors;
normally implemented to serve as the entry point
for the tree of methods describing solids, volumes,
materials and sensitive detectors.
G4VUserPhysicsList - Particle types and Processes
pure virtual functions
void constructParticle()
- construct particles;
normally implemented to select desired particle types.
void constructPhysics()
- construct procesess;
normally implemented to select desired physics processes
for each particle types and register them to the ProcessManager.
void setCuts(G4double aValue)
- sets a cut value;
normally implemented to set cut value in range for all
particle types.
G4VUserPrimaryGeneratorAction - Event Generator selection
pure virtual functions
void generatePrimaries(G4Event* anEvent)
- generate a event with primary particles
normally implemented to select the desired event generation
mechanism, such as the ParticleGun or the PYTHIA interface.
In addition to the above mandatory classes, there are 5 user classes
to customize the default functionality of GEANT4 simulation.
G4UserRunAction - Actions for each Run
G4UserEventAction - Actions for each Event
G4UserStackingAction - Tracks Stacking selection
G4UserTrackingAction - Actions for each Track
G4UserSteppingAction - Actions for each Step
The virtual functions belonging to the classes above are:
G4UserRunAction - void beginOfRunAction(G4Run*)
- void endOfRunAction(G4Run*)
G4UserEventAction - void beginOfEventAction(G4Event*)
- void endOfEventAction(G4Event*)
G4UserStackingAction - G4ClassificationOfNewTrack
classifyNewTrack(G4Track *const)
- void newStage()
- void prepareNewEvent()
G4UserTrackingAction - void preUserTrackingAction()
- void postUserTrackingAction()
G4UserSteppingAction - void userSteppingAction()
Finally, more details can be found in the header files and in the source
code relative to the classes outlined above.
+226
View File
@@ -0,0 +1,226 @@
# Geant4 Tasking
This directory contains a Geant4 run manager which uses a tasking system for the G4Event loop.
This tasking system is fully compatible with TBB if `GEANT4_USE_TBB=ON` is specified when
configuring CMake. The default behavior, however, is to submit the tasks to an internal
thread-pool and task-queue.
## G4TaskRunManager
`G4TaskRunManager` multiply inherits from `G4MTRunManager` and `PTL::TaskRunManager`.
`PTL::TaskRunManager` holds the thread-pool instance, the size of the thread-pool,
and the default task-queue. The constructor of `G4TaskRunManager` takes a `G4VUserTaskQueue`
pointer (can be nullptr), a boolean for whether to use TBB if available, and a grainsize.
### Concepts
#### Grainsize
> Environment Variable: `G4FORCE_GRAINSIZE=N`
The grainsize is essentially the number of tasks. If set to 0, the default grainsize
will be `poolSize` and each thread will get `numEvents / poolSize` events.
If the grainsize is set to 1, then _all the events_ will be submitted as one task (i.e. be
processed serially by one thread in the pool). If the grainsize is set to 50 and there are 500 events,
then 50 tasks of 10 events will be submitted.
#### Events Per Tasks
> Environment Variable: `G4FORCE_EVENTS_PER_TASK=N`
Sometimes is easier to specify the number of events in a task instead of the grainsize.
If the events-per-task is set to 10 and there are 500 events,
then 50 tasks of 10 events will be submitted.
### Default Constructor
```cpp
G4TaskRunManager(G4VUserTaskQueue* = nullptr, bool useTBB = false, G4int grainsize = 0);
```
## G4RunManagerFactory
An enumeration `G4RunManagerType` and a function `G4RunManagerFactory::CreateRunManager(...)`
was added to `"G4RunManagerFactory.hh"` to simplify the selection of the various run managers.
The first parameter is either one of the enumerated `G4RunManagerType` or a string identifier
| Enumeration | String ID | Class |
| ------------------------------- | ----------- | ------------------- |
| `G4RunManagerType::Serial` | `"Serial"` | `G4RunManager` |
| `G4RunManagerType::MT` | `"MT"` | `G4MTRunManager` |
| `G4RunManagerType::Tasking` | `"Tasking"` | `G4TaskRunManager` |
| `G4RunManagerType::TBB` | `"TBB"` | `G4TaskRunManager` |
| `G4RunManagerType::Default` | `"Default"` | Environment setting |
| `G4RunManagerType::SerialOnly` | `"Serial"` | `G4RunManager` |
| `G4RunManagerType::MTOnly` | `"MT"` | `G4MTRunManager` |
| `G4RunManagerType::TaskingOnly` | `"Tasking"` | `G4TaskRunManager` |
| `G4RunManagerType::TBBOnly` | `"TBB"` | `G4TaskRunManager` |
The `Default` enumeration value will defer to the following environment variable `G4RUN_MANAGER_TYPE`
if specified and will default to `"MT"` if MT is supported and serial if MT is not supported.
If the `G4FORCE_RUN_MANAGER_TYPE` environment variable is set, this variable will override the
value passed to the `CreateRunManager` function unless `G4RunManagerType` matches one of the `<TYPE>Only`
values. In this case, the environment variable is ignored and the run manager will be `<TYPE>`.
| Environment Variable | Options | Description |
| -------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------- |
| `G4RUN_MANAGER_TYPE` | `"Serial"`, `"MT"`, `"Tasking"`, `"TBB"` | Only applicable when `G4RunManagerType::Default` is used |
| `G4FORCE_RUN_MANAGER_TYPE` | `"Serial"`, `"MT"`, `"Tasking"`, `"TBB"` | Will override explicitly specifed `G4RunManagerType` if application allows and fail if type is not available |
## Creating the G4RunManager
- The `G4RunManagerFactory::CreateRunManager(...)` function takes either `G4RunManagerType` enumerated type or string to specify the desired G4RunManager
- If a string is used, regex matching is used which is case-insensitive
- Returns a `G4RunManager*`
- Various overloads exist which just reorder passing in:
- `int numberOfThreads` - executes `G4MTRunManager::SetNumberOfThreads(numberOfThreads)` before returning if > 0
- default: `0`
- `bool fail_if_unavail` - will cause a runtime failure if requested type is not available with Geant4 build
- default: `true`
- `G4VTaskQueue*` - a task-queue manager
- default: `nullptr`
```cpp
#include "G4RunManagerFactory.hh"
int main()
{
// specify {Serial, MT, Tasking, TBB} as the default, can be overridden
// with "G4FORCE_RUN_MANAGER_TYPE" env variable
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Serial);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::MT);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Tasking);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TBB);
// specify {Serial, MT, Tasking, TBB} as the required type, cannot be overridden
// with "G4FORCE_RUN_MANAGER_TYPE" env variable
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::MTOnly);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TaskingOnly);
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TBBOnly);
// defer to "G4RUN_MANAGER_TYPE" env variable and default to MT if
// env variable is not set
auto* runmanager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);
// same as above
auto* runmanager = G4RunManagerFactory::CreateRunManager();
}
```
## Using the Tasking System
With G4TaskRunManager, Geant4 events will be launched asynchronously as tasks. These tasks are
placed into a queue until one of the thread in the pool is available to execute the task. Users can
take advantage of this system to load-balance expensive sub-event calculations which might have
previously resulted in serial bottlenecks. For example, if an application needs to do extensive event
analysis on electrons and thread #1 ends up with 10x as many of these events, the other threads
might finish their G4Run significantly eariler and be idle while thread #1 has a lot of work.
Tasking allows these analysis calculations to be offload back into the queue so that other
threads can contribute to their completion.
### Option 1 - Submit Directly to Thread-Pool
- To execute the function `foo(int, double)` asynchronously:
```cpp
// get the task manager
auto* task_manager = G4TaskRunManager::GetTaskManager();
// submit task to thread-pool and receive a future for when the result is need
std::future<void> _fvoid = task_manager->async<void>(foo, 1, 1.0);
std::future<int> _fint = task_manager->async<int>(bar, 1.0);
// wait for task to execute
_fvoid.wait();
_fint.wait();
// get the result (if non-void)
auto result = _fint.get();
```
### Option 2 - Submit to task-group
- Obtain a pointer to the thread-pool instance
- Create a `task_group<T>` object where `T` is the return type of all the functions in the group
- If `T` is non-void, you must provide a join functor who return type and first argument are both references
to the joined type and the second argument is type `T`, e.g. `task_group<int>` can provide a join functor
with `vector<int>&` as the return type and `T` as the second argument or `int&` as the return and first argument
and `int` as the second argument
- If `T` is void, the join functor is optional and can be treated as a final synchronization operation after
all the tasks have been completed.
> NOTE: The join functor for task-groups are called sequentially on the thread that is
> waiting on `task_group<T>::join()` member function.
#### Global Definitions for Examples
```cpp
// obtain thread-pool instance from task manager
static auto* thread_pool = G4TaskRunManager::GetThreadPool();
// trivial int function which just returns value passed
int foo(int v) { return v; }
// function which launches CUDA kernel
void bar(int v)
{
cuda_bar<<<512, 1>>>(v);
}
```
#### Example with non-void return types from tasks
```cpp
// put all return values from tasks into an array
auto join_vec = [](std::vector<int>& lhs, int rhs) { lhs.push_back(rhs); return lhs; };
// sum the values returned by tasks
auto sum_int = [](int& lhs, int rhs) { return lhs += rhs; };
// task group which applies 'join_vec' to all task return values
task_group<int> vec_tg(join_vec, thread_pool);
// task group with applies 'sum_int' to all task return values
task_group<int> sum_tg(sum_int, thread_pool);
// submit work to task-groups
vec_tg.exec(foo, 1);
vec_tg.exec(foo, 2);
sum_tg.exec(foo, 1);
sum_tg.exec(foo, 2);
// produces std::vector{ 1, 2 };
auto vec_result = vec_tg.join();
// produces 1 + 2 = 3
auto sum_result = sum_tg.join();
```
#### Example with void return type from tasks
```cpp
// wait for the GPU to finish
auto sync = []() { cudaDeviceSynchronize(); };
// task group which applies 'sync' after all tasks have been executed
task_group<void> gpu_tg(sync, thread_pool);
// generic task group w/o a join functor
task_group<void> general_tg(thread_pool);
// submit work to task-groups
gpu_tg.exec(bar, 1);
gpu_tg.exec(bar, 2);
general_tg.exec(bar, 1);
general_tg.exec(bar, 2);
// 'sync()' will get called after all tasks in group have executed
// (i.e. return from 'bar' function). 'sync' will then block until
// all GPU work has been completed
gpu_tg.join();
// will block only until all tasks in group have been executed
// (i.e. returned from 'bar' function)
generic_tg.join();
```
+30
View File
@@ -0,0 +1,30 @@
<< Portability >>
Compilation of DAWN-file and DAWN-network drivers
are confirmed at the following platforms:
Linux, DEC, HP, AIX, Solaris, IRIX
+152
View File
@@ -0,0 +1,152 @@
This G4 Graphics Driver creates a HepRep File suitable for viewing
by the HepRApp, Wired4 or FRED Event Display clients.
It requires no external packages.
The HepRep graphics format is further described at
http://www.slac.stanford.edu/~perl/heprep/
Two different drivers are available for either HepRep1 or HepRep2.
Driver: HepRepFile
------------------
The version of HepRep produced by this driver is HepRep Version 1.
Writes files with file extension .heprep.
First file is written to current directory and is named G4Data0.heprep.
Subsequent files increment the number, as in G4Data1.heprep, G4Data2.heprep...
To specify a different output file directory (instead of current directory),
set G4HEPREPFILE_DIR
To specify a different output file name (instead of G4Data),
set G4HEPREPFILE_NAME
To repeatedly overwrite the same output file (instead of having incremental
numbers at the end of the file name),
set G4HEPREPFILE_OVERWRITE
By default, invisible objects are not culled but are left in the heprep file
with their visibility initially set to false (so that you can subsequently
choose to make them visible from within the heprep browser).
To force culling of invisible objects,
set G44HEPREPFILE_CULL
View the file using the HepRApp HepRep Browser, available from:
http://www.slac.stanford.edu/~perl/HepRApp
HepRApp can read xml files in zipped format as well as unzipped,
so you can save space by applying gzip to the xml file.
This will reduce the file to about five percent of its original size.
Joseph Perl
15 November 2007
Driver: HepRepXML
-----------------
The version of HepRep produced by this driver is HepRep Version 2.
This driver can write both Binary HepRep (.bheprep) and XML HepRep
(.heprep) files. Binary HepRep files are a one-to-one translation
of XML HepRep files, but they are considerably shorter and faster
to parse by a HepRepViewer such as WIRED 4.
You can view the files using the WIRED 4 Event Display, available from:
http://wired4.freehep.org
Both Binary HepRep and XML HepRep can be compressed using the standard
zlib library if linked into Geant4 using G4LIB_USE_ZLIB. If a standard
zlib is not available (WIN32-VC for instance) you should also set
G4LIB_BUILD_ZLIB to build G4zlib included with Geant4.
HepRep files (Binary and XML) can contain multiple HepRep events/geometries.
If the file contains more than one HepRep it is not strictly XML anymore.
Files can be written in .heprep.zip, .heprep.gz or .heprep format and their
binary versions .bheprep.zip, .bheprep.gz or .bheprep.
The .heprep.zip is the default for file output, the .heprep is the default
for stdout and stderr.
(Optional) To set the filename with a particular extension such as:
.heprep.zip, .heprep.gz, .heprep, .bheprep.zip, .bheprep.gz or .bheprep
use for instance:
/vis/scene/create filename.bheprep.zip
(Optional) To create separate files for each event, you can set a suffix such as
"-0001" to start writing files from filename-0001.bheprep.zip to
filename-9999.bheprep.zip (or up), while "-55-sub" will start write files
filename-55-sub.bheprep.zip to filename-99-sub.bheprep.zip (or up).
/vis/heprep/setEventNumberSuffix -0001
(Note: suffix has to contain at least one digit)
(Optional) To route the HepRep XML output to stdout (or stderr),
by default uncompressed, use:
/vis/scene/create stdout
To select the driver, where the file if not create by scene is set to
G4HepRepOutput.heprep.zip, use:
/vis/open HepRepXML
(Optional) To write a geometry, use:
/vis/viewer/flush
(Optional) To signal a change in geometry (to be written with the next event), use:
/vis/viewer/refresh
To write 10 events (and geometries), use:
/run/beamOn 10
(Optional) To accumulate multiple (5) G4 events into one HepRep event, use:
/vis/scene/endOfEventAction accumulate
/run/beamOn 5
/vis/viewer/update
(Optional) To add attributes to each point on a trajectory, use:
/vis/heprep/addPointAttributes 1
Be aware that this may increase the size of the output dramatically.
(Optional) You may use the commands:
/vis/viewer/zoom to set an initial zoom factor
/vis/viewer/set/viewpointThetaPhi to set an initial view point
/vis/heprep/setCoordinateSystem uvw to change the coordinate system, where uvw can be "xyz", "zxy", ...
(Optional) You may decide to write .zip files with events and geometry separated (but linked).
This results in a smaller zip file, as the geometry is only written once. Use the command:
/vis/heprep/appendGeometry false
(Optional) To close the file, remove the SceneHandler, use:
/vis/sceneHandler/remove scene-handler-0
Limitations:
Only one SceneHandler can exist at any time, connected to a single Viewer.
Since the HepRep format is a model rather than a view this is not a real
limitation. In WIRED 4 you can create as many views (SceneHandlers) as you like.
1 June 2005
Mark.Donszelmann@slac.stanford.edu
@@ -0,0 +1,23 @@
Apart from the heprep1 files:
G4HepRepFile.hh
G4HepRepFileSceneHandler.hh
G4HepRepFileViewer.hh
G4HepRepFileXMLWriter.hh
and heprep2 files:
G4HepRep.hh
G4HepRepSceneHandler.hh
G4HepRepMessenger.hh
G4HepRepViewer.hh
the other sources are copies from the FreeHEP library
(java.freehep.org) and are maintained there.
The files starting with G4 are geant4 compliant, the others may not be.
Changes made here may be overwritten.
4 May 2005
Mark Donszelmann
@@ -0,0 +1,186 @@
Extended OI Xt viewer
=====================
INCOMPLETE DRAFT
G4OpenInventorXtExaminerViewer is based on and is
a plug-in replacement for SoXtExaminerViewer which
is a base class viewer provided by the SoXt (Coin3d)
library. SoXtExaminerViewer is the normal viewer
that you get when doing /vis/open OIX.
These viewers depend on X, Xt and Xm and so are
limited to UNIX/MAC and will not run on native
Windows.
The SoXtExaminerViewer is instantiated by
G4OpenInventorXtViewer. This has been temporarily
disabled and has been replaced by an instantiation
of G4OpenInventorXtExaminerViewer, together with
some additional configuration. The intention
is to find a suitable mechanism to allow a choice
of viewer (standard or extended) at run time.
No modifications to user code or to any other
Geant4 categories are required to use the extended
viewer. Many of the implemented features are made
possible by the SCENE GRAPH technology in Open
Inventor which stores the scene elements and
associated information in a structured way.
Features
========
Reference Path navigation
-------------------------
Most of the new features are concerned with navigation
along a "reference path" which is a piecewise
linear path through the world. The reference path
can be any particle trajectory, chosen as follows:
The application can attach a "reference trajectory"
attribute to a particular trajectory.
If there is no such designated trajectory, the viewer
chooses the longest trajectory as the initial reference
path.
Any other trajectory can be selected as the reference
by selecting it with the mouse.
Elements are assigned a "distance" along the reference
path, based on the perpendicular from the element's
placement coordinates to the path. Elements are then
sorted by distance and the list is displayed in an
auxiliary window of the viewer. NOTE: at present
the path is not extrapolated at the ends, so elements
"before" or "after" the path are assigned distances
of 0 or the total path length respectively. This
will be generalized in future.
Reference path navigation controls:
Select an element from the list: navigate along the
path to the element's "location" (distance along
the path.
L,R,U,D refer to the arrow keys.
Shift-L and Shift-R: navigate to the previous or next
element on the path (with wraparound).
L and R: rotate 90 degrees around the vertical axis
U and D: rotate 90 degrees around the path
Ctrl-L and Ctrl-R: rotate 90 degrees around the horizontal axis
All these keys have a "repeat" function for continuous motion.
The rotation keys put the camera in a definite orientation.
The Shift-L and Shift-R keys can be used to "fly" along the
path in whatever orientation is in effect.
NOTE: if this appears to be "stuck", try switching from
orthonormal camera to perspective camera ("cube" viewer button).
Tools / Go to start of reference path: useful if you get lost
Tools / Invert reference path: flips the direction of travel
and the distance readout
Reference path animation
This is a special mode which flys the camera steadily along the
path, without wraparound. Special controls are:
Tools / Animate Ref Particle: start animation mode
Page-Up: increase speed
Page-Down: decrease speed
U: raise camera
D: lower camera
ESC: exit animation mode
For suitable geometries the U and D keys can be used to
get "Star Wars" style fly-over and fly-under effects.
Bookmarks
At any time, the viewpoint and other camera parameters can
be saved in a file as a labelled "bookmark".
The view can then be restored later in the current run or
in another run.
The default name for the bookmark file is ".bookmarkFile"
The first time a viewpoint is saved, this file will be
created if it does not already exist. When the viewer
is first opened, it will automatically read this file
if present and load the viewpoints into the left-hand
panel of the viewer's auxiliary window.
Controls:
Select viewpoint from list: restore this view
Right-arrow VIEWER button: go to next viewpoint
Left-arrow VIEWER button: go to next viewpoint
"Floppy Disk" button: save current view.
The user can type in a label for the view,
or use the default label provided.
File / Open Viewpoint File: loads an existing bookmark file
File / New Viewpoint File: creates a new bookmark file for
saving subsequent views
Special Picking Modes
"Console" VIEWER button: enable brief trajectory picking and
mouse-over element readout
For trajectories, the list of all trajectory points is
replaced by the first and last point only, allowing easier
identification of the particle without scrolling back.
Passing the mouse over an element will give a readout
of the volume name, material, and position on the
reference path.
"Star" VIEWER button: select new reference path
The cursor will change to a small cross (+)
after which a trajectory can be selected to become
the new reference path.
Convenience feature
Escape from viewer without using the mouse:
In addition to the File / Escape menu item, pressing the "e"
key on the keyboard will exit from the viewer's X event loop.
The viewer becomes inactive and control returns to the
Geant4 UI prompt.
Prototype only:
File / Save-Load Ref Coords: status to be determined
File / Save-Load Scene Graph: this saves the current scene graph,
(whatever is being viewed and navigated in the viewer)
including the geometry, camera, lighting information, into a
file which can be read back, thus returning to a previous
viewing "experience". This only partially works and some
or all of the geometry may be missing. Geant4-specific
scene elements may be lacking a "save" method.
Known problems:
Viewer occasionally hangs in an unknown state.
Usually can be "cleared" by trying various viewer buttons
or menu items. Last resort: escape to the G4 prompt and
run more events. Viewer will usually be o.k. afterwards.
Unpredictable mode-switching behaviour: switching between
orthonormal and perspective camera may give wierd results.
Navigation may appear "stuck" with orthonormal camera.
Both the standard and extended viewers can crash the
executable or even the X server if they are pushed
too far (e.g. by excessive zooming).
+82
View File
@@ -0,0 +1,82 @@
G4RayTracer version 1.0 (29/Jan/00)
1. Introduction
G4RayTracer is a "ray tracing" package which uses Geant4 kernel mechanism
of tracking/navigation. It visualizes any kinds of solids that Geant4
kernel can navigate.
2. Building a library
G4RayTracer is one of visualization driver which Geant4 supports. To build
a library of G4RayTracer (library name G4RayTracer), set an environment
variable G4VIS_BUILD_RAYTRACER_DRIVER.
$ setenv G4VIS_BUILD_RAYTRACER_DRIVER 1
3. Using G4RayTracer
To use G4RayTracer, set an environment variable G4VIS_USE_RAYTRACER.
$ setenv G4VIS_USE_RAYTRACER 1
Also, G4RayTracer has to be registored to the user's concrete VisManager.
Refer an example given in
geant4/source/visualization/management/include/MyVisManager.cc.
4. Notes
a) G4RayTracer generates JPEG file(s). To visualize these files, use your
local program such as NetScape or xview, etc.
b) The eye position must be inside of the defined world volume. If you want
to draw your detector setup from very far position, you need to enlarge
your world volume.
c) G4RayTracer ignores volumes without G4VisAttributes, volumes which are
set as "forced wire frame", and volumes which are set as "invisible".
d) In case you get unexpected figure, check
d.1) eye position and target position are properly set,
d.2) light direction is properly set (note light direction is from
illumination light source to the objects),
d.3) span angle (given by angle for 100 pixels) is reasonable,
d.4) there is no surrounding volume(s) without transparency.
e) G4RayTracer can be executed ONLY AT "Idle" state.
5. Basic UI commands
a) /vis/rayTracer/eyePosition x y z unit
eye position
b) /vis/rayTracer/target x y z unit
target position
in default it is set to the origine
c) /vis/rayTracer/lightDirection ex ey ez
vector of the illuminating light (need not to be a unit vector)
note light direction is from illumination light source to the objects
d) /vis/rayTracer/column nColumn
number of holizontal pixels
in default 640 pixels
e) /vis/rayTracer/row nRow
number of virtical pixels
in default 640 pixels
f) /vis/rayTracer/span angle unit
angle for 100 pixels
in default 5 degree
g) /vis/rayTracer/trace fileName
execution of G4RayTracer
"fileName" is the out put JPEG file name
in default "g4RayTracer.jpeg"
NOTE THAT THIS COMMAND IS AVAILABLE ONLY AT IDLE STATE
+13
View File
@@ -0,0 +1,13 @@
//-- gMocren-file driver --//
Oct. 12, 2009 : Akinori Kimura
Beta release.
It supports a geometry constructed with G4PhantomParameterisation or
G4VNestedParameterisation and a hits collection based on G4VHits,
primitive scorer or the interactive scorer.
Apr. 1, 2009 : Akinori Kimura
First version of the gMocren-file driver.
This is a prototype, not a release version.
+6
View File
@@ -0,0 +1,6 @@
Modeling
=======
The idea is to put GEANT4-aware but user-enviroment-independent code
here. It introduces the concept of a G4VModel.