Import Geant4 11.0.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2021-06-25 16:12:29 +02:00
parent c968e26a39
commit 6399a014b6
4200 changed files with 207479 additions and 237366 deletions
@@ -1,17 +0,0 @@
#------------------------------------------------------------------------------
# CMakeLists.txt
# Module : G4hadronic_stop
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_stop
#
# CMakeLists.txt for building a single granular library.
#
# Generated on : 24/9/2010
#
#
#------------------------------------------------------------------------------
if(GEANT4_BUILD_GRANULAR_LIBS)
include(Geant4MacroLibraryTargets)
GEANT4_GRANULAR_LIBRARY_TARGET(COMPONENT sources.cmake)
endif()
@@ -26,9 +26,7 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/models/util/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
@@ -41,13 +39,10 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/chiral_inv_phase_space/body/include \
-I$(G4BASE)/processes/hadronic/models/chiral_inv_phase_space/cross_sections/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/models/util/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
+91 -69
View File
@@ -7,25 +7,47 @@
History file for hadronic/stopping directory
----------------------------------------------
This file should be used to summarize modifications introduced in the
This file should be used to summarize modifications introduced in the
code and to keep track of all tags.
---------------------------------------------------------------
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
29 January 2021 V.Ivanchenko (hadr-stopping-V10-06-03)
16 April 2021 B. Morgan (hadr-stopping-V10-07-05)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed remaining Coverity warning, removed
commented code
- Migrate build to modular CMake API
05 December 2020 V.Ivanchenko
13 April 2021 A. Ribon (hadr-stopping-V10-07-04)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed Coverity warning, removed commented code
- GNUmakefile, sources.cmake : removed the subdirectories
hadronic/models/management and hadronic/models/util
(that have been now deleted, with their classes moved to
hadronic/util and hadronic/management), and clean up.
11 March 2021 A. Ribon (hadr-stopping-V10-07-03)
--------------------------------------------------------------------
- Removed obsolete classes: G4AntiNeutronAnnihilationAtRest,
G4AntiSigmaPlusAbsorptionFritiof, G4SigmaMinusAbsorptionBertini,
G4AntiProtonAbsorptionFritiof, G4KaonMinusAbsorptionBertini,
G4PiMinusAbsorptionBertini
02 March 2021 V.Ivanchenko (hadr-stopping-V10-07-02)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed a new Coverity warning
29 January 2021 V.Ivanchenko (hadr-stopping-V10-07-01)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed remaining Coverity warning, removed
commented code
05 December 2020 V.Ivanchenko (hadr-stopping-V10-07-00)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed Coverity warning, removed commented code
01 April 2020 V.Ivanchenko (hadr-stopping-V10-06-02)
--------------------------------------------------------------------
- G4MuonicAtomDecay - fixed Coverity warning
- G4MuonicAtomDecay - fixed Coverity warning
24 February 2020 V.Ivanchenko (hadr-stopping-V10-06-01)
--------------------------------------------------------------------
@@ -44,7 +66,7 @@ code and to keep track of all tags.
--------------------------------------------------------------------
- G4HadronicAbsorptionFritofWithBinaryCascade : created a new class for
handling anti-proton and anti-neutron annihilation at rest using
Fritiof coupled with Binary cascade (instead of directly with
Fritiof coupled with Binary cascade (instead of directly with
Precompound, as in the class G4HadronicAbsorptionFritiof).
22 May 2019 A. Ribon (hadr-stopping-V10-05-00)
@@ -92,7 +114,7 @@ code and to keep track of all tags.
16 November 2016 V. Ivantchenko (hadr-stopping-V10-02-02)
--------------------------------------------------------------------
- G4EmCaptureCascade - added C++11 keywords, an attempt to remove
- G4EmCaptureCascade - added C++11 keywords, an attempt to remove
bound check warning
11 October 2016 K.L. Genser (hadr-stopping-V10-02-01)
@@ -118,14 +140,14 @@ code and to keep track of all tags.
26 January 2015 V. Ivantchenko (hadr-stopping-V10-01-01)
--------------------------------------------------------------------
- G4HadronStoppingProcess, G4MuMinusCapturePrecompound,
- G4HadronStoppingProcess, G4MuMinusCapturePrecompound,
G4MuonMinusBoundDecay - cleanup comments
08 December 2014 V. Ivantchenko (hadr-stopping-V10-01-00)
--------------------------------------------------------------------
- G4HadronStoppingProcess, G4MuonMinusBoundDecay: fixed time of muon
nuclear capture secondaries (fix #1695); define index in the model
cathalog inside PreparePhysicsTable() to avoid bad interference
- G4HadronStoppingProcess, G4MuonMinusBoundDecay: fixed time of muon
nuclear capture secondaries (fix #1695); define index in the model
cathalog inside PreparePhysicsTable() to avoid bad interference
with EM physics
30 August 2014 V. Ivantchenko (hadr-stopping-V10-00-08)
@@ -140,13 +162,13 @@ code and to keep track of all tags.
04 August 2014 V. Ivantchenko (hadr-stopping-V10-00-06)
--------------------------------------------------------------------
- G4HadronStoppingProcess : do not use deRegister flag
- G4HadronStoppingProcess : do not use deRegister flag
(fixing Coverity report)
01 August 2014 A. Ribon (hadr-stopping-V10-00-05)
--------------------------------------------------------------------
- G4HadronStoppingProcess : replaced the old method of G4EnergyRangeManager
(still there but deprecated) with the new one (which uses
(still there but deprecated) with the new one (which uses
G4HadronicInteraction::IsApplicable).
27 May 2014 V. Ivantchenko (hadr-stopping-V10-00-04)
@@ -156,10 +178,10 @@ code and to keep track of all tags.
22 May 2014 A. Dotti (hadr-stopping-V10-00-03)
-------------------------------------------------------------------
- G4HadronStoppingProcess : in destructor do not de-register if
- G4HadronStoppingProcess : in destructor do not de-register if
flag G4bool G4HadronicProcess::deRegister==true, this is needed
for new thread-local-singleton G4HadronicProcessStore to correct
for memory corruption observed in valgrind. Requires
for memory corruption observed in valgrind. Requires
hadr-man-V10-00-05
14 May 2014 V. Ivantchenko (hadr-stopping-V10-00-02)
@@ -169,7 +191,7 @@ code and to keep track of all tags.
in deuterium and in He4; reduced number of trials to find neutrino
4-momentum from 1000 to 100; added protection 1 keV for negative
excitation energy, substitute FatalException by JustWarning.
All this addressing the recent ATLAS report
All this addressing the recent ATLAS report
10 March 2014 V. Ivantchenko (hadr-stopping-V10-00-01)
--------------------------------------------------------------------
@@ -177,7 +199,7 @@ code and to keep track of all tags.
31 January 2014 V. Ivantchenko (hadr-stopping-V10-00-00)
--------------------------------------------------------------------
- G4MuMinusCapturePrecompound - fix infonite loop (bug #1536) by
- G4MuMinusCapturePrecompound - fix infonite loop (bug #1536) by
reimplementing old algorithm of mu- capture which not include
direct muon reaction but only considering deexcitation of
residual fragment
@@ -199,14 +221,14 @@ code and to keep track of all tags.
04 June 2013 A. Ribon (hadr-stopping-V09-06-08)
--------------------------------------------------------------------
- G4MuonMinusCaptureAtRest
- G4MuonMinusCaptureAtRest
fix inside .cc file to access ions via IonTable class and
GetIon method
01 May 2013 K. Genser (hadr-stopping-V09-06-07)
--------------------------------------------------------------------
- G4MuonMinusBoundDecay
improved muon capture rate data/lookup and improved
- G4MuonMinusBoundDecay
improved muon capture rate data/lookup and improved
calculation of bound muon decay rate
24 April 2013 K. Genser (hadr-stopping-V09-06-06)
@@ -233,7 +255,7 @@ code and to keep track of all tags.
28 January 2013 Julia Yarba (hadr-stopping-V09-06-02)
---------------------------------------------------------
- Remove G4ThreadLocal from G4StopElementSelector, G4MuMinusCaptureCascade,
G4MuonMinusBoundDecay, and replace with static const as those arrays are
G4MuonMinusBoundDecay, and replace with static const as those arrays are
NOT mutable; this is part of adapting for MT processing
13 December 2012 Michael Kelsey (hadr-stopping-V09-06-01)
@@ -249,16 +271,16 @@ code and to keep track of all tags.
--------------------------------------------------------
- sources.cmake: Remove all deprecated classes for start of 10.0 development:
G4AntiNeutronAnnihilationAtRest.hh,cc G4PiMinusStopLi.hh,cc
G4AntiProtonAnnihilationAtRest.hh,cc G4PiMinusStopMaterial.hh,cc
G4DistributionGenerator.hh,cc G4PiMinusStopN.hh,cc
G4KaonMinusAbsorption.hh,cc G4PiMinusStopO.hh,cc
G4KaonMinusAbsorptionAtRest.hh,cc G4PiMinusStopPb.hh,cc
G4NeutronCaptureAtRest.hh,cc G4PiMinusStopTa.hh,cc
G4AntiNeutronAnnihilationAtRest.hh,cc G4PiMinusStopLi.hh,cc
G4AntiProtonAnnihilationAtRest.hh,cc G4PiMinusStopMaterial.hh,cc
G4DistributionGenerator.hh,cc G4PiMinusStopN.hh,cc
G4KaonMinusAbsorption.hh,cc G4PiMinusStopO.hh,cc
G4KaonMinusAbsorptionAtRest.hh,cc G4PiMinusStopPb.hh,cc
G4NeutronCaptureAtRest.hh,cc G4PiMinusStopTa.hh,cc
G4PiMinusAbsorptionAtRest.hh,cc G4PionMinusAbsorptionAtRest.hh,cc
G4PiMinusStopAbsorption.hh,cc G4StopDeexcitation.hh,cc
G4PiMinusStopAl.hh,cc G4StopDeexcitationAlgorithm.hh
G4PiMinusStopC.hh,cc G4StopDummyDeexcitation.hh,cc
G4PiMinusStopAbsorption.hh,cc G4StopDeexcitation.hh,cc
G4PiMinusStopAl.hh,cc G4StopDeexcitationAlgorithm.hh
G4PiMinusStopC.hh,cc G4StopDummyDeexcitation.hh,cc
G4PiMinusStopCo.hh,cc G4StopTheoDeexcitation.hh,cc
G4PiMinusStopCu.hh,cc
@@ -270,7 +292,7 @@ G4PiMinusStopCu.hh,cc
--------------------------------------------------------------------
- G4HadronicAbsorptionFritiof, G4MuMinusCapturePrecompound,
G4MuMinusBoundDecay, G4EmCaptureCascade: fixed memory leak;
reuse G4PreCompoundModel instead from the store of creation of
reuse G4PreCompoundModel instead from the store of creation of
a new one
17 October 2012 Michael Kelsey (hadr-stopping-V09-05-29)
@@ -284,7 +306,7 @@ Added nuclear capture at rest of anti-nuclei with FTFP in
G4HadronicAbsorptionFritiof (A.R.). Moreover (K.G.):
- G4HadronStoppingProcess: Reverted to one argument c'tor
- G4MuonMinusCapture: Reverted to using one argument c'tor
Reverted to the implied fHadronAtRest
Reverted to the implied fHadronAtRest
HadronicProcessType
10 October 2012 Krzysztof Genser (hadr-stopping-V09-05-27)
@@ -330,18 +352,18 @@ The following classes will be deprecated in the 9.6 release, and removed for
are now handled by Bertini and Fritiof models, and muon capture by the more
complex process with atomic cascade effects.
G4AntiNeutronAnnihilationAtRest.cc G4PiMinusStopCu.cc
G4AntiProtonAnnihilationAtRest.cc G4PiMinusStopLi.cc
G4DistributionGenerator.cc G4PiMinusStopMaterial.cc
G4KaonMinusAbsorption.cc G4PiMinusStopN.cc
G4AntiNeutronAnnihilationAtRest.cc G4PiMinusStopCu.cc
G4AntiProtonAnnihilationAtRest.cc G4PiMinusStopLi.cc
G4DistributionGenerator.cc G4PiMinusStopMaterial.cc
G4KaonMinusAbsorption.cc G4PiMinusStopN.cc
G4KaonMinusAbsorptionAtRest.cc G4PiMinusStopO.cc
G4MuonMinusCaptureAtRest.cc G4PiMinusStopPb.cc
G4NeutronCaptureAtRest.cc G4PiMinusStopTa.cc
G4PiMinusAbsorptionAtRest.cc G4PionMinusAbsorptionAtRest.cc
G4PiMinusStopAbsorption.cc G4StopDeexcitation.cc
G4PiMinusStopAl.cc G4StopDeexcitationAlgorithm.hh
G4PiMinusStopC.cc G4StopDummyDeexcitation.cc
G4PiMinusStopCo.cc G4StopTheoDeexcitation.cc
G4MuonMinusCaptureAtRest.cc G4PiMinusStopPb.cc
G4NeutronCaptureAtRest.cc G4PiMinusStopTa.cc
G4PiMinusAbsorptionAtRest.cc G4PionMinusAbsorptionAtRest.cc
G4PiMinusStopAbsorption.cc G4StopDeexcitation.cc
G4PiMinusStopAl.cc G4StopDeexcitationAlgorithm.hh
G4PiMinusStopC.cc G4StopDummyDeexcitation.cc
G4PiMinusStopCo.cc G4StopTheoDeexcitation.cc
19 September 2012 Gabriele Cosmo (hadr-stopping-V09-05-22)
----------------------------------------------------------
@@ -362,7 +384,7 @@ Requires co-working base tag hadr-man-V09-05-16
17 August 2012 Witek Pokorski (hadr-stopping-V09-05-19)
-------------------------------------------------------
- removed obsolete CHIPS includes
- removed obsolete CHIPS includes
14 August 2012 Alberto Ribon (hadr-stopping-V09-05-18)
------------------------------------------------------
@@ -389,7 +411,7 @@ Requires co-working base tag hadr-man-V09-05-16
- Fixed Coverity complains in G4KaonMinusAbsorptionAtRest.cc and
G4PiMinusStopMaterial.cc
- G4MuonMinusBoundDecay - added data for muon capture rate in He4
- G4MuonMinusBoundDecay - added data for muon capture rate in He4
from recent experimental data
19 June 2012 Vladimir Ivanchenko (hadr-stopping-V09-05-13)
@@ -401,7 +423,7 @@ Requires co-working base tag hadr-man-V09-05-16
------------------------------------------------------
- G4HadronStoppingProcess.hh: remove member "G4HadFinalState result: because
it shadows "result" in .cc file
- replace shadowed variables m, mm, dir and index in .cc files
- replace shadowed variables m, mm, dir and index in .cc files
24 May 2012 Vladimir Ivanchenko (hadr-stopping-V09-05-11)
------------------------------------------------------------
@@ -448,12 +470,12 @@ Requires co-working base tag hadr-man-V09-05-16
G4EmCaptureCascade, G4MuMinusCapturePrecompound, G4HadronStoppingProcess,
G4MuonMinusCapture which provides general stopping process and
example of its implementation for mu- implementing the same model
as in G4MuonMinusCaptureAtRest in granular design fully based on
the hadronic framework
as in G4MuonMinusCaptureAtRest in granular design fully based on
the hadronic framework
2 May 2012 G.Folger ( ..trunk.. )
------------------------------------------------------------
- revert changes by Mikhail ( revs. r58293, r28255 )
- revert changes by Mikhail ( revs. r58293, r28255 )
28 Apr 2012 Mikhail Kosov (hadr-stopping-V09-05-04)
------------------------------------------------------------
@@ -467,8 +489,8 @@ Requires co-working base tag hadr-man-V09-05-16
16 February 2012 Vladimir Ivanchenko (hadr-stopping-V09-05-02)
------------------------------------------------------------
- G4PiMinusAbsorptionBertini - return back usage of native pre-compound
de-excitation for the Bertini cascade
- G4PiMinusAbsorptionBertini - return back usage of native pre-compound
de-excitation for the Bertini cascade
20 January 2012 Vladimir Ivanchenko (hadr-stopping-V09-05-01)
------------------------------------------------------------
@@ -479,7 +501,7 @@ Requires co-working base tag hadr-man-V09-05-16
- G4FTFCaptureAtRest - changed initialisation of de-excitation;
removed double deletion of objects; added registration
in G4HadronicProcessStore; added sub-type definition
- G4PiMinusAbsorptionBertini - temporary do not use native pre-compound
- G4PiMinusAbsorptionBertini - temporary do not use native pre-compound
but Bertini pre-compound due to double deletion of objects;
after fix of Bertini this should be return back
@@ -514,7 +536,7 @@ Requires co-working base tag hadr-man-V09-05-16
27 September 2011 Dennis Wright (hadr-stopping-V09-04-02)
-----------------------------------------------------------
- Migrate to integer Z and A. File affected:
- Migrate to integer Z and A. File affected:
G4KaonMinusAbsorptionAtRest.cc
17 September 2011 Dennis Wright (hadr-stopping-V09-04-01)
@@ -533,17 +555,17 @@ Requires co-working base tag hadr-man-V09-05-16
11-Nov-2010 Dennis Wright (hadr-stopping-V09-03-01)
----------------------------------------------------------
- G4MuonMinusCaptureAtRest::DoMuCapture : fix unused branch
- G4MuonMinusCaptureAtRest::DoMuCapture : fix unused branch
pd = G4Deuteron::Deuteron() in mass calculation
- G4PiMinusStopMaterial: theR was used but uninitialized. Now init'ed
to 0.5 in ctor
to 0.5 in ctor
- G4PiMinusAbsorptionAtRest: remove null test for vector pointer
in dtor
in dtor
- G4StopDummyDeexcitation: initialize pointer _products in ctor
- G4KaonMinusAbsorptionAtRest::SigmaLambdaConversion : add dummy
particles to default of switch/case to avoid possible NULL
pointers
20-Sep-2010 Gunter Folger (hadr-stopping-V09-03-00)
----------------------------------------------------------
- G4MuonMinusCaptureAtRest use integer A&Z for G4Fancy3DNucleus
@@ -559,7 +581,7 @@ Requires co-working base tag hadr-man-V09-05-16
04-Aug-2009 Vladimir Ivantchenko (hadr-stopping-V09-02-02)
----------------------------------------------------------
- removed unused include of G4NucleiPropertiesTable.hh
- removed unused include of G4NucleiPropertiesTable.hh
02-Feb-2009 Vladimir Ivantchenko (hadr-stopping-V09-02-01)
----------------------------------------------------------
@@ -567,12 +589,12 @@ Requires co-working base tag hadr-man-V09-05-16
23-Jan-2009 Vladimir Ivantchenko (hadr-stopping-V09-02-00)
----------------------------------------------------------
G4MuonMinusCaptureAtRest - added deregistration
G4MuonMinusCaptureAtRest - added deregistration
22-Oct-2008 Dennis Wright (hadr-stopping-V09-01-05)
---------------------------------------------------
- replace G4NucleiPropertiesTable::GetBindingEnergy() with
G4NucleiProperties::GetBindingEnergy() in
- replace G4NucleiPropertiesTable::GetBindingEnergy() with
G4NucleiProperties::GetBindingEnergy() in
G4KaonMinusAbsorptionAtRest.cc and G4PiMinusStopAbsorption.cc
- replace G4NucleiPropertiesTable::GetAtomicMass with
G4NucleiProperties::GetNuclearMass in G4StopTheoDeexcitation.cc
@@ -583,14 +605,14 @@ G4MuonMinusCaptureAtRest - added deregistration
01-Sep-2008 Vladimir Ivantchenko (hadr-stopping-V09-01-03)
----------------------------------------------------------
G4MuonMinusCaptureAtRest - added registration in the
G4MuonMinusCaptureAtRest - added registration in the
G4HadronicprocessStore and PrintInfo by adding
PreparePhysicsTable and BuildPhysicsTable methods
GNUmakefile - add includes
08-Jul-2008 Dennis Wright (hadr-stopping-V09-01-02)
---------------------------------------------------
- set process sub-type to 15 for
- set process sub-type to 15 for
G4AntiNeutronAnnihilationAtRest, G4AntiProtonAnnihilationAtRest,
G4KaonMinusAbsorption, G4KaonMinusAbsorptionAtRest,
G4MuonMinusCaptureAtRest, G4NeutronCaptureAtRest,
@@ -602,12 +624,12 @@ GNUmakefile - add includes
28-Mar-2008 Dennis Wright (hadr-stopping-V09-01-00)
---------------------------------------------------
G4NeutronCaptureAtRest::AtomAs - add () around && within || to
G4NeutronCaptureAtRest::AtomAs - add () around && within || to
fix gcc-4.3 compiler warning
19-Nov-2007 Vladimir Ivantchenko (hadr-stopping-V09-00-05)
----------------------------------------------------------
G4MuonMinusCaptureAtRest - move back
G4MuonMinusCaptureAtRest - move back
15-Nov-2007 Vladimir Ivantchenko (hadr-stopping-V09-00-04)
----------------------------------------------------------
@@ -626,7 +648,7 @@ G4StopElementSelector - fixed typo in Primakoff formula for capture
05-Jul-2007 Dennis Wright (hadr-stopping-V09-00-01)
---------------------------------------------------
- removed old-style copyright from all headers
- fixed Software Reference Manual tags
- fixed Software Reference Manual tags
05-Jul-2007 Gabriele Cosmo (hadr-stopping-V09-00-00)
----------------------------------------------------
@@ -650,7 +672,7 @@ G4StopElementSelector - fixed typo in Primakoff formula for capture
----------------------------------------------------
- correct inconsistent use of targetA; for effective targetA transforming
to integer using G4int and G4lrint gives values different by 1.
16-Nov-2006 Vladimir Ivantchenko (hadr-stopping-V08-01-00)
----------------------------------------------------------
- G4MuonMinusCaptureAtRest - fix bounding energies, rewrite DoMuonCapture
@@ -1,135 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// G4AntiNeutronAnnihilationAtRest physics process
// Larry Felawka (TRIUMF), April 1998
//---------------------------------------------------------------------
#ifndef G4AntiNeutronAnnihilationAtRest_h
#define G4AntiNeutronAnnihilationAtRest_h 1
// Class Description:
//
// Process for absorption of n-bar at rest.
// To be used in your physics list in case you need this physics.
#include "globals.hh"
#include "Randomize.hh"
#include "G4VRestProcess.hh"
#include "G4VParticleChange.hh"
#include "G4ParticleDefinition.hh"
#include "G4GHEKinematicsVector.hh"
#include "G4HadronicProcessType.hh"
class G4AntiNeutronAnnihilationAtRest : public G4VRestProcess
{
private:
// hide assignment operator as private
G4AntiNeutronAnnihilationAtRest& operator=(const G4AntiNeutronAnnihilationAtRest &right);
G4AntiNeutronAnnihilationAtRest(const G4AntiNeutronAnnihilationAtRest& );
public:
G4AntiNeutronAnnihilationAtRest(const G4String& processName ="AntiNeutronAnnihilationAtRest",
G4ProcessType aType = fHadronic );
~G4AntiNeutronAnnihilationAtRest();
G4bool IsApplicable(const G4ParticleDefinition&);
void PreparePhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&);
G4double AtRestGetPhysicalInteractionLength(const G4Track&,
G4ForceCondition*);
// zero mean lifetime
G4double GetMeanLifeTime(const G4Track& ,
G4ForceCondition* ) {return 0.0;}
G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
// return number of secondaries produced
G4int GetNumberOfSecondaries();
// pointer to array containg kinematics of secondaries
G4GHEKinematicsVector* GetSecondaryKinematics();
private:
void GenerateSecondaries();
void Poisso( G4float, G4int* );
void Normal( G4float* );
void AntiNeutronAnnihilation( G4int* );
G4double ExNu( G4float );
G4int NFac( G4int );
private:
// global time-of-flight of stopped AntiNeutron
G4float globalTime;
// atomic mass of target nucleus
G4float targetAtomicMass;
// charge of target nucleus
G4float targetCharge;
G4GHEKinematicsVector* pv;
G4GHEKinematicsVector* eve;
G4GHEKinematicsVector* gkin;
G4float evapEnergy1;
G4float evapEnergy3;
G4int ngkine;
G4int ntot;
G4GHEKinematicsVector result;
G4float massPionMinus;
G4float massPionZero;
G4float massPionPlus;
G4float massGamma;
G4float massAntiNeutron;
G4float massNeutron;
G4ParticleDefinition* pdefGamma;
G4ParticleDefinition* pdefPionPlus;
G4ParticleDefinition* pdefPionZero;
G4ParticleDefinition* pdefPionMinus;
G4ParticleDefinition* pdefProton;
G4ParticleDefinition* pdefNeutron;
G4ParticleDefinition* pdefAntiNeutron;
G4ParticleDefinition* pdefDeuteron;
G4ParticleDefinition* pdefTriton;
G4ParticleDefinition* pdefAlpha;
};
#endif
@@ -1,63 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//---------------------------------------------------------------------------
//
// ClassName: G4AntiProtonAbsorptionFritiof
//
// Author: Alberto Ribon
//
// Date: 27 July 2012
//
// Modified:
//
// Class Description:
//
// Process for antiproton absorption at rest.
// To be used in your physics list in case you need this physics.
//
//---------------------------------------------------------------------------
#ifndef G4AntiProtonAbsorptionFritiof_h
#define G4AntiProtonAbsorptionFritiof_h 1
#include "G4HadronicAbsorptionFritiof.hh"
#include "G4AntiProton.hh"
class G4AntiProtonAbsorptionFritiof : public G4HadronicAbsorptionFritiof {
private:
// hide assignment operator as private
G4AntiProtonAbsorptionFritiof& operator=( const G4AntiProtonAbsorptionFritiof& );
G4AntiProtonAbsorptionFritiof( const G4AntiProtonAbsorptionFritiof& );
public:
G4AntiProtonAbsorptionFritiof()
: G4HadronicAbsorptionFritiof( G4AntiProton::Definition() ) {}
virtual ~G4AntiProtonAbsorptionFritiof() {}
};
#endif
@@ -1,63 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//---------------------------------------------------------------------------
//
// ClassName: G4AntiSigmaPlusAbsorptionFritiof
//
// Author: Alberto Ribon
//
// Date: 27 July 2012
//
// Modified:
//
// Class Description:
//
// Process for anti-sigma+ absorption at rest.
// To be used in your physics list in case you need this physics.
//
//---------------------------------------------------------------------------
#ifndef G4AntiSigmaPlusAbsorptionFritiof_h
#define G4AntiSigmaPlusAbsorptionFritiof_h 1
#include "G4HadronicAbsorptionFritiof.hh"
#include "G4AntiSigmaPlus.hh"
class G4AntiSigmaPlusAbsorptionFritiof : public G4HadronicAbsorptionFritiof {
private:
// hide assignment operator as private
G4AntiSigmaPlusAbsorptionFritiof& operator=( const G4AntiSigmaPlusAbsorptionFritiof& );
G4AntiSigmaPlusAbsorptionFritiof( const G4AntiSigmaPlusAbsorptionFritiof& );
public:
G4AntiSigmaPlusAbsorptionFritiof()
: G4HadronicAbsorptionFritiof( G4AntiSigmaPlus::Definition() ) {}
virtual ~G4AntiSigmaPlusAbsorptionFritiof() {}
};
#endif
@@ -1,52 +0,0 @@
//
// ********************************************************************
// * 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 G4KaonMinusAbsorptionBertini_h
#define G4KaonMinusAbsorptionBertini_h 1
// Class Description:
//
// Process for K- absorption at rest.
// To be used in your physics list in case you need this physics.
#include "G4HadronicAbsorptionBertini.hh"
#include "G4KaonMinus.hh"
class G4KaonMinusAbsorptionBertini : public G4HadronicAbsorptionBertini {
private:
// hide assignment operator as private
G4KaonMinusAbsorptionBertini& operator=(const G4KaonMinusAbsorptionBertini&);
G4KaonMinusAbsorptionBertini(const G4KaonMinusAbsorptionBertini&);
public:
G4KaonMinusAbsorptionBertini()
: G4HadronicAbsorptionBertini(G4KaonMinus::Definition()) {}
virtual ~G4KaonMinusAbsorptionBertini() {}
};
#endif
@@ -1,53 +0,0 @@
//
// ********************************************************************
// * 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 G4PiMinusAbsorptionBertini_h
#define G4PiMinusAbsorptionBertini_h 1
// Class Description:
//
// Process for pi- absorption at rest.
// To be used in your physics list in case you need this physics.
#include "G4HadronicAbsorptionBertini.hh"
#include "G4PionMinus.hh"
class G4PiMinusAbsorptionBertini : public G4HadronicAbsorptionBertini {
private:
// hide assignment operator as private
G4PiMinusAbsorptionBertini& operator=(const G4PiMinusAbsorptionBertini&);
G4PiMinusAbsorptionBertini(const G4PiMinusAbsorptionBertini&);
public:
G4PiMinusAbsorptionBertini()
: G4HadronicAbsorptionBertini(G4PionMinus::Definition()) {}
virtual ~G4PiMinusAbsorptionBertini() {}
};
#endif
@@ -1,52 +0,0 @@
//
// ********************************************************************
// * 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 G4SigmaMinusAbsorptionBertini_h
#define G4SigmaMinusAbsorptionBertini_h 1
// Class Description:
//
// Process for Sigma- absorption at rest.
// To be used in your physics list in case you need this physics.
#include "G4HadronicAbsorptionBertini.hh"
#include "G4SigmaMinus.hh"
class G4SigmaMinusAbsorptionBertini : public G4HadronicAbsorptionBertini {
private:
// hide assignment operator as private
G4SigmaMinusAbsorptionBertini& operator=(const G4SigmaMinusAbsorptionBertini&);
G4SigmaMinusAbsorptionBertini(const G4SigmaMinusAbsorptionBertini&);
public:
G4SigmaMinusAbsorptionBertini()
: G4HadronicAbsorptionBertini(G4SigmaMinus::Definition()) {}
virtual ~G4SigmaMinusAbsorptionBertini() {}
};
#endif
@@ -1,97 +1,50 @@
#------------------------------------------------------------------------------
# sources.cmake
# Module : G4hadronic_stop
# Package: Geant4.src.G4processes.G4hadronic.G4hadronic_stop
#
# Sources description for a library.
# Lists the sources and headers of the code explicitly.
# Lists include paths needed.
# Lists the internal granular and global dependencies of the library.
# Source specific properties should be added at the end.
#
# Generated on : 24/9/2010
#
#
#------------------------------------------------------------------------------
# - G4hadronic_stop module build definition
#
# Define the Geant4 Module.
#
GEANT4_DEFINE_MODULE(NAME G4hadronic_stop
HEADERS
G4AntiNeutronAnnihilationAtRest.hh
G4AntiProtonAbsorptionFritiof.hh
G4AntiSigmaPlusAbsorptionFritiof.hh
G4ElementSelector.hh
G4EmCaptureCascade.hh
G4HadronicAbsorptionFritiof.hh
G4HadronicAbsorptionFritiofWithBinaryCascade.hh
G4HadronStoppingProcess.hh
G4MuMinusCapturePrecompound.hh
G4MuonMinusBoundDecay.hh
G4MuonMinusCapture.hh
G4HadronicAbsorptionBertini.hh
G4PiMinusAbsorptionBertini.hh
G4KaonMinusAbsorptionBertini.hh
G4SigmaMinusAbsorptionBertini.hh
G4MuonMinusAtomicCapture.hh
G4MuonicAtomDecay.hh
SOURCES
G4AntiNeutronAnnihilationAtRest.cc
G4ElementSelector.cc
G4EmCaptureCascade.cc
G4HadronicAbsorptionFritiof.cc
G4HadronicAbsorptionFritiofWithBinaryCascade.cc
G4HadronStoppingProcess.cc
G4MuMinusCapturePrecompound.cc
G4MuonMinusBoundDecay.cc
G4MuonMinusCapture.cc
G4HadronicAbsorptionBertini.cc
G4MuonMinusAtomicCapture.cc
G4MuonicAtomDecay.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
G4geometrymng
G4globman
G4had_mod_man
G4had_mod_util
G4had_preequ_exciton
G4had_string_diff
G4had_string_frag
G4had_string_man
G4had_theo_max
G4hadronic_binary
G4hadronic_bert_cascade
G4hadronic_deex_evaporation
G4hadronic_deex_fermi_breakup
G4hadronic_deex_fission
G4hadronic_deex_gem_evaporation
G4hadronic_deex_handler
G4hadronic_deex_management
G4hadronic_deex_multifragmentation
G4hadronic_deex_photon_evaporation
G4hadronic_deex_util
G4hadronic_mgt
G4hadronic_util
G4hadronic_xsect
G4ions
G4leptons
G4materials
G4mesons
G4partman
G4procman
G4track
G4volumes
GLOBAL_DEPENDENCIES
G4geometry
G4global
G4materials
G4particles
G4processes
G4track
LINK_LIBRARIES
)
# List any source specific properties here
geant4_add_module(G4hadronic_stop
PUBLIC_HEADERS
G4ElementSelector.hh
G4EmCaptureCascade.hh
G4HadronicAbsorptionFritiof.hh
G4HadronicAbsorptionFritiofWithBinaryCascade.hh
G4HadronStoppingProcess.hh
G4MuMinusCapturePrecompound.hh
G4MuonMinusBoundDecay.hh
G4MuonMinusCapture.hh
G4HadronicAbsorptionBertini.hh
G4MuonMinusAtomicCapture.hh
G4MuonicAtomDecay.hh
SOURCES
G4ElementSelector.cc
G4EmCaptureCascade.cc
G4HadronicAbsorptionFritiof.cc
G4HadronicAbsorptionFritiofWithBinaryCascade.cc
G4HadronStoppingProcess.cc
G4MuMinusCapturePrecompound.cc
G4MuonMinusBoundDecay.cc
G4MuonMinusCapture.cc
G4HadronicAbsorptionBertini.cc
G4MuonMinusAtomicCapture.cc
G4MuonicAtomDecay.cc)
geant4_module_link_libraries(G4hadronic_stop
PUBLIC
G4globman
G4hadronic_mgt
G4hadronic_util
G4heprandom
G4materials
G4partman
G4procman
G4track
PRIVATE
G4baryons
G4bosons
G4had_preequ_exciton
G4had_string_diff
G4had_theo_max
G4hadronic_bert_cascade
G4hadronic_binary
G4hepgeometry
G4ions
G4leptons)
@@ -1,742 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// G4AntiNeutronAnnihilationAtRest physics process
// Larry Felawka (TRIUMF), April 1998
//---------------------------------------------------------------------
#include "G4AntiNeutronAnnihilationAtRest.hh"
#include "G4SystemOfUnits.hh"
#include "G4DynamicParticle.hh"
#include "G4ParticleTypes.hh"
#include "G4HadronicProcessStore.hh"
#include "G4HadronicDeprecate.hh"
#include "Randomize.hh"
#include "G4Exp.hh"
#include "G4Log.hh"
#include "G4Pow.hh"
#define MAX_SECONDARIES 100
// constructor
G4AntiNeutronAnnihilationAtRest::G4AntiNeutronAnnihilationAtRest(const G4String& processName,
G4ProcessType aType) :
G4VRestProcess (processName, aType), // initialization
massPionMinus(G4PionMinus::PionMinus()->GetPDGMass()/GeV),
massPionZero(G4PionZero::PionZero()->GetPDGMass()/GeV),
massPionPlus(G4PionPlus::PionPlus()->GetPDGMass()/GeV),
massGamma(G4Gamma::Gamma()->GetPDGMass()/GeV),
massAntiNeutron(G4AntiNeutron::AntiNeutron()->GetPDGMass()/GeV),
massNeutron(G4Neutron::Neutron()->GetPDGMass()/GeV),
pdefGamma(G4Gamma::Gamma()),
pdefPionPlus(G4PionPlus::PionPlus()),
pdefPionZero(G4PionZero::PionZero()),
pdefPionMinus(G4PionMinus::PionMinus()),
pdefProton(G4Proton::Proton()),
pdefNeutron(G4Neutron::Neutron()),
pdefAntiNeutron(G4AntiNeutron::AntiNeutron()),
pdefDeuteron(G4Deuteron::Deuteron()),
pdefTriton(G4Triton::Triton()),
pdefAlpha(G4Alpha::Alpha())
{
G4HadronicDeprecate("G4AntiNeutronAnnihilationAtRest");
if (verboseLevel>0) {
G4cout << GetProcessName() << " is created "<< G4endl;
}
SetProcessSubType(fHadronAtRest);
pv = new G4GHEKinematicsVector [MAX_SECONDARIES+1];
eve = new G4GHEKinematicsVector [MAX_SECONDARIES];
gkin = new G4GHEKinematicsVector [MAX_SECONDARIES];
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
globalTime = targetAtomicMass = targetCharge = evapEnergy1
= evapEnergy3 = 0.0;
ngkine = ntot = 0;
}
// destructor
G4AntiNeutronAnnihilationAtRest::~G4AntiNeutronAnnihilationAtRest()
{
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
delete [] pv;
delete [] eve;
delete [] gkin;
}
void G4AntiNeutronAnnihilationAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
{
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
}
void G4AntiNeutronAnnihilationAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
{
G4HadronicProcessStore::Instance()->PrintInfo(&p);
}
// methods.............................................................................
G4bool G4AntiNeutronAnnihilationAtRest::IsApplicable(
const G4ParticleDefinition& particle
)
{
return ( &particle == pdefAntiNeutron );
}
// Warning - this method may be optimized away if made "inline"
G4int G4AntiNeutronAnnihilationAtRest::GetNumberOfSecondaries()
{
return ( ngkine );
}
// Warning - this method may be optimized away if made "inline"
G4GHEKinematicsVector* G4AntiNeutronAnnihilationAtRest::GetSecondaryKinematics()
{
return ( &gkin[0] );
}
G4double G4AntiNeutronAnnihilationAtRest::AtRestGetPhysicalInteractionLength(
const G4Track& track,
G4ForceCondition* condition
)
{
// beggining of tracking
ResetNumberOfInteractionLengthLeft();
// condition is set to "Not Forced"
*condition = NotForced;
// get mean life time
currentInteractionLength = GetMeanLifeTime(track, condition);
if ((currentInteractionLength <0.0) || (verboseLevel>2)){
G4cout << "G4AntiNeutronAnnihilationAtRestProcess::AtRestGetPhysicalInteractionLength ";
G4cout << "[ " << GetProcessName() << "]" <<G4endl;
track.GetDynamicParticle()->DumpInfo();
G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
}
return theNumberOfInteractionLengthLeft * currentInteractionLength;
}
G4VParticleChange* G4AntiNeutronAnnihilationAtRest::AtRestDoIt(
const G4Track& track,
const G4Step&
)
//
// Handles AntiNeutrons at rest; an AntiNeutron can either create secondaries
// or do nothing (in which case it should be sent back to decay-handling
// section
//
{
// Initialize ParticleChange
// all members of G4VParticleChange are set to equal to
// corresponding member in G4Track
aParticleChange.Initialize(track);
// Store some global quantities that depend on current material and particle
globalTime = track.GetGlobalTime()/s;
G4Material * aMaterial = track.GetMaterial();
const G4int numberOfElements = aMaterial->GetNumberOfElements();
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
const G4double* theAtomicNumberDensity = aMaterial->GetAtomicNumDensityVector();
G4double normalization = 0;
for ( G4int i1=0; i1 < numberOfElements; i1++ )
{
normalization += theAtomicNumberDensity[i1] ; // change when nucleon specific
// probabilities are included.
}
G4double runningSum= 0.;
G4double random = G4UniformRand()*normalization;
for ( G4int i2=0; i2 < numberOfElements; i2++ )
{
runningSum += theAtomicNumberDensity[i2]; // change when nucleon specific
// probabilities are included.
if (random<=runningSum)
{
targetCharge = G4double( ((*theElementVector)[i2])->GetZ());
targetAtomicMass = (*theElementVector)[i2]->GetN();
}
}
if (random>runningSum)
{
targetCharge = G4double( ((*theElementVector)[numberOfElements-1])->GetZ());
targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
}
if (verboseLevel>1) {
G4cout << "G4AntiNeutronAnnihilationAtRest::AtRestDoIt is invoked " <<G4endl;
}
G4ParticleMomentum momentum;
G4float localtime;
G4ThreeVector position = track.GetPosition();
GenerateSecondaries(); // Generate secondaries
aParticleChange.SetNumberOfSecondaries( ngkine );
for ( G4int isec = 0; isec < ngkine; isec++ ) {
G4DynamicParticle* aNewParticle = new G4DynamicParticle;
aNewParticle->SetDefinition( gkin[isec].GetParticleDef() );
aNewParticle->SetMomentum( gkin[isec].GetMomentum() * GeV );
localtime = globalTime + gkin[isec].GetTOF();
G4Track* aNewTrack = new G4Track( aNewParticle, localtime*s, position );
aNewTrack->SetTouchableHandle(track.GetTouchableHandle());
aParticleChange.AddSecondary( aNewTrack );
}
aParticleChange.ProposeLocalEnergyDeposit( 0.0*GeV );
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident AntiNeutron
// clear InteractionLengthLeft
ResetNumberOfInteractionLengthLeft();
return &aParticleChange;
}
void G4AntiNeutronAnnihilationAtRest::GenerateSecondaries()
{
G4int index;
G4int l;
G4int nopt;
G4int i;
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
for (i = 1; i <= MAX_SECONDARIES; ++i) {
pv[i].SetZero();
}
ngkine = 0; // number of generated secondary particles
ntot = 0;
result.SetZero();
result.SetMass( massAntiNeutron );
result.SetKineticEnergyAndUpdate( 0. );
result.SetTOF( 0. );
result.SetParticleDef( pdefAntiNeutron );
// *** SELECT PROCESS FOR CURRENT PARTICLE ***
AntiNeutronAnnihilation(&nopt);
// *** CHECK WHETHER THERE ARE NEW PARTICLES GENERATED ***
if (ntot != 0 || result.GetParticleDef() != pdefAntiNeutron) {
// *** CURRENT PARTICLE IS NOT THE SAME AS IN THE BEGINNING OR/AND ***
// *** ONE OR MORE SECONDARIES HAVE BEEN GENERATED ***
// --- INITIAL PARTICLE TYPE HAS BEEN CHANGED ==> PUT NEW TYPE ON ---
// --- THE GEANT TEMPORARY STACK ---
// --- PUT PARTICLE ON THE STACK ---
gkin[0] = result;
gkin[0].SetTOF( result.GetTOF() * 5e-11 );
ngkine = 1;
// --- ALL QUANTITIES ARE TAKEN FROM THE GHEISHA STACK WHERE THE ---
// --- CONVENTION IS THE FOLLOWING ---
// --- ONE OR MORE SECONDARIES HAVE BEEN GENERATED ---
for (l = 1; l <= ntot; ++l) {
index = l - 1;
// DHW 15 May 2011: unused: jnd = eve[index].GetParticleDef();
// --- ADD PARTICLE TO THE STACK IF STACK NOT YET FULL ---
if (ngkine < MAX_SECONDARIES) {
gkin[ngkine] = eve[index];
gkin[ngkine].SetTOF( eve[index].GetTOF() * 5e-11 );
++ngkine;
}
}
}
else {
// --- NO SECONDARIES GENERATED AND PARTICLE IS STILL THE SAME ---
// --- ==> COPY EVERYTHING BACK IN THE CURRENT GEANT STACK ---
ngkine = 0;
ntot = 0;
globalTime += result.GetTOF() * G4float(5e-11);
}
// --- LIMIT THE VALUE OF NGKINE IN CASE OF OVERFLOW ---
ngkine = G4int(std::min(ngkine,G4int(MAX_SECONDARIES)));
} // GenerateSecondaries
void G4AntiNeutronAnnihilationAtRest::Poisso(G4float xav, G4int *iran)
{
G4int i;
G4float r, p1, p2, p3;
G4int fivex;
G4float rr, ran, rrr, ran1;
// *** GENERATION OF POISSON DISTRIBUTION ***
// *** NVE 16-MAR-1988 CERN GENEVA ***
// ORIGIN : H.FESEFELDT (27-OCT-1983)
// --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
if (xav > G4float(9.9)) {
// ** NORMAL DISTRIBUTION WITH SIGMA**2 = <X>
Normal(&ran1);
ran1 = xav + ran1 * std::sqrt(xav);
*iran = G4int(ran1);
if (*iran < 0) {
*iran = 0;
}
}
else {
fivex = G4int(xav * G4float(5.));
*iran = 0;
if (fivex > 0) {
r = G4Exp(-G4double(xav));
ran1 = G4UniformRand();
if (ran1 > r) {
rr = r;
for (i = 1; i <= fivex; ++i) {
++(*iran);
if (i <= 5) {
rrr = G4Pow::GetInstance()->powN(xav, i) / NFac(i);
}
// ** STIRLING' S FORMULA FOR LARGE NUMBERS
if (i > 5) {
rrr = G4Exp(i * G4Log(xav) -
(i + G4float(.5)) * G4Log(i * G4float(1.)) +
i - G4float(.9189385));
}
rr += r * rrr;
if (ran1 <= rr) {
break;
}
}
}
}
else {
// ** FOR VERY SMALL XAV TRY IRAN=1,2,3
p1 = xav * G4Exp(-G4double(xav));
p2 = xav * p1 / G4float(2.);
p3 = xav * p2 / G4float(3.);
ran = G4UniformRand();
if (ran >= p3) {
if (ran >= p2) {
if (ran >= p1) {
*iran = 0;
}
else {
*iran = 1;
}
}
else {
*iran = 2;
}
}
else {
*iran = 3;
}
}
}
} // Poisso
G4int G4AntiNeutronAnnihilationAtRest::NFac(G4int n)
{
G4int ret_val;
G4int i, j;
// *** NVE 16-MAR-1988 CERN GENEVA ***
// ORIGIN : H.FESEFELDT (27-OCT-1983)
ret_val = 1;
j = n;
if (j > 1) {
if (j > 10) {
j = 10;
}
for (i = 2; i <= j; ++i) {
ret_val *= i;
}
}
return ret_val;
} // NFac
void G4AntiNeutronAnnihilationAtRest::Normal(G4float *ran)
{
// *** NVE 14-APR-1988 CERN GENEVA ***
// ORIGIN : H.FESEFELDT (27-OCT-1983)
*ran = (G4float)(-6. + 12.*G4UniformRand());
} // Normal
void G4AntiNeutronAnnihilationAtRest::AntiNeutronAnnihilation(G4int *nopt)
{
G4float brr[3] = { G4float(.125),G4float(.25),G4float(.5) };
G4float r__1;
G4int i, ii, kk;
G4int nt;
G4float cfa, eka;
G4int ika, nbl;
G4float ran, pcm;
G4int isw;
G4float tex;
G4ParticleDefinition* ipa1;
G4float ran1, ran2, ekin, tkin;
G4float targ;
G4ParticleDefinition* inve;
G4float ekin1, ekin2, black;
G4float pnrat, rmnve1, rmnve2;
G4float ek, en;
// *** ANTI NEUTRON ANNIHILATION AT REST ***
// *** NVE 04-MAR-1988 CERN GENEVA ***
// ORIGIN : H.FESEFELDT (09-JULY-1987)
// NOPT=0 NO ANNIHILATION
// NOPT=1 ANNIH.IN PI+ PI-
// NOPT=2 ANNIH.IN PI0 PI0
// NOPT=3 ANNIH.IN PI+ PI0
// NOPT=4 ANNIH.IN GAMMA GAMMA
pv[1].SetZero();
pv[1].SetMass( massAntiNeutron );
pv[1].SetKineticEnergyAndUpdate( 0. );
pv[1].SetTOF( result.GetTOF() );
pv[1].SetParticleDef( result.GetParticleDef() );
isw = 1;
ran = G4UniformRand();
if (ran > brr[0]) {
isw = 2;
}
if (ran > brr[1]) {
isw = 3;
}
if (ran > brr[2]) {
isw = 4;
}
*nopt = isw;
// **
// ** EVAPORATION
// **
rmnve1 = massPionPlus;
rmnve2 = massPionMinus;
if (isw == 2) {
rmnve1 = massPionZero;
rmnve2 = massPionZero;
}
if (isw == 3) {
rmnve2 = massPionZero;
}
if (isw == 4) {
rmnve1 = massGamma;
rmnve2 = massGamma;
}
ek = massNeutron + massAntiNeutron - rmnve1 - rmnve2;
tkin = ExNu(ek);
ek -= tkin;
if (ek < G4float(1e-4)) {
ek = G4float(1e-4);
}
ek /= G4float(2.);
en = ek + (rmnve1 + rmnve2) / G4float(2.);
r__1 = en * en - rmnve1 * rmnve2;
pcm = r__1 > 0 ? std::sqrt(r__1) : 0;
pv[2].SetZero();
pv[2].SetMass( rmnve1 );
pv[3].SetZero();
pv[3].SetMass( rmnve2 );
if (isw > 3) {
pv[2].SetMass( 0. );
pv[3].SetMass( 0. );
}
pv[2].SetEnergyAndUpdate( std::sqrt(pv[2].GetMass()*pv[2].GetMass()+pcm*pcm) );
pv[2].SetTOF( result.GetTOF() );
pv[3].SetEnergy( std::sqrt(pv[3].GetMass()*pv[3].GetMass()+pcm*pcm) );
pv[3].SetMomentumAndUpdate( -pv[2].GetMomentum().x(), -pv[2].GetMomentum().y(), -pv[2].GetMomentum().z() );
pv[3].SetTOF( result.GetTOF() );
switch ((int)isw) {
case 1:
pv[2].SetParticleDef( pdefPionPlus );
pv[3].SetParticleDef( pdefPionMinus );
break;
case 2:
pv[2].SetParticleDef( pdefPionZero );
pv[3].SetParticleDef( pdefPionZero );
break;
case 3:
pv[2].SetParticleDef( pdefPionPlus );
pv[3].SetParticleDef( pdefPionZero );
break;
case 4:
pv[2].SetParticleDef( pdefGamma );
pv[3].SetParticleDef( pdefGamma );
break;
}
nt = 3;
if (targetAtomicMass >= G4float(1.5)) {
cfa = (targetAtomicMass - G4float(1.)) / G4float(120.) *
G4float(.025) * G4Exp(-G4double(targetAtomicMass - G4float(1.)) /
G4float(120.));
targ = G4float(1.);
tex = evapEnergy1;
if (tex >= G4float(.001)) {
black = (targ * G4float(1.25) +
G4float(1.5)) * evapEnergy1 / (evapEnergy1 + evapEnergy3);
Poisso(black, &nbl);
if (G4float(G4int(targ) + nbl) > targetAtomicMass) {
nbl = G4int(targetAtomicMass - targ);
}
if (nt + nbl > (MAX_SECONDARIES - 2)) {
nbl = (MAX_SECONDARIES - 2) - nt;
}
if (nbl > 0) {
ekin = tex / nbl;
ekin2 = 0.0f;
for (i = 1; i <= nbl; ++i) {
if (nt == (MAX_SECONDARIES - 2)) {
continue;
}
if (ekin2 > tex) {
break;
}
ran1 = G4UniformRand();
Normal(&ran2);
ekin1 = -G4double(ekin) * G4Log(ran1) -
cfa * (ran2 * G4float(.5) + G4float(1.));
if (ekin1 < 0.0f) {
ekin1 = G4Log(ran1) * G4float(-.01);
}
ekin1 *= G4float(1.);
ekin2 += ekin1;
if (ekin2 > tex) {
ekin1 = tex - (ekin2 - ekin1);
}
if (ekin1 < 0.0f) {
ekin1 = G4float(.001);
}
ipa1 = pdefNeutron;
pnrat = G4float(1.) - targetCharge / targetAtomicMass;
if (G4UniformRand() > pnrat) {
ipa1 = pdefProton;
}
++nt;
pv[nt].SetZero();
pv[nt].SetMass( ipa1->GetPDGMass()/GeV );
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
pv[nt].SetTOF( result.GetTOF() );
pv[nt].SetParticleDef( ipa1 );
}
if (targetAtomicMass >= G4float(230.) && ek <= G4float(2.)) {
ii = nt + 1;
kk = 0;
eka = ek;
if (eka > G4float(1.)) {
eka *= eka;
}
if (eka < 0.1f) {
eka = 0.1f;
}
ika = G4int(G4float(3.6) / eka);
for (i = 1; i <= nt; ++i) {
--ii;
if (pv[ii].GetParticleDef() != pdefProton) {
continue;
}
ipa1 = pdefNeutron;
pv[ii].SetMass( ipa1->GetPDGMass()/GeV );
pv[ii].SetParticleDef( ipa1 );
++kk;
if (kk > ika) {
break;
}
}
}
}
}
// **
// ** THEN ALSO DEUTERONS, TRITONS AND ALPHAS
// **
tex = evapEnergy3;
if (tex >= G4float(.001)) {
black = (targ * G4float(1.25) + G4float(1.5)) * evapEnergy3 /
(evapEnergy1 + evapEnergy3);
Poisso(black, &nbl);
if (nt + nbl > (MAX_SECONDARIES - 2)) {
nbl = (MAX_SECONDARIES - 2) - nt;
}
if (nbl > 0) {
ekin = tex / nbl;
ekin2 = 0.0f;
for (i = 1; i <= nbl; ++i) {
if (nt == (MAX_SECONDARIES - 2)) {
continue;
}
if (ekin2 > tex) {
break;
}
ran1 = G4UniformRand();
Normal(&ran2);
ekin1 = -G4double(ekin) * G4Log(ran1) -
cfa * (ran2 * G4float(.5) + G4float(1.));
if (ekin1 < 0.0f) {
ekin1 = G4Log(ran1) * G4float(-.01);
}
ekin1 *= G4float(1.);
ekin2 += ekin1;
if (ekin2 > tex) {
ekin1 = tex - (ekin2 - ekin1);
}
if (ekin1 < 0.0f) {
ekin1 = G4float(.001);
}
ran = G4UniformRand();
inve = pdefDeuteron;
if (ran > G4float(.6)) {
inve = pdefTriton;
}
if (ran > G4float(.9)) {
inve = pdefAlpha;
}
++nt;
pv[nt].SetZero();
pv[nt].SetMass( inve->GetPDGMass()/GeV );
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
pv[nt].SetTOF( result.GetTOF() );
pv[nt].SetParticleDef( inve );
}
}
}
}
result = pv[2];
if (nt == 2) {
return;
}
for (i = 3; i <= nt; ++i) {
if (ntot >= MAX_SECONDARIES) {
return;
}
eve[ntot++] = pv[i];
}
} // AntiNeutronAnnihilation
G4double G4AntiNeutronAnnihilationAtRest::ExNu(G4float ek1)
{
G4float ret_val, r__1;
G4float cfa, gfa, ran1, ran2, ekin1, atno3;
G4int magic;
G4float fpdiv;
// *** NUCLEAR EVAPORATION AS FUNCTION OF ATOMIC NUMBER ATNO ***
// *** AND KINETIC ENERGY EKIN OF PRIMARY PARTICLE ***
// *** NVE 04-MAR-1988 CERN GENEVA ***
// ORIGIN : H.FESEFELDT (10-DEC-1986)
ret_val = 0.f;
if (targetAtomicMass >= G4float(1.5)) {
magic = 0;
if (G4int(targetCharge + 0.1f) == 82) {
magic = 1;
}
ekin1 = ek1;
if (ekin1 < 0.1f) {
ekin1 = 0.1f;
}
if (ekin1 > G4float(4.)) {
ekin1 = G4float(4.);
}
// ** 0.35 VALUE AT 1 GEV
// ** 0.05 VALUE AT 0.1 GEV
cfa = G4float(.13043478260869565);
cfa = cfa * G4Log(ekin1) + G4float(.35);
if (cfa < G4float(.15)) {
cfa = G4float(.15);
}
ret_val = cfa * G4float(7.716) * G4Exp(-G4double(cfa));
atno3 = targetAtomicMass;
if (atno3 > G4float(120.)) {
atno3 = G4float(120.);
}
cfa = (atno3 - G4float(1.)) /
G4float(120.) * G4Exp(-G4double(atno3 - G4float(1.)) / G4float(120.));
ret_val *= cfa;
r__1 = ekin1;
fpdiv = G4float(1.) - r__1 * r__1 * G4float(.25);
if (fpdiv < G4float(.5)) {
fpdiv = G4float(.5);
}
gfa = (targetAtomicMass - G4float(1.)) /
G4float(70.) * G4float(2.) *
G4Exp(-G4double(targetAtomicMass - G4float(1.)) / G4float(70.));
evapEnergy1 = ret_val * fpdiv;
evapEnergy3 = ret_val - evapEnergy1;
Normal(&ran1);
Normal(&ran2);
if (magic == 1) {
ran1 = 0.0f;
ran2 = 0.0f;
}
evapEnergy1 *= ran1 * gfa + G4float(1.);
if (evapEnergy1 < 0.0f) {
evapEnergy1 = 0.0f;
}
evapEnergy3 *= ran2 * gfa + G4float(1.);
if (evapEnergy3 < 0.0f) {
evapEnergy3 = 0.0f;
}
// Loop checking, 06-Aug-2015, Vladimir Ivanchenko
while ((ret_val = evapEnergy1 + evapEnergy3) >= ek1) {
evapEnergy1 *= G4float(1.) - G4UniformRand() * G4float(.5);
evapEnergy3 *= G4float(1.) - G4UniformRand() * G4float(.5);
}
}
return ret_val;
} // ExNu
@@ -244,6 +244,7 @@ G4VParticleChange* G4MuonicAtomDecay::DecayIt(const G4Track& aTrack,
ed << G4endl;
}
G4Exception("G4MuonicAtomDecay::DecayIt", "DECAY003", FatalException,ed);
return &theTotalResult;
} else {
// execute DecayIt()
#ifdef G4VERBOSE
@@ -306,7 +307,7 @@ G4VParticleChange* G4MuonicAtomDecay::DecayIt(const G4Track& aTrack,
}
//add products in theTotalResult
G4int numberOfSecondaries = (nullptr != products) ? products->entries() : 0;
G4int numberOfSecondaries = products->entries();
theTotalResult.SetNumberOfSecondaries(numberOfSecondaries);
#ifdef G4VERBOSE
@@ -434,10 +435,7 @@ G4VParticleChange* G4MuonicAtomDecay::DecayIt(const G4Track& aTrack,
ClearNumberOfInteractionLengthLeft();
return &theTotalResult;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....