Import Geant4 1.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-08 15:28:20 +02:00
parent aaa409b6ee
commit ca1c8cb059
2995 changed files with 106830 additions and 299600 deletions
+3 -2
View File
@@ -1,4 +1,4 @@
# $Id: GNUmakefile,v 1.1 1999/01/07 16:11:30 gunter Exp $
# $Id: GNUmakefile,v 1.2 1999/11/06 17:29:57 hpw Exp $
# ----------------------------------------------------------------
# GNUmakefile for hadronic processes library. G.Folger 10-Dec-97.
# ----------------------------------------------------------------
@@ -13,6 +13,7 @@ SUBDIRS += stopping
SUBDIRS += models/low_energy
SUBDIRS += models/high_energy
SUBDIRS += models/neutron_hp
SUBDIRS += models/isotope_production
SUBDIRS += models/generator/de_excitation
SUBDIRS += models/generator/diffractive_string
SUBDIRS += models/generator/high_energy
@@ -26,7 +27,7 @@ SUBDIRS += models/generator/util
SUBLIBS = G4hadronic_mgt G4hadronic_util G4hadronic_proc
SUBLIBS += G4hadronic_xsect G4hadronic_stop
SUBLIBS += G4hadronic_neu G4hadronic_HE G4hadronic_LE
SUBLIBS += G4hadronic_neu G4hadronic_iso G4hadronic_HE G4hadronic_LE
SUBLIBS += G4hadronic_deex G4hadronic_diffstring G4hadronic_HE_gen G4hadronic_kinetic
SUBLIBS += G4hadronic_man_gen G4hadronic_preequ G4hadronic_qgstring G4hadronic_string_common
SUBLIBS += G4hadronic_stringfrag G4hadronic_util_gen
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4CrossSectionDataStore.hh,v 1.1 1999/01/07 16:11:31 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4CrossSectionDataStore.hh,v 1.1.10.1 1999/12/07 20:51:27 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4CrossSectionDataStore -- header file
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronCaptureDataSet.hh,v 1.1 1999/01/07 16:11:31 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronCaptureDataSet.hh,v 1.1.10.1 1999/12/07 20:51:27 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4HadronCaptureDataSet -- header file
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronCrossSections.hh,v 1.1 1999/01/07 16:11:31 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronCrossSections.hh,v 1.2.4.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 Hadron physics class -- header file
@@ -74,7 +74,7 @@ class G4HadronCrossSections
{
public:
G4HadronCrossSections() : verboseLevel(0)
G4HadronCrossSections() : verboseLevel(0), prevParticleDefinition(0)
{
}
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronElasticDataSet.hh,v 1.1 1999/01/07 16:11:31 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronElasticDataSet.hh,v 1.1.10.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4HadronElasticDataSet -- header file
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronFissionDataSet.hh,v 1.1 1999/01/07 16:11:31 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronFissionDataSet.hh,v 1.1.10.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4HadronFissionDataSet -- header file
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronInelasticDataSet.hh,v 1.1 1999/01/07 16:11:32 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronInelasticDataSet.hh,v 1.1.10.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4HadronInelasticDataSet -- header file
@@ -0,0 +1,40 @@
// by JPW, working, but to be cleaned up. @@@@
#ifndef G4NeutronInelasticCrossSection_h
#define G4NeutronInelasticCrossSection_h
#include "globals.hh"
#include "G4Neutron.hh"
#include "G4VCrossSectionDataSet.hh"
class G4NeutronInelasticCrossSection : public G4VCrossSectionDataSet
{
public:
virtual
G4bool IsApplicable(const G4DynamicParticle* aPart, const G4Element*)
{
G4bool result = false;
if(( aPart->GetDefinition()==G4Neutron::Neutron()) &&
( aPart->GetKineticEnergy()<20*GeV) &&
aPart->GetKineticEnergy()>19.9*MeV) result = true;
return result;
}
virtual
G4double GetCrossSection(const G4DynamicParticle*, const G4Element*);
G4double GetCrossSection(G4double anEnergy, G4double anA, G4double aZ);
virtual
void BuildPhysicsTable(const G4ParticleDefinition&)
{}
virtual
void DumpPhysicsTable(const G4ParticleDefinition&)
{G4cout << "G4NeutronInelasticCrossSection: uses formula"<<endl;}
};
#endif
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4VCrossSectionDataSet.hh,v 1.1 1999/01/07 16:11:32 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4VCrossSectionDataSet.hh,v 1.1.10.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics abstract class: G4VCrossSectionData -- header file
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4CrossSectionDataStore.cc,v 1.1 1999/01/07 16:11:33 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4CrossSectionDataStore.cc,v 1.1.10.1 1999/12/07 20:51:28 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics class: G4CrossSectionDataStore
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronCaptureDataSet.cc,v 1.1 1999/01/07 16:11:33 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronCaptureDataSet.cc,v 1.1.10.1 1999/12/07 20:51:29 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// G4 Physics class: HadronCaptureDataSet for cross sections
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronCrossSections.cc,v 1.1 1999/01/07 16:11:33 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronCrossSections.cc,v 1.1.10.1 1999/12/07 20:51:29 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// G4 Hadron Physics class G4HadronCrossSections
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronElasticDataSet.cc,v 1.1 1999/01/07 16:11:34 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronElasticDataSet.cc,v 1.1.10.1 1999/12/07 20:51:29 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// G4 Physics class: HadronElasticDataSet for cross sections
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronFissionDataSet.cc,v 1.1 1999/01/07 16:11:34 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronFissionDataSet.cc,v 1.1.10.1 1999/12/07 20:51:29 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// G4 Physics class: HadronFissionDataSet for cross sections
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronInelasticDataSet.cc,v 1.1 1999/01/07 16:11:34 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronInelasticDataSet.cc,v 1.1.10.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// G4 Physics class: HadronInelasticDataSet for cross sections
@@ -0,0 +1,40 @@
// By JPW, working, but to be cleaned up. @@@
#include "G4NeutronInelasticCrossSection.hh"
#include "globals.hh"
G4double G4NeutronInelasticCrossSection::
GetCrossSection(const G4DynamicParticle* aPart, const G4Element* anEle)
{
G4double atomicNumber = anEle->GetN();
G4double nOfProtons = anEle->GetZ();
return GetCrossSection(aPart->GetKineticEnergy(), atomicNumber, nOfProtons);
}
G4double G4NeutronInelasticCrossSection::
GetCrossSection(G4double anEnergy, G4double atomicNumber, G4double nOfProtons)
{
G4double kineticEnergy = log10(anEnergy/MeV);
G4double nOfNeutrons = atomicNumber-nOfProtons;
const G4double p1=1.3773;
const G4double p2=1.+10./atomicNumber-0.0006*atomicNumber;
const G4double p3=0.6+13./atomicNumber-0.0005*atomicNumber;
const G4double p4=7.2449-0.018242*atomicNumber;
const G4double p5=1.64-1.8/atomicNumber-0.0005*atomicNumber;
const G4double p6=1.+200./atomicNumber+0.02*atomicNumber;
const G4double p7=(atomicNumber-70.)*(atomicNumber-200.)/11000.;
double part1 = pi*(p1*p1)*log(nOfNeutrons);
double part2 = 1.+ pow(atomicNumber, 1./3.) - p2*(1.-1./pow(atomicNumber, 1./3.));
double firstexp = -p4*(kineticEnergy-p5);
double first=1.+exp(firstexp);
double corr = 1.+p3*(1.-1./first);
double secondexp = -p6*(kineticEnergy-p7);
double second=1.+exp(secondexp);
double corr2 =1./second;
double xsec = corr*corr2*part1*part2*10.*millibarn;
return xsec;
}
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4VCrossSectionDataSet.cc,v 1.1 1999/01/07 16:11:34 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4VCrossSectionDataSet.cc,v 1.1.10.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// GEANT4 physics abstract class: G4VCrossSectionDataSet
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4EnergyRangeManager.hh,v 1.1 1999/01/07 16:11:35 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4EnergyRangeManager.hh,v 1.1.10.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Energy Range Manager
// original by H.P. Wellisch
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronInelasticProcess.hh,v 1.1 1999/01/07 16:11:35 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronInelasticProcess.hh,v 1.1.10.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Inelastic Process class
// The specific particle inelastic processes derive from this class
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronicInteraction.hh,v 1.2 1999/03/29 09:35:31 hpw Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronicInteraction.hh,v 1.2.8.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Interaction abstract base class
// This class is the base class for the model classes.
@@ -1,7 +1,7 @@
#ifndef G4HadronicInteractionRegistry_h
#define G4HadronicInteractionRegistry_h 1
#include <rw/tpvector.h>
#include "g4rw/tpvector.h"
#include "globals.hh"
class G4HadronicInteraction;
@@ -27,7 +27,7 @@ class G4HadronicInteractionRegistry
void AddModel(G4HadronicInteraction * aModel);
G4int nModels;
RWTPtrVector<G4HadronicInteraction> allModels;
G4RWTPtrVector<G4HadronicInteraction> allModels;
static G4HadronicInteractionRegistry theRegistry;
};
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronicProcess.hh,v 1.1 1999/01/07 16:11:35 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronicProcess.hh,v 1.4.2.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// This is the top level Hadronic Process class
// The inelastic, elastic, capture, and fission processes
@@ -34,6 +34,9 @@
#include "G4PhysicsVector.hh"
#include "G4Nucleus.hh"
#include "G4ReactionProduct.hh"
#include "g4rw/tpordvec.h"
#include "G4VIsotopeProduction.hh"
#include "G4IsoParticleChange.hh"
class G4HadronicProcess : public G4VDiscreteProcess
{
@@ -41,10 +44,10 @@
G4HadronicProcess( const G4String &processName = "Hadronic" ) :
G4VDiscreteProcess( processName )
{ }
{ isoIsOnAnyway = 0; }
virtual ~G4HadronicProcess()
{ }
{ theProductionModels.clearAndDestroy(); }
inline void RegisterMe( G4HadronicInteraction *a )
{ GetManagerPointer()->RegisterMe( a ); }
@@ -83,6 +86,25 @@
G4double GetCurrentN()
{ return currentN; }
// Set methods for isotope production
static void EnableIsotopeProductionGlobally();
static void DisableIsotopeProductionGlobally();
void EnableIsotopeCounting() {isoIsOnAnyway = 1;}
void DisableIsotopeCounting() {isoIsOnAnyway = -1;}
void RegisterIsotopeProductionModel(G4VIsotopeProduction * aModel)
{ theProductionModels.insert(aModel); }
static G4IsoParticleChange * GetIsotopeProductionInfo()
{
G4IsoParticleChange * anIsoResult = theIsoResult;
if(theIsoResult) theOldIsoResult = theIsoResult;
theIsoResult = NULL;
return anIsoResult;
}
protected:
@@ -95,11 +117,33 @@
G4Nucleus targetNucleus;
private:
G4VParticleChange * DoIsotopeCounting(G4VParticleChange * aResult,
const G4Track & aTrack,
const G4Nucleus & aNucleus);
G4IsoResult * ExtractResidualNucleus(const G4Track & aTrack,
const G4Nucleus & aNucleus,
G4VParticleChange * aResult);
private:
G4double currentZ;
G4double currentN;
G4HadronicProcess *dispatch;
// swiches for isotope production
static G4bool isoIsEnabled; // true or false; local swich overrides
G4int isoIsOnAnyway; // true(1), false(-1) or default(0)
G4IsoParticleChange theIsoPC;
G4RWTPtrOrderedVector<G4VIsotopeProduction> theProductionModels;
static G4IsoParticleChange * theIsoResult;
static G4IsoParticleChange * theOldIsoResult;
};
#endif
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4InelasticInteraction.hh,v 1.1 1999/01/07 16:11:36 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4InelasticInteraction.hh,v 1.1.10.1 1999/12/07 20:51:30 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Inelastic Interaction
// This class is an abstract base class, since the pure virtual
@@ -0,0 +1,34 @@
#ifndef G4IsoParticleChange_h
#define G4IsoParticleChange_h
#include "G4Nucleus.hh"
class G4IsoParticleChange
{
public:
void SetIsotope(const G4String & anIsotope) {theIsotope = anIsotope;}
void SetProductionPosition(const G4ThreeVector & aPosition) {thePosition = aPosition;}
void SetProductionTime(const G4double & aProductionTime) {theProductionTime = aProductionTime; }
void SetParentParticle(const G4DynamicParticle & aProjectile) {theProjectile = aProjectile; }
void SetMotherNucleus(const G4Nucleus & aTarget) {theTarget = aTarget; }
void SetProducer(const G4String & aProducer) { theProducer = aProducer; }
G4String GetIsotope() {return theIsotope;}
G4ThreeVector GetProductionPosition() {return thePosition;}
G4double GetProductionTime() {return theProductionTime;}
G4DynamicParticle GetParentParticle() {return theProjectile;}
G4Nucleus GetMotherNucleus() {return theTarget;}
G4String GetProducer() {return theProducer;}
private:
G4String theIsotope;
G4ThreeVector thePosition;
G4double theProductionTime;
G4DynamicParticle theProjectile;
G4Nucleus theTarget;
G4String theProducer;
};
#endif
@@ -0,0 +1,22 @@
#ifndef G4VIsotopeProduction_h
#define G4VIsotopeProduction_h 1
#include "G4IsoResult.hh"
#include "G4Track.hh"
#include "G4Nucleus.hh"
class G4VIsotopeProduction
{
public:
virtual G4IsoResult * GetIsotope(const G4Track & aTrack, const G4Nucleus & aNucleus) = 0;
G4bool operator == (const G4VIsotopeProduction & aProd)
{
G4bool result = false;
if(&aProd==this) result = true;
return result;
}
};
#endif
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4EnergyRangeManager.cc,v 1.2 1999/03/29 09:35:36 hpw Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4EnergyRangeManager.cc,v 1.2.8.1 1999/12/07 20:51:31 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Energy Range Manager
// original by H.P. Wellisch
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronInelasticProcess.cc,v 1.1 1999/01/07 16:11:36 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronInelasticProcess.cc,v 1.1.8.1.2.1 1999/12/07 20:51:31 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Inelastic Process Class
// J.L. Chuma, TRIUMF, 24-Mar-1997
@@ -37,7 +37,7 @@
// returns the mean free path in GEANT4 internal units
const RWTPtrVector<G4Element> *theElementVector =
const G4RWTPtrVector<G4Element> *theElementVector =
aMaterial->GetElementVector();
const G4double *theAtomicNumDensityVector =
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronicInteraction.cc,v 1.1 1999/01/07 16:11:36 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronicInteraction.cc,v 1.1.10.1 1999/12/07 20:51:31 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Interaction base class
// original by H.P. Wellisch
@@ -1,15 +1,29 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4HadronicProcess.cc,v 1.1 1999/01/07 16:11:36 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4HadronicProcess.cc,v 1.7.2.1 1999/12/07 20:51:31 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// HPW to implement the choosing of an element for scattering.
#include <fstream.h>
#ifdef WIN32
#include <strstrea.h>
#else
#include <strstream.h>
#endif
#include <stdlib.h>
#include "G4HadronicProcess.hh"
//@@ add model name info, once typeinfo available #include <typeinfo.h>
G4IsoParticleChange * G4HadronicProcess::theIsoResult = NULL;
G4IsoParticleChange * G4HadronicProcess::theOldIsoResult = NULL;
G4bool G4HadronicProcess::isoIsEnabled = true;
void G4HadronicProcess::EnableIsotopeProductionGlobally() {isoIsEnabled = true;}
void G4HadronicProcess::DisableIsotopeProductionGlobally() {isoIsEnabled = false;}
G4Element * G4HadronicProcess::ChooseAandZ(
const G4DynamicParticle *aParticle, const G4Material *aMaterial )
@@ -66,7 +80,98 @@
G4VParticleChange *result =
theInteraction->ApplyYourself( aTrack, targetNucleus);
ResetNumberOfInteractionLengthLeft();
if(isoIsOnAnyway!=-1)
{
if(isoIsEnabled||isoIsOnAnyway)
{
result = DoIsotopeCounting(result, aTrack, targetNucleus);
}
}
return result;
}
G4VParticleChange * G4HadronicProcess::
DoIsotopeCounting(G4VParticleChange * aResult,
const G4Track & aTrack,
const G4Nucleus & aNucleus)
{
// get the PC from iso-production
if(theOldIsoResult) delete theOldIsoResult;
if(theIsoResult) delete theIsoResult;
theIsoResult = new G4IsoParticleChange;
G4bool done = false;
G4IsoResult * anIsoResult = NULL;
for(G4int i=0; i<theProductionModels.length(); i++)
{
anIsoResult = theProductionModels(i)->GetIsotope(aTrack, aNucleus);
if(anIsoResult!=NULL)
{
done = true;
break;
}
}
// if none in charge, use default iso production
if(!done) anIsoResult = ExtractResidualNucleus(aTrack, aNucleus, aResult);
// Add all info explicitely and add typename from model called.
theIsoResult->SetIsotope(anIsoResult->GetIsotope());
theIsoResult->SetProductionPosition(aTrack.GetPosition());
theIsoResult->SetProductionTime(aTrack.GetGlobalTime());
theIsoResult->SetParentParticle(*aTrack.GetDynamicParticle());
theIsoResult->SetMotherNucleus(anIsoResult->GetMotherNucleus());
// theIsoResult->SetProducer(typeid(*theInteraction).name()); @@@@@@@
G4String aWorkaround("WaitingForTypeidToBeAvailableInCompilers"); // @@@@@ workaround for DEC.
theIsoResult->SetProducer(aWorkaround);
delete anIsoResult;
return aResult;
}
G4IsoResult * G4HadronicProcess::
ExtractResidualNucleus(const G4Track & aTrack,
const G4Nucleus & aNucleus,
G4VParticleChange * aResult)
{
G4double A = aNucleus.GetN();
G4double Z = aNucleus.GetZ();
G4double bufferA = 0;
G4double bufferZ = 0;
// loop over aResult, and decrement A, Z accordingly
// cash the max
for(G4int i=0; i<aResult->GetNumberOfSecondaries(); i++)
{
G4Track* aSecTrack = aResult->GetSecondary(i);
if(bufferA<aSecTrack->GetDefinition()->GetBaryonNumber())
{
bufferA = aSecTrack->GetDefinition()->GetBaryonNumber();
bufferZ = aSecTrack->GetDefinition()->GetPDGCharge();
}
Z-=aSecTrack->GetDefinition()->GetPDGCharge();
A-=aSecTrack->GetDefinition()->GetBaryonNumber();
}
// if the fragment was part of the final state, it is
// assumed to be the heaviest secondary.
if(A<0.1)
{
A = bufferA;
Z = bufferZ;
}
// prepare the IsoResult.
char the1[100] = {""};
ostrstream ost1(the1, 100, ios::out);
ost1 <<Z<<"_"<<A;
G4String * biff = new G4String(the1);
G4IsoResult * theResult = new G4IsoResult(*biff, aNucleus);
// cleaning up.
delete biff;
return theResult;
}
/* end of file */
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
+3 -2
View File
@@ -1,4 +1,4 @@
# $Id: GNUmakefile,v 1.1 1999/01/07 16:11:37 gunter Exp $
# $Id: GNUmakefile,v 1.2 1999/11/06 17:29:36 hpw Exp $
# --------------------------------------------------------------
# GNUmakefile for hadronic models library. G.Folger 10-Dec-97
# --------------------------------------------------------------
@@ -8,6 +8,7 @@ name := G4hadronic_models
SUBDIRS = low_energy
SUBDIRS += high_energy
SUBDIRS += neutron_hp
SUBDIRS += isotope_production
SUBDIRS += generator/de_excitation
SUBDIRS += generator/diffractive_string
SUBDIRS += generator/high_energy
@@ -19,7 +20,7 @@ SUBDIRS += generator/string_common
SUBDIRS += generator/string_fragmentation
SUBDIRS += generator/util
SUBLIBS = G4hadronic_HE G4hadronic_LE G4hadronic_neu
SUBLIBS = G4hadronic_HE G4hadronic_LE G4hadronic_neu G4hadronic_iso
SUBLIBS += G4hadronic_deex G4hadronic_diffstring G4hadronic_HE_gen G4hadronic_kinetic
SUBLIBS += G4hadronic_man_gen G4hadronic_preequ G4hadronic_qgstring G4hadronic_string_common
SUBLIBS += G4hadronic_stringfrag G4hadronic_util_gen
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,36 +0,0 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4DummyMF.hh,v 1.1 1999/01/07 16:11:39 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (May 1998)
#ifndef G4DummyMF_h
#define G4DummyMF_h 1
#include "G4MultiFragmentation.hh"
class G4DummyMF : public G4MultiFragmentation
{
public:
G4DummyMF();
~G4DummyMF();
private:
G4DummyMF(const G4DummyMF &right);
const G4DummyMF & operator=(const G4DummyMF &right);
int operator==(const G4DummyMF &right) const;
int operator!=(const G4DummyMF &right) const;
public:
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus);
};
#endif
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -11,8 +11,8 @@
#define G4Evaporation_h 1
#include "globals.hh"
#include <rw/tvvector.h>
#include <rw/tpordvec.h>
#include "g4rw/tvvector.h"
#include "g4rw/tpordvec.h"
#include "G4ios.hh"
@@ -53,73 +53,73 @@ private:
// Excitation energy levels for each channel
RWTValVector<G4double> ExcitEnergyChann00; // n
RWTValVector<G4double> ExcitEnergyChann01; // p
RWTValVector<G4double> ExcitEnergyChann02; // deuteron
RWTValVector<G4double> ExcitEnergyChann03; // triton
RWTValVector<G4double> ExcitEnergyChann04; // He3
RWTValVector<G4double> ExcitEnergyChann05; // alpha
RWTValVector<G4double> ExcitEnergyChann06; // He5
RWTValVector<G4double> ExcitEnergyChann07; // He6
RWTValVector<G4double> ExcitEnergyChann08; // Li5
RWTValVector<G4double> ExcitEnergyChann09; // Li5
RWTValVector<G4double> ExcitEnergyChann10;
RWTValVector<G4double> ExcitEnergyChann11;
RWTValVector<G4double> ExcitEnergyChann12;
RWTValVector<G4double> ExcitEnergyChann13;
RWTValVector<G4double> ExcitEnergyChann14;
RWTValVector<G4double> ExcitEnergyChann15;
RWTValVector<G4double> ExcitEnergyChann16;
RWTValVector<G4double> ExcitEnergyChann17;
RWTValVector<G4double> ExcitEnergyChann18;
RWTValVector<G4double> ExcitEnergyChann19;
RWTValVector<G4double> ExcitEnergyChann20;
RWTValVector<G4double> ExcitEnergyChann21;
RWTValVector<G4double> ExcitEnergyChann22;
RWTValVector<G4double> ExcitEnergyChann23;
RWTValVector<G4double> ExcitEnergyChann24;
RWTValVector<G4double> ExcitEnergyChann25;
RWTValVector<G4double> ExcitEnergyChann26;
RWTValVector<G4double> ExcitEnergyChann27;
RWTValVector<G4double> ExcitEnergyChann28;
RWTValVector<G4double> ExcitEnergyChann29;
RWTValVector<G4double> ExcitEnergyChann30;
RWTValVector<G4double> ExcitEnergyChann31;
G4RWTValVector<G4double> ExcitEnergyChann00; // n
G4RWTValVector<G4double> ExcitEnergyChann01; // p
G4RWTValVector<G4double> ExcitEnergyChann02; // deuteron
G4RWTValVector<G4double> ExcitEnergyChann03; // triton
G4RWTValVector<G4double> ExcitEnergyChann04; // He3
G4RWTValVector<G4double> ExcitEnergyChann05; // alpha
G4RWTValVector<G4double> ExcitEnergyChann06; // He5
G4RWTValVector<G4double> ExcitEnergyChann07; // He6
G4RWTValVector<G4double> ExcitEnergyChann08; // Li5
G4RWTValVector<G4double> ExcitEnergyChann09; // Li5
G4RWTValVector<G4double> ExcitEnergyChann10;
G4RWTValVector<G4double> ExcitEnergyChann11;
G4RWTValVector<G4double> ExcitEnergyChann12;
G4RWTValVector<G4double> ExcitEnergyChann13;
G4RWTValVector<G4double> ExcitEnergyChann14;
G4RWTValVector<G4double> ExcitEnergyChann15;
G4RWTValVector<G4double> ExcitEnergyChann16;
G4RWTValVector<G4double> ExcitEnergyChann17;
G4RWTValVector<G4double> ExcitEnergyChann18;
G4RWTValVector<G4double> ExcitEnergyChann19;
G4RWTValVector<G4double> ExcitEnergyChann20;
G4RWTValVector<G4double> ExcitEnergyChann21;
G4RWTValVector<G4double> ExcitEnergyChann22;
G4RWTValVector<G4double> ExcitEnergyChann23;
G4RWTValVector<G4double> ExcitEnergyChann24;
G4RWTValVector<G4double> ExcitEnergyChann25;
G4RWTValVector<G4double> ExcitEnergyChann26;
G4RWTValVector<G4double> ExcitEnergyChann27;
G4RWTValVector<G4double> ExcitEnergyChann28;
G4RWTValVector<G4double> ExcitEnergyChann29;
G4RWTValVector<G4double> ExcitEnergyChann30;
G4RWTValVector<G4double> ExcitEnergyChann31;
// Spin of excitation energy levels for each channel
RWTValVector<G4int> ExcitSpinChann00;
RWTValVector<G4int> ExcitSpinChann01;
RWTValVector<G4int> ExcitSpinChann02;
RWTValVector<G4int> ExcitSpinChann03;
RWTValVector<G4int> ExcitSpinChann04;
RWTValVector<G4int> ExcitSpinChann05;
RWTValVector<G4int> ExcitSpinChann06;
RWTValVector<G4int> ExcitSpinChann07;
RWTValVector<G4int> ExcitSpinChann08;
RWTValVector<G4int> ExcitSpinChann09;
RWTValVector<G4int> ExcitSpinChann10;
RWTValVector<G4int> ExcitSpinChann11;
RWTValVector<G4int> ExcitSpinChann12;
RWTValVector<G4int> ExcitSpinChann13;
RWTValVector<G4int> ExcitSpinChann14;
RWTValVector<G4int> ExcitSpinChann15;
RWTValVector<G4int> ExcitSpinChann16;
RWTValVector<G4int> ExcitSpinChann17;
RWTValVector<G4int> ExcitSpinChann18;
RWTValVector<G4int> ExcitSpinChann19;
RWTValVector<G4int> ExcitSpinChann20;
RWTValVector<G4int> ExcitSpinChann21;
RWTValVector<G4int> ExcitSpinChann22;
RWTValVector<G4int> ExcitSpinChann23;
RWTValVector<G4int> ExcitSpinChann24;
RWTValVector<G4int> ExcitSpinChann25;
RWTValVector<G4int> ExcitSpinChann26;
RWTValVector<G4int> ExcitSpinChann27;
RWTValVector<G4int> ExcitSpinChann28;
RWTValVector<G4int> ExcitSpinChann29;
RWTValVector<G4int> ExcitSpinChann30;
RWTValVector<G4int> ExcitSpinChann31;
G4RWTValVector<G4int> ExcitSpinChann00;
G4RWTValVector<G4int> ExcitSpinChann01;
G4RWTValVector<G4int> ExcitSpinChann02;
G4RWTValVector<G4int> ExcitSpinChann03;
G4RWTValVector<G4int> ExcitSpinChann04;
G4RWTValVector<G4int> ExcitSpinChann05;
G4RWTValVector<G4int> ExcitSpinChann06;
G4RWTValVector<G4int> ExcitSpinChann07;
G4RWTValVector<G4int> ExcitSpinChann08;
G4RWTValVector<G4int> ExcitSpinChann09;
G4RWTValVector<G4int> ExcitSpinChann10;
G4RWTValVector<G4int> ExcitSpinChann11;
G4RWTValVector<G4int> ExcitSpinChann12;
G4RWTValVector<G4int> ExcitSpinChann13;
G4RWTValVector<G4int> ExcitSpinChann14;
G4RWTValVector<G4int> ExcitSpinChann15;
G4RWTValVector<G4int> ExcitSpinChann16;
G4RWTValVector<G4int> ExcitSpinChann17;
G4RWTValVector<G4int> ExcitSpinChann18;
G4RWTValVector<G4int> ExcitSpinChann19;
G4RWTValVector<G4int> ExcitSpinChann20;
G4RWTValVector<G4int> ExcitSpinChann21;
G4RWTValVector<G4int> ExcitSpinChann22;
G4RWTValVector<G4int> ExcitSpinChann23;
G4RWTValVector<G4int> ExcitSpinChann24;
G4RWTValVector<G4int> ExcitSpinChann25;
G4RWTValVector<G4int> ExcitSpinChann26;
G4RWTValVector<G4int> ExcitSpinChann27;
G4RWTValVector<G4int> ExcitSpinChann28;
G4RWTValVector<G4int> ExcitSpinChann29;
G4RWTValVector<G4int> ExcitSpinChann30;
G4RWTValVector<G4int> ExcitSpinChann31;
G4VEvaporationChannel * theChannels[TotNumberOfChannels];
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -22,7 +22,7 @@
#include "Randomize.hh"
#include "G4ParticleTable.hh"
#include "G4IonTable.hh"
#include <rw/tvvector.h>
#include "g4rw/tvvector.h"
class G4EvaporationChannel : public G4VEvaporationChannel
{
@@ -31,8 +31,8 @@ public:
G4EvaporationChannel(const G4int theGamma,
const G4int theA,
const G4int theZ,
RWTValVector<G4double> * theExcitationEnergies,
RWTValVector<G4int> * theExcitationSpins);
G4RWTValVector<G4double> * theExcitationEnergies,
G4RWTValVector<G4int> * theExcitationSpins);
// destructor
~G4EvaporationChannel();
@@ -85,10 +85,10 @@ private:
G4int Z;
//
RWTValVector<G4double> * ExcitationEnergies;
G4RWTValVector<G4double> * ExcitationEnergies;
//
RWTValVector<G4int> * ExcitationSpins;
G4RWTValVector<G4int> * ExcitationSpins;
// For evaporation probability calcualtion
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4ExcitationHandler.hh,v 1.2 1999/04/12 15:45:24 hpw Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4ExcitationHandler.hh,v 1.3.4.1 1999/12/07 20:51:33 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (May 1998)
@@ -23,7 +23,7 @@
#ifndef G4ExcitationHandler_h
#define G4ExcitationHandler_h 1
#include "G4MultiFragmentation.hh"
#include "G4VMultiFragmentation.hh"
#include "G4VFermiBreakUp.hh"
#include "G4VEvaporation.hh"
#include "G4VPhotonEvaporation.hh"
@@ -59,7 +59,7 @@ public:
void SetEvaporation(G4VEvaporation *const value);
void SetMultiFragmentation(G4MultiFragmentation *const value);
void SetMultiFragmentation(G4VMultiFragmentation *const value);
void SetFermiModel(G4VFermiBreakUp *const value);
@@ -76,7 +76,7 @@ private:
const G4VEvaporation * GetEvaporation() const;
const G4MultiFragmentation * GetMultiFragmentation() const;
const G4VMultiFragmentation * GetMultiFragmentation() const;
const G4VFermiBreakUp * GetFermiModel() const;
@@ -91,7 +91,7 @@ private:
G4VEvaporation *theEvaporation;
G4MultiFragmentation *theMultiFragmentation;
G4VMultiFragmentation *theMultiFragmentation;
G4VFermiBreakUp *theFermiModel;
@@ -124,12 +124,12 @@ inline void G4ExcitationHandler::SetEvaporation(G4VEvaporation *const value)
theEvaporation = value;
}
inline const G4MultiFragmentation * G4ExcitationHandler::GetMultiFragmentation() const
inline const G4VMultiFragmentation * G4ExcitationHandler::GetMultiFragmentation() const
{
return theMultiFragmentation;
}
inline void G4ExcitationHandler::SetMultiFragmentation(G4MultiFragmentation *const value)
inline void G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation *const value)
{
if (theMultiFragmentation != 0 && MyOwnMultiFragmentationClass) delete theMultiFragmentation;
MyOwnMultiFragmentationClass = false;
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -24,8 +24,8 @@
#include "G4IonTable.hh"
#include "G4Fragment.hh"
#include <rw/tvvector.h>
#include <rw/tvordvec.h>
#include "g4rw/tvvector.h"
#include "g4rw/tvordvec.h"
static const G4int NumberOfFragments = 100;
@@ -58,8 +58,8 @@ private:
G4double CoulombBarrier(void);
// RWTPtrOrderedVector<G4ParticleMomentum>* FragmentsMomentum(G4double KineticEnergy);
RWTPtrOrderedVector<G4LorentzVector>* FragmentsMomentum(G4double KineticEnergy);
// G4RWTPtrOrderedVector<G4ParticleMomentum>* FragmentsMomentum(G4double KineticEnergy);
G4RWTPtrOrderedVector<G4LorentzVector>* FragmentsMomentum(G4double KineticEnergy);
G4double RNKSI(const G4int K);
@@ -191,7 +191,7 @@ private:
// G4VFermiFragment * theConfiguration[MaxConfigSize];
// G4int Index[MaxConfigSize];
RWTValOrderedVector<G4int> Index;
G4RWTValOrderedVector<G4int> Index;
};
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -15,8 +15,8 @@
#include "G4FermiConfiguration.hh"
#include "Randomize.hh"
#include <rw/tvvector.h>
#include <rw/tvordvec.h>
#include "g4rw/tvvector.h"
#include "g4rw/tvordvec.h"
class G4FermiConfigurationList
@@ -50,9 +50,9 @@ private:
G4double NumOfConfigurations[MaxNumOfFragments]; // NumberOfChannelsPerFragment[MaxNumOfFragments];
RWTValOrderedVector<G4double> NormalizedWeights;
G4RWTValOrderedVector<G4double> NormalizedWeights;
RWTValOrderedVector<G4FermiConfiguration> Configurations;
G4RWTValOrderedVector<G4FermiConfiguration> Configurations;
};
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4FissionBarrier.hh,v 1.1 1999/01/07 16:11:43 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4FissionBarrier.hh,v 1.1.10.1 1999/12/07 20:51:33 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (Oct 1998)
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,40 +0,0 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4MultiFragmentation.hh,v 1.1 1999/01/07 16:11:44 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (May 1998)
#ifndef G4MultiFragmentation_h
#define G4MultiFragmentation_h 1
#include "G4FragmentVector.hh"
class G4MultiFragmentation
{
public:
G4MultiFragmentation();
virtual ~G4MultiFragmentation();
private:
G4MultiFragmentation(const G4MultiFragmentation &right);
const G4MultiFragmentation & operator=(const G4MultiFragmentation &right);
int operator==(const G4MultiFragmentation &right) const;
int operator!=(const G4MultiFragmentation &right) const;
public:
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus) = 0;
};
#endif
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -28,9 +28,9 @@
#define G4PTRLEVELVECTOR_HH
class G4NuclearLevel;
#include <rw/tpsrtvec.h>
#include "g4rw/tpsrtvec.h"
typedef RWTPtrSortedVector<G4NuclearLevel> G4PtrLevelVector;
typedef G4RWTPtrSortedVector<G4NuclearLevel> G4PtrLevelVector;
#endif
@@ -0,0 +1,77 @@
#ifndef G4Solver_h
#define G4Solver_h 1
#include "globals.hh"
#define DefaultTolerance 5.0e-14
template <class Function> class G4Solver
{
public:
enum {DefaultMaxIter = 100};
// default constructor
G4Solver() : MaxIter(DefaultMaxIter), tolerance(DefaultTolerance),
a(0.0), b(0.0), root(0.0) {};
G4Solver(const G4int iterations, const G4double tol) :
MaxIter(iterations), tolerance(tol),
a(0.0), b(0.0), root(0.0) {};
// copy constructor
G4Solver(const G4Solver & right);
// destructor
~G4Solver() {};
// operators
G4Solver & operator=(const G4Solver & right);
G4bool operator==(const G4Solver & right) const;
G4bool operator!=(const G4Solver & right) const;
G4int GetMaxIterations(void) const {return MaxIter;}
void SetMaxIterations(const G4int iterations) {MaxIter=iterations;}
G4double GetTolerance(void) const {return tolerance;}
void SetTolerance(const G4double epsilon) {tolerance = epsilon;}
G4double GetIntervalLowerLimit(void) const {return a;}
G4double GetIntervalUpperLimit(void) const {return b;}
void SetIntervalLimits(const G4double Limit1, const G4double Limit2);
G4double GetRoot(void) const {return root;}
// Calculates the root by the Bisection method
// template <class Function> G4bool Bisection(const Function & theFunction);
G4bool Bisection(Function & theFunction);
// Calculates the root by the Regula-Falsi method
// template <class Function> G4bool RegulaFalsi(const Function & theFunction);
G4bool RegulaFalsi(Function & theFunction);
// Calculates the root by the Brent's method
G4bool Brent(Function & theFunction);
private:
// Maximum number of iterations
G4int MaxIter;
//
G4double tolerance;
// interval limits [a,b] which should bracket the root
G4double a;
G4double b;
// The root
G4double root;
};
#include "G4Solver.templates.cc"
#endif
@@ -0,0 +1,199 @@
template <class Function>
G4bool G4Solver<Function>::Bisection(Function & theFunction)
{
// Check the interval before start
if (a > b || abs(a-b) <= tolerance) {
G4cerr << "G4Solver::Bisection: The interval must be properly set." << endl;
return false;
}
G4double fa = theFunction(a);
G4double fb = theFunction(b);
if (fa*fb > 0.0) {
G4cerr << "G4Solver::Bisection: The interval must include a root." << endl;
return false;
}
G4double eps=tolerance*(b-a);
// Finding the root
for (G4int i = 0; i < MaxIter; i++) {
G4double c = (a+b)/2.0;
if ((b-a) < eps) {
root = c;
return true;
}
G4double fc = theFunction(c);
if (fc == 0.0) {
root = c;
return true;
}
if (fa*fc < 0.0) {
a=c;
fa=fc;
} else {
b=c;
fb=fc;
}
}
G4cerr << "G4Solver::Bisection: Excedded maximum number of iterations whithout convegence." << endl;
return false;
}
template <class Function>
G4bool G4Solver<Function>::RegulaFalsi(Function & theFunction)
{
// Check the interval before start
if (a > b || abs(a-b) <= tolerance) {
G4cerr << "G4Solver::RegulaFalsi: The interval must be properly set." << endl;
return false;
}
G4double fa = theFunction(a);
G4double fb = theFunction(b);
if (fa*fb > 0.0) {
G4cerr << "G4Solver::RegulaFalsi: The interval must include a root." << endl;
return false;
}
G4double eps=tolerance*(b-a);
// Finding the root
for (G4int i = 0; i < MaxIter; i++) {
G4double c = (a*fb-b*fa)/(fb-fa);
G4double delta = min(abs(c-a),abs(b-c));
if (delta < eps) {
root = c;
return true;
}
G4double fc = theFunction(c);
if (fc == 0.0) {
root = c;
return true;
}
if (fa*fc < 0.0) {
b=c;
fb=fc;
} else {
a=c;
fa=fc;
}
}
G4cerr << "G4Solver::Bisection: Excedded maximum number of iterations whithout convegence." << endl;
return false;
}
template <class Function>
G4bool G4Solver<Function>::Brent(Function & theFunction)
{
const G4double precision = 3.0e-8;
// Check the interval before start
if (a > b || abs(a-b) <= tolerance) {
G4cerr << "G4Solver::Brent: The interval must be properly set." << endl;
return false;
}
G4double fa = theFunction(a);
G4double fb = theFunction(b);
if (fa*fb > 0.0) {
G4cerr << "G4Solver::Brent: The interval must include a root." << endl;
return false;
}
G4double c = b;
G4double fc = fb;
G4double d = 0.0;
G4double fd = 0.0;
G4double e = 0.0;
G4double fe = 0.0;
for (G4int i=0; i < MaxIter; i++) {
// Rename a,b,c and adjust bounding interval d
if (fb*fc > 0.0) {
c = a;
fc = fa;
d = b - a;
e = d;
}
if (abs(fc) < abs(fb)) {
a = b;
b = c;
c = a;
fa = fb;
fb = fc;
fc = fa;
}
G4double Tol1 = 2.0*precision*abs(b) + 0.5*tolerance;
G4double xm = 0.5*(c-b);
if (abs(xm) <= Tol1 || fb == 0.0) {
root = b;
return true;
}
// Inverse quadratic interpolation
if (abs(e) >= Tol1 && abs(fa) > abs(fb)) {
G4double s = fb/fa;
G4double p = 0.0;
G4double q = 0.0;
if (a == c) {
p = 2.0*xm*s;
q = 1.0 - s;
} else {
q = fa/fc;
G4double r = fb/fc;
p = s*(2.0*xm*q*(q-r)-(b-a)*(r-1.0));
q = (q-1.0)*(r-1.0)*(s-1.0);
}
// Check bounds
if (p > 0.0) q = -q;
p = abs(p);
G4double min1 = 3.0*xm*q-abs(Tol1*q);
G4double min2 = abs(e*q);
if (2.0*p < min(min1,min2)) {
// Interpolation
e = d;
d = p/q;
} else {
// Bisection
d = xm;
e = d;
}
} else {
// Bounds decreasing too slowly, use bisection
d = xm;
e = d;
}
// Move last guess to a
a = b;
fa = fb;
if (abs(d) > Tol1) b += d;
else {
if (xm >= 0.0) b += abs(Tol1);
else b -= abs(Tol1);
}
fb = theFunction(b);
}
G4cerr << "G4Solver::Brent: Number of iterations exceeded." << endl;
return false;
}
template <class Function>
void G4Solver<Function>::SetIntervalLimits(const G4double Limit1, const G4double Limit2)
{
if (abs(Limit1-Limit2) <= tolerance) {
G4cerr << "G4Solver::SetIntervalLimits: Interval must be wider than tolerance." << endl;
return;
}
if (Limit1 < Limit2) {
a = Limit1;
b = Limit2;
} else {
a = Limit2;
b = Limit1;
}
return;
}
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,100 +1,60 @@
#ifndef G4StatMF_h
#define G4StatMF_h 1
#include <rw/tvordvec.h>
#include "g4rw/tvordvec.h"
#include "globals.hh"
#include "G4MultiFragmentation.hh"
#include "G4VMultiFragmentation.hh"
#include "G4VStatMFEnsemble.hh"
#include "G4StatMFMicroCanonical.hh"
#include "G4StatMFMacroCanonical.hh"
#include "G4StatMFChannel.hh"
#include "G4Fragment.hh"
#include "G4FragmentVector.hh"
#include "G4StatMFFragment.hh"
#include "G4StatMFParameters.hh"
#include "G4VStatMFCanonical.hh"
#include "G4StatMFMicrocanonical.hh"
#include "G4StatMFMacrocanonical.hh"
#include "G4NucleiProperties.hh"
#include "G4ParticleTable.hh"
#include "G4IonTable.hh"
#include "Randomize.hh"
class G4StatMF : public G4MultiFragmentation
class G4StatMF : public G4VMultiFragmentation
{
public:
G4StatMF();
~G4StatMF();
// Default constructor
G4StatMF();
// Destructor
~G4StatMF();
private:
G4StatMF(const G4StatMF & right);
G4StatMF & operator=(const G4StatMF & right);
G4bool operator==(const G4StatMF & right);
G4bool operator!=(const G4StatMF & right);
// Copy constructor
G4StatMF(const G4StatMF & right);
// Operators
G4StatMF & operator=(const G4StatMF & right);
G4bool operator==(const G4StatMF & right);
G4bool operator!=(const G4StatMF & right);
public:
G4FragmentVector *BreakItUp(const G4Fragment &theNucleus);
G4FragmentVector *BreakItUp(const G4Fragment &theNucleus);
private:
// This finds temperature of breaking channel.
G4bool FindTemperatureOfBreakingChannel(const G4Fragment & theFragment,
const G4double & Multiplicity,
G4double & Temperature,
G4double & EnergyCol);
// This finds temperature of breaking channel.
G4bool FindTemperatureOfBreakingChannel(const G4Fragment & theFragment,
const G4StatMFChannel * aChannel,G4double & Temperature);
// Calculate asymptotic fragments momenta
void CoulombImpulse(const G4Fragment & theFragment,
const G4int & NumberOfChargedFragments,
const G4int & Multiplicity,
const G4double & Temperature,
const G4double & CoulombEnergy,
G4ThreeVector * MomentumOfFragments);
// Randomly samples fragments positions inside prolongated ellipsoid
void Place(const G4Fragment & theFragment,
const G4int & Multiplicity,
G4ThreeVector * Position);
// This method will find a solution of Newton's equation of motion
// for fragments in the self-consistent time-dependent Coulomb field
void SolveEqOfMotion(G4ThreeVector * InitialPos,
G4ThreeVector * InitialVel,
G4ThreeVector * FinalVel,
const G4int & Multiplicity,
const G4double & CoulombEnergy,
const G4double & KineticEnergy);
// Calculates fragments momentum components at the breakup instant.
// Fragment kinetic energies will be calculated according to the
// Boltzamann distribution at given temperature.
void CalculateFragmentsMomentum(const G4int & INET,
const G4int & NFrags,
const G4double & T,
const G4double & TotKineticE,
G4ThreeVector * Momentum);
// Rotates a 3-vector P to close momentum triangle P + A + B = 0
G4ThreeVector Rotor(const G4ThreeVector & P,
const G4ThreeVector & A,
const G4ThreeVector & B);
G4double CalculateFragmentExcitationEnergy(const G4int & index, const G4double & T);
// Samples a isotropic random vectorwith a magnitud given by Magnitude.
// By default Magnitude = 1
G4ThreeVector IsotropicVector(const G4double Magnitude = 1.0);
//
G4double CalcEnergy(const G4double A, const G4double Z,
const G4StatMFChannel * aChannel,
const G4double T);
private:
// G4StatMFMicrocanonical * theMicrocanonicalSim;
// G4StatMFMacrocanonical * theMacrocanonicalSim;
G4VStatMFCanonical * theSim;
G4VStatMFEnsemble * _theEnsemble;
@@ -0,0 +1,92 @@
#ifndef G4StatMFChannel_h
#define G4StatMFChannel_h 1
#include "G4StatMFParameters.hh"
#include "G4StatMFFragment.hh"
class G4StatMFChannel {
public:
// Default Constructor
G4StatMFChannel() :
_NumOfNeutralFragments(0),
_NumOfChargedFragments(0)
{}
// Destructor
~G4StatMFChannel() { _theFragments.clearAndDestroy(); }
private:
// Copy constructor
G4StatMFChannel(const G4StatMFChannel & right);
// operators
G4StatMFChannel & operator=(const G4StatMFChannel & right);
public:
G4bool operator==(const G4StatMFChannel & right) const;
G4bool operator!=(const G4StatMFChannel & right) const;
public:
void CreateFragment(const G4double A, const G4double Z);
// {
// _theFragments.insert(new G4StatMFFragment(A,Z));
// }
G4int GetMultiplicity(void) { return _theFragments.entries();}
// Return false if there is some unphysical fragment
G4bool CheckFragments(void);
G4double GetFragmentsCoulombEnergy(void);
G4double GetFragmentsEnergy(const G4double T) const;
G4FragmentVector * GetFragments(const G4double anA, const G4double anZ, const G4double T);
private:
// This method calculates asymptotic fragments momenta.
void CoulombImpulse(const G4double anA, const G4double anZ, const G4double T);
void PlaceFragments(const G4double anA);
void SolveEqOfMotion(const G4double anA, const G4double anZ, const G4double T);
// Calculates fragments momentum components at the breakup instant.
// Fragment kinetic energies will be calculated according to the
// Boltzamann distribution at given temperature.
void FragmentsMomenta(const G4int NF, const G4int idx, const G4double T);
// Samples a isotropic random vectorwith a magnitud given by Magnitude.
// By default Magnitude = 1
G4ThreeVector IsotropicVector(const G4double Magnitude = 1.0);
// Rotates a 3-vector P to close momentum triangle Pa + V + P = 0
G4ThreeVector RotateMomentum(G4ThreeVector Pa, G4ThreeVector V,
G4ThreeVector P);
private:
G4RWTPtrOrderedVector<G4StatMFFragment> _theFragments;
G4int _NumOfNeutralFragments;
G4int _NumOfChargedFragments;
};
#endif
@@ -1,127 +1,77 @@
#ifndef G4StatMFFragment_h
#define G4StatMFFragment_h 1
#include "G4StatMFParameters.hh"
#include "G4ThreeVector.hh"
#include "G4Fragment.hh"
class G4StatMFFragment {
public:
// default constructor
G4StatMFFragment():
InvLevelDensity(0.0),
ZARatio(0.0),
DegeneracyFactor(0.0),
Multiplicity(0.0),
A(0.0),
Z(0.0),
Energy(0.0)
{};
// destructor
~G4StatMFFragment() {};
private:
// copy constructor
G4StatMFFragment(const G4StatMFFragment & right);
// operators
const G4StatMFFragment & operator=(const G4StatMFFragment & right);
public:
G4bool operator==(const G4StatMFFragment & right) const;
G4bool operator!=(const G4StatMFFragment & right) const;
// Constructor
G4StatMFFragment(const G4int anA, const G4int aZ) :
theA(anA),theZ(aZ),
_position(0.0,0.0,0.0),
_momentum(0.0,0.0,0.0)
{}
// Destructor
virtual ~G4StatMFFragment() {};
private:
// Inverse Level Density
G4double InvLevelDensity;
// Z/A ratio
G4double ZARatio;
// Degeneracy Factor
G4double DegeneracyFactor;
// Fragments Multiplicitie
G4double Multiplicity;
// Atomic number
G4double A;
// Charge
G4double Z;
// Energy
G4double Energy;
// Default constructor
G4StatMFFragment(){};
// Copy constructor
G4StatMFFragment(const G4StatMFFragment & right);
// operators
G4StatMFFragment & operator=(const G4StatMFFragment & right);
public:
G4bool operator==(const G4StatMFFragment & right) const;
G4bool operator!=(const G4StatMFFragment & right) const;
public:
void SetInvLevelDensity(const G4double value) {
InvLevelDensity = value;
}
void SetInvLevelDensity(const G4int value) {
//
if (value == 0) InvLevelDensity = 0.0;
else InvLevelDensity = G4StatMFParameters::GetEpsilon0()/
(1.0+0.002*((value+1.0)/25.0)*((value+1.0)/25.0));
}
const G4double GetInvLevelDensity() const {
return InvLevelDensity;
}
G4double GetCoulombEnergy(void);
G4double GetEnergy(const G4double T);
G4double GetInvLevelDensity(void);
G4double GetA(void) const {return theA;}
G4double GetZ(void) const {return theZ;}
void SetPosition(const G4ThreeVector aPosition) {_position = aPosition;}
G4ThreeVector GetPosition(void) {return _position;}
void SetMomentum(const G4ThreeVector aMomentum) {_momentum = aMomentum;}
void SetZARatio(const G4double value) {
ZARatio = value;
}
const G4double GetZARatio() const {
return ZARatio;
}
G4ThreeVector GetMomentum(void) {return _momentum;}
G4Fragment * GetFragment(const G4double T);
G4double GetNuclearMass(void)
{return G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(theZ,theA);}
void SetDegeneracyFactor(const G4double value) {
DegeneracyFactor = value;
}
const G4double GetDegeneracyFactor() const {
return DegeneracyFactor;
}
void SetMultiplicity(const G4double value) {
Multiplicity = value;
}
const G4double GetMultiplicity() const {
return Multiplicity;
}
void SetA(const G4double value) {
A = value;
}
const G4double GetA() const {
return A;
}
void SetZ(const G4double value) {
Z = value;
}
const G4double GetZ() const {
return Z;
}
void SetEnergy(const G4double value) {
Energy = value;
}
const G4double GetEnergy() const {
return Energy;
}
private:
G4double CalcExcitationEnergy(const G4double T);
private:
G4double theA;
G4double theZ;
G4ThreeVector _position;
G4ThreeVector _momentum;
};
#endif
@@ -0,0 +1,42 @@
#ifndef G4StatMFMacroBiBiNucleon_h
#define G4StatMFMacroBiNucleon_h 1
#include "G4VStatMFMacroCluster.hh"
#include "G4NucleiPropertiesTable.hh"
class G4StatMFMacroBiNucleon : public G4VStatMFMacroCluster {
public:
// Default constructor
G4StatMFMacroBiNucleon() : G4VStatMFMacroCluster(2) {};
// Destructor
~G4StatMFMacroBiNucleon() {};
private:
// Copy constructor
G4StatMFMacroBiNucleon(const G4StatMFMacroBiNucleon & right);
// operators
G4StatMFMacroBiNucleon & operator=(const G4StatMFMacroBiNucleon & right);
G4bool operator==(const G4StatMFMacroBiNucleon & right) const;
G4bool operator!=(const G4StatMFMacroBiNucleon & right) const;
public:
G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T);
G4double CalcZARatio(const G4double nu) {return theZARatio = 0.5;}
G4double CalcEnergy(const G4double T);
G4double CalcEntropy(const G4double T, const G4double FreeVol);
};
#endif
@@ -0,0 +1,85 @@
#ifndef G4StatMFMacroChemicalPotential_h
#define G4StatMFMacroChemicalPotential_h 1
#include "g4rw/tpordvec.h"
#include "G4StatMFParameters.hh"
#include "G4VStatMFMacroCluster.hh"
#include "G4StatMFMacroMultiplicity.hh"
#include "G4Solver.hh"
class G4StatMFMacroChemicalPotential {
public:
G4StatMFMacroChemicalPotential(const G4double anA, const G4double aZ,
const G4double kappa,
const G4double temp,
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * ClusterVector) :
theA(anA),
theZ(aZ),
_Kappa(kappa),
_MeanMultiplicity(0.0),
_MeanTemperature(temp),
_ChemPotentialMu(0.0),
_ChemPotentialNu(0.0),
_theClusters(ClusterVector)
{};
~G4StatMFMacroChemicalPotential() {};
G4double operator()(const G4double nu)
{ return (theZ - this->CalcMeanZ(nu))/theZ; }
private:
// Default constructor
G4StatMFMacroChemicalPotential() {};
// copy constructor
G4StatMFMacroChemicalPotential(const G4StatMFMacroChemicalPotential &right) {};
// operators
G4StatMFMacroChemicalPotential & operator=(const G4StatMFMacroChemicalPotential & right);
G4bool operator==(const G4StatMFMacroChemicalPotential & right) const;
G4bool operator!=(const G4StatMFMacroChemicalPotential & right) const;
public:
G4double GetMeanMultiplicity(void) const {return _MeanMultiplicity;}
G4double GetChemicalPotentialMu(void) const {return _ChemPotentialMu;}
G4double GetChemicalPotentialNu(void) const {return _ChemPotentialNu;}
G4double CalcChemicalPotentialNu(void);
private:
G4double CalcMeanZ(const G4double nu);
void CalcChemicalPotentialMu(const G4double nu);
private:
G4double theA;
G4double theZ;
G4double _Kappa;
G4double _MeanMultiplicity;
G4double _MeanTemperature;
G4double _ChemPotentialMu;
G4double _ChemPotentialNu;
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * _theClusters;
};
#endif
@@ -0,0 +1,44 @@
#ifndef G4StatMFMacroMultiNucleon_h
#define G4StatMFMacroMultiNucleon_h 1
#include "G4VStatMFMacroCluster.hh"
class G4StatMFMacroMultiNucleon : public G4VStatMFMacroCluster {
public:
// Constructor
G4StatMFMacroMultiNucleon(const G4int Size) : G4VStatMFMacroCluster(Size) {};
// Destructor
~G4StatMFMacroMultiNucleon() {};
private:
// Default constructor
G4StatMFMacroMultiNucleon();
// Copy constructor
G4StatMFMacroMultiNucleon(const G4StatMFMacroMultiNucleon & right);
// operators
G4StatMFMacroMultiNucleon & operator=(const G4StatMFMacroMultiNucleon & right);
G4bool operator==(const G4StatMFMacroMultiNucleon & right) const;
G4bool operator!=(const G4StatMFMacroMultiNucleon & right) const;
public:
G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T);
G4double CalcZARatio(const G4double nu);
G4double CalcEnergy(const G4double T);
G4double CalcEntropy(const G4double T, const G4double FreeVol);
};
#endif
@@ -0,0 +1,78 @@
#ifndef G4StatMFMacroMultiplicity_h
#define G4StatMFMacroMultiplicity_h 1
#include "g4rw/tpordvec.h"
#include "G4StatMFParameters.hh"
#include "G4VStatMFMacroCluster.hh"
#include "G4Solver.hh"
class G4StatMFMacroMultiplicity {
public:
G4StatMFMacroMultiplicity(const G4double anA,
const G4double kappa,
const G4double temp,
const G4double nu,
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * ClusterVector) :
theA(anA),
_Kappa(kappa),
_MeanMultiplicity(0.0),
_MeanTemperature(temp),
_ChemPotentialMu(0.0),
_ChemPotentialNu(nu),
_theClusters(ClusterVector)
{};
~G4StatMFMacroMultiplicity() {};
G4double operator()(const G4double mu)
{ return (theA - this->CalcMeanA(mu))/theA; }
private:
// Default constructor
G4StatMFMacroMultiplicity() {};
// copy constructor
G4StatMFMacroMultiplicity(const G4StatMFMacroMultiplicity &right) {};
// operators
G4StatMFMacroMultiplicity & operator=(const G4StatMFMacroMultiplicity & right);
G4bool operator==(const G4StatMFMacroMultiplicity & right) const;
G4bool operator!=(const G4StatMFMacroMultiplicity & right) const;
public:
G4double GetMeanMultiplicity(void) const {return _MeanMultiplicity;}
G4double GetChemicalPotentialMu(void) const {return _ChemPotentialMu;}
G4double CalcChemicalPotentialMu(void);
private:
G4double CalcMeanA(const G4double mu);
private:
G4double theA;
G4double _Kappa;
G4double _MeanMultiplicity;
G4double _MeanTemperature;
G4double _ChemPotentialMu;
G4double _ChemPotentialNu;
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * _theClusters;
};
#endif
@@ -0,0 +1,54 @@
#ifndef G4StatMFMacroNucleon_h
#define G4StatMFMacroNucleon_h 1
#include "G4VStatMFMacroCluster.hh"
class G4StatMFMacroNucleon : public G4VStatMFMacroCluster {
public:
// Default constructor
G4StatMFMacroNucleon() :
_NeutronMeanMultiplicity(0.0),_ProtonMeanMultiplicity(0.0),
G4VStatMFMacroCluster(1) {};
// Destructor
~G4StatMFMacroNucleon() {};
private:
// Copy constructor
G4StatMFMacroNucleon(const G4StatMFMacroNucleon & right);
// operators
G4StatMFMacroNucleon & operator=(const G4StatMFMacroNucleon & right);
G4bool operator==(const G4StatMFMacroNucleon & right) const;
G4bool operator!=(const G4StatMFMacroNucleon & right) const;
public:
G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T);
G4double CalcZARatio(const G4double nu)
{ if (_ProtonMeanMultiplicity+_NeutronMeanMultiplicity > 0.0)
return theZARatio = _ProtonMeanMultiplicity/
(_ProtonMeanMultiplicity+_NeutronMeanMultiplicity);
else return 0.0; }
G4double CalcEnergy(const G4double T);
G4double CalcEntropy(const G4double T, const G4double FreeVol);
private:
G4double _NeutronMeanMultiplicity;
G4double _ProtonMeanMultiplicity;
};
#endif
@@ -0,0 +1,97 @@
#ifndef G4StatMFMacroTemperature_h
#define G4StatMFMacroTemperature_h 1
#include "g4rw/tpordvec.h"
#include "G4StatMFParameters.hh"
#include "G4VStatMFMacroCluster.hh"
#include "G4StatMFMacroChemicalPotential.hh"
#include "G4Solver.hh"
class G4StatMFMacroTemperature {
public:
G4StatMFMacroTemperature(const G4double anA, const G4double aZ,
const G4double ExEnergy, const G4double FreeE0,
const G4double kappa,
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * ClusterVector) :
theA(anA),
theZ(aZ),
_ExEnergy(ExEnergy),
_Kappa(kappa),
_FreeInternalE0(FreeE0),
_MeanMultiplicity(0.0),
_MeanTemperature(0.0),
_ChemPotentialMu(0.0),
_ChemPotentialNu(0.0),
_theClusters(ClusterVector)
{};
~G4StatMFMacroTemperature() {};
G4double operator()(const G4double T)
{ return (_ExEnergy - this->FragsExcitEnergy(T))/_ExEnergy; }
private:
// Default constructor
G4StatMFMacroTemperature() {};
// copy constructor
G4StatMFMacroTemperature(const G4StatMFMacroTemperature &right) {};
// operators
G4StatMFMacroTemperature & operator=(const G4StatMFMacroTemperature & right);
G4bool operator==(const G4StatMFMacroTemperature & right) const;
G4bool operator!=(const G4StatMFMacroTemperature & right) const;
public:
G4double GetMeanMultiplicity(void) const {return _MeanMultiplicity;}
G4double GetChemicalPotentialMu(void) const {return _ChemPotentialMu;}
G4double GetChemicalPotentialNu(void) const {return _ChemPotentialNu;}
G4double GetTemperature(void) const {return _MeanTemperature;}
G4double GetEntropy(void) const {return _MeanEntropy;}
G4double CalcTemperature(void);
private:
G4double FragsExcitEnergy(const G4double T);
void CalcChemicalPotentialNu(const G4double T);
private:
G4double theA;
G4double theZ;
G4double _ExEnergy;
G4double _FreeInternalE0;
G4double _Kappa;
G4double _MeanMultiplicity;
G4double _MeanTemperature;
G4double _ChemPotentialMu;
G4double _ChemPotentialNu;
G4double _MeanEntropy;
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> * _theClusters;
};
#endif
@@ -0,0 +1,41 @@
#ifndef G4StatMFMacroTetraNucleon_h
#define G4StatMFMacroTetraNucleon_h 1
#include "G4VStatMFMacroCluster.hh"
#include "G4NucleiPropertiesTable.hh"
class G4StatMFMacroTetraNucleon : public G4VStatMFMacroCluster {
public:
// Default constructor
G4StatMFMacroTetraNucleon() : G4VStatMFMacroCluster(4) {};
// Destructor
~G4StatMFMacroTetraNucleon() {};
private:
// Copy constructor
G4StatMFMacroTetraNucleon(const G4StatMFMacroTetraNucleon & right);
// operators
G4StatMFMacroTetraNucleon & operator=(const G4StatMFMacroTetraNucleon & right);
G4bool operator==(const G4StatMFMacroTetraNucleon & right) const;
G4bool operator!=(const G4StatMFMacroTetraNucleon & right) const;
public:
G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T);
G4double CalcZARatio(const G4double nu) {return theZARatio = 0.5;}
G4double CalcEnergy(const G4double T);
G4double CalcEntropy(const G4double T, const G4double FreeVol);
};
#endif
@@ -0,0 +1,42 @@
#ifndef G4StatMFMacroTriNucleon_h
#define G4StatMFMacroTriNucleon_h 1
#include "G4VStatMFMacroCluster.hh"
#include "G4NucleiPropertiesTable.hh"
class G4StatMFMacroTriNucleon : public G4VStatMFMacroCluster {
public:
// Default constructor
G4StatMFMacroTriNucleon() : G4VStatMFMacroCluster(3) {};
// Destructor
~G4StatMFMacroTriNucleon() {};
private:
// Copy constructor
G4StatMFMacroTriNucleon(const G4StatMFMacroTriNucleon & right);
// operators
G4StatMFMacroTriNucleon & operator=(const G4StatMFMacroTriNucleon & right);
G4bool operator==(const G4StatMFMacroTriNucleon & right) const;
G4bool operator!=(const G4StatMFMacroTriNucleon & right) const;
public:
G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T);
G4double CalcZARatio(const G4double nu) {return theZARatio = 0.5;}
G4double CalcEnergy(const G4double T);
G4double CalcEntropy(const G4double T, const G4double FreeVol);
};
#endif
@@ -1,93 +1,83 @@
#ifndef G4StatMFMacrocanonical_h
#define G4StatMFMacrocanonical_h 1
#ifndef G4StatMFMacroCanonical_h
#define G4StatMFMacroCanonical_h 1
#include <rw/tvordvec.h>
#include "g4rw/tpordvec.h"
#include "G4Fragment.hh"
#include "G4StatMFFragment.hh"
#include "G4VStatMFEnsemble.hh"
#include "G4VStatMFMacroCluster.hh"
#include "G4StatMFMacroNucleon.hh"
#include "G4StatMFMacroBiNucleon.hh"
#include "G4StatMFMacroTriNucleon.hh"
#include "G4StatMFMacroTetraNucleon.hh"
#include "G4StatMFMacroMultiNucleon.hh"
#include "G4StatMFParameters.hh"
#include "G4VStatMFCanonical.hh"
#include "G4StatMFChannel.hh"
#include "G4StatMFMacroTemperature.hh"
#include "Randomize.hh"
class G4StatMFMacrocanonical : public G4VStatMFCanonical {
class G4StatMFMacroCanonical : public G4VStatMFEnsemble {
public:
// G4StatMFMacrocanonical class must be initialized with a G4Fragment.
G4StatMFMacrocanonical(const G4Fragment & theFragment);
// G4StatMFMacroCanonical class must be initialized with a G4Fragment.
G4StatMFMacroCanonical(const G4Fragment & theFragment);
// destructor
~G4StatMFMacrocanonical();
// destructor
~G4StatMFMacroCanonical();
private:
// default constructor
G4StatMFMacrocanonical() {};
// default constructor
G4StatMFMacroCanonical() {};
// copy constructor
G4StatMFMacrocanonical(const G4StatMFMacrocanonical &right) {};
// copy constructor
G4StatMFMacroCanonical(const G4StatMFMacroCanonical &right) {};
// operators
G4StatMFMacrocanonical & operator=(const G4StatMFMacrocanonical & right);
G4bool operator==(const G4StatMFMacrocanonical & right) const;
G4bool operator!=(const G4StatMFMacrocanonical & right) const;
// operators
G4StatMFMacroCanonical & operator=(const G4StatMFMacroCanonical & right);
G4bool operator==(const G4StatMFMacroCanonical & right) const;
G4bool operator!=(const G4StatMFMacroCanonical & right) const;
public:
// Choice of fragment atomic numbers and charges.
void ChooseAandZ(const G4Fragment &theFragment);
// Choice of fragment atomic numbers and charges.
G4StatMFChannel * ChooseAandZ(const G4Fragment &theFragment);
private:
// Initailization method
void Initialize(const G4Fragment & theFragment);
// Initailization method
void Initialize(const G4Fragment & theFragment);
//
void CalculateTemperature(const G4Fragment & theFragment);
// Calculates excitation energy per nucleon and summed fragment multiplicity and entropy
void FragmentsExcitationEnergyAndEntropy(const G4Fragment & theFragment,
const G4double Kappa,
G4double & ExcitEnergyPerNucleon,
G4double & TotalMultiplicity);
// This calculates fragment charges over fragment atomic numbers
void CalculateZARatio(const G4Fragment & theFragment, const G4double & Kappa);
//
void CalculateMultiplicities(const G4Fragment & theFragment, const G4double & Kappa);
// Calculates fragment multiplicities
void MeanFragmentMultiplicities(const G4Fragment & theFragment, const G4double & Kappa);
// Calculate Fragment energies at actual temperature
void FragmentEnergies(const G4Fragment & theFragment,const G4double & Kappa);
// Calculates summed fragments entropy
G4double TotalFragmentsEntropy(const G4double & A, const G4double & Kappa);
// Determines fragments multiplicities and compute total fragment multiplicity
G4double ChooseA(const G4double A, RWTValVector<G4double> & ANumbers);
//
void ChooseZ(const G4int & Z, const G4double Multiplicity);
//
void CalculateTemperature(const G4Fragment & theFragment);
// Determines fragments multiplicities and compute total fragment multiplicity
G4double ChooseA(const G4double A, G4RWTValVector<G4double> & ANumbers);
// Samples charges of fragments
G4StatMFChannel * ChooseZ(const G4int & Z,
G4RWTValOrderedVector<G4double> & FragmentsA);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Chemical Potential \mu
G4double ChemPotentialMu;
// Chemical Potential \mu
G4double _ChemPotentialMu;
// Chemical Potential \nu
G4double ChemPotentialNu;
// Chemical Potential \nu
G4double _ChemPotentialNu;
//
G4double YN, YP, Y2, Y3, Y4;
// Parameter Kappa
G4double _Kappa;
// Clusters
G4RWTPtrOrderedVector<G4VStatMFMacroCluster> _theClusters;
};
@@ -0,0 +1,90 @@
#ifndef G4StatMFMicroManager_h
#define G4StatMFMicroManager_h 1
#include "g4rw/tvordvec.h"
#include "G4StatMFMicroPartition.hh"
#include "G4StatMFParameters.hh"
#include "G4StatMFChannel.hh"
#include "G4Fragment.hh"
#include "Randomize.hh"
class G4StatMFMicroManager {
public:
// G4StatMFMicroManager class must be initialized with a G4Fragment, multiplicity,
// free internal energy and the entropy of the compund nucleus.
G4StatMFMicroManager(const G4Fragment & theFragment, const G4int multiplicity,
const G4double FreeIntE, const G4double SCompNuc);
// destructor
~G4StatMFMicroManager();
private:
// default constructor
G4StatMFMicroManager() {};
// copy constructor
G4StatMFMicroManager(const G4StatMFMicroManager &right);
// operators
G4StatMFMicroManager & operator=(const G4StatMFMicroManager & right);
public:
G4bool operator==(const G4StatMFMicroManager & right) const;
G4bool operator!=(const G4StatMFMicroManager & right) const;
public:
// Choice of fragment atomic numbers and charges.
G4StatMFChannel * ChooseChannel(const G4double A0, const G4double Z0, const G4double MeanT);
G4double GetProbability(void) const {return _WW;}
void Normalize(const G4double Norm);
G4double GetMeanMultiplicity(void) const {return _MeanMultiplicity; }
G4double GetMeanTemperature(void) const {return _MeanTemperature; }
G4double GetMeanEntropy(void) const {return _MeanEntropy; }
private:
// Initailization method
void Initialize(const G4Fragment & theFragment, const G4int m,
const G4double FreeIntE, const G4double SCompNuc);
G4bool MakePartition(const G4int k, G4int * ANumbers);
// Data members
private:
// Partitions vector
G4RWTPtrOrderedVector<G4StatMFMicroPartition> _Partition;
// Statistical weight
G4double _WW;
G4double _Normalization;
G4double _MeanMultiplicity;
G4double _MeanTemperature;
G4double _MeanEntropy;
};
#endif
@@ -0,0 +1,112 @@
#ifndef G4StatMFMicroPartition_h
#define G4StatMFMicroPartition_h 1
#include "globals.hh"
#include "g4rw/tvordvec.h"
#include "G4StatMFParameters.hh"
#include "G4StatMFChannel.hh"
class G4StatMFMicroPartition {
public:
// Constructor
G4StatMFMicroPartition(const G4int A, const G4double Z) :
theA(A), theZ(Z), _Probability(0.0), _Temperature(0.0),
_Entropy(0.0) {};
// Destructor
~G4StatMFMicroPartition() {};
private:
// Default constructor
G4StatMFMicroPartition() {};
// Copy constructor
G4StatMFMicroPartition(const G4StatMFMicroPartition & right);
// operators
G4StatMFMicroPartition & operator=(const G4StatMFMicroPartition & right);
public:
G4bool operator==(const G4StatMFMicroPartition & right) const;
G4bool operator!=(const G4StatMFMicroPartition & right) const;
public:
// Gives fragments charges
G4StatMFChannel * ChooseZ(const G4double A0, const G4double Z0, const G4double MeanT);
G4double GetProbability(void)
{ return _Probability; }
void SetPartitionFragment(const G4int anA)
{
_thePartition.insert(anA);
CoulombFreeEnergy(anA);
}
void Normalize(const G4double Normalization)
{ _Probability /= Normalization; }
G4double CalcPartitionProbability(const G4double U,
const G4double FreeInternalE0,
const G4double SCompound);
G4double GetTemperature(void)
{
return _Temperature;
}
G4double GetEntropy(void)
{
return _Entropy;
}
private:
void CoulombFreeEnergy(const G4double anA);
G4double CalcPartitionTemperature(const G4double U,
const G4double FreeInternalE0);
G4double GetPartitionEnergy(const G4double T);
G4double GetCoulombEnergy(void);
G4double GetDegeneracyFactor(const G4int A);
G4double InvLevelDensity(const G4double Af)
{
// Calculate Inverse Density Level
// Epsilon0*(1 + 3 /(Af - 1))
if (Af < 1.5) return 0.0;
else return G4StatMFParameters::GetEpsilon0()*(1.0+3.0/(Af - 1.0));
}
private:
// A and Z of initial nucleus
G4double theA;
G4double theZ;
// Partition probability
G4double _Probability;
// Partition temperature
G4double _Temperature;
// Partition entropy
G4double _Entropy;
// The partition itself
G4RWTValOrderedVector<G4int> _thePartition;
G4RWTValOrderedVector<G4double> _theCoulombFreeEnergy;
};
#endif
@@ -1,108 +1,78 @@
#ifndef G4StatMFMicrocanonical_h
#define G4StatMFMicrocanonical_h 1
#ifndef G4StatMFMicroCanonical_h
#define G4StatMFMicroCanonical_h 1
//#include <rw/tvvector.h>
#include <rw/tvordvec.h>
#include "g4rw/tvordvec.h"
#include "G4VStatMFEnsemble.hh"
#include "G4StatMFMicroPartition.hh"
#include "G4StatMFMicroManager.hh"
#include "G4StatMFParameters.hh"
#include "G4StatMFChannel.hh"
#include "G4Fragment.hh"
#include "G4StatMFFragment.hh"
#include "G4StatMFParameters.hh"
#include "G4VStatMFCanonical.hh"
#include "Randomize.hh"
//class G4StatMF1DVector : public RWTValVector<G4int> {
//public:
// G4StatMF1DVector() {};
// G4StatMF1DVector(G4int n):RWTValVector<G4int>(n) {};
//};
class G4StatMFMicrocanonical : public G4VStatMFCanonical {
class G4StatMFMicroCanonical : public G4VStatMFEnsemble {
public:
// G4StatMFMicrocanonical class must be initialized with a G4Fragment.
G4StatMFMicrocanonical(const G4Fragment & theFragment);
// G4StatMFMicroCanonical class must be initialized with a G4Fragment.
G4StatMFMicroCanonical(const G4Fragment & theFragment);
// destructor
~G4StatMFMicrocanonical();
// destructor
~G4StatMFMicroCanonical();
private:
// default constructor
G4StatMFMicrocanonical() {};
// default constructor
G4StatMFMicroCanonical() {};
// copy constructor
G4StatMFMicrocanonical(const G4StatMFMicrocanonical &right) {};
// copy constructor
G4StatMFMicroCanonical(const G4StatMFMicroCanonical &right);
// operators
G4StatMFMicrocanonical & operator=(const G4StatMFMicrocanonical & right);
G4bool operator==(const G4StatMFMicrocanonical & right) const;
G4bool operator!=(const G4StatMFMicrocanonical & right) const;
// operators
G4StatMFMicroCanonical & operator=(const G4StatMFMicroCanonical & right);
G4bool operator==(const G4StatMFMicroCanonical & right) const;
G4bool operator!=(const G4StatMFMicroCanonical & right) const;
public:
// Choice of fragment atomic numbers and charges.
void ChooseAandZ(const G4Fragment &theFragment);
// Choice of fragment atomic numbers and charges.
G4StatMFChannel * ChooseAandZ(const G4Fragment & theFragment);
enum {MaxAllowedMultiplicity = 4};
private:
// Initailization method
void Initialize(const G4Fragment & theFragment);
// Initailization method
void Initialize(const G4Fragment & theFragment);
// Calculate Entropy of Compound Nucleus
G4double CalcEntropyOfCompoundNucleus(const G4Fragment & theFragment, G4double & TConf);
G4bool DistributeNucleonsBetweenFragments(const G4int & k, G4int * ANumbers);
G4double CalcFragmentsConfigProbability(const G4Fragment & theFragment, const G4int & M,
const G4int * ANumbers, const G4double & SCompound);
// Calculate Entropy of Compound Nucleus
G4double CalcEntropyOfCompoundNucleus(const G4Fragment & theFragment, G4double & TConf);
G4double CalcFreeInternalEnergy(const G4Fragment & theFragment, const G4double & T);
G4double CalcFreeInternalEnergy(const G4Fragment & theFragment, const G4double T);
// Gives fragments charges
void ChooseZ(const G4Fragment & theFragment, const G4int & FragmentMultiplicity);
G4double CalcInvLevelDensity(const G4int anA);
// Data members
private:
// This is a vector of partitions managers for partitions of different
// multiplicities:
G4RWTPtrOrderedVector<G4StatMFMicroManager> _ThePartitionManagerVector;
// -----------
G4double CalcEnergyConfiguration(const G4double A, const G4double Z, const G4int M,
G4double * ECOLA, G4double * EA, const G4int * Anumbers,
const G4double T);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Statistical weights
G4double W, WW2, WW3, WW4;
RWTValOrderedVector<G4double> W2, W3, W4;
// Number of configurations for breakups with multiplicities 2, 3 and 4
G4int M2, M3, M4;
// Atomic numbers of fragments for each configuration with multiplicities 2, 3 and 4
// RWTValOrderedVector<G4StatMF1DVector> ANum2;
// RWTValOrderedVector< RWTValVector<G4int> > ANum2;
RWTValOrderedVector< G4int* > ANum2;
// RWTValOrderedVector<G4StatMF1DVector> ANum3;
// RWTValOrderedVector< RWTValVector<G4int> > ANum3;
RWTValOrderedVector< G4int* > ANum3;
// RWTValOrderedVector<G4StatMF1DVector> ANum4;
// RWTValOrderedVector< RWTValVector<G4int> > ANum4;
RWTValOrderedVector< G4int* > ANum4;
// Statistical weight of compound nucleus
G4double WCompoundNucleus;
// Statistical weight of compound nucleus
G4double _WCompoundNucleus;
};
@@ -12,32 +12,32 @@ private:
// | Constant Parameters: |
// +----------------------+
// Kappa is used for calculate volume V_f for translational motion of fragments
static const G4double Kappa;
static const G4double _Kappa;
// KappaCoulomb is used for calculate Coulomb term energy
static const G4double KappaCoulomb;
static const G4double _KappaCoulomb;
// Inverse level density
static const G4double Epsilon0;
static const G4double _Epsilon0;
// Bethe-Weizsacker coefficients
static const G4double E0;
static const G4double Beta0;
static const G4double Gamma0;
static const G4double _E0;
static const G4double _Beta0;
static const G4double _Gamma0;
// Critical temperature (for liquid-gas phase transitions)
static const G4double CriticalTemp;
static const G4double _CriticalTemp;
// Nuclear radius
static const G4double r0;
static const G4double _r0;
// default constructor
G4StatMFParameters()
// :
// Kappa(1.0),
// KappaCoulomb(2.0),
// Epsilon0(16.0), // MeV
// E0(16.0), // MeV
// Beta0(18.0), // MeV
// Gamma0(25.0), // MeV
// CriticalTemp(18.0), // MeV
// r0(1.17) // fm
// _Kappa(1.0),
// _KappaCoulomb(2.0),
// _Epsilon0(16.0), // MeV
// _E0(16.0), // MeV
// _Beta0(18.0), // MeV
// _Gamma0(25.0), // MeV
// _CriticalTemp(18.0), // MeV
// _r0(1.17) // fm
{}
@@ -47,21 +47,25 @@ public:
static G4StatMFParameters * GetAddress();
static G4double GetKappa() { return Kappa; }
static G4double GetKappa() { return _Kappa; }
static G4double GetKappaCoulomb() { return KappaCoulomb; }
static G4double GetKappaCoulomb() { return _KappaCoulomb; }
static G4double GetEpsilon0() { return Epsilon0; }
static G4double GetEpsilon0() { return _Epsilon0; }
static G4double GetE0() { return E0; }
static G4double GetE0() { return _E0; }
static G4double GetBeta0() { return Beta0; }
static G4double GetBeta0() { return _Beta0; }
static G4double GetGamma0() { return Gamma0; }
static G4double GetGamma0() { return _Gamma0; }
static G4double GetCriticalTemp() { return CriticalTemp; }
static G4double GetCriticalTemp() { return _CriticalTemp; }
static G4double Getr0() { return r0; }
static G4double Getr0() { return _r0; }
static G4double Beta(const G4double T);
static G4double DBetaDT(const G4double T);
};
#endif
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -34,7 +34,7 @@ private:
public:
RWTPtrOrderedVector<G4LorentzVector> *
G4RWTPtrOrderedVector<G4LorentzVector> *
FragmentsMomentum(G4double KinE, const G4int K, const G4double * Masses);
private:
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,12 +1,12 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4VFissionBarrier.hh,v 1.1 1999/01/07 16:11:48 gunter Exp $
// GEANT4 tag $Name: geant4-00-01 $
// $Id: G4VFissionBarrier.hh,v 1.1.10.1 1999/12/07 20:51:35 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara (Oct 1998)
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -0,0 +1,37 @@
// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// Hadronic Process: Nuclear De-excitations
// by V. Lara
#ifndef G4VMultiFragmentation_h
#define G4VMultiFragmentation_h 1
#include "globals.hh"
#include "G4Fragment.hh"
class G4VMultiFragmentation
{
public:
G4VMultiFragmentation();
virtual ~G4VMultiFragmentation();
private:
G4VMultiFragmentation(const G4VMultiFragmentation &right);
const G4VMultiFragmentation & operator=(const G4VMultiFragmentation &right);
G4bool operator==(const G4VMultiFragmentation &right) const;
G4bool operator!=(const G4VMultiFragmentation &right) const;
public:
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus) = 0;
};
#endif
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,137 +0,0 @@
#ifndef G4VStatMFCanonical_h
#define G4VStatMFCanonical_h 1
#include <rw/tvordvec.h>
#include "G4Fragment.hh"
#include "G4StatMFFragment.hh"
#include "G4StatMFParameters.hh"
#include "Randomize.hh"
class G4VStatMFCanonical
{
public:
G4VStatMFCanonical() {};
virtual ~G4VStatMFCanonical() {};
private:
// copy constructor
G4VStatMFCanonical(const G4VStatMFCanonical & right) {};
// operators
G4VStatMFCanonical & operator=(const G4VStatMFCanonical & right);
G4bool operator==(const G4VStatMFCanonical & right);
G4bool operator!=(const G4VStatMFCanonical & right);
public:
// Choice of fragment atomic numbers and charges
virtual void ChooseAandZ(const G4Fragment & theFragment) = 0;
G4double GetMeanMultiplicity(void) const {return MeanMultiplicity;}
G4double GetMeanTemperature(void) const { return MeanTemperature; }
G4double GetMeanEntropy(void) const { return MeanEntropy; }
G4int GetMultiplicity(void) const { return Multiplicity; }
G4int GetFragmentA(const G4int & i) const
{
if (i < FragmentsA.entries() && i >= 0) return FragmentsA(i);
else {
cout << "G4VStatMFCanonical::GetFragmentA: trying to get access to fragment "
<< i << " from a total of "
<< FragmentsZ.entries() << " fragments" << endl;
return -1;
}
}
G4int GetFragmentZ(const G4int & i) const
{
if (i < FragmentsZ.entries() && i >= 0) return FragmentsZ(i);
else {
cout << "G4VStatMFCanonical::GetFragmentZ: trying to get access to fragment "
<< i << " from a total of "
<< FragmentsZ.entries() << " fragments" << endl;
return -1;
}
}
G4double GetFragmentInvLevelDensity(const G4int & i) const
{
if (i < theChannels.length() && i >= 0) return theChannels(i)->GetInvLevelDensity();
else {
cout << "G4VStatMFCanonical::GetFragmentInvLevelDensity: trying to get access to channel "
<< i << " from a total of "
<< theChannels.length() << " channels." << endl;
return 0;
}
}
void SortFragments(void);
G4int GetNumOfNeutrons(void) const { return NumOfNeutrons; }
G4int GetNumOfCharged(void) const { return NumOfCharged; }
G4int GetOrderedA(const G4int & i) const
{
if (i < OrderedA.entries()) return OrderedA(i);
else return 0;
}
G4int GetOrderedZ(const G4int & i) const
{
if (i < OrderedZ.entries()) return OrderedZ(i);
else return 0;
}
G4double Beta(const G4double & T) const ;
G4double DBetaDT(const G4double & T) const ;
protected:
// the possible channels
RWTPtrOrderedVector<G4StatMFFragment> theChannels;
// Free internal energy at temperature T = 0
G4double FreeInternalE0;
// Mean breakup multiplicity
G4double MeanMultiplicity;
// Mean channel temperature
G4double MeanTemperature;
// Mean channel entropy
G4double MeanEntropy;
// Multiplicity
G4int Multiplicity;
// Fragment Atomic Numbers
RWTValOrderedVector<G4int> FragmentsA;
// Fragment Charges
RWTValOrderedVector<G4int> FragmentsZ;
G4int NumOfNeutrons;
G4int NumOfCharged;
RWTValOrderedVector<G4int> OrderedA;
RWTValOrderedVector<G4int> OrderedZ;
};
#endif
@@ -0,0 +1,56 @@
#ifndef G4VStatMFEnsemble_h
#define G4VStatMFEnsemble_h 1
#include "G4StatMFParameters.hh"
#include "G4StatMFChannel.hh"
class G4VStatMFEnsemble {
public:
// Default Constructor
G4VStatMFEnsemble() :
__FreeInternalE0(0.0),
__MeanTemperature(0.0),
__MeanEntropy(0.0),
__MeanMultiplicity(0.0)
{};
// Destructor
virtual ~G4VStatMFEnsemble() {};
private:
// Copy constructor
G4VStatMFEnsemble(const G4VStatMFEnsemble & right);
// operators
G4VStatMFEnsemble & operator=(const G4VStatMFEnsemble & right);
G4bool operator==(const G4VStatMFEnsemble & right) const;
G4bool operator!=(const G4VStatMFEnsemble & right) const;
public:
virtual G4StatMFChannel * ChooseAandZ(const G4Fragment & aFragment) = 0;
G4double GetMeanMultiplicity(void) const {return __MeanMultiplicity;}
G4double GetMeanTemperature(void) const {return __MeanTemperature;}
protected:
// Free internal energy at temperature T = 0
G4double __FreeInternalE0;
// Mean temperature
G4double __MeanTemperature;
// Mean Entropy
G4double __MeanEntropy;
// Mean Multiplicity
G4double __MeanMultiplicity;
};
#endif
@@ -0,0 +1,109 @@
#ifndef G4VStatMFMacroCluster_h
#define G4VStatMFMacroCluster_h 1
#include "G4StatMFParameters.hh"
class G4VStatMFMacroCluster {
public:
// Constructor
G4VStatMFMacroCluster(const G4int Size) :
theA(Size),
_InvLevelDensity(0.0),
_Entropy(0.0),
theZARatio(0.0),
_MeanMultiplicity(0.0),
_Energy(0.0)
{
if (theA <= 0) G4Exception(
"G4VStatMFMacroCluster::Constructor: Cluster's size must be >= 1");
_InvLevelDensity = CalcInvLevelDensity();
}
// Destructor
virtual ~G4VStatMFMacroCluster() {};
private:
// Default constructor
G4VStatMFMacroCluster() {};
// Copy constructor
G4VStatMFMacroCluster(const G4VStatMFMacroCluster & right);
// operators
G4VStatMFMacroCluster & operator=(const G4VStatMFMacroCluster & right);
public:
G4bool operator==(const G4VStatMFMacroCluster & right) const;
G4bool operator!=(const G4VStatMFMacroCluster & right) const;
private:
G4double CalcInvLevelDensity(void);
public:
virtual G4double CalcMeanMultiplicity(const G4double FreeVol, const G4double mu,
const G4double nu, const G4double T) = 0;
virtual G4double CalcZARatio(const G4double nu) = 0;
G4double GetMeanMultiplicity(void) const { return _MeanMultiplicity; }
virtual G4double CalcEnergy(const G4double T) = 0;
virtual G4double CalcEntropy(const G4double T, const G4double FreeVol) = 0;
protected:
// Number of nucleons in the cluster
G4int theA;
// Inverse level density
G4double _InvLevelDensity;
// Entropy
G4double _Entropy;
// Z/A ratio
G4double theZARatio;
// Mean Multiplicity
G4double _MeanMultiplicity;
// Energy
G4double _Energy;
// *************************************************************************
public:
const G4double GetInvLevelDensity(void) const
{ return _InvLevelDensity; }
void SetZARatio(const G4double value)
{ theZARatio = value; }
const G4double GetZARatio(void) const
{ return theZARatio; }
void SetSize(const G4double value)
{
if (value <= 0.0) G4Exception("G4VStatMFMacroCluster::SetSize: Cluster's size must be >= 1");
theA = G4int(value);
_InvLevelDensity = CalcInvLevelDensity();
}
const G4double GetSize(void) const
{ return theA; }
};
#endif
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -75,7 +75,7 @@ G4FragmentVector * G4B9FermiFragment::GetFragment(const G4LorentzVector & aMomen
2.0*Masses[0];
RWTPtrOrderedVector<G4LorentzVector> * SubFragsMomentum =
G4RWTPtrOrderedVector<G4LorentzVector> * SubFragsMomentum =
FragmentsMomentum(AvalKineticE, NumSubFrag,Masses);
G4FragmentVector * theResult = new G4FragmentVector;
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -70,7 +70,7 @@ G4FragmentVector * G4Be8FermiFragment::GetFragment(const G4LorentzVector & aMome
2.0*Masses[0]; // alphas
RWTPtrOrderedVector<G4LorentzVector> * SubFragsMomentum =
G4RWTPtrOrderedVector<G4LorentzVector> * SubFragsMomentum =
FragmentsMomentum(AvalKineticE, NumSubFrag,Masses);
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
@@ -1,5 +1,5 @@
// This code implementation is the intellectual property of
// the RD44 GEANT4 collaboration.
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,

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