Import Geant4 0.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-01 15:25:35 +02:00
parent 54d6b71f95
commit b97f8d0df7
3237 changed files with 807095 additions and 0 deletions
@@ -0,0 +1,32 @@
# $Id: GNUmakefile,v 2.0 1998/07/02 16:36:46 gunter Exp $
# -----------------------------------------------------------
# GNUmakefile for hadronic processes library. G.Folger 10-Dec-97
# --------------------------------------------------------------
name := G4hadronic_proc
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -0,0 +1,37 @@
// 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: G4AlphaInelasticProcess.hh,v 2.0 1998/07/02 16:36:06 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: Alpha Inelastic Process
// J.L. Chuma, TRIUMF, 21-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4AlphaInelasticProcess_h
#define G4AlphaInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AlphaInelasticProcess : public G4HadronicInelasticProcess
class G4AlphaInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AlphaInelasticProcess(
const G4String& processName = "AlphaInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Alpha::Alpha() )
G4HadronInelasticProcess( processName, G4Alpha::Alpha() )
{ }
~G4AlphaInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiLambdaInelasticProcess.hh,v 2.0 1998/07/02 16:36:07 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiLambda Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiLambdaInelasticProcess_h
#define G4AntiLambdaInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiLambdaInelasticProcess : public G4HadronicInelasticProcess
class G4AntiLambdaInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiLambdaInelasticProcess(
const G4String& processName = "AntiLambdaInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiLambda::AntiLambda() )
G4HadronInelasticProcess( processName, G4AntiLambda::AntiLambda() )
{ }
~G4AntiLambdaInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiNeutronInelasticProcess.hh,v 2.0 1998/07/02 16:36:09 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiNeutron Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiNeutronInelasticProcess_h
#define G4AntiNeutronInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiNeutronInelasticProcess : public G4HadronicInelasticProcess
class G4AntiNeutronInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiNeutronInelasticProcess(
const G4String& processName = "AntiNeutronInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiNeutron::AntiNeutron() )
G4HadronInelasticProcess( processName, G4AntiNeutron::AntiNeutron() )
{ }
~G4AntiNeutronInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiOmegaMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:10 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiOmegaMinus Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiOmegaMinusInelasticProcess_h
#define G4AntiOmegaMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiOmegaMinusInelasticProcess : public G4HadronicInelasticProcess
class G4AntiOmegaMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiOmegaMinusInelasticProcess(
const G4String& processName = "AntiOmegaMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiOmegaMinus::AntiOmegaMinus() )
G4HadronInelasticProcess( processName, G4AntiOmegaMinus::AntiOmegaMinus() )
{ }
~G4AntiOmegaMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiProtonInelasticProcess.hh,v 2.0 1998/07/02 16:36:11 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiProton Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiProtonInelasticProcess_h
#define G4AntiProtonInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiProtonInelasticProcess : public G4HadronicInelasticProcess
class G4AntiProtonInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiProtonInelasticProcess(
const G4String& processName = "AntiProtonInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiProton::AntiProton() )
G4HadronInelasticProcess( processName, G4AntiProton::AntiProton() )
{ }
~G4AntiProtonInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiSigmaMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:13 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiSigmaMinus Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiSigmaMinusInelasticProcess_h
#define G4AntiSigmaMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiSigmaMinusInelasticProcess : public G4HadronicInelasticProcess
class G4AntiSigmaMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiSigmaMinusInelasticProcess(
const G4String& processName = "AntiSigmaMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiSigmaMinus::AntiSigmaMinus() )
G4HadronInelasticProcess( processName, G4AntiSigmaMinus::AntiSigmaMinus() )
{ }
~G4AntiSigmaMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiSigmaPlusInelasticProcess.hh,v 2.0 1998/07/02 16:36:15 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiSigmaPlus Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiSigmaPlusInelasticProcess_h
#define G4AntiSigmaPlusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiSigmaPlusInelasticProcess : public G4HadronicInelasticProcess
class G4AntiSigmaPlusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiSigmaPlusInelasticProcess(
const G4String& processName = "AntiSigmaPlusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiSigmaPlus::AntiSigmaPlus() )
G4HadronInelasticProcess( processName, G4AntiSigmaPlus::AntiSigmaPlus() )
{ }
~G4AntiSigmaPlusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,41 @@
// 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: G4AntiXiMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:17 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiXiMinus Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiXiMinusInelasticProcess_h
#define G4AntiXiMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiXiMinusInelasticProcess : public G4HadronicInelasticProcess
class G4AntiXiMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiXiMinusInelasticProcess(
const G4String& processName = "AntiXiMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiXiMinus::AntiXiMinus() )
G4HadronInelasticProcess( processName, G4AntiXiMinus::AntiXiMinus() )
{ }
~G4AntiXiMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4AntiXiZeroInelasticProcess.hh,v 2.0 1998/07/02 16:36:18 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: AntiXiZero Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4AntiXiZeroInelasticProcess_h
#define G4AntiXiZeroInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4AntiXiZeroInelasticProcess : public G4HadronicInelasticProcess
class G4AntiXiZeroInelasticProcess : public G4HadronInelasticProcess
{
public:
G4AntiXiZeroInelasticProcess(
const G4String& processName = "AntiXiZeroInelastic" ) :
// G4HadronicInelasticProcess( processName, G4AntiXiZero::AntiXiZero() )
G4HadronInelasticProcess( processName, G4AntiXiZero::AntiXiZero() )
{ }
~G4AntiXiZeroInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,38 @@
// 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: G4DeuteronInelasticProcess.hh,v 2.0 1998/07/02 16:36:19 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: Deuteron Inelastic Process
// J.L. Chuma, TRIUMF, 25-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4DeuteronInelasticProcess_h
#define G4DeuteronInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4DeuteronInelasticProcess : public G4HadronicInelasticProcess
class G4DeuteronInelasticProcess : public G4HadronInelasticProcess
{
public:
G4DeuteronInelasticProcess(
const G4String& processName = "DeuteronInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Deuteron::Deuteron() )
G4HadronInelasticProcess( processName, G4Deuteron::Deuteron() )
{ }
~G4DeuteronInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,110 @@
// 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: G4HadronCaptureProcess.hh,v 2.1 1998/07/12 03:07:02 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// G4 Neutron capture process -- header file
// F.W. Jones, TRIUMF, 03-DEC-96
//
// For further comments see G4HadronCaptureProcess.cc.
//
// 27-MAR-97 FWJ: first version for Alpha release
// 14-APR-97 FWJ: cross section data class name changed
//
// 19-MAY-98 FWJ: variant G4HadronCapture process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#ifndef G4HadronCaptureProcess_h
#define G4HadronCaptureProcess_h 1
//#include <rw/tphdict.h>
#include "globals.hh"
//#include "Randomize.hh"
#include "G4Element.hh"
#include "G4ElementVector.hh"
//#include "G4ElementTable.hh"
#include "G4VDiscreteProcess.hh"
//#include "G4PhysicsTable.hh"
//#include "G4PhysicsVector.hh"
//#include "G4LPhysicsFreeVector.hh"
//#include "G4HadronicCrossSections.hh"
#include "G4HadronFissionProcess.hh"
#include "G4Gamma.hh"
#include "G4Step.hh"
#include "G4TrackStatus.hh"
#include "G4HadronicProcess.hh"
#include "G4CrossSectionDataStore.hh"
#include "G4HadronCaptureDataSet.hh"
class G4HadronCaptureProcess : public G4HadronicProcess
{
public:
G4HadronCaptureProcess(const G4String& processName ="LCapture");
~G4HadronCaptureProcess();
inline
G4double GetMeanFreePath(const G4Track& aTrack, G4double previousStepSize,
G4ForceCondition* condition)
{
return GetMeanFreePathBasic(aTrack.GetDynamicParticle(),
aTrack.GetMaterial());
}
G4double GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep)
{
SetDispatch(this);
return G4HadronicProcess::GeneralPostStepDoIt(aTrack, aStep);
}
void BuildThePhysicsTable(G4ParticleDefinition& aParticleType);
void SetCrossSectionDataStore(G4CrossSectionDataStore* aDataStore)
{
theCrossSectionDataStore = aDataStore;
}
G4CrossSectionDataStore* GetCrossSectionDataStore()
{
return theCrossSectionDataStore;
}
// void setCrossSectionDataVerboseLevel(G4int value)
// {
// theCrossSectionData.SetVerboseLevel(value);
// }
G4bool IsApplicable(const G4ParticleDefinition& aParticleType);
void DumpPhysicsTable(const G4ParticleDefinition& aParticleType);
private:
// Note: DEC compiler won't accept "const G4ParticleDefinition" here
// because it instantiates the ClearAndDestroy method that deletes the
// pointers in the dictionary.
// RWTPtrHashDictionary<G4ParticleDefinition, G4PhysicsTable>
// thePhysicsDictionary;
// G4HadronicCrossSections theCrossSectionData;
G4CrossSectionDataStore* theCrossSectionDataStore;
G4double GetMicroscopicCrossSection(const G4DynamicParticle* aParticle,
const G4Element* anElement);
};
#endif
@@ -0,0 +1,117 @@
// 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: G4HadronElasticProcess.hh,v 2.1 1998/07/12 03:07:03 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// G4 Hadron Elastic Scattering Process -- header file
// F.W. Jones, TRIUMF, 04-JUN-96
//
// For further comments see G4HadronElasticProcess.cc
//
// Modified by FWJ 03-DEC-96: uses G4LCrossSectionData
// Modified by FWJ FEB-97: adapted to new tracking design
// Modified by FWJ MAR-97: newer new tracking design
//
// Modified by FWJ 27-MAR-97: first version for Alpha release
// 14-APR-97 FWJ: cross section data class name changed
//
// changing design to use Model-scheme: HPW, 20th June 1997
//
// 14-APR-98 FWJ: variant G4HadronElastic process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#ifndef G4HadronElasticProcess_h
#define G4HadronElasticProcess_h 1
//#include <rw/tphdict.h>
#include "globals.hh"
#include "G4HadronicProcess.hh"
#include "G4CrossSectionDataStore.hh"
#include "G4HadronElasticDataSet.hh"
//#include "Randomize.hh"
#include "G4Element.hh"
#include "G4ElementVector.hh"
//#include "G4ElementTable.hh"
#include "G4VDiscreteProcess.hh"
//#include "G4PhysicsTable.hh"
//#include "G4PhysicsVector.hh"
//#include "G4LPhysicsFreeVector.hh"
//#include "G4HadronCrossSections.hh"
#include "G4LightMedia.hh"
#include "G4Step.hh"
#include "G4TrackStatus.hh"
class G4HadronElasticProcess : public G4HadronicProcess
{
public:
G4HadronElasticProcess(const G4String& processName = "LElastic");
~G4HadronElasticProcess();
inline
G4double GetMeanFreePath(const G4Track& aTrack, G4double previousStepSize,
G4ForceCondition* condition)
{
return GetMeanFreePathBasic(aTrack.GetDynamicParticle(),
aTrack.GetMaterial());
}
G4double GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep)
{
SetDispatch(this);
return G4HadronicProcess::GeneralPostStepDoIt(aTrack, aStep);
}
void BuildPhysicsTable(const G4ParticleDefinition& aParticleType);
void SetCrossSectionDataStore(G4CrossSectionDataStore* aDataStore)
{
theCrossSectionDataStore = aDataStore;
}
G4CrossSectionDataStore* GetCrossSectionDataStore()
{
return theCrossSectionDataStore;
}
// inline
// void setCrossSectionDataVerboseLevel(G4int value)
// {
// theCrossSectionData.SetVerboseLevel(value);
// }
G4bool IsApplicable(const G4ParticleDefinition& aParticleType);
void DumpPhysicsTable(const G4ParticleDefinition& aParticleType);
private:
// Note: DEC compiler won't accept "const G4ParticleDefinition" here
// because it instantiates the ClearAndDestroy method that deletes the
// pointers in the dictionary.
// RWTPtrHashDictionary<G4ParticleDefinition, G4PhysicsTable>
// thePhysicsDictionary;
// G4HadronCrossSections theCrossSectionData;
G4CrossSectionDataStore* theCrossSectionDataStore;
G4double GetMicroscopicCrossSection(const G4DynamicParticle* aParticle,
const G4Element* anElement);
};
#endif
@@ -0,0 +1,114 @@
// 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: G4HadronFissionProcess.hh,v 2.1 1998/07/12 03:07:03 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// G4 Fission Process -- header file
// F.W. Jones, TRIUMF, 03-DEC-96
//
// For further comments see G4HadronFissionProcess.cc.
//
// 27-MAR-97 F.W.Jones: first version for Alpha release
// 14-APR-97 FWJ: cross section data class name changed
//
// 19-MAY-98 FWJ: variant G4HadronFission process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#ifndef G4HadronFissionProcess_h
#define G4HadronFissionProcess_h 1
//#include <rw/tphdict.h>
#include "globals.hh"
//#include "Randomize.hh"
#include "G4Element.hh"
#include "G4ElementVector.hh"
//#include "G4ElementTable.hh"
#include "G4VDiscreteProcess.hh"
//#include "G4PhysicsTable.hh"
//#include "G4PhysicsVector.hh"
//#include "G4LPhysicsFreeVector.hh"
//#include "G4HadronCrossSections.hh"
#include "G4Proton.hh"
#include "G4Neutron.hh"
#include "G4Electron.hh"
#include "G4Gamma.hh"
#include "G4Step.hh"
#include "G4TrackStatus.hh"
#include "G4HadronicProcess.hh"
#include "G4CrossSectionDataStore.hh"
#include "G4HadronFissionDataSet.hh"
class G4HadronFissionProcess : public G4HadronicProcess
{
public:
G4HadronFissionProcess(const G4String& processName ="LFission");
~G4HadronFissionProcess();
inline
G4double GetMeanFreePath(const G4Track& aTrack, G4double previousStepSize,
G4ForceCondition* condition)
{
return GetMeanFreePathBasic(aTrack.GetDynamicParticle(),
aTrack.GetMaterial());
}
G4double GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial);
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep)
{
SetDispatch(this);
return G4HadronicProcess::GeneralPostStepDoIt(aTrack, aStep);
}
G4bool IsApplicable(const G4ParticleDefinition&)
{
return true;
}
void BuildThePhysicsTable(G4ParticleDefinition& aParticleType);
void SetCrossSectionDataStore(G4CrossSectionDataStore* aDataStore)
{
theCrossSectionDataStore = aDataStore;
}
G4CrossSectionDataStore* GetCrossSectionDataStore()
{
return theCrossSectionDataStore;
}
// void setCrossSectionDataVerboseLevel(G4int value)
// {
// theCrossSectionData.SetVerboseLevel(value);
// }
void DumpPhysicsTable(const G4ParticleDefinition& aParticleType);
private:
// Note: DEC compiler won't accept "const G4ParticleDefinition" here
// because it instantiates the ClearAndDestroy method that deletes the
// pointers in the dictionary.
// RWTPtrHashDictionary<G4ParticleDefinition, G4PhysicsTable>
// thePhysicsDictionary;
// G4HadronicCrossSections theCrossSectionData;
G4CrossSectionDataStore* theCrossSectionDataStore;
G4double GetMicroscopicCrossSection(const G4DynamicParticle* aParticle,
const G4Element* anElement);
};
#endif
@@ -0,0 +1,37 @@
// 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: G4KaonMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:24 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: KaonMinus Inelastic Process
// J.L. Chuma, TRIUMF, 12-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4KaonMinusInelasticProcess_h
#define G4KaonMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4KaonMinusInelasticProcess : public G4HadronicInelasticProcess
class G4KaonMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4KaonMinusInelasticProcess(
const G4String& processName = "KaonMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4KaonMinus::KaonMinus() )
G4HadronInelasticProcess( processName, G4KaonMinus::KaonMinus() )
{ }
~G4KaonMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,37 @@
// 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: G4KaonPlusInelasticProcess.hh,v 2.0 1998/07/02 16:36:26 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: KaonPlus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4KaonPlusInelasticProcess_h
#define G4KaonPlusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4KaonPlusInelasticProcess : public G4HadronicInelasticProcess
class G4KaonPlusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4KaonPlusInelasticProcess(
const G4String& processName = "KaonPlusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4KaonPlus::KaonPlus() )
G4HadronInelasticProcess( processName, G4KaonPlus::KaonPlus() )
{ }
~G4KaonPlusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,37 @@
// 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: G4KaonZeroLInelasticProcess.hh,v 2.0 1998/07/02 16:36:27 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: KaonZeroL Inelastic Process
// J.L. Chuma, TRIUMF, 11-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4KaonZeroLInelasticProcess_h
#define G4KaonZeroLInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4KaonZeroLInelasticProcess : public G4HadronicInelasticProcess
class G4KaonZeroLInelasticProcess : public G4HadronInelasticProcess
{
public:
G4KaonZeroLInelasticProcess(
const G4String& processName = "KaonZeroLInelastic" ) :
// G4HadronicInelasticProcess( processName, G4KaonZeroLong::KaonZeroLong() )
G4HadronInelasticProcess( processName, G4KaonZeroLong::KaonZeroLong() )
{ }
~G4KaonZeroLInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,36 @@
// 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: G4KaonZeroSInelasticProcess.hh,v 2.0 1998/07/02 16:36:28 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: KaonZeroS InelasticProcess Process
// J.L. Chuma, TRIUMF, 11-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4KaonZeroSInelasticProcess_h
#define G4KaonZeroSInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4KaonZeroSInelasticProcess : public G4HadronicInelasticProcess
class G4KaonZeroSInelasticProcess : public G4HadronInelasticProcess
{
public:
G4KaonZeroSInelasticProcess(
const G4String& processName = "KaonZeroSInelastic" ) :
// G4HadronicInelasticProcess( processName, G4KaonZeroShort::KaonZeroShort() )
G4HadronInelasticProcess( processName, G4KaonZeroShort::KaonZeroShort() )
{ }
~G4KaonZeroSInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4LambdaInelasticProcess.hh,v 2.0 1998/07/02 16:36:30 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process : Lambda Inelastic Process
// J.L. Chuma, TRIUMF, 18-Feb-1997
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4LambdaInelasticProcess_h
#define G4LambdaInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4LambdaInelasticProcess : public G4HadronicInelasticProcess
class G4LambdaInelasticProcess : public G4HadronInelasticProcess
{
public:
G4LambdaInelasticProcess(
const G4String& processName = "LambdaInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Lambda::Lambda() )
G4HadronInelasticProcess( processName, G4Lambda::Lambda() )
{ }
~G4LambdaInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4NeutronInelasticProcess.hh,v 2.0 1998/07/02 16:36:31 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: Neutron Inelastic Process
// original by H.P. Wellisch
// modified by J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4NeutronInelasticProcess_h
#define G4NeutronInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4NeutronInelasticProcess : public G4HadronicInelasticProcess
class G4NeutronInelasticProcess : public G4HadronInelasticProcess
{
public:
G4NeutronInelasticProcess(
const G4String& processName = "NeutronInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Neutron::Neutron() )
G4HadronInelasticProcess( processName, G4Neutron::Neutron() )
{ }
~G4NeutronInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,39 @@
// 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: G4OmegaMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:33 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: OmegaMinus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
// Note: there is no .cc file
#ifndef G4OmegaMinusInelasticProcess_h
#define G4OmegaMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4OmegaMinusInelasticProcess : public G4HadronicInelasticProcess
class G4OmegaMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4OmegaMinusInelasticProcess(
const G4String& processName = "OmegaMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4OmegaMinus::OmegaMinus() )
G4HadronInelasticProcess( processName, G4OmegaMinus::OmegaMinus() )
{ }
~G4OmegaMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,38 @@
// 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: G4PionMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:34 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// PionMinus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4PionMinusInelasticProcess_h
#define G4PionMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4PionMinusInelasticProcess : public G4HadronicInelasticProcess
class G4PionMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4PionMinusInelasticProcess(
const G4String& processName = "PionMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4PionMinus::PionMinus() )
G4HadronInelasticProcess( processName, G4PionMinus::PionMinus() )
{ }
~G4PionMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,37 @@
// 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: G4PionPlusInelasticProcess.hh,v 2.0 1998/07/02 16:36:36 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// PionPlus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4PionPlusInelasticProcess_h
#define G4PionPlusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4PionPlusInelasticProcess : public G4HadronicInelasticProcess
class G4PionPlusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4PionPlusInelasticProcess(
const G4String& processName = "PionPlusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4PionPlus::PionPlus() )
G4HadronInelasticProcess( processName, G4PionPlus::PionPlus() )
{ }
~G4PionPlusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,40 @@
// 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: G4ProtonInelasticProcess.hh,v 2.0 1998/07/02 16:36:38 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: Proton Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
//
// Note: there is no .cc file
#ifndef G4ProtonInelasticProcess_h
#define G4ProtonInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4ProtonInelasticProcess : public G4HadronicInelasticProcess
class G4ProtonInelasticProcess : public G4HadronInelasticProcess
{
public:
G4ProtonInelasticProcess(
const G4String& processName = "ProtonInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Proton::Proton() )
G4HadronInelasticProcess( processName, G4Proton::Proton() )
{ }
~G4ProtonInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,36 @@
// 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: G4SigmaMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:39 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: SigmaMinus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4SigmaMinusInelasticProcess_h
#define G4SigmaMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4SigmaMinusInelasticProcess : public G4HadronicInelasticProcess
class G4SigmaMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4SigmaMinusInelasticProcess(
const G4String& processName = "SigmaMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4SigmaMinus::SigmaMinus() )
G4HadronInelasticProcess( processName, G4SigmaMinus::SigmaMinus() )
{ }
~G4SigmaMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,36 @@
// 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: G4SigmaPlusInelasticProcess.hh,v 2.0 1998/07/02 16:36:41 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: SigmaPlus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4SigmaPlusInelasticProcess_h
#define G4SigmaPlusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4SigmaPlusInelasticProcess : public G4HadronicInelasticProcess
class G4SigmaPlusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4SigmaPlusInelasticProcess(
const G4String& processName = "SigmaPlusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4SigmaPlus::SigmaPlus() )
G4HadronInelasticProcess( processName, G4SigmaPlus::SigmaPlus() )
{ }
~G4SigmaPlusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,38 @@
// 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: G4TritonInelasticProcess.hh,v 2.0 1998/07/02 16:36:42 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// Hadronic Process: Triton Inelastic Process
// J.L. Chuma, TRIUMF, 25-Feb-1997
// Last modified: 03-Apr-1997
#ifndef G4TritonInelasticProcess_h
#define G4TritonInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4TritonInelasticProcess : public G4HadronicInelasticProcess
class G4TritonInelasticProcess : public G4HadronInelasticProcess
{
public:
G4TritonInelasticProcess(
const G4String& processName = "TritonInelastic" ) :
// G4HadronicInelasticProcess( processName, G4Triton::Triton() )
G4HadronInelasticProcess( processName, G4Triton::Triton() )
{ }
~G4TritonInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,36 @@
// 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: G4XiMinusInelasticProcess.hh,v 2.0 1998/07/02 16:36:43 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: XiMinus Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4XiMinusInelasticProcess_h
#define G4XiMinusInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4XiMinusInelasticProcess : public G4HadronicInelasticProcess
class G4XiMinusInelasticProcess : public G4HadronInelasticProcess
{
public:
G4XiMinusInelasticProcess(
const G4String& processName = "XiMinusInelastic" ) :
// G4HadronicInelasticProcess( processName, G4XiMinus::XiMinus() )
G4HadronInelasticProcess( processName, G4XiMinus::XiMinus() )
{ }
~G4XiMinusInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,37 @@
// 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: G4XiZeroInelasticProcess.hh,v 2.0 1998/07/02 16:36:45 gunter Exp $
// GEANT4 tag $Name: geant4-00 $
//
// G4 Process: XiZero Inelastic Process
// J.L. Chuma, TRIUMF, 05-Nov-1996
// Last modified: 03-Apr-1997
#ifndef G4XiZeroInelasticProcess_h
#define G4XiZeroInelasticProcess_h 1
//#include "G4HadronicInelasticProcess.hh"
#include "G4HadronInelasticProcess.hh"
// class G4XiZeroInelasticProcess : public G4HadronicInelasticProcess
class G4XiZeroInelasticProcess : public G4HadronInelasticProcess
{
public:
G4XiZeroInelasticProcess(
const G4String& processName = "XiZeroInelastic" ) :
// G4HadronicInelasticProcess( processName, G4XiZero::XiZero() )
G4HadronInelasticProcess( processName, G4XiZero::XiZero() )
{ }
~G4XiZeroInelasticProcess()
{ }
};
#endif
@@ -0,0 +1,213 @@
// 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: G4HadronCaptureProcess.cc,v 2.2 1998/07/13 17:26:38 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// G4 Process: Low-energy Neutron Capture
// F.W. Jones, TRIUMF, 03-DEC-96
//
// This is a prototype of a low-energy neutron capture process.
// Currently it is based on the GHEISHA routine CAPTUR,
// and conforms fairly closely to the original Fortran.
//
// 27-MAR-97 FWJ: first version for Alpha release
// 20-JUN-97 FWJ: added check for zero cross section
//
// 19-MAY-98 FWJ: variant G4HadronCapture process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#include "G4HadronCaptureProcess.hh"
//unsigned
//G4HadronicCaptureProcessHashFun(const G4ParticleDefinition& aParticleDefinition)
//{
// return aParticleDefinition.GetParticleName().hash();
//}
G4HadronCaptureProcess::G4HadronCaptureProcess(const G4String& processName) :
G4HadronicProcess(processName),
// thePhysicsDictionary(G4HadronCaptureProcessHashFun)
theCrossSectionDataStore(new G4CrossSectionDataStore)
{
theCrossSectionDataStore->AddDataSet(new G4HadronCaptureDataSet);
}
G4HadronCaptureProcess::~G4HadronCaptureProcess()
{
}
void
G4HadronCaptureProcess::
BuildThePhysicsTable(G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronCaptureProcess: no cross section data set");
return;
}
theCrossSectionDataStore->BuildPhysicsTable(aParticleType);
// G4double LowEdgeEnergy, Value;
// G4bool isOutRange;
//
// static const G4ElementTable* theElementTable;
// theElementTable = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1) {
// G4cout << "BuildThePhysicsTable: numOfElements " << numOfElements << endl;
// G4cout << "BuildThePhysicsTable: thePhysicsTable " << thePhysicsTable << endl;
// G4cout << " for particle: " << aParticleType.GetParticleName() << " " <<
// aParticleType.GetPDGEncoding() << endl;
// }
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "exists=" << exists << endl;
// }
// if (exists) {
// thePhysicsTable = thePhysicsDictionary.findValue(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
//// Remove any previous items from table
// thePhysicsTable->clearAndDestroy();
// thePhysicsTable->resize(numOfElements);
// }
// else {
// thePhysicsTable = new G4PhysicsTable(numOfElements);
// if (verboseLevel > 1) {
// G4cout << " make new tPT=" << thePhysicsTable << endl;
// G4cout << " entries() = " << thePhysicsTable->entries() << endl;
// }
// thePhysicsDictionary.insertKeyAndValue(&aParticleType, thePhysicsTable);
// }
//// Make a PhysicsVector for each element
// for (G4int J = 0; J < numOfElements; J++) {
// (*thePhysicsTable)(J) =
// theCrossSectionData.MakePhysicsVector(*this,
// aParticleType,
// (*theElementTable)[J]);
// }
}
G4double
G4HadronCaptureProcess::
GetMicroscopicCrossSection(const G4DynamicParticle* aParticle,
const G4Element* anElement)
{
// gives the microscopic cross section in GEANT4 internal units
if (!theCrossSectionDataStore) {
G4Exception("G4HadronCaptureProcess: no cross section data Store");
return DBL_MIN;
}
return theCrossSectionDataStore->GetCrossSection(aParticle, anElement);
// G4int J ;
// G4bool isOutRange ;
// G4double MicroscopicCrossSection ;
//
// RWBoolean exists =
// thePhysicsDictionary.contains(aParticle->GetDefinition());
// if (!exists) {
// G4Exception("G4HadronCaptureProcess::GetMicroscopicCrossSection: "
// "no physics table for particle");
// return G4double(0);
// }
// thePhysicsTable =
// thePhysicsDictionary.findValue(aParticle->GetDefinition());
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
//
// J = anElement->GetIndex();
// MicroscopicCrossSection = (*((*thePhysicsTable)(J))).
// GetValue(aParticle->GetKineticEnergy()/GeV,
// isOutRange);
// return MicroscopicCrossSection;
}
G4double
G4HadronCaptureProcess::
GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial)
{
// returns the mean free path in GEANT4 internal units
const G4ElementVector* theElementVector;
const G4double* theAtomicNumDensityVector;
G4int J = aMaterial->GetIndex();
theElementVector = aMaterial->GetElementVector();
theAtomicNumDensityVector = aMaterial->GetAtomicNumDensityVector();
G4double sigma = 0.;
for (G4int i = 0; i < aMaterial->GetNumberOfElements(); i++) {
sigma = sigma + theAtomicNumDensityVector[i] *
GetMicroscopicCrossSection(aParticle, (*theElementVector)(i));
}
if (verboseLevel > 1)
G4cout << "G4HadronCaptureProcess::GetMeanFreePathBasic: sigma="
<< sigma << endl;
if (sigma > 0.)
return 1./sigma;
else
return DBL_MAX;
}
G4bool
G4HadronCaptureProcess::IsApplicable(const G4ParticleDefinition& aParticleType)
{
return (aParticleType == *(G4Neutron::Neutron()));
}
void
G4HadronCaptureProcess::
DumpPhysicsTable(const G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronCaptureProcess: no cross section data set");
return;
}
theCrossSectionDataStore->DumpPhysicsTable(aParticleType);
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "DumpPhysicsTable: exists=" << exists << endl;
// }
// if (!exists) {
// G4cout << "DumpPhysicsTable: no phyics table for " <<
// aParticleType.GetParticleName() << endl;
// return;
// }
// G4PhysicsTable* pt = thePhysicsDictionary.findValue(&aParticleType);
//
// const G4ElementTable* et = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1)
// G4cout << "DumpPhysicsTable: numOfElements=" << numOfElements << endl;
// G4LPhysicsFreeVector* pv;
// for (G4int J = 0; J < numOfElements; J++) {
// G4cout << endl << "Capture cross section data for " <<
// aParticleType.GetParticleName() << " on " <<
// ((*et)[J])->GetName() << endl << endl;
// G4cout << endl << "Ek(GeV) sigma(mb)" << endl << endl;
// pv = (G4LPhysicsFreeVector*)(*thePhysicsTable)(J);
// pv->DumpValues();
// }
}
@@ -0,0 +1,261 @@
// 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: G4HadronElasticProcess.cc,v 2.2 1998/07/13 17:26:40 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// G4 Process: Low-energy Elastic scattering
// F.W. Jones, TRIUMF, 04-JUN-96
//
// This is a prototype of a low-energy elastic scattering process.
// At present it just uses some GEANT3.21/GHEISHA code, translated
// to C++ methods, to calculate cross sections and scattering events.
// Eventually these methods will be replaced by ones that are more
// accurate in the low-energy region (< 3GeV).
// Modified by FWJ 03-DEC-96: uses G4LCrossSectionData
// Modified by FWJ FEB-97: adapted to new tracking design
// Modified by FWJ MAR-97: newer new tracking design
//
// Modified by FWJ 27-MAR-97: first version for Alpha release
// 20-JUN-97 FWJ: added check for zero cross section
//
// 14-APR-98 FWJ: variant G4HadronElastic process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#include "G4HadronElasticProcess.hh"
// Can this be brought into the class?
//unsigned G4HadronElasticProcessHashFun(const G4ParticleDefinition& aParticleDefinition) {
// return aParticleDefinition.GetParticleName().hash();
//}
G4HadronElasticProcess::
G4HadronElasticProcess(const G4String& processName) :
G4HadronicProcess(processName),
// thePhysicsDictionary(G4HadronElasticProcessHashFun),
theCrossSectionDataStore(new G4CrossSectionDataStore)
{
theCrossSectionDataStore->AddDataSet(new G4HadronElasticDataSet);
aParticleChange.SetNumberOfSecondaries(1);
}
G4HadronElasticProcess::~G4HadronElasticProcess()
{
aParticleChange.Clear();
}
void
G4HadronElasticProcess::
BuildPhysicsTable(const G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronElasticProcess: no cross section data set");
return;
}
theCrossSectionDataStore->BuildPhysicsTable(aParticleType);
// G4double LowEdgeEnergy, Value;
// G4bool isOutRange;
//
// static const G4ElementTable* theElementTable;
// theElementTable = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1) {
// G4cout << "BuildPhysicsTable: numOfElements " << numOfElements << endl;
// G4cout << "BuildPhysicsTable: thePhysicsTable " << thePhysicsTable << endl;
// G4cout << " for particle: " << aParticleType.GetParticleName() << " " <<
// aParticleType.GetPDGEncoding() << endl;
// }
//
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "exists=" << exists << endl;
// }
// if (exists) {
// thePhysicsTable = thePhysicsDictionary.findValue(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
// Remove any previous items from table
// thePhysicsTable->clearAndDestroy();
// thePhysicsTable->resize(numOfElements);
// }
// else {
// thePhysicsTable = new G4PhysicsTable(numOfElements);
// if (verboseLevel > 1) {
// G4cout << " make new tPT=" << thePhysicsTable << endl;
// G4cout << " entries() = " << thePhysicsTable->entries() << endl;
// }
// thePhysicsDictionary.insertKeyAndValue(&aParticleType, thePhysicsTable);
// }
// Make a PhysicsVector for each element
// for (G4int J = 0; J < numOfElements; J++) {
// (*thePhysicsTable)(J) =
// theCrossSectionData.MakePhysicsVector(*this,
// aParticleType,
// (*theElementTable)[J]);
// if (verboseLevel > 1)
// G4cout << " added PhysicsVector " << (*thePhysicsTable)(J) << endl;
// }
}
G4double
G4HadronElasticProcess::GetMicroscopicCrossSection(
const G4DynamicParticle* aParticle, const G4Element* anElement)
{
// gives the microscopic cross section in GEANT4 internal units
if (!theCrossSectionDataStore) {
G4Exception("G4HadronElasticProcess: no cross section data Store");
return DBL_MIN;
}
return theCrossSectionDataStore->GetCrossSection(aParticle, anElement);
// G4int J ;
// G4bool isOutRange ;
// G4double MicroscopicCrossSection ;
//
// RWBoolean exists =
// thePhysicsDictionary.contains(aParticle->GetDefinition());
// if (!exists) {
// G4Exception("G4HadronElasticProcess::GetMicroscopicCrossSection: "
// "no physics table for particle");
// return G4double(0);
// }
// thePhysicsTable =
// thePhysicsDictionary.findValue(aParticle->GetDefinition());
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
//
// J = anElement->GetIndex();
// MicroscopicCrossSection = (*((*thePhysicsTable)(J))).
// GetValue(aParticle->GetTotalMomentum()/GeV,
// isOutRange);
// return MicroscopicCrossSection;
}
G4double
G4HadronElasticProcess::
GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial)
{
// Returns the mean free path in GEANT4 internal units.
// The cross section data is stored for individual elements,
// so the total macroscopic cross section is summed over the elements.
// (Cf. G4MuPairProduction which uses the material's effective Z to
// calculate directly the cross section.
const G4ElementVector* theElementVector;
const G4double* theAtomicNumDensityVector;
G4int J = aMaterial->GetIndex();
theElementVector = aMaterial->GetElementVector();
theAtomicNumDensityVector = aMaterial->GetAtomicNumDensityVector();
G4double sigma = 0.;
for (G4int i = 0; i < aMaterial->GetNumberOfElements(); i++) {
sigma = sigma + theAtomicNumDensityVector[i] *
GetMicroscopicCrossSection(aParticle, (*theElementVector)(i));
}
if (verboseLevel > 1)
G4cout << "G4HadronElasticProcess::GetMeanFreePathBasic: sigma="
<< sigma << endl;
if (sigma > 0.)
return 1./sigma;
else
return DBL_MAX;
}
G4bool
G4HadronElasticProcess::
IsApplicable(const G4ParticleDefinition& aParticleType)
{
return (aParticleType == *(G4PionPlus::PionPlus()) ||
aParticleType == *(G4PionZero::PionZero()) ||
aParticleType == *(G4PionMinus::PionMinus()) ||
aParticleType == *(G4KaonPlus::KaonPlus()) ||
aParticleType == *(G4KaonZeroShort::KaonZeroShort()) ||
aParticleType == *(G4KaonZeroLong::KaonZeroLong()) ||
aParticleType == *(G4KaonMinus::KaonMinus()) ||
aParticleType == *(G4Proton::Proton()) ||
aParticleType == *(G4AntiProton::AntiProton()) ||
aParticleType == *(G4Neutron::Neutron()) ||
aParticleType == *(G4AntiNeutron::AntiNeutron()) ||
aParticleType == *(G4Lambda::Lambda()) ||
aParticleType == *(G4AntiLambda::AntiLambda()) ||
aParticleType == *(G4SigmaPlus::SigmaPlus()) ||
aParticleType == *(G4SigmaZero::SigmaZero()) ||
aParticleType == *(G4SigmaMinus::SigmaMinus()) ||
aParticleType == *(G4AntiSigmaPlus::AntiSigmaPlus()) ||
aParticleType == *(G4AntiSigmaZero::AntiSigmaZero()) ||
aParticleType == *(G4AntiSigmaMinus::AntiSigmaMinus()) ||
aParticleType == *(G4XiZero::XiZero()) ||
aParticleType == *(G4XiMinus::XiMinus()) ||
aParticleType == *(G4AntiXiZero::AntiXiZero()) ||
aParticleType == *(G4AntiXiMinus::AntiXiMinus()) ||
aParticleType == *(G4Deuteron::Deuteron()) ||
aParticleType == *(G4Triton::Triton()) ||
aParticleType == *(G4Alpha::Alpha()) ||
aParticleType == *(G4OmegaMinus::OmegaMinus()) ||
aParticleType == *(G4AntiOmegaMinus::AntiOmegaMinus()));
}
void
G4HadronElasticProcess::
DumpPhysicsTable(const G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronElasticProcess: no cross section data set");
return;
}
theCrossSectionDataStore->DumpPhysicsTable(aParticleType);
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "DumpPhysicsTable: exists=" << exists << endl;
// }
// if (!exists) {
// G4cout << "DumpPhysicsTable: no phyics table for " <<
// aParticleType.GetParticleName() << endl;
// return;
// }
// G4PhysicsTable* pt = thePhysicsDictionary.findValue(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << " found PhysicsTable pt=" << pt << endl;
// }
//
// const G4ElementTable* et = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1)
// G4cout << "DumpPhysicsTable: numOfElements=" << numOfElements << endl;
// G4LPhysicsFreeVector* pv;
// for (G4int J = 0; J < numOfElements; J++) {
// G4cout << endl << "Cross section data for " <<
// aParticleType.GetParticleName() << " on " <<
// ((*et)[J])->GetName() << endl << endl;
// pv = (G4LPhysicsFreeVector*)(*thePhysicsTable)(J);
// if (verboseLevel > 1) {
// G4cout << " found PhysicsVector pv=" << pv << endl;
// }
// pv->DumpValues();
// }
}
@@ -0,0 +1,205 @@
// 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: G4HadronFissionProcess.cc,v 2.2 1998/07/13 17:26:41 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// F.W. Jones, TRIUMF, 03-DEC-96
//
// This is a prototype of a low-energy fission process.
// Currently it is based on the GHEISHA routine FISSIO,
// and conforms fairly closely to the original Fortran.
// Note: energy is in MeV and momentum is in MeV/c.
//
// 27-MAR-97 F.W.Jones: first version for Alpha release
// 20-JUN-97 F.W.Jones: added check for zero cross section
//
// 19-MAY-98 FWJ: variant G4HadronFission process for
// G4CrossSectionDataSet/DataStore class design.
// 29-JUN-98 FWJ: default data set G4HadronCrossSections
//
#include "G4HadronFissionProcess.hh"
//unsigned
//G4HadronicFissionProcessHashFun(const G4ParticleDefinition& aParticleDefinition)
//{
// return aParticleDefinition.GetParticleName().hash();
//}
G4HadronFissionProcess::
G4HadronFissionProcess(const G4String& processName) :
G4HadronicProcess(processName),
// thePhysicsDictionary(G4HadronicFissionProcessHashFun)
theCrossSectionDataStore(new G4CrossSectionDataStore)
{
theCrossSectionDataStore->AddDataSet(new G4HadronFissionDataSet);
}
G4HadronFissionProcess::~G4HadronFissionProcess()
{
}
void
G4HadronFissionProcess::BuildThePhysicsTable(G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronFissionProcess: no cross section data set");
return;
}
theCrossSectionDataStore->BuildPhysicsTable(aParticleType);
// G4double LowEdgeEnergy, Value;
// G4bool isOutRange;
//
// static const G4ElementTable* theElementTable;
// theElementTable = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1) {
// G4cout << "BuildThePhysicsTable: numOfElements " << numOfElements << endl;
// G4cout << "BuildThePhysicsTable: thePhysicsTable " << thePhysicsTable << endl;
// G4cout << " for particle: " << aParticleType.GetParticleName() << " " <<
// aParticleType.GetPDGEncoding() << endl;
// }
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "exists=" << exists << endl;
// }
// if (exists) {
// thePhysicsTable = thePhysicsDictionary.findValue(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
//// Remove any previous items from table
// thePhysicsTable->clearAndDestroy();
// thePhysicsTable->resize(numOfElements);
// }
// else {
// thePhysicsTable = new G4PhysicsTable(numOfElements);
// if (verboseLevel > 1) {
// G4cout << " make new tPT=" << thePhysicsTable << endl;
// G4cout << " entries() = " << thePhysicsTable->entries() << endl;
// }
// thePhysicsDictionary.insertKeyAndValue(&aParticleType, thePhysicsTable);
// }
//// Make a PhysicsVector for each element
// for (G4int J = 0; J < numOfElements; J++) {
// (*thePhysicsTable)(J) =
// theCrossSectionData.MakePhysicsVector(*this,
// aParticleType,
// (*theElementTable)[J]);
// }
}
G4double
G4HadronFissionProcess::GetMicroscopicCrossSection(const G4DynamicParticle* aParticle,
const G4Element* anElement)
{
// gives the microscopic cross section in GEANT4 internal units
if (!theCrossSectionDataStore) {
G4Exception("G4HadronFissionProcess: no cross section data Store");
return DBL_MIN;
}
return theCrossSectionDataStore->GetCrossSection(aParticle, anElement);
// G4int J ;
// G4bool isOutRange ;
// G4double MicroscopicCrossSection ;
//
// RWBoolean exists =
// thePhysicsDictionary.contains(aParticle->GetDefinition());
// if (!exists) {
// G4Exception("G4HadronFissionProcess::GetMicroscopicCrossSection: "
// "no physics table for particle");
// return G4double(0);
// }
// thePhysicsTable =
// thePhysicsDictionary.findValue(aParticle->GetDefinition());
// if (verboseLevel > 1) {
// G4cout << " Retrieve tPT=" << thePhysicsTable << endl;
// }
//
// J = anElement->GetIndex();
// MicroscopicCrossSection = (*((*thePhysicsTable)(J))).
// GetValue(aParticle->GetKineticEnergy()/GeV,
// isOutRange);
// return MicroscopicCrossSection;
}
G4double
G4HadronFissionProcess::GetMeanFreePathBasic(const G4DynamicParticle* aParticle,
const G4Material* aMaterial)
{
// returns the mean free path in GEANT4 internal units
const G4ElementVector* theElementVector;
const G4double* theAtomicNumDensityVector;
G4int J = aMaterial->GetIndex();
theElementVector = aMaterial->GetElementVector();
theAtomicNumDensityVector = aMaterial->GetAtomicNumDensityVector();
G4double sigma = 0.;
for (G4int i = 0; i < aMaterial->GetNumberOfElements(); i++) {
sigma = sigma + theAtomicNumDensityVector[i] *
GetMicroscopicCrossSection(aParticle, (*theElementVector)(i));
}
if (verboseLevel > 1)
G4cout << "G4HadronFissionProcess::GetMeanFreePathBasic: sigma="
<< sigma << endl;
if (sigma > 0.)
return 1./sigma;
else
return DBL_MAX;
}
void
G4HadronFissionProcess::
DumpPhysicsTable(const G4ParticleDefinition& aParticleType)
{
if (!theCrossSectionDataStore) {
G4Exception("G4HadronFissionProcess: no cross section data set");
return;
}
theCrossSectionDataStore->DumpPhysicsTable(aParticleType);
// RWBoolean exists = thePhysicsDictionary.contains(&aParticleType);
// if (verboseLevel > 1) {
// G4cout << "DumpPhysicsTable: exists=" << exists << endl;
// }
// if (!exists) {
// G4Exception("G4HadronFissionProcess::DumpPhysicsTable: "
// "no physics table for particle");
// return;
// }
// G4PhysicsTable* pt = thePhysicsDictionary.findValue(&aParticleType);
//
// const G4ElementTable* et = G4Element::GetElementTable();
// G4int numOfElements = G4Element::GetNumberOfElements();
// if (verboseLevel > 1)
// G4cout << "DumpPhysicsTable: numOfElements=" << numOfElements << endl;
// G4LPhysicsFreeVector* pv;
// for (G4int J = 0; J < numOfElements; J++) {
// G4cout << endl << "Fission cross section data for " <<
// aParticleType.GetParticleName() << " on " <<
// ((*et)[J])->GetName() << endl << endl;
// G4cout << endl << "Ek(GeV) sigma(mb)" << endl << endl;
// pv = (G4LPhysicsFreeVector*)(*thePhysicsTable)(J);
// pv->DumpValues();
// }
}