Import Geant4 9.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 17:01:34 +02:00
parent b1eb5424d2
commit e2d2f9810a
10384 changed files with 698580 additions and 628834 deletions
@@ -23,15 +23,14 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ExcitationHandler.cc,v 1.40 2010-11-17 16:20:38 vnivanch Exp $
// GEANT4 tag $Name: not supported by cvs2svn $
// $Id$
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (May 1998)
//
//
// Modified:
// (30 June 1998) by V. Lara:
// 30 June 1998 by V. Lara:
// -Modified the Transform method for use G4ParticleTable and
// therefore G4IonTable. It makes possible to convert all kind
// of fragments (G4Fragment) produced in deexcitation to
@@ -40,27 +39,33 @@
// Evaporation: G4Evaporation
// MultiFragmentation: G4StatMF
// Fermi Breakup model: G4FermiBreakUp
// (24 Jul 2008) by M. A. Cortes Giraldo:
// 24 Jul 2008 by M. A. Cortes Giraldo:
// -Max Z,A for Fermi Break-Up turns to 9,17 by default
// -BreakItUp() reorganised and bug in Evaporation loop fixed
// -Transform() optimised
// (September 2008) by J. M. Quesada. External choices have been added for :
// -inverse cross section option (default OPTxs=3)
// -superimposed Coulomb barrier (if useSICB is set true, by default it is false)
// (September 2009) by J. M. Quesada:
// September 2009 by J. M. Quesada:
// -according to Igor Pshenichnov, SMM will be applied (just in case) only once.
// (27 Nov 2009) by V.Ivanchenko:
// 27 Nov 2009 by V.Ivanchenko:
// -cleanup the logic, reduce number internal vectors, fixed memory leak.
// (11 May 2010) by V.Ivanchenko:
// 11 May 2010 by V.Ivanchenko:
// -FermiBreakUp activated, used integer Z and A, used BreakUpFragment method for
// final photon deexcitation; used check on adundance of a fragment, decay
// unstable fragments with A <5
// (22 March 2011) by V.Ivanchenko: general cleanup and addition of a condition:
// 22 March 2011 by V.Ivanchenko: general cleanup and addition of a condition:
// products of Fermi Break Up cannot be further deexcited by this model
// (30 March 2011) by V.Ivanchenko removed private inline methods, moved Set methods
// 30 March 2011 by V.Ivanchenko removed private inline methods, moved Set methods
// to the source
// 23 January 2012 by V.Ivanchenko general cleanup including destruction of
// objects, propagate G4PhotonEvaporation pointer to G4Evaporation class and
// not delete it here
#include <list>
#include "G4ExcitationHandler.hh"
#include "G4SystemOfUnits.hh"
#include "G4LorentzVector.hh"
#include "G4NistManager.hh"
#include "G4ParticleTable.hh"
@@ -79,29 +84,25 @@
#include "G4FermiBreakUp.hh"
#include "G4FermiFragmentsPool.hh"
#include <list>
G4ExcitationHandler::G4ExcitationHandler():
maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),minEForMultiFrag(4.0*GeV),
minExcitation(CLHEP::keV),MyOwnEvaporationClass(true),
MyOwnPhotonEvaporationClass(true),OPTxs(3),useSICB(false)
maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),minEForMultiFrag(4*GeV),
minExcitation(keV),OPTxs(3),useSICB(false),isEvapLocal(true)
{
theTableOfIons = G4ParticleTable::GetParticleTable()->GetIonTable();
theEvaporation = new G4Evaporation;
theMultiFragmentation = new G4StatMF;
theFermiModel = new G4FermiBreakUp;
thePhotonEvaporation = new G4PhotonEvaporation;
theEvaporation = new G4Evaporation(thePhotonEvaporation);
thePool = G4FermiFragmentsPool::Instance();
SetParameters();
}
G4ExcitationHandler::~G4ExcitationHandler()
{
if(MyOwnEvaporationClass) { delete theEvaporation; }
if(isEvapLocal) { delete theEvaporation; }
delete theMultiFragmentation;
delete theFermiModel;
if(MyOwnPhotonEvaporationClass) { delete thePhotonEvaporation; }
}
void G4ExcitationHandler::SetParameters()
@@ -116,17 +117,17 @@ void G4ExcitationHandler::SetParameters()
G4ReactionProductVector *
G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
{
//G4cout << "@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@" << G4endl;
// Variables existing until end of method
G4Fragment * theInitialStatePtr = new G4Fragment(theInitialState);
G4FragmentVector * theTempResult = 0; // pointer which receives temporal results
std::list<G4Fragment*> theEvapList; // list to apply Evaporation or Fermi Break-Up
std::list<G4Fragment*> thePhotoEvapList; // list to apply PhotonEvaporation
std::list<G4Fragment*> thePhotoEvapList; // list to apply PhotonEvaporation
std::list<G4Fragment*> theResults; // list to store final result
//
// G4cout << "@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@" << G4endl;
// G4cout << theInitialState << G4endl;
//G4cout << theInitialState << G4endl;
// Variables to describe the excited configuration
G4double exEnergy = theInitialState.GetExcitationEnergy();
@@ -178,10 +179,10 @@ G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
// Analyse fragment A > 1
else {
G4double exEnergy = (*j)->GetExcitationEnergy();
G4double exEnergy1 = (*j)->GetExcitationEnergy();
// cold fragments
if(exEnergy < minExcitation) {
if(exEnergy1 < minExcitation) {
Z = (*j)->GetZ_asInt();
if(nist->GetIsotopeAbundance(Z, A) > 0.0) {
theResults.push_back(*j); // stable fragment
@@ -210,11 +211,11 @@ G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
}
}
}
//G4cout << "## After first step " << theEvapList.size() << " for evap; "
// << thePhotoEvapList.size() << " for photo-evap; "
// << theResults.size() << " results. " << G4endl;
/*
G4cout << "## After first step " << theEvapList.size() << " for evap; "
<< thePhotoEvapList.size() << " for photo-evap; "
<< theResults.size() << " results. " << G4endl;
*/
// -----------------------------------
// FermiBreakUp and De-excitation loop
// -----------------------------------
@@ -251,9 +252,9 @@ G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
//G4cout << *j << G4endl;
A = (*j)->GetA_asInt();
G4double exEnergy = (*j)->GetExcitationEnergy();
exEnergy = (*j)->GetExcitationEnergy();
if(A <= 1) { theResults.push_back(*j); } // gamma, p, n
if(A <= 1) { theResults.push_back(*j); } // gamma, p, n
// evaporation is not possible
else if(1 == nsec) {
@@ -310,7 +311,7 @@ G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
{
//G4cout << "Next photon evaporate: " << thePhotonEvaporation << G4endl;
//G4cout << *iList << G4endl;
G4double exEnergy = (*iList)->GetExcitationEnergy();
exEnergy = (*iList)->GetExcitationEnergy();
// only hot fragments
if(exEnergy >= minExcitation) {
@@ -385,40 +386,40 @@ G4ExcitationHandler::BreakItUp(const G4Fragment & theInitialState) const
return theReactionProductVector;
}
void G4ExcitationHandler::SetEvaporation(G4VEvaporation *const value)
void G4ExcitationHandler::SetEvaporation(G4VEvaporation* ptr)
{
if(value && value != theEvaporation) {
if(MyOwnEvaporationClass) { delete theEvaporation; }
theEvaporation = value;
MyOwnEvaporationClass = false;
if(ptr && ptr != theEvaporation) {
delete theEvaporation;
theEvaporation = ptr;
thePhotonEvaporation = ptr->GetPhotonEvaporation();
SetParameters();
isEvapLocal = false;
}
}
void
G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation *const value)
G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation* ptr)
{
if(value && value != theMultiFragmentation) {
if(ptr && ptr != theMultiFragmentation) {
delete theMultiFragmentation;
theMultiFragmentation = value;
theMultiFragmentation = ptr;
}
}
void G4ExcitationHandler::SetFermiModel(G4VFermiBreakUp *const value)
void G4ExcitationHandler::SetFermiModel(G4VFermiBreakUp* ptr)
{
if(value && value != theFermiModel) {
if(ptr && ptr != theFermiModel) {
delete theFermiModel;
theFermiModel = value;
theFermiModel = ptr;
}
}
void
G4ExcitationHandler::SetPhotonEvaporation(G4VEvaporationChannel *const value)
G4ExcitationHandler::SetPhotonEvaporation(G4VEvaporationChannel* ptr)
{
if(value && value != thePhotonEvaporation) {
if(MyOwnPhotonEvaporationClass) { delete thePhotonEvaporation; }
thePhotonEvaporation = value;
MyOwnPhotonEvaporationClass = false;
if(ptr && ptr != thePhotonEvaporation) {
thePhotonEvaporation = ptr;
theEvaporation->SetPhotonEvaporation(ptr);
}
}