Import Geant4 1.0.0 source tree
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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];
|
||||
|
||||
+6
-6
@@ -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
-1
@@ -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
-1
@@ -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,
|
||||
|
||||
+9
-9
@@ -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,
|
||||
|
||||
+6
-6
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+5
-5
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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,
|
||||
|
||||
-40
@@ -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
-1
@@ -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
-1
@@ -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
-3
@@ -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
|
||||
+199
@@ -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
-1
@@ -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
|
||||
+52
-102
@@ -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
|
||||
|
||||
+42
@@ -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
|
||||
+85
@@ -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
|
||||
+44
@@ -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
|
||||
+78
@@ -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
|
||||
+54
@@ -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
|
||||
+97
@@ -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
|
||||
+41
@@ -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
|
||||
+42
@@ -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
|
||||
+46
-56
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+90
@@ -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
|
||||
|
||||
+112
@@ -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
|
||||
+44
-74
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+28
-24
@@ -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
|
||||
|
||||
+2
-2
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-3
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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,
|
||||
|
||||
+37
@@ -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
-1
@@ -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,
|
||||
|
||||
-137
@@ -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
|
||||
+109
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
Reference in New Issue
Block a user