Import Geant4 10.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 11:51:14 +02:00
parent e2d2f9810a
commit 286caacf06
12421 changed files with 730077 additions and 502383 deletions
@@ -7,11 +7,9 @@
#
# Generated on : 24/9/2010
#
# $Id: CMakeLists.txt,v 1.1 2010-09-29 18:56:10 bmorgan Exp $
# $Id: CMakeLists.txt 67758 2013-03-06 23:28:25Z mkelsey $
#
# 20130225 Remove evaporation and utils subdirectories
#------------------------------------------------------------------------------
add_subdirectory(cascade)
add_subdirectory(evaporation)
add_subdirectory(utils)
@@ -1,20 +1,18 @@
# --------------------------------------------------------------
# GNUmakefile for chips library. HPW 20-Nov-99
# $Id$
# GNUmakefile for Bertini cascade library.
#
# 20130225 Remove evaporation and utils subdirectories
# --------------------------------------------------------------
name := G4had_hetcpp
SUBDIRS = evaporation
SUBDIRS += utils
SUBDIRS += cascade
SUBDIRS = cascade
SUBLIBS = G4hadronic_hetcpp_evaporation
SUBLIBS += G4hadronic_hetcpp_utils
SUBLIBS += G4hadronic_bert_cascade
SUBLIBS = G4hadronic_bert_cascade
ifndef G4INSTALL
G4INSTALL = ../../../../..
endif
include $(G4INSTALL)/config/globlib.gmk
@@ -1,4 +1,4 @@
$Id: History,v 1.206 2010-11-24 21:16:17 mkelsey Exp $
$Id: History 72222 2013-07-11 17:28:43Z mkelsey $
-------------------------------------------------------------------
==========================================================
@@ -15,6 +15,739 @@ code and to keep track of all tags.
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
2 October 2013 V.Ivanchenko (hadr-casc-V09-06-52)
----------------------------------------------------
- G4NonEquilibriumEvaporator.hh - added forward declaration of G4Pow,
because after the revision of G4Pow cascade is not compiling anymore
1 October 2013 Michael Kelsey (hadr-casc-V09-06-51)
----------------------------------------------------
- G4NucleiModel: Make gammaQDinterp a regular data member, to avoid data
race condition with shared (const but mutable) object.
- G4EquilibriumEvaporator: Make QFinterp a regular data member, to avoid data
race condition with shared (const but mutable) object.
25 September 2013 Michael Kelsey (hadr-casc-V09-06-50)
-------------------------------------------------------
- G4NucleiModel: Remove G4Pow introduced below; replace usage with simple
"*= 2" inside loop.
24 September 2013 Michael Kelsey (hadr-casc-V09-06-49)
-------------------------------------------------------
Replace usage of std::log, std::exp, and std::pow with GEANT4 internal
functions with faster polynomial implementations.
G4BigBanger.cc
G4CascadeFinalStateAlgorithm.cc
G4EquilibriumEvaporator.cc
G4InuclParamMomDst.cc
G4InuclSpecialFunctions.cc
G4NonEquilibriumEvaporator.cc
G4NonEquilibriumEvaporator.hh
G4NucleiModel.cc
G4NucleiModel.hh
G4NumIntTwoBodyAngDst.icc
G4ParamExpTwoBodyAngDst.icc
29 August 2013 Michael Kelsey (hadr-casc-V09-06-48)
----------------------------------------------------
Address Coverity #52158 and 52161.
- G4InuclSpecialFunctions.hh: Add copy action declarations to paraMaker.
8 August 2013 Michael Kelsey (hadr-casc-V09-06-47)
---------------------------------------------------
More thread-safety fixes:
- G4InuclSpecialFunctions.hh: Replace paraMaker[Truncated] functions with
class object, in order to use thread-locally within evaporators.
- paraMaker.cc: Move function code into new class member functions.
- G4*EquilibriumEvaporator: Add data member for new "paraMaker" object.
Per A. Dotti, move local statics to file scope to avoid thread collisions:
- G4CascadeDeexciteBase.cc: Move zero vector.
- G4InuclParticle.cc: Move "G4DynamicParticle empty".
- G4NucleiModel.cc: Move static G4InuclElementaryParticle constructions to
data members.
4 August 2013 Michael Kelsey (hadr-casc-V09-06-46)
---------------------------------------------------
- G4CascadeInterface.cc: Fix bug #1513, replacing "Z=1" with "Z==1" in
boolean ternary operation.
18 July 2013 Michael Kelsey (hadr-casc-V09-06-45)
--------------------------------------------------
- G4CascadeDeexciteBase.cc: Address Coverity #51934, unitialized data
members.
- Added use of "Id" and "Name" keywords to many new files which were missing
them.
11 July 2013 Michael Kelsey
----------------------------
- G4CascadeFinalStateAlgorithm: Replace name "difr_const" with "oneOverE".
5 July 2013 Michael Kelsey (hadr-casc-V09-06-44)
-------------------------------------------------
- G4InuclParticleNames.hh: Provide particle identification functions,
equivalent to those in G4InuclElementaryParticle, for direct use of type
codes.
- G4InuclElementaryParticle.hh: Replace identification functions with calls
through to new G4InuclParticleNames functions.
3 July 2013 Michael Kelsey (hadr-casc-V09-06-43)
-------------------------------------------------
- G4CascadeFinalStateAlgorithm: Add Kopylov N-body phase space generation,
with function code copied from G4HadPhaseSpaceKopylov. Use with runtime
envvar flag (G4CASCADE_USE_PHASESPACE) in place of multi-parameter 3-body
and 4-body generators. Two-body distributions are not changed.
- G4CascadeParameters, G4CascadeParamMessenger: Add new envvar,
G4CASCADE_USE_PHASESPACE, and associated functions, to switch between
multiparameter and Kopylov N-body generators.
2 July 2013 Michael Kelsey
---------------------------
- G4NucleiModel.cc: Minor tweaks: generateInteractionLength() now returns
"large" (1000.) instead of input path length when calculations fail; this
eliminates the effect of "spath < path" vs. "spath <= path" comparisons.
For dibaryon absorption, use sum of invMFPs, not average. Small
improvements to some diagnostic messages.
28 June 2013 Michael Kelsey (hadr-casc-V09-06-42)
--------------------------------------------------
PROBLEM: Code committed below did not include last round of changes to
support multiple G4Fragments from G4Fissioner. Those were lost accidentally
during directory manipulation on my local disk.
- G4CascadeDeexciteBase: Add makeFragment() without momentum for at-rest
nuclei.
- G4Fissioner: Remove local G4InuclNuclei vector; create fission fragments as
G4Fragments directly into output buffer.
- G4CollisionOutput: Replace single recoil fragment with list; apply
associated changes throughout support functions.
- G4EquilibriumEvaporator.cc: Use G4Fragments output from G4Fissioner.
- G4CascadeDeexcitation.cc: Add printing of intermediate outputs from each
de-excitation stage.
28 June 2013 Michael Kelsey (hadr-casc-V09-06-41)
--------------------------------------------------
Reorganize de-excitation modules to use G4Fragment throughout process. Only
final ground-state nucleus will be instantiated as a G4InuclNuclei object.
This should substantially reduce the load on G4IonTable in MT operations.
- G4CascadeCheckBalance: Replace interface for "G4Fissioner" with version
which takes G4Fragments for target and output.
- G4CascadeColliderBase: Move explosion() functions and G4Fragment-related
valiateOutput() functions to new G4CascadeDeexciteBase.
- G4CascadeDeexciteBase: NEW concrete subclass of G4VCascadeDeexcitation.
Takes over "operational" support from G4CascadeColliderBase, including
explosion() functions, local copy of G4CascadeCheckBalance, and
conservation checking functions. Provides utilities to extract common
data from input G4Fragment for all modules, and to construct a G4Fragment.
- G4CascadeDeexcitation: Inherit from G4CascadeDeexciteBase.
- G4PreCompoundDeexcitation: Inherit from G4CascadeDeexciteBase.
- G4VCascadeDeexcitation: Inherit directly from G4VCascadeCollider.
- G4ExitonConfiguration: Add interface to copy from G4Fragment.
- G4EvaporationInuclCollider, G4NonEquilibriumEvaporator,
G4BigBanger, G4Fissioner, G4EquilibriumEvaporator: Move all to inherit
from G4CascadeDeexciteBase, replace collide() with deExcite(), use
G4Fragment in place of G4InuclNuclei everywhere except final ground-state
output.
- sources.cmake: Add G4CascadeDeexciteBase.hh and .cc.
28 June 2013 Michael Kelsey (hadr-casc-V09-06-40)
--------------------------------------------------
Improve encapsulation of pion and muon absorption through dibaryons.
- G4NucleiModel: Add optional argument to useQuasiDeuteron() (fixed spelling)
to take dibaryon code, validate charge-exchange interactions.
- G4ElementaryParticleCollider: Add function to split dibaryon into
component particle types; use G4NM::useQuasiDeuteron() for sanity checks
instead of nested if-blocks.
28 June 2013 Michael Kelsey (hadr-casc-V09-06-39)
--------------------------------------------------
Address Coverity 37230 and 37385.
- G4CascadeInterface.hh: Add unimplemented declarations for copy operations.
27 June 2013 Michael Kelsey (hadr-casc-V09-06-38)
--------------------------------------------------
- G4NucleiModel.cc: Minor tweak: change "spath==0." test to "path==0.", to
check actual path length (equivalent to zero-momentum), rather than
generated random value.
- G4InuclParticleNames: Add functions to convert enum values to strings,
for diagnostic messages. New .cc file required for implementation.
- G4CascadeData.icc: For diagnostics, use new enum-to-string function, add
explicit space between xsec values, and print only 10 values per line.
- G4CascadeInterpolator.icc: For diagnostics, change output to setw(6), and
print only 10 values per line.
- sources.cmake: Add G4InuclParticleNames.cc.
21 June 2013 Michael Kelsey (hadr-casc-V09-06-37)
--------------------------------------------------
- G4VCascadeDeexcitation: Disable collide() interface, with implementation
which throws exception when called. Subclasses will use deExcite()
interface, with a const-reference, directly (creating a G4InuclNuclei only
if necessary).
- G4CascadeDeexcitation: Remove collide() interface. Move code into
deExcite(), and create temporary G4InucleNuclei (with reusable buffer) as
needed. Add verbosity setting function.
- G4PreCompoundDeexcitation: Remove collide() interface; code uses
G4Fragment directly via deExcite().
- G4CascadeCheckBalance: Add interface to take G4Fragment initial state.
- G4CascadeColliderBase: Change explosion() to take const-ref G4Fragment.
Use new CheckBalance(G4Fragment) interface in validateOutput().
- G4EquilibriumEvaporator.hh: Change explosion() call-through to take
const-ref G4Fragment.
- G4InuclCollider.cc: Use G4Fragment interface to de-excitation modules and
validateOutput().
21 June 2013 Michael Kelsey (hadr-casc-V09-06-36)
--------------------------------------------------
- G4CascadeParameters: Add new flag to perform internal conservation checks,
replacing compile-time G4CASCADE_CHECK_ECONS preprocessor directive.
- G4CascadeParamMessenger: Add macro commands for USE_3BODYMOM and CHECK_ECONS
parameter flags.
- G4CascadeColliderBase: Remove doConservationChecks flag. Use run-time
flag (above) to conditionally instantiate CheckBalance, test pointer
before use.
- G4EquilibriumEvaporator: Remove turning-off of conservation checks after
fission. Follows removal of flag from G4CascadeColliderBase.
- GNUmakefile: Remove G4CASCADE_CHECK_ECONS preprocessor directive. Envvar
will be mapped to run-time parameter (above).
20 June 2013 Michael Kelsey (hadr-casc-V09-06-35)
--------------------------------------------------
Address numerous Coverity warnings which have build up since November 2011.
No modifications to working code were required.
G4BigBanger.hh G4InuclCollider.hh
G4CascadeCheckBalance.hh G4InuclNuclei.cc
G4CascadeColliderBase.hh G4InuclParticle.cc
G4CascadeDeexcitation.hh G4MultiBodyMomentumDist.hh
G4CascadeInterface.cc G4NonEquilibriumEvaporator.hh
G4CascadeRecoilMaker.hh G4NumIntTwoBodyAngDst.hh,.icc
G4ElementaryParticleCollider.hh G4ParamExpTwoBodyAngDst.icc
G4EquilibriumEvaporator.hh G4PreCompoundDeexcitation.hh
G4EvaporationInuclCollider.hh G4TwoBodyAngularDist.hh
G4Fissioner.hh G4VCascadeCollider.hh
G4GDecay3.cc G4VCascadeDeexcitation.hh
G4IntraNucleiCascader.hh
19 June 2013 Michael Kelsey (hadr-casc-V09-06-34)
--------------------------------------------------
- G4TwoBodyAngularDist.hh, G4MultiBodyMomentumDist.hh: Replace use of
"theInstance" with calls to "GetInstance()" to ensure instantiation in MT
environment.
19 June 2013 Michael Kelsey (hadr-casc-V09-06-33)
--------------------------------------------------
- G4TwoBodyAngularDist, G4MultiBodyMomentumDist: Fix thread collisions
in MT operation by changing singleton instances from "static const" to
"static G4ThreadLocal" pointers. GetInstance() instantiates the pointer
on first call (per thread). C.f. G4CascadeChannelTables.
19 June 2013 Alberto Ribon (hadr-casc-V09-06-32)
--------------------------------------------------
- G4NucleiModel.cc: fixed rare cases of non-reproducibility in the
method generateParticleFate. The members current_nucl1 and
current_nucl2 were not properly initialized in the case that
the interaction-partners list has one single element.
12 June 2013 Michael Kelsey (hadr-casc-V09-06-31)
--------------------------------------------------
Bug fix for validation problems seen leading up to 10.0-beta release.
- G4NucleiModel.cc: Undo change to test "spath<=path" (V09-06-25); this
caused all tested nucleons to be accepted for interaction, incorrectly.
Replace with explicit test on "spath==0." to address at-rest particles.
- G4CascadeFinalStateAlgorithm: Split FillDirections() into separate
functions for three- and many-body states, to restore old algorithm.
Three body throws the _last_ particle's direction, then computes recoils,
while many-body throws the first N-2 directions.
04 June 2013 Alberto Ribon (hadr-casc-V09-06-30)
-------------------------------------------------
- G4InuclNuclei.cc: Fix access to ions via the IonTable class.
24 May 2013 Michael Kelsey (hadr-casc-V09-06-29)
-------------------------------------------------
- G4NucleiModel: Continue trying to resolve FPE errors with inf and NaN.
Improve bounds checking on zone value passed to inverseMFP; move "large"
and "small" cutoffs to static const, set globally.
23 May 2013 Michael Kelsey (hadr-casc-V09-06-28)
-------------------------------------------------
- G4NucleiModel.cc: Fix initialization of dummy_convertor after setting
bullet and target momenta. For stopped particle outside nucleus, reset
"zone" value to outermost zone (avoid out-of-bounds accesses).
22 May 2013 Michael Kelsey (hadr-casc-V09-06-27)
-------------------------------------------------
- G4ElementaryParticleCollider.cc: Add protection if N-body generator fails
after too many retries. On Windows, out-of-bounds error was (correctly)
thrown.
- G4ParticleLargerEkin.hh, G4ParticleLargerBeta.hh: Change ">=" to ">" in
both cases, to avoid error in (extremely rare) case that both inputs are
identical. With floats, this is a ~2^-64 probability, but a Windows test
job managed to catch it.
21 May 2013 Michael Kelsey (hadr-casc-V09-06-26)
-------------------------------------------------
- sources.cmake: Added G4PP2PPAngDst.
20 May 2013 Dennis Wright
--------------------------
- added class G4PP2PPAngDst, which contains elastic pp and nn angular
distributions generated from numerically integrated SAID cross sections
and pp scattering data. Below 2.75 GeV SAID calculations were used with
Coulomb interactions turned off. Above 2.75 GeV pp scattering data is used.
Files modified: G4TwoBodyAngularDist.hh, .cc
11 May 2013 Michael Kelsey (hadr-casc-V09-06-25)
-------------------------------------------------
- G4NucleiModel.cc: Protections for at-rest particles (muon capture): In
choosePointAlongTraj() set phat=(0,0,1); in generateInteractionPartners()
apply zero-path exit only for finite momentum. Move choosePointAlongTraj
up to initializeCascad(), rather than waiting for propagation. Change
tests on "spath < path" to <= so that at-rest particles still interact (in
these cases, spath and path will both be zero). Hide "zone 0 transition"
message behind verbosity.
- G4ElementaryParticleCollider.cc: Skip neutrinos silently in ::collide().
10 May 2013 Michael Kelsey
---------------------------
- G4NucleiModel.hh: Protect getPotential() from leptons, by checking for
ityp<0.
9 May 2013 Michael Kelsey (hadr-casc-V09-06-24)
------------------------------------------------
- G4CascadeFinalStateAlgorithm.cc: Fix bugs where two-body and three-body
momentum vectors were not properly rotated before return; caused energy
and momentum violations in hydrogen target cases. Improvided diagnostic
messages to match output from old G4EPCollider version.
8 May 2013 Dennis Wright/Michael Kelsey
----------------------------------------
Introduce muon-capture handling, with new particle types and three-body
muon-dibaryon interactions.
Modified files: G4InuclElementaryParticle.hh,.cc
G4InuclParticleNames.hh
G4CascadeChannelTables.cc
G4CascadeInterface.cc
G4ElementaryParticleCollider.hh,.cc
G4NucleiModel.hh,.cc
sources.cmake
New files: G4CascadeMuMinusPChannel.hh,.cc
G4GDecay3.hh,.cc
1 May 2013 Michael Kelsey (hadr-casc-V09-06-23)
------------------------------------------------
- G4CascadeInterface: Add static function Initialize() to create shared
objects in master thread, to avoid cross-thread collisions. Currently the
final-state lookup tables and quasideuteron particles are created.
- G4Dineutron, G4Diproton, G4UnboundPN: Remove "G4ThreadLocal" from static
pointer, to make it shared across threads. Modify initialization to get
G4ParticleTable "readiness" flag, and restore saved value.
22 April 2013 Michael Kelsey (hadr-casc-V09-06-22)
---------------------------------------------------
- G4CascadeChannelTables: Convert to thread-local singletons, to avoid
thread collisions inside "fillSigmaBuffer()" calls within tables (since
that mutable vector is shared across all threads).
22 April 2013 Michael Kelsey (hadr-casc-V09-06-21)
---------------------------------------------------
NOTE: Requires hadr-mod-util-V09-06-04.
- G4ElementaryParticleCollider: Replace all kinematics generation, except
for pion-dibaryon absorption, with G4CascadeFinalStateGenerator. Simplify
::collide(), eliminating nested if-blocks, moving replicated code outside
of if-blocks, adding returns on failure tests.
22 April 2013 Michael Kelsey (hadr-casc-V09-06-20)
---------------------------------------------------
NOTE: Requires hadr-mod-util-V09-06-04.
New interface for momentum and angular distribution generators, subclasses
of (new) models/util/G4VHadDecayAlgorithm. These are intended to be
"temporary" implementations, reproducing G4ElementaryParticleCollider
behaviour. G4EPCollider will be migrated to use GENBOD or another true
phase-space generator.
- G4CascadeFinalStateGenerator: Subclass of G4HadDecayGenerator, which
provides a "Configure" function to take Bertini-specific inputs (bullet,
target, and list of particle types) to set up distributions.
- G4CascadeFinalStateAlgorithm: Subclass of G4VHadDecayAlgorithm, used by
G4CascadeFSGenerator to reproduce G4EPCollider kinematics. Momentum
moduli are generated separately from angular distributions, then merged
together and tested for consistency.
- G4VThreeBodyAngDst.hh: Subclass of G4VTwoBodyAngDst, which provides
interface to generate polar angle for hN -> XYZ or NN -> XYZ states,
currently handled internally to G4EPCollider.
- G4InuclParamAngDst: Subclass of G4VThreeBodyAngDst which implements the
parametrized "abn[2][4][4]" arrays in G4EPCollider. This is exactly
analogous to the recently introduced G4InuclParamMomDst.
- G4HadNucl3BodyAngDst: Instance of G4InuclParamAngDst for (h,Y,g)N -> XYZ
interactions.
- G4NuclNucl3BodyAngDst: Instance of G4InuclParamAngDst for N N -> XYZ
interactions.
- G4TwoBodyAngularDist: Add interface to access three-body distributions.
- sources.cmake: Add all new source files to lists.
22 April 2013 Michael Kelsey (hadr-casc-V09-06-19)
---------------------------------------------------
Minor code cleanup before deploying some major revisions.
- G4CascadeCoalescence: Replace _TLS_ local variable with mutable data member.
- G4NucleiModel.cc: Reduce number of scoping levels by adding exit returns
at strategic points.
- G4VTwoBodyAngDst.hh: Remove unnecessary #include <vector>.
21 March 2013 Dennis Wright (hadr-casc-V09-06-18)
---------------------------------------------------
- sources.cmake: Add new G4NP2NPAngDst class.
21 March 2013 Dennis Wright (hadr-casc-V09-06-17)
---------------------------------------------------
- created class G4NP2NPAngDst to handle np and pn elastic scattering
by sampling histograms taken directly from data
- added above class to G4TwoBodyAngularDist, replacing old np, pn
sampling
14 March 2013 Michael Kelsey (hadr-casc-V09-06-16)
---------------------------------------------------
- G4CascadeCoalescence.cc, G4InuclSpecialFunctions.cc, G4NucleiModel.cc:
Undo some of the changes made in hadr-casc-V09-06-01 (29 Jan 2013) per
recent guidance from Andrea. Specifically, TLS pointers cannot be
initialized with "new", but must be initialized null, then instantiated
with an if-block.
- G4InuclNuclei.cc: Replace TLS local variable in makeNuclearFragment()
(static function) with a file-scoped non-const static map. Incorporate
thread-locking (mutex) around all accesses to the shared map, since STL is
inherently not thread safe.
11 March 2013 Michael Kelsey (hadr-casc-V09-06-15)
---------------------------------------------------
- G4HadNucl4BodyMomDst.cc: Fix comment describing function as ">= 4-body".
- G4MultiBodyMomentumDist.cc: Use envvar (G4CASCADE_USE_3BODYMOM) to enable
separate 3-body momentum generators.
- G4CascadeParameters: Add G4CASCADE_USE_3BODYMOM envvar.
- G4InuclSpecialFunctions: Add new "randomInuclPowers()" function to
compute power expansion of random value for momentum and cos(theta)
distributions.
- G4ElementaryParticleCollider.cc: Move INUCL-style calculation (powers of
Ekin and random S) to G4InuclSpecialFunctions.
- G4InuclParamMomDst.cc: Move INUCL-style calculation (powers of
Ekin and random S) to G4InuclSpecialFunctions.
8 March 2013 Michael Kelsey
----------------------------
- G4VMultiBodyMomDst.hh, G4VTwoBodyAngDst.hh: Add GetName() function to
return name string, for use with diagnostic utilities.
Add SVN use of 'Id' keyword to all new source files.
7 March 2013 Michael Kelsey (hadr-casc-V09-06-14)
--------------------------------------------------
Introduce multi-body final state momentum distribution classes and factory,
modelled on the two-body angular distribution system. Leaf classes
implement functionality of G4EPCollider::getMomModuleFor2toMany(), split by
initial state and multiplicity.
- G4VMultiBodyMomDst: Abstract base class for all multi-body final state
momentum generators. Subclasses may cover one or several categories.
- G4InuclParamMomDst: Intermediate base class implementing parametrization
in G4EPCollider, derived from original INUCL Fortran code, with power
expansions in Ekin and random fraction. Subclasses provide coeffient
arrays for specific initial state and multiplicity, with subarrays for
different final-state particles.
- G4NuclNucl3BodyDst: Leaf class for pp,pn,nn 3-body final state from INUCL.
- G4NuclNucl4BodyDst: Leaf class for pp,pn,nn >= 4-body final state from INUCL.
- G4HadNucl3BodyDst: Leaf class for Xp,Xn 3-body final state from INUCL.
- G4HadNucl4BodyDst: Leaf class for Xp,Xn >= 4-body final state from INUCL.
- G4MultiBodyMomentumDist: Factory class to select individual generators
above from initial-state code and multiplicity.
- G4ElementaryParticleCollider.cc: Replace getMomModuleFor2toMany() with
call to G4MultiBodyMomentumDist factory and constituent generators.
7 March 2013 Michael Kelsey
----------------------------
- G4ElementaryParticleCollider: Reverse order of indices for rmn[][][] array
used for multibody momentum selection, and abn[][][] used for three-body
angular distribution. This allows direct grouping by initial state, so
functionality can be refactored later.
6 March 2013 Michael Kelsey
----------------------------
- G4CascadeChannelTables: Implement global Print() function which dumps all
tables registered in map.
- G4ElementaryParticleCollider: Remove printFinalStateTables() function,
do work directly in G4CascadeChannelTables. Replace numeric values of
particle-type checks with enums. Add detailed comments explaining array
indices for momentum arrays.
6 March 2013 Michael Kelsey (hadr-casc-V09-06-13)
--------------------------------------------------
Remove obsolete directories evaporation/ and utils/.
- GNUmakefile, CMakeLists.txt: Remove references to obsolete
subdirectories and their corresponding libraries.
NOTE: This tag requires changes at the top level of processes/CMakeLists.txt
and must not be used independently of those changes.
6 March 2013 Michael Kelsey (hadr-casc-V09-06-12)
--------------------------------------------------
- G4CascadeHistory.cc: Cast calls to "getCharge()" to G4int to avoid
compiler warnings.
5 March 2013 Michael Kelsey (hadr-casc-V09-06-10, -11)
--------------------------------------------------
- G4CascadeHistory: Support "reabsorbed" cascade particles (excitons and
trapped decays) using "-1 daughters" as a flag. Add heading with legend
to output.
- G4IntraNucleiCascader.cc: Add exciton and trapped-decay info to history.
Move history reporting outside of "itry" loops (only shows final version).
4 March 2013 Michael Kelsey (hadr-casc-V09-06-09)
--------------------------------------------------
- G4CascadeHistory: NEW container class to collect all secondaries, along
with generated daughters, and report cascade structure hierarchically.
- G4CascadParticle: Add new index data member for use with G4CascadeHistory.
- G4CascadeParameters: Add new G4CASCADE_SHOW_HISTORY envvar to activate
use of G4CascadeHistory.
- G4CascadeParamMessenger: Add macro command for G4CASCADE_SHOW_HISTORY.
- G4IntraNucleiCascader: Add option G4CascadeHistory data member, created
and used only if G4CASCADE_SHOW_HISTORY envvar is set.
- sources.cmake: Add G4CascadeHistory.hh and .cc.
3 March 2013 Michael Kelsey (hadr-casc-V09-06-08)
--------------------------------------------------
Re-tag with subdirectories "utils" and "evaporation" (excluded by mistake).
2 March 2013 Michael Kelsey (hadr-casc-V09-06-07)
--------------------------------------------------
- G4NucleiModel: Encapsulate forcing decision in forceFirst() function,
apply to photons only, not hadrons.
27 February 2013 Michael Kelsey (hadr-casc-V09-06-06)
------------------------------------------------------
- G4NucleiModel: Modify choosePointAlongTraj() to use mean free path to
bias point selection non-uniformly in each zone. Make member functions
protected (instead of private) to allow external testing.
- G4BarashenkovTwoBodyAngDst: RENAME to G4ParamExpTwoBodyAngDst; previous
name was a misattribution.
- sources.cmake: Follow renaming above.
- G4GammaNuclAngDst, G4HadNElastic1AngDst, G4HadNElastic2AngDst,
G4NuclNuclAngDst, G4PiNInelasticAngDst: Follow renaming of base class.
25 February 2013 Michael Kelsey
--------------------------------
- G4RegionModel, G4BertiniElasticCollision, G4BertiniHydrogenCollision:
REMOVE obsolete, unused code.
- sources.cmake: Remove obsolete code above.
23 February 2013 Michael Kelsey (hadr-casc-V09-06-05)
------------------------------------------------------
- G4NucleiModel.cc: Spurious character got into .cc file during save/commit.
23 February 2013 Michael Kelsey (hadr-casc-V09-06-04)
------------------------------------------------------
- G4NucleiModel.cc: Fix zone-density weighting in choosePointAlongTraj. Now
done correctly, if not with optimal code efficiency: more points will be
chosen in core of nucleus than in outer shell. Work needed to reduce
vector arithmetic, move std:vector<>'s out to class data members, etc.
21 February 2013 Michael Kelsey
--------------------------------
- G4VTwoBodyAngDst: Bug fix: Data member "theName" should be a local copy of
the ctor input string, not a reference to it. When literals are passed
in, a _temporary_ object is created for the ctor which then goes out of
scope, leaving an undefined reference behind. This causes segfaults when
running with verbosity.
- G4CascadParticle: Move ctor body to .cc file, use global envvar to set
initial verbosity (no other code changes verbosity of cparticles).
- G4NucleiModel: Add function to select random point along particle's
trajectory, use with incident photons at initial step to nucleus.
Selection is weighted by average nucleon density in each zone. Code uses
mutliple local G4ThreeVector and std::vector buffers, which need to be
made class members or static-local to reduce memory churn.
21 February 2013 Michael Kelsey (hadr-casc-V09-06-03)
------------------------------------------------------
- G4TwoBodyAngularDist: NEW Factory singleton containing all of the
angular-distribution generators created below. Code from G4EPCollider to
choose generator based on intial and final states moved here, accessed
through static function.
- G4ElementaryParticleCollider: Angular distribution generators moved to
new singleton factory. Access to factory is through a static function, so
it can be shared across MT threads.
20 February 2013 Michael Kelsey
--------------------------------
- G4VTwoBodyAngDst: Add Id string.
- G4NumIntTwoBodyAngDst: Convert to templated, using array dimensions as
template arguments (c.f. G4CascadeSampler). Pass references to C-style
arrays as ctor arguments, use to initialize C-style array const
references. Add local C-style array as reuable buffer for interpolation.
Add Id string. Move .cc file to .icc, referenced from .hh, as required
for template instantiation.
- G4GamP2NPipAngDst, G4GamP2PPi0AngDst: Follow change of base to templated
form, passing arrays as base ctor args, move array initializations to
namespace with "static const". Add Id string.
Extract parametrized two-body angular distribution code from
G4ElementaryParticleCollider to new subclasses of G4VTwoBodyAngDst. These
subclasses will likely be replaced over time with numerically-integrated
CDFs as above.
- G4BarashenkovTwoBodyAngDst: Templated base class for double-exponential
two-body parametrizations, extracted from G4EPCollider.
- G4GammaNuclAngDst, G4NuclNuclAngDst, G4PiNInelasticAngDst,
G4HadNElastic1AngDst, G4HadNElastic2AngDst: Sublcasses of
G4BarashenkovTwoBodyAngDst, with parameter arrays and energy bins
extracted G4EPCollider.
- sources.cmake: Follow filename changes to G4NumIntTwoBodyAngDst.cc -> .icc,
add new parametrized angular distribution classes.
31 January 2013 Dennis Wright (hadr-casc-V09-06-02)
----------------------------------------------------
Add detailed two-body final state angular distributions for (gamma,p) and
(gamma,n) reactions, using tables of numerical integrals to sample cos(theta)
- created base classes G4VTwoBodyAngDst and G4NumIntTwoBodyAngDst, and concrete
classes G4GamP2NPipAngDst and G4GamP2PPi0AngDst to hold the tables
- added these channels to G4ElementaryParticleCollider::
- added new cross section data to G4CascadeT1GamNChannel
29 January 2013 Michael Kelsey (hadr-casc-V09-06-01)
-----------------------------------------------------
In consultation with Andrea Dotti, revert or modify many of the automatic
code changes (below) for improved MT performance.
- G4Cascade*Channel.hh,cc: Restore "static const" declarations of all final
state arrays, eliminate use of "initialize()" function. In all of the .hh
files, declare "static const data_t data;" to allow sharing across threads.
- G4CascadeFunctions.hh,cc: Restore DATA::data as simple object, not
pointer.
- G4NucleiModel.hh,cc: Move function-static arrays and interpolator for
gamma-quasideuteron cross sections to be class members with file-scope
initialization. Eliminates need to use TLS pointers.
- G4Fissioner.hh,cc: Make two-element std::vector for nuclear fragments
class data member; use G4InuclNuclei::fill() to change contents.
- G4InuclSpecialFunctions.cc, G4CascadeCoalescence.cc: Collapse TLS pointer
initializtion to eliminate unncessary if-blocks.
- G4EquilibriumEvaporator.hh,cc, G4ElementaryParticleCollider.hh,cc: Move
function-static interpolators and arrays to be class members with
file-scope initialization. Eliminates need to use TLS pointers.
25 January 2013 Andrea Dotti et al.
------------------------------------
Apply automatic conversion to all code for Geant4-MT thread-safe operation.
20 December 2012 Michael Kelsey
--------------------------------
- G4ElementaryParticleCollider.cc: Add Omega tables to printout function,
remove line referring to gamma-N as "preliminary."
06 December 2012 Michael Kelsey (hadr-casc-V09-06-00)
------------------------------------------------------
- G4IntraNucleiCascader.cc: For rescattering, set generation number of
new secondaries to '1' instead of '0' (so they aren't identified as
projectiles).
- G4NucleiModel.cc: In generateParticleFate() set generation number of
interaction daughters to one more than the parent secondary. Eliminate
complex isProjectile() code in favor of checking for generation==0.
20 October 2012 Michael Kelsey (hadr-casc-V09-05-26)
-----------------------------------------------------
- G4CascadePPChannel.cc, G4CascadeNNChannel.cc, G4CascadeNPChannel.cc: For
@@ -477,7 +1210,7 @@ order to anticipate supporting G4ExceptionDescription streams.
- G4CascadeChannelTables: Add load-on-demand via GetTable(). Move static
implementations to .cc file (Windows compatibility issue).
- cascade/include/G4CascadeFunctions.icc: Remove self-registration from ctor.
- G4CascadeFunctions.icc: Remove self-registration from ctor.
- G4Cascade*Channel.cc: Remove all namespace self-instantiations;
initialization is inconsistent across platforms.
@@ -3348,4 +4081,3 @@ All changes below within "cascade/" subdirectory:
elastic scattering interface added:
G4ElasticCascadeInterface.hh, .cc added
G4CascadeInterface.hh modified
@@ -7,7 +7,7 @@
#
# Generated on : 24/9/2010
#
# $Id: CMakeLists.txt,v 1.1 2010-09-29 18:56:20 bmorgan Exp $
# $Id: CMakeLists.txt 66241 2012-12-13 18:34:42Z gunter $
#
#------------------------------------------------------------------------------
@@ -1,4 +1,4 @@
# $Id: GNUmakefile,v 1.15 2010-09-23 05:02:14 mkelsey Exp $
# $Id: GNUmakefile 71741 2013-06-21 17:38:28Z mkelsey $
# -----------------------------------------------------------
# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96.
#
@@ -6,6 +6,7 @@
#
# 20100922 J. Yarba -- Add include directories for pre-compound model
# 20110919 M. Kelsey -- Add flag for final-state clustering
# 20130621 M. Kelsey -- Move CHECK_ECONS flag to runtime parameters
# -----------------------------------------------------------
name := G4hadronic_bert_cascade
@@ -38,10 +39,6 @@ ifdef G4CASCADE_SKIP_ECONS
CPPFLAGS += -DG4CASCADE_SKIP_ECONS=1
endif
ifdef G4CASCADE_CHECK_ECONS
CPPFLAGS += -DG4CASCADE_CHECK_ECONS=1
endif
ifdef G4CASCADE_DO_COALESCENCE
CPPFLAGS += -DG4CASCADE_DO_COALESCENCE=1
endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Analyser.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20101010 M. Kelsey -- Migrate to integer A and Z
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4BigBanger.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100315 M. Kelsey -- Remove "using" directive and unnecessary #includes.
// 20100407 M. Kelsey -- Replace std::vector<> returns with data members.
@@ -33,40 +33,41 @@
// 20100714 M. Kelsey -- Switch to new G4CascadeColliderBase class
// 20100726 M. Kelsey -- Move std::vector<> buffer to .hh file
// 20100928 M. Kelsey -- Migrate to integer A and Z
// 20130620 Address Coverity complaint about missing copy actions
// 20130622 Inherit from G4CascadeDeexciteBase, move to deExcite() interface
// with G4Fragment
#ifndef G4BIG_BANGER_HH
#define G4BIG_BANGER_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeDeexciteBase.hh"
#include "G4InuclElementaryParticle.hh"
#include <vector>
class G4CollisionOutput;
class G4BigBanger : public G4CascadeColliderBase {
class G4BigBanger : public G4CascadeDeexciteBase {
public:
G4BigBanger();
virtual ~G4BigBanger() {};
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
virtual void deExcite(const G4Fragment& target, G4CollisionOutput& output);
private:
void generateBangInSCM(G4double etot, G4int a, G4int z);
void generateMomentumModules(G4double etot, G4int a, G4int z);
G4double xProbability(G4double x, G4int a) const;
G4double maxProbability(G4int a) const;
G4double generateX(G4int ia, G4double promax) const;
// Buffers for big-bang results
std::vector<G4InuclElementaryParticle> particles;
std::vector<G4double> momModules;
std::vector<G4LorentzVector> scm_momentums;
private:
// Copying of modules is forbidden
G4BigBanger(const G4BigBanger&);
G4BigBanger& operator=(const G4BigBanger&);
};
#endif /* G4BIG_BANGER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadParticle.hh 67738 2013-03-05 05:54:30Z mkelsey $
//
// 20100112 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100126 M. Kelsey -- Replace vector<G4Double> position with G4ThreeVector,
@@ -34,6 +34,9 @@
// 20110806 M. Kelsey -- Add fill() function to replicate ctor/op=() action
// 20110922 M. Kelsey -- Add stream argument to print(), add operator<<().
// 20120306 M. Kelsey -- Add access for cumulative path through nucleus.
// 20130221 M. Kelsey -- Move constructor to .cc file for parameter access.
// 20130304 M. Kelsey -- Add index data member, for use with G4CascadeHistory,
// and explicit copy operations and destructor.
#ifndef G4CASCAD_PARTICLE_HH
#define G4CASCAD_PARTICLE_HH
@@ -52,22 +55,31 @@ public:
G4CascadParticle(const G4InuclElementaryParticle& particle,
const G4ThreeVector& pos, G4int izone, G4double cpath,
G4int gen)
: verboseLevel(0), theParticle(particle), position(pos),
current_zone(izone), current_path(cpath), movingIn(true),
reflectionCounter(0), reflected(false), generation(gen) {}
G4int gen);
~G4CascadParticle() {;} // No subclasses allowed
// Allow copying of object data (for use with history and elsewhere)
// NOTE: history index IS copied (to avoid double counting)
G4CascadParticle(const G4CascadParticle& cpart) { *this = cpart; }
G4CascadParticle& operator=(const G4CascadParticle& cpart);
// Analogue to operator=() to support filling vectors w/o temporaries
// NOTE: history index IS NOT copied (new particle is being made)
void fill(const G4InuclElementaryParticle& particle,
const G4ThreeVector& pos, G4int izone, G4double cpath,
G4int gen);
// Data accessors
const G4InuclElementaryParticle& getParticle() const { return theParticle; }
G4InuclElementaryParticle& getParticle() { return theParticle; }
G4int getGeneration() const { return generation; }
void setGeneration(G4int gen) { generation = gen; }
G4int getHistoryId() const { return historyId; }
void setHistoryId(G4int id) { historyId = id; }
G4LorentzVector getMomentum() const { // Can't return ref; temporary
return theParticle.getMomentum();
}
@@ -117,6 +129,7 @@ private:
G4int reflectionCounter;
G4bool reflected;
G4int generation;
G4int historyId;
};
// Proper stream output (just calls print())
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100514 M. Kelsey -- All functionality removed except quantum-number
// validation functions.
@@ -23,6 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadeChannelTables.hh 69336 2013-04-30 20:20:23Z mkelsey $
//
// Factory class to return pointer to Bertini cross-section table based on
// collision initial state (hadron type codes).
//
@@ -33,6 +35,9 @@
// 20110915 M. Kelsey -- Move static implementations (won't work on Windows);
// Add local table instantiating function (to replace self-reg)
// 20110923 M. Kelsey -- Add optional stream& argument to printTable().
// 20130129 M. Kelsey -- Drop load-on-demand interfaces, fill in ctor
// 20130306 M. Kelsey -- Add inclusive printing of all tables here
// 20130429 M. Kelsey -- Change instance to thread-local pointer.
#ifndef G4_CASCADE_CHANNEL_TABLES_HH
#define G4_CASCADE_CHANNEL_TABLES_HH
@@ -52,32 +57,22 @@ public:
// Arguments are individual G4InuclElementaryParticle types
static const G4CascadeChannel* GetTable(G4int had1, G4int had2);
// Convenience function for diagnostic output
// Convenience functions for diagnostic output
static void Print(std::ostream& os=G4cout);
static void PrintTable(G4int initialState, std::ostream& os=G4cout);
// Register cross-section table for later lookup
static void AddTable(G4int initialState, G4CascadeChannel* table);
private:
static G4CascadeChannelTables& instance(); // Singleton
static const G4CascadeChannelTables& instance(); // Singleton
static G4ThreadLocal G4CascadeChannelTables* theInstance; // per thread
G4CascadeChannelTables() { tables.clear(); } // Must initialize map
~G4CascadeChannelTables() {} // Tables are created externally, not owned
G4CascadeChannelTables();
~G4CascadeChannelTables();
// Fetch table from map if already registered, or return null
const G4CascadeChannel* FindTable(G4int initialState);
// Save table for specified interaction in map
void SaveTable(G4int initialState, G4CascadeChannel* table);
// Special function to create and store table for specified interaction
const G4CascadeChannel* LoadTable(G4int initialState);
const G4CascadeChannel* FindTable(G4int initialState) const;
typedef std::map<G4int, G4CascadeChannel*> TableMap;
typedef std::pair<const G4int, G4CascadeChannel*> TableEntry;
TableMap tables;
static void DeleteTable(TableEntry& t); // For use by destructor
};
#endif /* G4_CASCADE_CHANNEL_TABLES_HH */
@@ -25,7 +25,7 @@
//
#ifndef G4CASCADE_CHECK_BALANCE_HH
#define G4CASCADE_CHECK_BALANCE_HH
// $Id$
// $Id: G4CascadeCheckBalance.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// Verify and report four-momentum conservation for collision output; uses
// same interface as collision generators.
@@ -46,6 +46,8 @@
// 20110328 M. Kelsey -- Add default ctor and explicit limit setting
// 20110722 M. Kelsey -- For IntraNucleiCascader, take G4CollOut as argument
// 20121002 M. Kelsey -- Add strangeness check (useful for Omega- beam)
// 20130620 Address Coverity complaint about missing copy actions
// 20130621 Add interface to take G4Fragment input instead of G4InuclNuclei.
#include "G4VCascadeCollider.hh"
#include "globals.hh"
@@ -82,14 +84,13 @@ public:
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
// This is for use with G4VCascadeDeexcitation modules
void collide(const G4Fragment& fragment, G4CollisionOutput& output);
// This is for use with G4EPCollider internal checks
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
const std::vector<G4InuclElementaryParticle>& particles);
// This is for use with G4Fissioner internal checks
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
const std::vector<G4InuclNuclei>& fragments);
// This is for use with G4NucleiModel internal checks
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
const std::vector<G4CascadParticle>& particles);
@@ -99,6 +100,14 @@ public:
G4CollisionOutput& output,
const std::vector<G4CascadParticle>& cparticles);
// This is for use with G4BigBanger internal checks
void collide(const G4Fragment& target,
const std::vector<G4InuclElementaryParticle>& particles);
// This is for use with G4Fissioner internal checks
void collide(const G4Fragment& target,
const std::vector<G4InuclNuclei>& fragments);
// Checks on conservation laws (kinematics, baryon number, charge, hyperons)
G4bool energyOkay() const;
G4bool ekinOkay() const;
@@ -160,6 +169,11 @@ private:
G4int finalStrange;
G4CollisionOutput tempOutput; // Buffer for direct-list interfaces
private:
// Copying of modules is forbidden
G4CascadeCheckBalance(const G4CascadeCheckBalance&);
G4CascadeCheckBalance& operator=(const G4CascadeCheckBalance&);
};
#endif /* G4CASCADE_CHECK_BALANCE_HH */
@@ -117,6 +117,7 @@ private:
// Kinematics for cluster evaluations
G4LorentzVector getClusterMomentum(const ClusterCandidate& aCluster) const;
mutable G4LorentzVector pCluster; // Reusable buffer to reduce churn
G4double maxDeltaP(const ClusterCandidate& aCluster) const;
@@ -25,7 +25,7 @@
//
#ifndef G4CASCADE_COLLIDER_BASE_HH
#define G4CASCADE_COLLIDER_BASE_HH
// $Id$
// $Id: G4CascadeColliderBase.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100714 M. Kelsey -- Move functionality from G4VCascadeCollider, and
// provide conservation-checking here, with wrapper function
@@ -38,6 +38,10 @@
// consistency in subclass colliders.
// 20110321 M. Kelsey -- Hide names of arguments to rescatter(), to avoid
// compiler warnings on some GCC versions.
// 20130620 Address Coverity complaint about missing copy actions
// 20130621 Move doConservationChecks to G4CascadeParameters; change
// explosion to use reference, add validateOutput() w/G4Fragment
// 20130622 Move fragment-handling functions to G4CascadeDeexciteBase
#include "G4VCascadeCollider.hh"
@@ -68,45 +72,39 @@ public:
virtual void setVerboseLevel(G4int verbose=0);
virtual void setConservationChecks(G4bool doBalance=true) {
doConservationChecks = doBalance;
}
protected:
G4InteractionCase interCase; // Determine bullet vs. target
G4bool doConservationChecks; // Conservation-law validation
G4CascadeCheckBalance* balance;
// Decide whether to use G4ElementaryParticleCollider or not
virtual G4bool useEPCollider(G4InuclParticle* bullet,
G4InuclParticle* target) const;
// Decide whether to use G4BigBanger or not
virtual G4bool explosion(G4InuclNuclei* target) const;
virtual G4bool explosion(G4Fragment* target) const;
virtual G4bool explosion(G4int A, G4int Z, G4double excitation) const;
// Decide whether to use G4IntraNuclearCascader or not
virtual G4bool inelasticInteractionPossible(G4InuclParticle* bullet,
G4InuclParticle* target,
G4double ekin) const;
// ==> Provide same interfaces as G4CascadeCheckBalance itself
G4CascadeCheckBalance* balance;
// Validate output for energy, momentum conservation, etc.
virtual G4bool validateOutput(G4InuclParticle* bullet,
G4InuclParticle* target,
G4CollisionOutput& output);
// This is for use with G4EPCollider and G4BigBanger
// This is for use after de-excitation
virtual G4bool validateOutput(const G4Fragment& fragment,
G4CollisionOutput& output);
// This is for use with G4EPCollider
virtual G4bool validateOutput(G4InuclParticle* bullet,
G4InuclParticle* target,
const std::vector<G4InuclElementaryParticle>& particles);
// This is for use with G4Fissioner
virtual G4bool validateOutput(G4InuclParticle* bullet,
G4InuclParticle* target,
const std::vector<G4InuclNuclei>& fragments);
private:
// Copying of modules is forbidden
G4CascadeColliderBase(const G4CascadeColliderBase&);
G4CascadeColliderBase& operator=(const G4CascadeColliderBase&);
};
#endif /* G4CASCADE_COLLIDER_BASE_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeData.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100507 M. Kelsey -- Use template arguments to dimension const-refs
// to arrays,for use in passing to functions as dimensioned.
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeData.icc 71890 2013-06-27 22:14:13Z mkelsey $
//
// 20100803 M. Kelsey -- Move implementations to this .icc file. Use name
// string to report output
@@ -35,10 +35,12 @@
// 20110923 M. Kelsey -- Add optional ostream& argument to print() fns,
// drop all "inline" keywords
// 20120608 M. Kelsey -- Fix variable-name "shadowing" compiler warnings.
// 20130627 M. Kelsey -- Use new function to print particle name strings.
#ifndef G4_CASCADE_DATA_ICC
#define G4_CASCADE_DATA_ICC
#include "G4InuclParticleNames.hh"
#include <iostream>
#include <iomanip>
@@ -122,14 +124,22 @@ print(G4int mult, std::ostream& os) const {
os << "\n final state x" << mult << "bfs[" << ichan << "] : ";
for (G4int fsi=0; fsi<mult; fsi++) {
switch (mult) {
case 2: os << " " << x2bfs[ichan][fsi]; break;
case 3: os << " " << x3bfs[ichan][fsi]; break;
case 4: os << " " << x4bfs[ichan][fsi]; break;
case 5: os << " " << x5bfs[ichan][fsi]; break;
case 6: os << " " << x6bfs[ichan][fsi]; break;
case 7: os << " " << x7bfs[ichan][fsi]; break;
case 8: os << " " << x8bfs[ichan][fsi]; break;
case 9: os << " " << x9bfs[ichan][fsi]; break;
case 2: os << " " << G4InuclParticleNames::nameShort(x2bfs[ichan][fsi]);
break;
case 3: os << " " << G4InuclParticleNames::nameShort(x3bfs[ichan][fsi]);
break;
case 4: os << " " << G4InuclParticleNames::nameShort(x4bfs[ichan][fsi]);
break;
case 5: os << " " << G4InuclParticleNames::nameShort(x5bfs[ichan][fsi]);
break;
case 6: os << " " << G4InuclParticleNames::nameShort(x6bfs[ichan][fsi]);
break;
case 7: os << " " << G4InuclParticleNames::nameShort(x7bfs[ichan][fsi]);
break;
case 8: os << " " << G4InuclParticleNames::nameShort(x8bfs[ichan][fsi]);
break;
case 9: os << " " << G4InuclParticleNames::nameShort(x9bfs[ichan][fsi]);
break;
default: ;
}
}
@@ -143,8 +153,8 @@ template <int NE,int N2,int N3,int N4,int N5,int N6,int N7,int N8,int N9>
void G4CascadeData<NE,N2,N3,N4,N5,N6,N7,N8,N9>::
printXsec(const G4double (&xsec)[NE], std::ostream& os) const {
for (G4int k=0; k<NE; k++) {
os << std::setw(6) << xsec[k]; // Use sign-gap as separator
if ((k+1)%12 == 0) os << G4endl;
os << " " << std::setw(6) << xsec[k];
if ((k+1)%10 == 0) os << G4endl;
}
os << G4endl;
}
@@ -25,14 +25,19 @@
//
#ifndef G4CASCADE_DEEXCITATION_HH
#define G4CASCADE_DEEXCITATION_HH
// $Id$
// $Id: G4CascadeDeexcitation.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// Takes an arbitrary excited or unphysical nuclear state and produces
// a final state with evaporated particles and (possibly) a stable nucleus.
//
// 20100926 M. Kelsey -- Move to new G4VCascadeDeexcitation base class.
// 20130620 Address Coverity complaint about missing copy actions
// 20130621 Drop collide() interface (base class will throw exception);
// follow base change to deExcite() with reference;
// add reusable G4InuclNuclei buffer, verbosity handler
// 20130622 Inherit from G4CascadeDeexciteBase
#include "G4VCascadeDeexcitation.hh"
#include "G4CascadeDeexciteBase.hh"
#include "globals.hh"
class G4InuclParticle;
@@ -41,23 +46,28 @@ class G4NonEquilibriumEvaporator;
class G4EquilibriumEvaporator;
class G4CascadeDeexcitation : public G4VCascadeDeexcitation {
class G4CascadeDeexcitation : public G4CascadeDeexciteBase {
public:
G4CascadeDeexcitation();
virtual ~G4CascadeDeexcitation();
// Standard Collider interface (bullet is not used in this case)
virtual void collide(G4InuclParticle* /*bullet*/, G4InuclParticle* target,
G4CollisionOutput& globalOutput);
virtual void setVerboseLevel(G4int verbose);
// Interface specific to pre-compound (post-cascade) processing
virtual void deExcite(G4Fragment* fragment,
virtual void deExcite(const G4Fragment& fragment,
G4CollisionOutput& globalOutput);
private:
G4BigBanger* theBigBanger;
G4NonEquilibriumEvaporator* theNonEquilibriumEvaporator;
G4EquilibriumEvaporator* theEquilibriumEvaporator;
G4CollisionOutput tempOutput; // Local buffer for de-excitation stages
private:
// Copying of modules is forbidden
G4CascadeDeexcitation(const G4CascadeDeexcitation&);
G4CascadeDeexcitation& operator=(const G4CascadeDeexcitation&);
};
#endif /* G4CASCADE_DEEXCITATION_HH */
@@ -0,0 +1,91 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4CASCADE_DEEXCITE_BASE_HH
#define G4CASCADE_DEEXCITE_BASE_HH 1
// $Id$
//
// Semi-concrete base class for de-excitation modules, analogous to
// G4CascadeColliderBase.
//
// 20130628 M.Kelsey -- Add makeFragment() with zero momentum
#include "G4VCascadeDeexcitation.hh"
#include "G4InuclElementaryParticle.hh"
#include "G4InuclNuclei.hh"
#include "G4LorentzVector.hh"
#include <vector>
class G4CascadeCheckBalance;
class G4Fragment;
class G4CascadeDeexciteBase : public G4VCascadeDeexcitation {
public:
G4CascadeDeexciteBase(const char* name);
virtual ~G4CascadeDeexciteBase();
virtual void setVerboseLevel(G4int verbose=0);
protected:
// Decide whether to use G4BigBanger or not
virtual G4bool explosion(const G4Fragment& target) const;
virtual G4bool explosion(G4int A, G4int Z, G4double excitation) const;
protected:
G4CascadeCheckBalance* balance; // For conservation checking
// ==> Provide interfaces to G4CascadeCheckBalance
virtual G4bool validateOutput(const G4Fragment& target,
G4CollisionOutput& output);
// This is for use with G4BigBanger
virtual G4bool validateOutput(const G4Fragment& target,
const std::vector<G4InuclElementaryParticle>& particles);
// This is for use with G4Fissioner
virtual G4bool validateOutput(const G4Fragment& target,
const std::vector<G4InuclNuclei>& fragments);
// Interfaces between local content and G4Fragment
void getTargetData(const G4Fragment& target);
G4int A; // Buffers to collect target data for all modules
G4int Z;
G4LorentzVector PEX; // Four momentum of recoil in Bertini units (GeV)
G4double EEXS; // Excitation energy in MeV
// NOTE: Momentum passed by value so that energy/mass can be adjusted
const G4Fragment& makeFragment(G4LorentzVector mom, G4int A, G4int Z,
G4double EX=0.);
const G4Fragment& makeFragment(G4int A, G4int Z, G4double EX=0.);
G4Fragment aFragment; // Reusable buffer to reduce new/delete cycling
private:
// Copying of modules is forbidden
G4CascadeDeexciteBase(const G4CascadeDeexciteBase&);
G4CascadeDeexciteBase& operator=(const G4CascadeDeexciteBase&);
};
#endif /* G4CASCADE_DEEXCITE_BASE_HH */
@@ -0,0 +1,125 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// Author: Michael Kelsey (SLAC)
// Date: 15 April 2013
//
// Description: Subclass of models/util G4VHadDecayAlgorithm which uses
// old INUCL parametrizations for momentum and angular
// distributions.
//
#ifndef G4CascadeFinalStateAlgorithm_hh
#define G4CascadeFinalStateAlgorithm_hh 1
#include "globals.hh"
#include "G4VHadDecayAlgorithm.hh"
#include "G4LorentzConvertor.hh"
class G4InuclElementaryParticle;
class G4MultiBodyMomentumDist;
class G4TwoBodyAngularDist;
class G4VMultiBodyMomDst;
class G4VTwoBodyAngDst;
class G4CascadeFinalStateAlgorithm : public G4VHadDecayAlgorithm {
public:
G4CascadeFinalStateAlgorithm();
virtual ~G4CascadeFinalStateAlgorithm();
virtual void SetVerboseLevel(G4int verbose); // Pass through to factories
// Select appropriate distributions based on interaction
void Configure(G4InuclElementaryParticle* bullet,
G4InuclElementaryParticle* target,
const std::vector<G4int>& particle_kinds);
protected:
// Two-body generation uses angular-distribution function
virtual void GenerateTwoBody(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
// N-body generation uses momentum-modulus distribution, computed angles
virtual void GenerateMultiBody(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
// Compute kinematic quantities needed for distributions
void SaveKinematics(G4InuclElementaryParticle* bullet,
G4InuclElementaryParticle* target);
// Select generator based on initial and final state
void ChooseGenerators(G4int is, G4int fs);
// Generate momentum magnitudes and validate for use
void FillMagnitudes(G4double initialMass,
const std::vector<G4double>& masses);
G4bool satisfyTriangle(const std::vector<G4double>& pmod) const;
// Generate momentum directions into final state
void FillDirections(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
void FillDirThreeBody(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
void FillDirManyBody(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
G4double GenerateCosTheta(G4int ptype, G4double pmod) const;
// SPECIAL: Generate N-body phase space using Kopylov algorithm
void FillUsingKopylov(G4double initialMass,
const std::vector<G4double>& masses,
std::vector<G4LorentzVector>& finalState);
G4double BetaKopylov(G4int K) const; // Copied from G4HadPhaseSpaceKopylov
private:
const G4VMultiBodyMomDst* momDist; // Buffers for selected distributions
const G4VTwoBodyAngDst* angDist; // Will be NULL for 3+body channels
std::vector<G4int> kinds; // Copy of particle_kinds list
G4int multiplicity; // Final state size, for convenience
G4double bullet_ekin; // Kinematics needed for distributions
G4LorentzConvertor toSCM; // Handles complex rotations/transforms
std::vector<G4double> modules; // Buffers for generating momenta
G4ThreeVector mom;
static const G4double maxCosTheta; // Cut for valid polar angle generation
static const G4double oneOverE; // Numeric value of 1/e for calculations
static const G4double small; // Cut for momentum/kinematics
static const G4int itry_max; // Maximum number of generation attempts
};
#endif /* G4CascadeFinalStateAlgorithm_hh */
@@ -23,36 +23,35 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// Author: Michael Kelsey (SLAC)
// Date: 15 April 2013
//
// Description: Subclass of models/util G4HadDecayGenerator to support
// production of two-body and three-body final state momenta,
// using interaction-specific distributions.
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BEChargedChannel_h
#define G4BEChargedChannel_h 1
#ifndef G4CascadeFinalStateGenerator_hh
#define G4CascadeFinalStateGenerator_hh 1
#include "globals.hh"
#include "G4BertiniEvaporationChannel.hh"
#include "Randomize.hh"
#include "G4HadDecayGenerator.hh"
#include <vector>
class G4BEChargedChannel : public G4BertiniEvaporationChannel
{
class G4InuclElementaryParticle;
class G4CascadeFinalStateAlgorithm;
class G4CascadeFinalStateGenerator : public G4HadDecayGenerator {
public:
G4BEChargedChannel();
virtual ~G4BEChargedChannel();
virtual void calculateProbability();
virtual G4DynamicParticle * emit() = 0;
virtual G4double coulombFactor() = 0;
G4double coulombFactorForProton();
G4double qmFactorForProton();
G4double qmFactorForAlpha();
G4double sampleKineticEnergy();
protected:
G4double A;
G4double spin;
G4CascadeFinalStateGenerator();
virtual ~G4CascadeFinalStateGenerator();
// Configure algorithm (distributions) based on interaction
void Configure(G4InuclElementaryParticle* bullet,
G4InuclElementaryParticle* target,
const std::vector<G4int>& particle_kinds);
};
#endif
#endif /* G4CascadeFinalStateGenerator_hh */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeFunctions.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100407 M. Kelsey -- Return particle types std::vector<> by const ref,
// using a static variable in the function as a buffer.
@@ -25,7 +25,7 @@
//
#ifndef G4_CASCADE_FUNCTIONS_ICC
#define G4_CASCADE_FUNCTIONS_ICC
// $Id$
// $Id: G4CascadeFunctions.icc 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100512 M. Kelsey -- Pass std::vector<> buffer as argument to
// getOutgoingPartTypes().
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
// $Id: G4CascadeGamNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// GEANT4 tag: $Name: not supported by cvs2svn $
#ifndef G4_CASCADE_GAMN_CHANNEL_HH
@@ -35,7 +35,7 @@
struct G4CascadeGamNChannelData {
typedef G4CascadeData<30,6,6,4,5,6,7,7,7> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeGamNChannelData,G4PionNucSampler> G4CascadeGamNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
// $Id: G4CascadeGamPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// GEANT4 tag: $Name: not supported by cvs2svn $
#ifndef G4_CASCADE_GAMP_CHANNEL_HH
@@ -35,7 +35,7 @@
struct G4CascadeGamPChannelData {
typedef G4CascadeData<30,6,6,4,5,6,7,7,7> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeGamPChannelData,G4PionNucSampler> G4CascadeGamPChannel;
@@ -0,0 +1,106 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4CascadeHistory.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// G4CascadeHistory: Container to record all particles produced during
// cascade, with daughters; printout is formatted hierarchically.
#ifndef G4CASCADE_HISTORY_HH
#define G4CASCADE_HISTORY_HH
#include "globals.hh"
#include "G4CascadParticle.hh"
#include <iosfwd>
#include <set>
#include <vector>
class G4CascadeHistory {
public:
G4CascadeHistory(G4int verbose=0) : verboseLevel(verbose) {;}
~G4CascadeHistory() {;} // *** Do not want subclasses ***
void setVerboseLevel(G4int verbose=0) { verboseLevel = verbose; }
// Reset buffers for new event
void Clear();
// Add particle to history list, assigning ID number (non-const input)
G4int AddEntry(G4CascadParticle& cpart);
// Record full interaction vertex (non-const input)
G4int AddVertex(G4CascadParticle& cpart, std::vector<G4CascadParticle>& daug);
// Discard particle reabsorbed during cascade
void DropEntry(const G4CascadParticle& cpart);
// Report cascade structure hierarchically
void Print(std::ostream& os) const;
protected:
struct HistoryEntry {
G4CascadParticle cpart;
G4int n;
G4int dId[10]; // Must be fixed size for allocation in vector
HistoryEntry() { clear(); };
HistoryEntry(const G4CascadParticle& cp) : cpart(cp) { clear(); }
void clear();
};
// Assign ID number to particle (non-const input)
void AssignHistoryID(G4CascadParticle& cpart);
// Populate list of daughters in interaction, adding them to history list
void FillDaughters(G4int iEntry, std::vector<G4CascadParticle>& daug);
// Add single-line report for particle, along with daughters
void PrintEntry(std::ostream& os, G4int iEntry) const;
void PrintParticle(std::ostream& os, const G4CascadParticle& cpart) const;
G4bool PrintingDone(G4int iEntry) const {
return (entryPrinted.find(iEntry) != entryPrinted.end());
}
// Derive target of cascade step from particle and daughters
const char* GuessTarget(const HistoryEntry& entry) const;
G4int size() const { return (G4int)theHistory.size(); }
private:
G4int verboseLevel;
std::vector<HistoryEntry> theHistory; // List of particles and daughters
mutable std::set<G4int> entryPrinted; // Particle indices already reported
// No copying allowed
G4CascadeHistory(const G4CascadeHistory& rhs);
G4CascadeHistory& operator=(const G4CascadeHistory& rhs);
};
// Inline reporting
std::ostream& operator<<(std::ostream& os, const G4CascadeHistory& history);
#endif /* G4CASCADE_HISTORY_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeInterface.hh 71938 2013-06-28 19:01:00Z mkelsey $
// Defines an interface to Bertini (BERT) cascade
// based on INUCL intra-nuclear transport.models
// with bullet hadron energy ~< 10 GeV
@@ -54,6 +54,8 @@
// version which takes G4ParticleDefintion, a la G4VProcess.
// 20120822 M. Kelsey -- Add function to dump user configuration settings.
// Remove local verboseLevel; shadows base class data member.
// 20130501 M. Kelsey -- Add static initializer to created shared objects.
// 20130628 M. Kelsey -- Address Coverity warnings about copy operations.
#ifndef G4CASCADEINTERFACE_H
#define G4CASCADEINTERFACE_H 1
@@ -101,6 +103,9 @@ public:
G4bool IsApplicable(const G4ParticleDefinition* aPD) const;
// Used with multithreaded applications to preload shared objects
static void Initialize();
// Select betweeen different post-cascade de-excitation models
void useCascadeDeexcitation();
void usePreCompoundDeexcitation();
@@ -172,6 +177,11 @@ private:
G4InuclNuclei nucleusTarget;
G4LorentzRotation bulletInLabFrame;
private:
// Copying of modules is forbidden
G4CascadeInterface(const G4CascadeInterface&);
G4CascadeInterface& operator=(const G4CascadeInterface&);
};
#endif // G4CASCADEINTERFACE_H
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeInterpolator.hh 66241 2012-12-13 18:34:42Z gunter $
//
// Author: Michael Kelsey <kelsey@slac.stanford.edu>
//
@@ -25,7 +25,7 @@
//
#ifndef G4CASCADE_INTERPOLATOR_ICC
#define G4CASCADE_INTERPOLATOR_ICC
// $Id$
// $Id: G4CascadeInterpolator.icc 71890 2013-06-27 22:14:13Z mkelsey $
//
// Author: Michael Kelsey <kelsey@slac.stanford.edu>
//
@@ -114,8 +114,8 @@ template <int NBINS>
void G4CascadeInterpolator<NBINS>::printBins(std::ostream& os) const {
os << " G4CascadeInterpolator<" << NBINS << "> : " << G4endl;
for (G4int k=0; k<NBINS; k++) {
os << " " << std::setw(5) << xBins[k];
if ((k+1)%12 == 0) os << G4endl;
os << " " << std::setw(6) << xBins[k];
if ((k+1)%10 == 0) os << G4endl;
}
os << G4endl;
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKminusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKminusNChannelData {
typedef G4CascadeData<31,5,15,28,42,20,11> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKminusNChannelData,G4KaonHypSampler> G4CascadeKminusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKminusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKminusPChannelData {
typedef G4CascadeData<31,8,20,34,48,22,16> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKminusPChannelData,G4KaonHypSampler> G4CascadeKminusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKplusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKplusNChannelData {
typedef G4CascadeData<31,2,5,13,22,32,41> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKplusNChannelData,G4KaonHypSampler> G4CascadeKplusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKplusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKplusPChannelData {
typedef G4CascadeData<31,1,4,10,19,28,38> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKplusPChannelData,G4KaonHypSampler> G4CascadeKplusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKzeroBarNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKzeroBarNChannelData {
typedef G4CascadeData<31,8,20,34,48,22,16> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKzeroBarNChannelData,G4KaonHypSampler> G4CascadeKzeroBarNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKzeroBarPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKzeroBarPChannelData {
typedef G4CascadeData<31,5,15,28,42,20,11> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKzeroBarPChannelData,G4KaonHypSampler> G4CascadeKzeroBarPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKzeroNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKzeroNChannelData {
typedef G4CascadeData<31,1,4,10,19,28,38> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKzeroNChannelData,G4KaonHypSampler> G4CascadeKzeroNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeKzeroPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeKzeroPChannelData {
typedef G4CascadeData<31,2,5,13,22,32,41> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeKzeroPChannelData,G4KaonHypSampler> G4CascadeKzeroPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeLambdaNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeLambdaNChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeLambdaNChannelData,G4KaonHypSampler> G4CascadeLambdaNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeLambdaPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeLambdaPChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeLambdaPChannelData,G4KaonHypSampler> G4CascadeLambdaPChannel;
@@ -23,19 +23,21 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4BertiniHydrogenCollision_h
#define G4BertiniHydrogenCollision_h 1
// $Id: $
#include "globals.hh"
#include "G4BertiniModel.hh"
#ifndef G4_CASCADE_MUMINUSP_CHANNEL_HH
#define G4_CASCADE_MUMINUSP_CHANNEL_HH
class G4BertiniHydrogenCollision : public G4BertiniModel {
public:
G4BertiniHydrogenCollision();
~G4BertiniHydrogenCollision();
#include "G4CascadeData.hh"
#include "G4CascadeFunctions.hh"
#include "G4PionNucSampler.hh"
private:
struct G4CascadeMuMinusPChannelData {
typedef G4CascadeData<30,1,1,1,1,1,1,1,1> data_t;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeMuMinusPChannelData,G4PionNucSampler> G4CascadeMuMinusPChannel;
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeNNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_NN_CHANNEL_HH
#define G4_CASCADE_NN_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadeNNChannelData {
typedef G4CascadeData<30,1,6,18,32,7,8,10,11> data_t;
static data_t data;
static const data_t data;
};
class G4CascadeNNChannel
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeNPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20120907 M. Kelsey -- Subclass and overload findCrossSection() function.
@@ -36,7 +36,7 @@
struct G4CascadeNPChannelData {
typedef G4CascadeData<30,1,9,22,38,7,9,10,12> data_t;
static data_t data;
static const data_t data;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
// $Id: G4CascadeOmegaMinusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// GEANT4 tag: $Name: not supported by cvs2svn $
//
// Author: D.H. Wright (SLAC)
@@ -42,7 +42,7 @@
struct G4CascadeOmegaMinusNChannelData {
typedef G4CascadeData<31,4,18,55,76,20,34> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeOmegaMinusNChannelData,G4KaonHypSampler> G4CascadeOmegaMinusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
// $Id: G4CascadeOmegaMinusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
// GEANT4 tag: $Name: not supported by cvs2svn $
//
// Author: D.H. Wright (SLAC)
@@ -42,7 +42,7 @@
struct G4CascadeOmegaMinusPChannelData {
typedef G4CascadeData<31,4,18,55,76,20,34> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeOmegaMinusPChannelData,G4KaonHypSampler> G4CascadeOmegaMinusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20120907 M. Kelsey -- Subclass and overload findCrossSection() function.
@@ -36,7 +36,7 @@
struct G4CascadePPChannelData {
typedef G4CascadeData<30,1,6,18,32,7,8,10,11> data_t;
static data_t data;
static const data_t data;
};
@@ -23,9 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// G4CascadeParamMessenger.hh
// $Id: G4CascadeParamMessenger.hh 72016 2013-07-03 16:24:15Z mkelsey $
// Define simple UI commands as alternative to environment variables
//
// 20130304 M. Kelsey -- Add flag to collect and display cascade structure
// 20130621 M. Kelsey -- Add flag for CHECK_ECONS, replacing #ifdef's; add
// flag to use three-body momentum parametrizations
// 20130703 M. Kelsey -- Add flag for USE_PHASESPACE
#ifndef G4CascadeParamMessenger_hh
#define G4CascadeParamMessenger_hh
@@ -63,8 +68,12 @@ private:
G4UIcmdWithAnInteger* verboseCmd;
G4UIcmdWithoutParameter* reportCmd;
G4UIcmdWithABool* balanceCmd;
G4UIcmdWithABool* usePreCoCmd;
G4UIcmdWithABool* doCoalCmd;
G4UIcmdWithABool* historyCmd;
G4UIcmdWithABool* use3BodyCmd;
G4UIcmdWithABool* usePSCmd;
G4UIcmdWithAString* randomFileCmd;
G4UIcmdWithABool* nucUseBestCmd;
G4UIcmdWithADouble* nucRad2parCmd;
@@ -23,10 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// G4CascadeParameters.hh
// $Id: G4CascadeParameters.hh 72016 2013-07-03 16:24:15Z mkelsey $
// Encapsulate all user-configurable parameters with associated envvars
//
// 20120912 M. Kelsey -- Add interface to support UI commands
// 20130304 M. Kelsey -- Add flag to collect and display cascade structure
// 20130308 M. Kelsey -- Add flag to use separate 3-body momentum generators
// 20130421 M. Kelsey -- Add flag for CHECK_ECONS, replacing #ifdef's
// 20130702 M. Kelsey -- Add flag to use N-body phase-space generator
#ifndef G4CascadeParameters_hh
#define G4CascadeParameters_hh 1
@@ -44,8 +48,12 @@ public:
// Top-level configuration flags
static G4int verbose() { return Instance()->VERBOSE_LEVEL; }
static G4bool checkConservation() { return Instance()->CHECK_ECONS; }
static G4bool usePreCompound() { return Instance()->USE_PRECOMPOUND; }
static G4bool doCoalescence() { return Instance()->DO_COALESCENCE; }
static G4bool showHistory() { return Instance()->SHOW_HISTORY; }
static G4bool use3BodyMom() { return Instance()->USE_3BODYMOM; }
static G4bool usePhaseSpace() { return Instance()->USE_PHASESPACE; }
static const G4String& randomFile() { return Instance()->RANDOM_FILE; }
// Nuclear structure parameters
@@ -67,8 +75,12 @@ public:
private: // Environment variable values, null pointers mean not set
const char* G4CASCADE_VERBOSE;
const char* G4CASCADE_CHECK_ECONS;
const char* G4CASCADE_USE_PRECOMPOUND;
const char* G4CASCADE_DO_COALESCENCE;
const char* G4CASCADE_SHOW_HISTORY;
const char* G4CASCADE_USE_3BODYMOM;
const char* G4CASCADE_USE_PHASESPACE;
const char* G4CASCADE_RANDOM_FILE;
const char* G4NUCMODEL_USE_BEST;
const char* G4NUCMODEL_RAD_2PAR;
@@ -86,8 +98,12 @@ private: // Environment variable values, null pointers mean not set
void Initialize(); // Fill parameter values from envvar strings
G4int VERBOSE_LEVEL; // Top-level configuration flags
G4bool CHECK_ECONS;
G4bool USE_PRECOMPOUND;
G4bool DO_COALESCENCE;
G4bool SHOW_HISTORY;
G4bool USE_3BODYMOM;
G4bool USE_PHASESPACE;
G4String RANDOM_FILE;
G4bool BEST_PAR; // Nuclear structure parameters
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiMinusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIMINUSN_CHANNEL_HH
#define G4_CASCADE_PIMINUSN_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiMinusNChannelData {
typedef G4CascadeData<30,2,7,15,24,5,6,7,8> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiMinusNChannelData,G4PionNucSampler> G4CascadePiMinusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiMinusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIMINUSP_CHANNEL_HH
#define G4_CASCADE_PIMINUSP_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiMinusPChannelData {
typedef G4CascadeData<30,5,13,22,31,6,7,8,9> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiMinusPChannelData,G4PionNucSampler> G4CascadePiMinusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiPlusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIPLUSN_CHANNEL_HH
#define G4_CASCADE_PIPLUSN_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiPlusNChannelData {
typedef G4CascadeData<30,5,13,22,31,6,7,8,9> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiPlusNChannelData,G4PionNucSampler> G4CascadePiPlusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiPlusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIPLUSP_CHANNEL_HH
#define G4_CASCADE_PIPLUSP_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiPlusPChannelData {
typedef G4CascadeData<30,2,7,15,24,5,6,7,8> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiPlusPChannelData,G4PionNucSampler> G4CascadePiPlusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiZeroNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIZERON_CHANNEL_HH
#define G4_CASCADE_PIZERON_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiZeroNChannelData {
typedef G4CascadeData<30,5,13,21,30,6,7,8,9> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiZeroNChannelData,G4PionNucSampler> G4CascadePiZeroNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadePiZeroPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
#ifndef G4_CASCADE_PIZEROP_CHANNEL_HH
#define G4_CASCADE_PIZEROP_CHANNEL_HH
@@ -34,7 +34,7 @@
struct G4CascadePiZeroPChannelData {
typedef G4CascadeData<30,5,13,21,30,6,7,8,9> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadePiZeroPChannelData,G4PionNucSampler> G4CascadePiZeroPChannel;
@@ -25,7 +25,7 @@
//
#ifndef G4CASCADE_RECOIL_MAKER_HH
#define G4CASCADE_RECOIL_MAKER_HH
// $Id$
// $Id: G4CascadeRecoilMaker.hh 71719 2013-06-21 00:01:54Z mkelsey $
//
// Collects generated cascade data (using Collider::collide() interface)
// and computes the nuclear recoil kinematics needed to balance the event.
@@ -43,6 +43,7 @@
// 20100924 M. Kelsey -- Add raw excitation energy (mass difference) function
// 20110214 M. Kelsey -- Replace "model" with G4InuclParticle::Model enum
// 20110722 M. Kelsey -- For IntraNucleiCascader, take G4CollOut as argument
// 20130620 Address Coverity complaint about missing copy actions
#include <cmath>
#include <vector>
@@ -123,6 +124,11 @@ private:
G4InuclNuclei theRecoilNuclei; // Reusable buffers for recoil
G4Fragment theRecoilFragment;
private:
// Copying of modules is forbidden
G4CascadeRecoilMaker(const G4CascadeRecoilMaker&);
G4CascadeRecoilMaker& operator=(const G4CascadeRecoilMaker&);
};
#endif /* G4CASCADE_RECOIL_MAKER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSampler.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100506 M. Kelsey -- Move functionality of G4CascadeChannel here,
// use as base class to G4CascadeFunctions<T>.
@@ -25,7 +25,7 @@
//
#ifndef G4CASCADE_SAMPLER_ICC
#define G4CASCADE_SAMPLER_ICC
// $Id$
// $Id: G4CascadeSampler.icc 66241 2012-12-13 18:34:42Z gunter $
//
// 20100506 M. Kelsey -- Move functionity of G4CascadeChannel here,
// use as base class to G4CascadeFunctions<T>.
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaMinusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaMinusNChannelData {
typedef G4CascadeData<31,1,6,20,42,25,17> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaMinusNChannelData,G4KaonHypSampler> G4CascadeSigmaMinusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaMinusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaMinusPChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaMinusPChannelData,G4KaonHypSampler> G4CascadeSigmaMinusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaPlusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaPlusNChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaPlusNChannelData,G4KaonHypSampler> G4CascadeSigmaPlusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaPlusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaPlusPChannelData {
typedef G4CascadeData<31,1,6,20,42,25,17> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaPlusPChannelData,G4KaonHypSampler> G4CascadeSigmaPlusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaZeroNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaZeroNChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaZeroNChannelData,G4KaonHypSampler> G4CascadeSigmaZeroNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeSigmaZeroPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeSigmaZeroPChannelData {
typedef G4CascadeData<31,3,12,33,59,30,20> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeSigmaZeroPChannelData,G4KaonHypSampler> G4CascadeSigmaZeroPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeXiMinusNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeXiMinusNChannelData {
typedef G4CascadeData<31,3,18,53,2,2,2> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeXiMinusNChannelData,G4KaonHypSampler> G4CascadeXiMinusNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeXiMinusPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -39,7 +39,7 @@
struct G4CascadeXiMinusPChannelData {
typedef G4CascadeData<31,6,24,4,4,4,4> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeXiMinusPChannelData,G4KaonHypSampler> G4CascadeXiMinusPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeXiZeroNChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -40,7 +40,7 @@
struct G4CascadeXiZeroNChannelData {
typedef G4CascadeData<31,6,24,4,4,4,4> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeXiZeroNChannelData,G4KaonHypSampler> G4CascadeXiZeroNChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CascadeXiZeroPChannel.hh 67796 2013-03-08 06:18:39Z mkelsey $
//
// 20100507 M. Kelsey -- Remove redundant total-bins template argument
// 20100510 M. Kelsey -- Add initial "31" template arg. Add G4CascSampler
@@ -40,7 +40,7 @@
struct G4CascadeXiZeroPChannelData {
typedef G4CascadeData<31,3,18,53,2,2,2> data_t;
static data_t data;
static const data_t data;
};
typedef G4CascadeFunctions<G4CascadeXiZeroPChannelData,G4KaonHypSampler> G4CascadeXiZeroPChannel;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4CollisionOutput.hh 71954 2013-06-29 04:40:40Z mkelsey $
//
// 20100114 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100407 M. Kelsey -- Replace ::resize(0) with ::clear()
@@ -44,6 +44,7 @@
// 20110323 M. Kelsey -- Add non-const access to lists (for G4NucleiModel)
// 20110922 M. Kelsey -- Add optional stream argument to printCollisionOutput
// 20121002 M. Kelsey -- Add strangeness calculation
// 20130628 M. Kelsey -- Support multiple recoil fragments (for G4Fissioner)
#ifndef G4COLLISION_OUTPUT_HH
#define G4COLLISION_OUTPUT_HH
@@ -93,15 +94,15 @@ public:
void addOutgoingParticles(const G4ReactionProductVector* rproducts);
// Special buffer for initial, possible unstable fragment from cascade
// Special buffer for initial, possible unstable fragments from cascade
void addRecoilFragment(const G4Fragment* aFragment) {
if (aFragment) addRecoilFragment(*aFragment);
}
void addRecoilFragment(const G4Fragment& aFragment) {
theRecoilFragment = aFragment;
recoilFragments.push_back(aFragment);
}
// ===== Remove contents of lists, by index, reference or value =====
void removeOutgoingParticle(G4int index);
@@ -116,7 +117,7 @@ public:
if (nuclei) removeOutgoingNucleus(*nuclei);
}
void removeRecoilFragment(); // There is only one fragment
void removeRecoilFragment(G4int index=-1); // No argument removes all
// ===== Access contents of lists =====
@@ -138,9 +139,15 @@ public:
std::vector<G4InuclNuclei>& getOutgoingNuclei() { return outgoingNuclei; };
const G4Fragment& getRecoilFragment() const { return theRecoilFragment; }
G4int numberOfFragments() const { return recoilFragments.size(); }
G4Fragment& getRecoilFragment() { return theRecoilFragment; }
const G4Fragment& getRecoilFragment(G4int index=0) const;
const std::vector<G4Fragment>& getRecoilFragments() const {
return recoilFragments;
};
std::vector<G4Fragment>& getRecoilFragments() { return recoilFragments; };
// ===== Get event totals for conservation checking, recoil, etc. ======
@@ -170,7 +177,8 @@ private:
std::vector<G4InuclElementaryParticle> outgoingParticles;
std::vector<G4InuclNuclei> outgoingNuclei;
G4Fragment theRecoilFragment;
std::vector<G4Fragment> recoilFragments;
static const G4Fragment emptyFragment; // To return if list empty
G4double eex_rest; // Used by setOnShell() for kinematics
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Dineutron.hh 69389 2013-05-02 15:54:09Z mkelsey $
//
// ------------------------------------------------------------
// Bertini Cascade dineutron class header file
@@ -32,6 +32,7 @@
// 17 Nov 2009: Michael Kelsey
// 06 Apr 2010: Reset theInstance in dtor, implement ctor in .cc.
// 13 Apr 2010: Per Kurashige, inherit from G4VShortLivedParticle.
// 01 May 2013: Remove G4ThreadLocal from static pointer.
// ----------------------------------------------------------------
#ifndef G4DINEUTRON_HH
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Diproton.hh 69389 2013-05-02 15:54:09Z mkelsey $
//
// ------------------------------------------------------------
// Bertini Cascade diproton class header file
@@ -32,6 +32,7 @@
// 17 Nov 2009: Michael Kelsey
// 06 Apr 2010: Reset theInstance in dtor, implement ctor in .cc.
// 13 Apr 2010: Per Kurashige, inherit from G4VShortLivedParticle.
// 01 May 2013: Remove G4ThreadLocal from static pointer.
// ----------------------------------------------------------------
#ifndef G4DIPROTON_HH
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4ElementaryParticleCollider.hh 71940 2013-06-28 19:04:44Z mkelsey $
//
// 20100114 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100315 M. Kelsey -- Remove "using" directive and unnecessary #includes.
@@ -43,17 +43,29 @@
// 20100726 M. Kelsey -- Move remaining std::vector<> buffers here
// 20100804 M. Kelsey -- Add printFinalStateTables() function.
// 20110923 M. Kelsey -- Add optional stream& to printFinalStateTables().
// 20130129 M. Kelsey -- Add static arrays and interpolators for two-body
// angular distributions (addresses MT thread-local issue)
// 20130131 D. Wright -- Use new *AngDst classes for gamma-N two-body
// 20130220 M. Kelsey -- Replace two-body angular code with new *AngDst classes
// 20130221 M. Kelsey -- Move two-body angular dist classes to factory
// 20130306 M. Kelsey -- Move printFinalStateTables() to table factory
// 20130307 M. Kelsey -- Reverse order of dimensions for rmn array
// 20130422 M. Kelsey -- Move kinematics to G4CascadeFinalStateAlgorithm
// 20130508 D. Wright -- Add muon capture, with absorption on quasideuterons
// 20130620 Address Coverity complaint about missing copy actions
// 20130628 Add function to split dibaryon into particle_kinds list
#ifndef G4ELEMENTARY_PARTICLE_COLLIDER_HH
#define G4ELEMENTARY_PARTICLE_COLLIDER_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeFinalStateGenerator.hh"
#include "G4CascadeInterpolator.hh"
#include "G4InuclElementaryParticle.hh"
#include "G4LorentzVector.hh"
#include <iosfwd>
#include <vector>
class G4LorentzConvertor;
class G4CollisionOutput;
@@ -66,59 +78,41 @@ public:
G4CollisionOutput& output);
private:
void initializeArrays();
G4int generateMultiplicity(G4int is, G4double ekin) const;
void generateOutgoingPartTypes(G4int is, G4int mult, G4double ekin);
void generateSCMfinalState(G4double ekin, G4double etot_scm, G4double pscm,
void generateSCMfinalState(G4double ekin, G4double etot_scm,
G4InuclElementaryParticle* particle1,
G4InuclElementaryParticle* particle2,
G4LorentzConvertor* toSCM);
G4InuclElementaryParticle* particle2);
void generateSCMpionAbsorption(G4double etot_scm,
G4InuclElementaryParticle* particle1,
G4InuclElementaryParticle* particle2);
void generateMomModules(G4int mult, G4int is, G4double ekin,
G4double etot_cm);
void generateSCMmuonAbsorption(G4double etot_scm,
G4InuclElementaryParticle* particle1,
G4InuclElementaryParticle* particle2);
// Samples the CM momentum for elastic and charge exchange scattering
//
G4LorentzVector
sampleCMmomentumFor2to2(G4int is, G4int kw, G4double ekin,
G4double pscm) const;
G4bool splitQuasiDeuteron(G4int qdtype); // Fill kinds with NN components
void fillOutgoingMasses(); // Fill mass arrays from particle types
// Samples cos(theta) in the CM for elastic and charge exchange scattering
//
G4double sampleCMcosFor2to2(G4double pscm, G4double pFrac,
G4double pA, G4double pC, G4double pCos) const;
G4double getMomModuleFor2toMany(G4int is, G4int mult, G4int knd,
G4double ekin) const;
G4bool satisfyTriangle(const std::vector<G4double>& modules) const;
G4LorentzVector
particleSCMmomentumFor2to3(G4int is, G4int knd, G4double ekin,
G4double pmod) const;
void printFinalStateTables(std::ostream& os=G4cout) const;
// Utility class to generate final-state kinematics
G4CascadeFinalStateGenerator fsGenerator;
// Internal buffers for lists of secondaries
std::vector<G4InuclElementaryParticle> particles;
std::vector<G4LorentzVector> scm_momentums;
std::vector<G4double> modules;
std::vector<G4double> masses;
std::vector<G4double> masses2;
std::vector<G4int> particle_kinds;
// Parameter arrays
static const G4double rmn[14][10][2];
static const G4double abn[4][4][4];
private:
// Copying of modules is forbidden
G4ElementaryParticleCollider(const G4ElementaryParticleCollider&);
G4ElementaryParticleCollider& operator=(const G4ElementaryParticleCollider&);
};
#endif /* G4ELEMENTARY_PARTICLE_COLLIDER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4EquilibriumEvaporator.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
// 20100517 M. Kelsey -- Inherit from common base class, make other colliders
@@ -35,39 +35,47 @@
// 20110801 M. Kelsey -- Move "parms" buffer to data member, allocate in
// constructor.
// 20110809 M. Kelsey -- Move "foutput" buffer to data member
// 20130129 M. Kelsey -- Move QF interpolation to global statics for
// multi-threaded shared memory.
// 20130620 Address Coverity complaint about missing copy actions
// 20130621 Follow base class change to explosion() reference interface
// 20130622 Inherit from G4CascadeDeexciteBase, move to deExcite() interface
// with G4Fragment
// 20130808 Use new object-version of paraMaker, for thread safety
// 20131001 Move QFinterpolation to data member to be thread local (not shared)
#ifndef G4EQUILIBRIUM_EVAPORATOR_HH
#define G4EQUILIBRIUM_EVAPORATOR_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeDeexciteBase.hh"
#include "G4CascadeInterpolator.hh"
#include "G4CollisionOutput.hh"
#include "G4Fissioner.hh"
#include "G4BigBanger.hh"
#include "G4InuclSpecialFunctions.hh"
class G4InuclParticle;
class G4EquilibriumEvaporator : public G4CascadeColliderBase {
class G4EquilibriumEvaporator : public G4CascadeDeexciteBase {
public:
G4EquilibriumEvaporator();
virtual ~G4EquilibriumEvaporator();
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
virtual void setVerboseLevel(G4int verbose);
virtual void deExcite(const G4Fragment& target, G4CollisionOutput& output);
private:
// Replace base class verision
// Replace base class verision with more complex conditions
virtual G4bool explosion(G4int a, G4int z, G4double e) const;
// FIXME: Need to redeclare and call through base-class polymorphisms
virtual G4bool explosion(G4InuclNuclei* target) const {
return G4CascadeColliderBase::explosion(target);
}
virtual G4bool explosion(G4Fragment* target) const {
return G4CascadeColliderBase::explosion(target);
// NOTE: Must redeclare base-class polymorphisms
virtual G4bool explosion(const G4Fragment& target) const {
return G4CascadeDeexciteBase::explosion(target);
}
G4bool goodRemnant(G4int a, G4int z) const;
G4InuclSpecialFunctions::paraMaker theParaMaker;
G4double getE0(G4int A) const;
G4double getPARLEVDEN(G4int A, G4int Z) const;
G4double getQF(G4double x, G4double x2, G4int a, G4int z, G4double e) const;
@@ -77,8 +85,16 @@ private:
std::pair<std::vector<G4double>, std::vector<G4double> > parms;
G4CollisionOutput fission_output;
// Interpolation object for QF
G4CascadeInterpolator<72> QFinterp;
G4Fissioner theFissioner;
G4BigBanger theBigBanger;
private:
// Copying of modules is forbidden
G4EquilibriumEvaporator(const G4EquilibriumEvaporator&);
G4EquilibriumEvaporator& operator=(const G4EquilibriumEvaporator&);
};
#endif /* G4EQUILIBRIUM_EVAPORATOR_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4EvaporationInuclCollider.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100315 M. Kelsey -- Remove "using" directive and unnecessary #includes.
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
@@ -31,27 +31,34 @@
// simple data members
// 20100714 M. Kelsey -- Switch to new G4CascadeColliderBase class
// 20110728 M. Kelsey -- Fix Coverity #23843, add destructor.
// 20130620 Address Coverity complaint about missing copy actions
// 20130622 Inherit from G4CascadeDeexciteBase, move to deExcite() interface
// with G4Fragment
#ifndef G4EVAPORATIONINUCL_COLLIDER_HH
#define G4EVAPORATIONINUCL_COLLIDER_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeDeexciteBase.hh"
class G4InuclParticle;
class G4CollisionOutput;
class G4EquilibriumEvaporator;
class G4BigBanger;
class G4EvaporationInuclCollider : public G4CascadeColliderBase {
class G4EvaporationInuclCollider : public G4CascadeDeexciteBase {
public:
G4EvaporationInuclCollider();
~G4EvaporationInuclCollider();
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
virtual void deExcite(const G4Fragment& target, G4CollisionOutput& output);
private:
G4EquilibriumEvaporator* theEquilibriumEvaporator;
private:
// Copying of modules is forbidden
G4EvaporationInuclCollider(const G4EvaporationInuclCollider&);
G4EvaporationInuclCollider& operator=(const G4EvaporationInuclCollider&);
};
#endif /* G4EVAPORATIONINUCL_COLLIDER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4ExitonConfiguration.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100909 Add function to reset values to zero
// 20100924 Migrate to integer A and Z
@@ -31,6 +31,7 @@
// 20110922 M. Kelsey -- Replace print() with stream operator<<(), put
// implementation into new .cc file.
// 20121009 M. Kelsey -- Add empty() test for no excitons, fix constness
// 20130622 M. Kelsey -- Add interface to copy data from G4Fragment
#ifndef G4EXITON_CONFIGURATION_HH
#define G4EXITON_CONFIGURATION_HH
@@ -38,6 +39,8 @@
#include "globals.hh"
#include <iosfwd>
class G4Fragment;
class G4ExitonConfiguration {
public:
G4ExitonConfiguration()
@@ -48,6 +51,11 @@ public:
: protonQuasiParticles(qpp), neutronQuasiParticles(qnp),
protonHoles(qph), neutronHoles(qnh) {}
explicit G4ExitonConfiguration(const G4Fragment& frag)
: protonQuasiParticles(0), neutronQuasiParticles(0),
protonHoles(0), neutronHoles(0) { fill(frag); }
void clear() {
protonQuasiParticles = neutronQuasiParticles = 0;
protonHoles = neutronHoles = 0;
@@ -58,6 +66,8 @@ public:
protonHoles==0 && neutronHoles==0);
}
void fill(const G4Fragment& frag); // Initialize from G4Fragment data
bool operator==(const G4ExitonConfiguration& right) const {
return ( (&right == this) ||
(protonQuasiParticles == right.protonQuasiParticles &&
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4FissionStore.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100728 Move ::addConfig() to .cc file, add setVerboseLevel(), clear()
// 20110801 Make configuration probs a data member array, reduce memory churn
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4Fissioner.hh 71954 2013-06-29 04:40:40Z mkelsey $
//
// 20100315 M. Kelsey -- Remove "using" directive and unnecessary #includes.
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
@@ -32,25 +32,27 @@
// 20100728 M. Kelsey -- Move G4FissionStore to data member and reuse
// 20100914 M. Kelsey -- Migrate to integer A and Z
// 20110801 M. Kelsey -- Pass C arrays to ::potentialMinimization()
// 20130129 M. Kelsey -- Put buffer for output nuclei here for thread-safety
// 20130620 Address Coverity complaint about missing copy actions
// 20130622 Inherit from G4CascadeDeexciteBase, move to deExcite() interface
// with G4Fragment
// 20130628 Drop local list of fragments; add directly to output
#ifndef G4FISSIONER_HH
#define G4FISSIONER_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeDeexciteBase.hh"
#include "G4FissionStore.hh"
#include "G4InuclNuclei.hh"
#include <vector>
class G4CollisionOutput;
class G4InuclParticle;
class G4Fissioner : public G4CascadeColliderBase {
class G4Fissioner : public G4CascadeDeexciteBase {
public:
G4Fissioner();
virtual ~G4Fissioner() {}
G4Fissioner() : G4CascadeDeexciteBase("G4Fissioner") {;}
virtual ~G4Fissioner() {;}
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
virtual void deExcite(const G4Fragment& target, G4CollisionOutput& output);
private:
G4FissionStore fissionStore;
@@ -78,6 +80,11 @@ private:
G4double AL1[2],
G4double BET1[2],
G4double& R12) const;
private:
// Copying of modules is forbidden
G4Fissioner(const G4Fissioner&);
G4Fissioner& operator=(const G4Fissioner&);
};
#endif /* G4FISSIONER_HH */
@@ -23,40 +23,47 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BEGammaDeexcitation_h
#define G4BEGammaDeexcitation_h 1
// File: G4GDecay3.hh
// Author: Dennis Wright (SLAC)
// Date: 19 April 2013
//
// Description: three-body phase space momentum generator based on
// GDECA3 of Geant3
//
#ifndef G4GDecay3_h
#define G4GDecay3_h 1
#include "globals.hh"
#include "G4ThreeVector.hh"
#include <vector>
class G4BEGammaDeexcitation
{
public:
G4BEGammaDeexcitation();
virtual ~G4BEGammaDeexcitation();
void setVerboseLevel( G4int verbose );
class G4GDecay3 {
void setNucleusA( G4int inputA );
void setNucleusZ( G4int inputZ );
void setExcitationEnergy( G4double inputE );
public:
G4GDecay3() {;}
G4GDecay3(const G4double& pMass, const G4double& dMass0,
const G4double& dMass1, const G4double& dMass2);
~G4GDecay3() {;}
std::vector<G4ThreeVector> GetThreeBodyMomenta();
G4DynamicParticle * emit();
private:
G4bool CalculateMomentumMagnitudes();
private:
G4double sampleKineticEnergy();
G4int verboseLevel;
G4int nucleusA;
G4int nucleusZ;
G4double excitationEnergy;
void isotropicCosines( G4double&,
G4double&,
G4double& );
};
G4int loopMax;
G4double parentMass;
G4double mDaughter0;
G4double mDaughter1;
G4double mDaughter2;
G4double pDaughter0;
G4double pDaughter1;
G4double pDaughter2;
};
#endif
@@ -0,0 +1,48 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GamP2NPipAngDst.hh 67433 2013-02-20 21:27:31Z mkelsey $
// Author: Dennis Wright (SLAC)
// Date: 28 January 2013
//
// Description: class containing numerically integrated angular distributions
// in the CM for the gamma p -> n pi+ reaction
//
// 20130219 M. Kelsey: Inherit from templated base, remove ctor arguments
#ifndef G4GamP2NPipAngDst_h
#define G4GamP2NPipAngDst_h 1
#include "G4NumIntTwoBodyAngDst.hh"
class G4GamP2NPipAngDst : public G4NumIntTwoBodyAngDst<15,19> {
public:
G4GamP2NPipAngDst(G4int verbose=0);
virtual ~G4GamP2NPipAngDst() {}
};
#endif
@@ -0,0 +1,47 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GamP2PPi0AngDst.hh 67433 2013-02-20 21:27:31Z mkelsey $
// Author: Dennis Wright (SLAC)
// Date: 28 January 2013
//
// Description: class containing numerically integrated angular distributions
// in the CM for the gamma p -> p pi0 reaction
//
// 20130219 M. Kelsey: Inherit from templated base, remove ctor arguments
#ifndef G4GamP2PPi0AngDst_h
#define G4GamP2PPi0AngDst_h 1
#include "G4NumIntTwoBodyAngDst.hh"
class G4GamP2PPi0AngDst : public G4NumIntTwoBodyAngDst<15,19> {
public:
G4GamP2PPi0AngDst(G4int verbose = 0);
virtual ~G4GamP2PPi0AngDst() {;}
};
#endif
@@ -23,29 +23,24 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GammaNuclAngDst.hh 67633 2013-02-27 20:38:04Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 20 February 2013
//
// Description: class containing parametrized angular distributions
// in the CM for gamma - nucleon two-body scattering
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BEDeuteronChannel_h
#define G4BEDeuteronChannel_h 1
#ifndef G4GammaNuclAngDst_h
#define G4GammaNuclAngDst_h 1
#include "G4BEChargedChannel.hh"
#include "G4ParamExpTwoBodyAngDst.hh"
class G4BEDeuteronChannel : public G4BEChargedChannel
{
class G4GammaNuclAngDst : public G4ParamExpTwoBodyAngDst<10> {
public:
G4BEDeuteronChannel();
virtual ~G4BEDeuteronChannel();
G4DynamicParticle * emit();
G4double constant();
virtual G4double coulombFactor();
virtual G4double qmFactor( );
private:
G4GammaNuclAngDst(G4int verbose = 0);
virtual ~G4GammaNuclAngDst() {;}
};
#endif
@@ -23,31 +23,25 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadNElastic1AngDst.hh 67633 2013-02-27 20:38:04Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 20 February 2013
//
// Description: class containing parametrized angular distributions
// in the CM for elastic scattering of pi+p, pi0p, gammap,
// k+p, k0bp, pi-n, pi0n, gamman, k-n, or k0n
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BENeutronChannel_h
#define G4BENeutronChannel_h 1
#ifndef G4HadNElastic1AngDst_h
#define G4HadNElastic1AngDst_h 1
#include "globals.hh"
#include "G4BertiniEvaporationChannel.hh"
#include "G4ParamExpTwoBodyAngDst.hh"
class G4BENeutronChannel : public G4BertiniEvaporationChannel
{
class G4HadNElastic1AngDst : public G4ParamExpTwoBodyAngDst<10> {
public:
G4BENeutronChannel();
virtual ~G4BENeutronChannel();
virtual void calculateProbability();
G4DynamicParticle * emit();
G4double sampleKineticEnergy();
private:
G4double alpha();
G4double beta();
G4HadNElastic1AngDst(G4int verbose = 0);
virtual ~G4HadNElastic1AngDst() {;}
};
#endif
@@ -0,0 +1,46 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadNElastic2AngDst.hh 67633 2013-02-27 20:38:04Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 20 February 2013
//
// Description: class containing parametrized angular distributions
// in the CM for elastic scattering of pi-p, pi+n, k-p,
// k0bn, k+n, or k0p
#ifndef G4HadNElastic2AngDst_h
#define G4HadNElastic2AngDst_h 1
#include "G4ParamExpTwoBodyAngDst.hh"
class G4HadNElastic2AngDst : public G4ParamExpTwoBodyAngDst<10> {
public:
G4HadNElastic2AngDst(G4int verbose = 0);
virtual ~G4HadNElastic2AngDst() {;}
};
#endif
@@ -23,37 +23,23 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
#ifndef G4BertiniElasticCollision_h
#define G4BertiniElasticCollision_h 1
// $Id$
// Author: Michael Kelsey (SLAC)
// Date: 22 April 2013
//
// Description: class containing parametrized angular distributions
// in the CM for hadron/nucleon 3-body final states
//
#include "G4BertiniModel.hh"
#ifndef G4HadNucl3BodyAngDst_h
#define G4HadNucl3BodyAngDst_h 1
class G4BertiniElasticCollision : public G4BertiniModel {
#include "G4InuclParamAngDst.hh"
class G4HadNucl3BodyAngDst : public G4InuclParamAngDst {
public:
G4BertiniElasticCollision();
~G4BertiniElasticCollision();
void interpolateElasticNeutronData(G4int medium, G4int kdd, G4double e);
void geti(G4double es, G4int npts, G4double e, G4int i);
void scatteringWithHydrogen();
private:
G4double pt[16];
G4double col[23];
G4HadNucl3BodyAngDst(G4int verbose = 0);
virtual ~G4HadNucl3BodyAngDst() {;}
};
#endif
@@ -23,29 +23,23 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadNucl3BodyMomDst.hh 67796 2013-03-08 06:18:39Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 7 March 2013
//
// Description: class containing parametrized momentum distributions
// in the CM for hadron/nucleon 3-body final states
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, 30-May-2000
#ifndef G4BEProtonChannel_h
#define G4BEProtonChannel_h 1
#ifndef G4HadNucl3BodyMomDst_h
#define G4HadNucl3BodyMomDst_h 1
#include "G4BEChargedChannel.hh"
#include "G4InuclParamMomDst.hh"
class G4BEProtonChannel : public G4BEChargedChannel
{
class G4HadNucl3BodyMomDst : public G4InuclParamMomDst {
public:
G4BEProtonChannel();
virtual ~G4BEProtonChannel();
G4DynamicParticle * emit();
G4double constant();
virtual G4double coulombFactor();
virtual G4double qmFactor( );
private:
G4HadNucl3BodyMomDst(G4int verbose = 0);
virtual ~G4HadNucl3BodyMomDst() {;}
};
#endif
@@ -0,0 +1,45 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadNucl4BodyMomDst.hh 67796 2013-03-08 06:18:39Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 7 March 2013
//
// Description: class containing parametrized momentum distributions
// in the CM for hadron/nucleon >= 4-body final states
//
#ifndef G4HadNucl4BodyMomDst_h
#define G4HadNucl4BodyMomDst_h 1
#include "G4InuclParamMomDst.hh"
class G4HadNucl4BodyMomDst : public G4InuclParamMomDst {
public:
G4HadNucl4BodyMomDst(G4int verbose = 0);
virtual ~G4HadNucl4BodyMomDst() {;}
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InteractionCase.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100518 M. Kelsey -- Why use std::pair<> at all? Never exported; just
// store pointers. Add clear() function. Move code from
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4IntraNucleiCascader.hh 71719 2013-06-21 00:01:54Z mkelsey $
//
// 20100315 M. Kelsey -- Remove "using" directory and unnecessary #includes.
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
@@ -61,6 +61,8 @@
// 20110801 M. Kelsey -- Add local target buffers for rescattering, to avoid
// memory leak.
// 20110919 M. Kelsey -- Add optional final-state clustering
// 20130304 M. Kelsey -- Add new G4CascadeHistory for cacasde structure reporting
// 20130620 Address Coverity complaint about missing copy actions
#ifndef G4INTRA_NUCLEI_CASCADER_HH
#define G4INTRA_NUCLEI_CASCADER_HH
@@ -72,6 +74,7 @@
class G4CascadParticle;
class G4CascadeCoalescence;
class G4CascadeHistory;
class G4CascadeRecoilMaker;
class G4ElementaryParticleCollider;
class G4InuclElementaryParticle;
@@ -133,6 +136,7 @@ private:
G4ElementaryParticleCollider* theElementaryParticleCollider;
G4CascadeRecoilMaker* theRecoilMaker;
G4CascadeCoalescence* theClusterMaker;
G4CascadeHistory* theCascadeHistory;
// Buffers and parameters for cascade attempts
G4InuclNuclei* tnuclei; // Target nucleus (must be non-zero)
@@ -153,6 +157,11 @@ private:
G4ExitonConfiguration theExitonConfiguration;
std::vector<G4ThreeVector> hitNucleons; // Nucleons hit before rescatter
private:
// Copying of modules is forbidden
G4IntraNucleiCascader(const G4IntraNucleiCascader&);
G4IntraNucleiCascader& operator=(const G4IntraNucleiCascader&);
};
#endif /* G4INTRA_NUCLEI_CASCADER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclCollider.hh 71719 2013-06-21 00:01:54Z mkelsey $
//
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
// 20100517 M. Kelsey -- Inherit from common base class, make other colliders
@@ -40,6 +40,7 @@
// pre-existing secondaries as input. Add setVerboseLevel().
// 20110304 M. Kelsey -- Modify rescatter to use original Propagate() input
// 20110308 M. Kelsey -- Add ::deexcite() function to handle nuclear fragment
// 20130620 Address Coverity complaint about missing copy actions
#ifndef G4INUCL_COLLIDER_HH
#define G4INUCL_COLLIDER_HH
@@ -85,6 +86,11 @@ private:
G4CollisionOutput output; // Secondaries from main cascade
G4CollisionOutput DEXoutput; // Secondaries from de-excitation
private:
// Copying of modules is forbidden
G4InuclCollider(const G4InuclCollider&);
G4InuclCollider& operator=(const G4InuclCollider&);
};
#endif /* G4INUCL_COLLIDER_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclElementaryParticle.hh 72074 2013-07-06 06:28:53Z mkelsey $
//
// 20100114 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100409 M. Kelsey -- Drop unused string argument from ctors.
@@ -43,6 +43,7 @@
// reuse of objects as buffers; c.f. G4InuclNuclei.
// 20110922 M. Kelsey -- Add stream argument to printParticle() => print()
// 20120608 M. Kelsey -- Fix variable-name "shadowing" compiler warnings.
// 20130702 M. Kelsey -- Use static type classifiers in G4InuclParticleNames
#ifndef G4INUCL_ELEMENTARY_PARTICLE_HH
#define G4INUCL_ELEMENTARY_PARTICLE_HH
@@ -102,18 +103,17 @@ public:
static G4int type(const G4ParticleDefinition* pd);
G4bool isPhoton() const { return (type() == G4InuclParticleNames::photon); }
// Ensure that type code refers to a known particle
inline static G4bool valid(G4int ityp) { return ityp!=0; }
G4bool valid() const { return valid(type()); }
G4bool pion() const { return (type()==G4InuclParticleNames::pionPlus ||
type()==G4InuclParticleNames::pionMinus ||
type()==G4InuclParticleNames::pionZero); }
G4bool nucleon() const { return (type()==G4InuclParticleNames::proton ||
type()==G4InuclParticleNames::neutron); }
G4bool antinucleon() const {
return (type()==G4InuclParticleNames::antiProton ||
type()==G4InuclParticleNames::antiNeutron); }
G4bool isPhoton() const { return G4InuclParticleNames::isPhoton(type()); }
G4bool isMuon() const { return G4InuclParticleNames::isMuon(type()); }
G4bool isElectron() const { return G4InuclParticleNames::isElectron(type()); }
G4bool isNeutrino() const { return G4InuclParticleNames::isNeutrino(type()); }
G4bool pion() const { return G4InuclParticleNames::pion(type()); }
G4bool nucleon() const { return G4InuclParticleNames::nucleon(type()); }
G4bool antinucleon() const { return G4InuclParticleNames::antinucleon(type()); }
G4int baryon() const { // Can use as a bool (!=0 ==> true)
return getDefinition()->GetBaryonNumber();
@@ -123,12 +123,12 @@ public:
G4bool hyperon() const { return (baryon() && getStrangeness()); }
G4bool quasi_deutron() const { return (type() > 100); }
G4bool quasi_deutron() const {
return G4InuclParticleNames::quasi_deutron(type());
}
G4int getStrangeness() const { return getStrangeness(type()); }
G4bool valid() const { return type()>0; }
virtual void print(std::ostream& os) const;
static G4int getStrangeness(G4int type);
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclEvaporation.hh 66241 2012-12-13 18:34:42Z gunter $
// Defines an interface to evaporation models of Bertini cascase (BERT)
// based on INUCL code.
//
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclNuclei.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100112 Michael Kelsey -- Replace G4CascadeMomentum with G4LorentzVector
// 20100301 M. Kelsey -- Add function to create unphysical nuclei for use
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// Author: Michael Kelsey (SLAC)
// Date: 22 April 2013
//
// Description: intermediate base class for INUCL parametrizations of
// three-body angular distributions in Bertini-style cascade
//
// NOTE: Coefficient arrays have fixed dimensions, validated by compiler
#ifndef G4InuclParamAngDst_h
#define G4InuclParamAngDst_h 1
#include "globals.hh"
#include "G4VThreeBodyAngDst.hh"
class G4InuclParamAngDst : public G4VThreeBodyAngDst {
public:
// NOTE: Array arguments must be STATIC, GLOBAL declarations
G4InuclParamAngDst(const G4String& name,
const G4double (&abnC)[2][4][4],
G4int verbose=0)
: G4VThreeBodyAngDst(name, verbose), coeffAB(abnC) {;}
virtual ~G4InuclParamAngDst() {;}
virtual G4double GetCosTheta(G4int ptype, G4double ekin) const;
// FIXME: Must re-declare base class interface with call-through
// to avoid "hidden function" compiler warnings
virtual G4double GetCosTheta(const G4double& ekin, const G4double& pcm) const {
return G4VThreeBodyAngDst::GetCosTheta(ekin, pcm);
}
protected:
const G4double (&coeffAB)[2][4][4]; // (coeffs Ekin^0..3) * S^0..3
};
#endif /* G4InuclParamAngDst_h */
@@ -23,52 +23,38 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4InuclParamMomDst.hh 67796 2013-03-08 06:18:39Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 7 March 2013
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, 30-May-2000
// Description: intermediate base class for INUCL parametrizations of
// final-state momentum distributions in Bertini-style cascade
//
// NOTE: Coefficient arrays have fixed dimensions, validated by compiler
#include "G4BEProtonChannel.hh"
#include "G4Proton.hh"
#ifndef G4InuclParamMomDst_h
#define G4InuclParamMomDst_h 1
G4BEProtonChannel::G4BEProtonChannel()
{
name = "proton";
verboseLevel = 0;
particleA = 1;
particleZ = 1;
rho = 0;
A=1;
spin = 0.5;
}
#include "globals.hh"
#include "G4VMultiBodyMomDst.hh"
G4BEProtonChannel::~G4BEProtonChannel()
{
}
class G4InuclParamMomDst : public G4VMultiBodyMomDst {
public:
// NOTE: Array arguments must be STATIC, GLOBAL declarations
G4InuclParamMomDst(const G4String& name,
const G4double (&pqprC)[2][4][4],
const G4double (&psC)[2][3],
G4int verbose=0)
: G4VMultiBodyMomDst(name, verbose), coeffPR(pqprC), coeffPS(psC) {;}
virtual ~G4InuclParamMomDst() {;}
virtual G4double GetMomentum(G4int ptype, const G4double& ekin) const;
G4DynamicParticle* G4BEProtonChannel::emit()
{
G4double u , v , w;
G4DynamicParticle * pParticle = new G4DynamicParticle;
pParticle -> SetDefinition( G4Proton::Proton() );
pParticle -> SetKineticEnergy( sampleKineticEnergy() );
isotropicCosines( u , v , w );
pParticle -> SetMomentumDirection( u , v , w );
return pParticle;
}
protected:
const G4double (&coeffPR)[2][4][4]; // (coeffs Ekin^0..3) * S^0..3
const G4double (&coeffPS)[2][3]; // PS = sum coeffs * Ekin^0..2
};
G4double G4BEProtonChannel::coulombFactor()
{
return coulombFactorForProton();
}
G4double G4BEProtonChannel::qmFactor()
{
// Coefficient representing the quantum mechanical barrier
// penetration, see Dostrovsky, Phys. Rev. 116, 1959.
return qmFactorForProton();
}
#endif /* G4InuclParamMomDst_h */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclParticle.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100112 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100409 M. Kelsey -- Drop unused string argument from ctors.
@@ -23,8 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// Geant4 tag: $Name: $
// $Id: G4InuclParticleNames.hh 72074 2013-07-06 06:28:53Z mkelsey $
//
// Defines enums to map G4InuclElementaryParticle type codes to human
// readable names. Meant to replace similar local enums scattered through
@@ -32,10 +31,15 @@
//
// 20101029 M. Kelsey -- Move antinucleons to 50-series, add deuteron
// 20111007 M. Kelsey -- Change photon code to 9, for use in initial states
// 20130508 D. Wright -- Add leptons and electroweak bosons
// 20130627 M. Kelsey -- Add functions to convert enum to strings for printing
// 20130702 M. Kelsey -- Add type classifiers ported from G4InuclElemPart
#ifndef G4INUCL_PARTICLE_NAMES_HH
#define G4INUCL_PARTICLE_NAMES_HH
#include "globals.hh"
namespace G4InuclParticleNames {
enum Long { nuclei=0, proton=1, neutron=2,
pionPlus=3, pionMinus=5, pionZero=7, photon=9,
@@ -45,7 +49,12 @@ namespace G4InuclParticleNames {
deuteron=41, triton=43, He3=45, alpha=47,
antiProton=51, antiNeutron=53,
antiDeuteron=61, antiTriton=63, antiHe3=65, antiAlpha=67,
diproton=111, unboundPN=112, dineutron=122 };
diproton=111, unboundPN=112, dineutron=122,
electronNu=-1, muonNu=-3, tauNu=-5,
antiElectronNu=-7, antiMuonNu=-9, antiTauNu=-11,
WMinus=-13, WPlus=-15, Zzero=-17,
electron=-21, muonMinus=-23, tauMinus=-25,
positron=-27, muonPlus=-29, tauPlus=-31};
// NOTE: "km" cannot be used as conflicts with "kilometers" unit!
enum Short { nuc=nuclei, pro=proton, neu=neutron,
@@ -55,7 +64,59 @@ namespace G4InuclParticleNames {
xi0=xiZero, xim=xiMinus, om=omegaMinus, deu=deuteron,
ap=antiProton, an=antiNeutron,
ade=antiDeuteron, atr=antiTriton, ahe=antiHe3, aal=antiAlpha,
pp=diproton, pn=unboundPN, nn=dineutron };
pp=diproton, pn=unboundPN, nn=dineutron,
enu=electronNu, mnu=muonNu, tnu=tauNu,
aenu=antiElectronNu, amnu=antiMuonNu, atnu=antiTauNu,
wm=WMinus, wp=WPlus, z0=Zzero,
ele=electron, mum=muonMinus, tm=tauMinus,
pos=positron, mup=muonPlus, tp=tauPlus};
// Convert enum value to enum strings above for printing
const char* nameLong(G4int ptype);
const char* nameShort(G4int ptype);
inline const char* name(G4int ptype) { return nameLong(ptype); }
// Classify particle types to reduce if-blocks in client code
inline G4bool isPhoton(G4int ityp) { return (ityp==photon); }
inline G4bool isMuon(G4int ityp) { return (ityp==muonMinus||ityp==muonPlus); }
inline G4bool isElectron(G4int ityp) { return (ityp==electron||ityp==positron); }
inline G4bool isNeutrino(G4int ityp) {
return (ityp==electronNu || ityp==muonNu || ityp==tauNu ||
ityp==antiElectronNu || ityp==antiMuonNu || ityp==antiTauNu);
}
inline G4bool pion(G4int ityp) {
return (ityp==pionPlus || ityp==pionMinus || ityp==pionZero);
}
inline G4bool nucleon(G4int ityp) { return (ityp==proton || ityp==neutron); }
inline G4bool antinucleon(G4int ityp) {
return (ityp==antiProton || ityp==antiNeutron);
}
inline G4bool quasi_deutron(G4int ityp) { return (ityp > 100); }
// Emulates G4PD::GetBaryonNumber(), rather than a simple bool
inline G4int baryon(G4int ityp) {
return ((ityp==pro || ityp==neu || ityp==lam || ityp==sp || ityp==s0 ||
ityp==sm || ityp==xi0 || ityp==xim || ityp==om) ? 1 :
(ityp==deu || ityp==pp || ityp==pn || ityp==nn) ? 2 :
(ityp==ap || ityp==an) ? -1 :
(ityp==ade) ? -2 :
(ityp==atr || ityp==ahe) ? -3 :
(ityp==aal) ? -4 : 0);
}
inline G4bool antibaryon(G4int ityp) { return baryon(ityp) < 0; }
inline G4bool hyperon(G4int ityp) {
return (ityp==lam || ityp==sp || ityp==s0 || ityp==sm || ityp==xi0 ||
ityp==xim || ityp==om);
}
}
#endif /* G4INUCL_PARTICLE_NAMES_HH */
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4InuclSpecialFunctions.hh 67863 2013-03-11 19:00:21Z mkelsey $
//
// 20100114 M. Kelsey -- Remove G4CascadeMomentum, use G4LorentzVector directly
// 20100319 M. Kelsey -- Add optional mass argument to generateWithFixedTheta;
@@ -33,14 +33,21 @@
// 20100914 M. Kelsey -- Migrate to integer A and Z. Discard unused binding
// energy functions
// 20120608 M. Kelsey -- Fix variable-name "shadowing" compiler warnings.
// 20130308 M. Kelsey -- New function to encapsulate INUCL power expansion
// 20130808 M. Kelsey -- Convert paraMaker[Truncated] to class object, to
// allow thread isolation
// 20130829 M. Kelsey -- Address Coverity #52158, 52161 for copy actions.
#ifndef G4INUCL_SPECIAL_FUNC_HH
#define G4INUCL_SPECIAL_FUNC_HH
#include "globals.hh"
#include "G4LorentzVector.hh"
#include <algorithm>
#include <vector>
#include "G4LorentzVector.hh"
template <int N> class G4CascadeInterpolator;
namespace G4InuclSpecialFunctions {
G4double bindingEnergy(G4int A, G4int Z);
@@ -50,11 +57,6 @@ namespace G4InuclSpecialFunctions {
G4double FermiEnergy(G4int A, G4int Z, G4int ntype);
// NOTE: Passing Z as double here, to be used as interpolation argument
void paraMaker(G4double Z, std::pair<std::vector<G4double>, std::vector<G4double> >& parms);
void paraMakerTruncated(G4double Z, std::pair<G4double, G4double>& parms);
G4double getAL(G4int A);
G4double csNN(G4double e);
@@ -63,9 +65,12 @@ namespace G4InuclSpecialFunctions {
G4double G4cbrt(G4double x); // Can't use "cbrt" name, clashes with <math.h>
G4double inuclRndm();
G4double inuclRndm(); // Wrapper for G4UniformRand()
G4double randomGauss(G4double sigma);
G4double randomInuclPowers(G4double ekin, // Power series in Ekin, S
const G4double (&coeff)[4][4]);
G4double randomGauss(G4double sigma); // Gaussian distribution
G4double randomPHI();
@@ -78,6 +83,27 @@ namespace G4InuclSpecialFunctions {
G4double mass=0.);
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.);
// This is an object to be instantiated by client code
class paraMaker {
public:
paraMaker(G4int verbose=0);
~paraMaker();
// NOTE: Passing Z as double here, to be used as interpolation argument
void getParams(G4double Z, std::pair<std::vector<G4double>,
std::vector<G4double> >& parms);
void getTruncated(G4double Z, std::pair<G4double, G4double>& parms);
private:
G4int verboseLevel;
G4CascadeInterpolator<5>* interp;
// No copy actions
paraMaker(const paraMaker& right);
paraMaker& operator=(const paraMaker& right);
};
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4KaonHypSampler.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100512 M. Kelsey -- Replaces (old, untemplated) G4CascadeSampler
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4LorentzConvertor.hh 66241 2012-12-13 18:34:42Z gunter $
//
// 20100108 Michael Kelsey -- Use G4LorentzVector internally
// 20100120 M. Kelsey -- BUG FIX: scm_momentum should be G4ThreeVector
@@ -0,0 +1,85 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4MultiBodyMomentumDist.hh 71719 2013-06-21 00:01:54Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 7 March 2013
//
// Description: Singleton class to evaluate multi-body momentum distribution
// functions based on intial state codes and multiplicity.
//
// NOTE: Separate multiplicity-3 generators are not used, per V.Uzhinsky
//
// 20130619 Change singleton instance to be thread-local, to avoid collisions.
// 20130620 Address Coverity warnings about missing copy actions
#ifndef G4MultiBodyMomentumDist_h
#define G4MultiBodyMomentumDist_h 1
#include "globals.hh"
class G4VMultiBodyMomDst;
class G4NuclNucl3BodyMomDst;
class G4NuclNucl4BodyMomDst;
class G4HadNucl3BodyMomDst;
class G4HadNucl4BodyMomDst;
class G4MultiBodyMomentumDist {
public:
~G4MultiBodyMomentumDist();
static const G4MultiBodyMomentumDist* GetInstance();
// Return appropriate generator for initial state and multiplicity
static const G4VMultiBodyMomDst* GetDist(G4int is, G4int mult) {
return GetInstance()->ChooseDist(is, mult);
}
// Pass verbosity through to owned objects
static void setVerboseLevel(G4int vb=0);
private:
// Constructor is private for singleton
G4MultiBodyMomentumDist();
const G4VMultiBodyMomDst* ChooseDist(G4int is, G4int mult) const;
void passVerbose(G4int verbose); // Pass verbosity through instance
static G4ThreadLocal G4MultiBodyMomentumDist* theInstance; // Per thread
// Generators for various initial/final state combinations
G4NuclNucl3BodyMomDst* nn3BodyDst; // N N to X Y Z
G4NuclNucl4BodyMomDst* nn4BodyDst; // N N to X Y Z W ...
G4HadNucl3BodyMomDst* hn3BodyDst; // pi,K,Y,gamma N to X Y Z
G4HadNucl4BodyMomDst* hn4BodyDst; // pi,K,Y,gamma N to X Y Z W ...
private:
// Copying of modules is forbidden
G4MultiBodyMomentumDist(const G4MultiBodyMomentumDist&);
G4MultiBodyMomentumDist& operator=(const G4MultiBodyMomentumDist&);
};
#endif /* G4MultiBodyMomentumDist_h */
@@ -23,29 +23,24 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: $
// Author: Dennis Wright (SLAC)
// Date: 19 March 2013
//
// Description: class containing numerically integrated angular distributions
// in the CM for the n p -> n p reaction
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BEHe4Channel_h
#define G4BEHe4Channel_h 1
#ifndef G4NP2NPAngDst_h
#define G4NP2NPAngDst_h 1
#include "G4BEChargedChannel.hh"
#include "G4NumIntTwoBodyAngDst.hh"
class G4BEHe4Channel : public G4BEChargedChannel
{
class G4NP2NPAngDst : public G4NumIntTwoBodyAngDst<11,19> {
public:
G4BEHe4Channel();
virtual ~G4BEHe4Channel();
G4DynamicParticle * emit();
G4double constant();
virtual G4double coulombFactor();
virtual G4double qmFactor( );
private:
G4NP2NPAngDst(G4int verbose = 0);
virtual ~G4NP2NPAngDst() {;}
};
#endif
@@ -23,34 +23,46 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// $Id: G4NonEquilibriumEvaporator.hh 71942 2013-06-28 19:08:11Z mkelsey $
//
// 20100315 M. Kelsey -- Remove "using" directive and unnecessary #includes.
// 20100413 M. Kelsey -- Pass G4CollisionOutput by ref to ::collide()
// 20100517 M. Kelsey -- Inherit from common base class
// 20100714 M. Kelsey -- Switch to new G4CascadeColliderBase class
// 20100914 M. Kelsey -- Migrate to integer A and Z
// 20130620 Address Coverity complaint about missing copy actions
// 20130622 Inherit from G4CascadeDeexciteBase, move to deExcite() interface
// with G4Fragment
// 20130808 Use new object-version of paraMaker, for thread safety
// 20130924 Add local pointer to G4Pow for convenience
#ifndef G4NON_EQUILIBRIUM_EVAPORATOR_HH
#define G4NON_EQUILIBRIUM_EVAPORATOR_HH
#include "G4CascadeColliderBase.hh"
#include "G4CascadeDeexciteBase.hh"
#include "G4InuclSpecialFunctions.hh"
class G4CollisionOutput;
class G4InuclParticle;
class G4Pow;
class G4NonEquilibriumEvaporator : public G4CascadeColliderBase {
class G4NonEquilibriumEvaporator : public G4CascadeDeexciteBase {
public:
G4NonEquilibriumEvaporator();
virtual ~G4NonEquilibriumEvaporator() {}
void collide(G4InuclParticle* bullet, G4InuclParticle* target,
G4CollisionOutput& output);
virtual void deExcite(const G4Fragment& target, G4CollisionOutput& output);
private:
G4InuclSpecialFunctions::paraMaker theParaMaker;
G4Pow* theG4Pow; // Convenient reference to singleton
private:
G4double getMatrixElement(G4int A) const;
G4double getE0(G4int A) const;
G4double getParLev(G4int A, G4int Z) const;
private:
// Copying of modules is forbidden
G4NonEquilibriumEvaporator(const G4NonEquilibriumEvaporator&);
G4NonEquilibriumEvaporator& operator=(const G4NonEquilibriumEvaporator&);
};
#endif /* G4NON_EQUILIBRIUM_EVAPORATOR_HH */
@@ -23,29 +23,23 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id$
// Author: Michael Kelsey (SLAC)
// Date: 22 April 2013
//
// Description: class containing parametrized angular distributions
// in the CM for nucleon/nucleon 3-body final states
//
// Implementation of the HETC88 code into Geant4.
// Evaporation and De-excitation parts
// T. Lampen, Helsinki Institute of Physics, May-2000
#ifndef G4BEHe3Channel_h
#define G4BEHe3Channel_h 1
#ifndef G4NuclNucl3BodyAngDst_h
#define G4NuclNucl3BodyAngDst_h 1
#include "G4BEChargedChannel.hh"
#include "G4InuclParamAngDst.hh"
class G4BEHe3Channel : public G4BEChargedChannel
{
class G4NuclNucl3BodyAngDst : public G4InuclParamAngDst {
public:
G4BEHe3Channel();
virtual ~G4BEHe3Channel();
G4DynamicParticle * emit();
G4double constant();
virtual G4double coulombFactor();
virtual G4double qmFactor( );
private:
G4NuclNucl3BodyAngDst(G4int verbose = 0);
virtual ~G4NuclNucl3BodyAngDst() {;}
};
#endif
@@ -0,0 +1,45 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4NuclNucl3BodyMomDst.hh 67796 2013-03-08 06:18:39Z mkelsey $
// Author: Michael Kelsey (SLAC)
// Date: 7 March 2013
//
// Description: class containing parametrized momentum distributions
// in the CM for nucleon/nucleon 3-body final states
//
#ifndef G4NuclNucl3BodyMomDst_h
#define G4NuclNucl3BodyMomDst_h 1
#include "G4InuclParamMomDst.hh"
class G4NuclNucl3BodyMomDst : public G4InuclParamMomDst {
public:
G4NuclNucl3BodyMomDst(G4int verbose = 0);
virtual ~G4NuclNucl3BodyMomDst() {;}
};
#endif

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