Import Geant4 6.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 10:41:53 +02:00
parent 4aea781e80
commit 96686e0c8f
6560 changed files with 153347 additions and 238155 deletions
@@ -0,0 +1,68 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4Absorber_hh
#define G4Absorber_hh
#include "globals.hh"
#include "G4KineticTrackVector.hh"
class G4KineticTrack;
class G4Absorber
{
public:
G4Absorber(G4double cutOnP);
~G4Absorber();
G4bool WillBeAbsorbed(const G4KineticTrack & kt);
G4bool Absorb(G4KineticTrack & kt, G4KineticTrackVector & tgt);
G4KineticTrackVector * GetAbsorbers();
G4KineticTrackVector * GetProducts();
G4bool FindAbsorbers(G4KineticTrack & kt, G4KineticTrackVector & tgt);
G4bool FindProducts(G4KineticTrack & kt);
private:
G4double theCutOnP;
G4KineticTrackVector * theAbsorbers;
G4KineticTrackVector * theProducts;
G4ThreeVector GetRandomDirection();
};
inline G4KineticTrackVector * G4Absorber::GetAbsorbers()
{
return theAbsorbers;
}
inline G4KineticTrackVector * G4Absorber::GetProducts()
{
return theProducts;
}
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4AntiProtonField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4AntiProtonField_h
#define G4AntiProtonField_h 1
//#include "globals.hh"
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4AntiProtonField: public G4VNuclearField
{
public:
G4AntiProtonField(G4V3DNucleus * nucleus, G4double coeff = 1.53*fermi);
virtual ~G4AntiProtonField();
private:
G4AntiProtonField(const G4AntiProtonField &right);
const G4AntiProtonField & operator=(const G4AntiProtonField & right);
int operator==(const G4AntiProtonField & right) const;
int operator!=(const G4AntiProtonField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,157 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
//
// -------------------------------------------------------------------
// GEANT4 Class file
//
//
// File name: G4BinaryCascade.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 8 June 2000
// -----------------------------------------------------------------------------
#ifndef G4BinaryCascade_hh
#define G4BinaryCascade_hh
#include "G4VIntraNuclearTransportModel.hh"
#include "G4ReactionProductVector.hh"
#include "G4KineticTrackVector.hh"
#include "G4ListOfCollisions.hh"
#include "G4V3DNucleus.hh"
#include "G4Fancy3DNucleus.hh"
#include "G4Fragment.hh"
#include "G4VFieldPropagation.hh"
#include "G4VScatterer.hh"
#include "G4LorentzVector.hh"
#include "G4LorentzRotation.hh"
#include "G4BCDecay.hh"
#include "G4BCAction.hh"
class G4CollisionManager;
class G4Track;
class G4KineticTrack;
class G43DNucleus;
class G4BinaryCascade : public G4VIntraNuclearTransportModel
{
public:
G4BinaryCascade();
G4BinaryCascade(const G4BinaryCascade & right);
virtual ~G4BinaryCascade();
const G4BinaryCascade& operator=(G4BinaryCascade & right);
G4int operator==(G4BinaryCascade& right) {return (this == &right);}
G4int operator!=(G4BinaryCascade& right) {return (this != &right);}
G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack,
G4Nucleus& theNucleus);
virtual G4ReactionProductVector * Propagate(G4KineticTrackVector * secondaries,
G4V3DNucleus * nucleus);
private:
G4int GetTotalCharge(std::vector<G4KineticTrack *> & aV)
{
G4int result = 0;
std::vector<G4KineticTrack *>::iterator i;
for(i = aV.begin(); i != aV.end(); ++i)
{
if((*i)->GetDefinition() == G4Proton::Proton())
{
++result;
}
}
return result;
}
void PrintWelcomeMessage();
void BuildTargetList();
void FindCollisions(G4KineticTrackVector * secondaries);
G4bool ApplyCollision(G4CollisionInitialState * collision);
G4bool Capture(G4bool verbose=false);
G4bool Absorb();
G4bool CheckPauliPrinciple(G4KineticTrackVector * products);
G4double GetExcitationEnergy();
G4bool CheckDecay(G4KineticTrackVector * products);
void CorrectFinalPandE();
void UpdateTracksAndCollisions(G4KineticTrackVector * oldSecondaries,
G4KineticTrackVector * oldTarget,
G4KineticTrackVector * newSecondaries);
G4bool DoTimeStep(G4double timeStep);
G4KineticTrackVector* CorrectBarionsOnBoundary(G4KineticTrackVector *in,
G4KineticTrackVector *out);
G4Fragment * FindFragments();
void StepParticlesOut();
G4LorentzVector GetFinal4Momentum();
G4LorentzVector GetFinalNucleusMomentum();
G4ReactionProductVector * Propagate1H1(G4KineticTrackVector * secondaries,
G4V3DNucleus * nucleus);
G4double GetIonMass(G4int Z, G4int A);
// utility methods
G4ThreeVector GetSpherePoint(G4double r, const G4LorentzVector & momentumdirection);
void ClearAndDestroy(G4KineticTrackVector * ktv);
void ClearAndDestroy(G4ReactionProductVector * rpv);
// for debugging purpose
void PrintKTVector(G4KineticTrackVector * ktv, std::string comment=std::string(""));
private:
G4KineticTrackVector theProjectileList;
G4KineticTrackVector theTargetList;
G4KineticTrackVector theSecondaryList;
G4KineticTrackVector theCapturedList;
G4KineticTrackVector theFinalState;
G4ExcitationHandler * theExcitationHandler;
G4CollisionManager * theCollisionMgr;
std::vector<G4BCAction *> theImR;
G4VFieldPropagation * thePropagator;
G4double theCurrentTime;
G4double theCutOnP;
G4double theCutOnPAbsorb;
G4LorentzVector theInitial4Mom;
G4int currentA, currentZ;
G4double massInNucleus;
G4LorentzRotation precompoundLorentzboost;
G4double theOuterRadius;
G4bool thePrimaryEscape;
G4ParticleDefinition * thePrimaryType;
G4ThreeVector theMomentumTransfer;
};
#endif
@@ -0,0 +1,48 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4BinaryLightIonReaction_h
#define G4BinaryLightIonReaction_h
#include "G4BinaryCascade.hh"
#include "G4PreCompoundModel.hh"
#include "G4HadFinalState.hh"
#include "G4ExcitationHandler.hh"
class G4BinaryLightIonReaction : public G4HadronicInteraction
{
public:
G4BinaryLightIonReaction();
virtual ~G4BinaryLightIonReaction(){}
G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack,
G4Nucleus& theNucleus);
private:
G4BinaryCascade theModel;
G4ExcitationHandler theHandler;
G4PreCompoundModel theProjectileFragmentation;
G4HadFinalState theResult;
G4bool EnergyAndMomentumCorrector(G4ReactionProductVector* products,
G4LorentzVector& TotalCollisionMom);
};
#endif
@@ -0,0 +1,72 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4FieldPropagation_h
#define G4FieldPropagation_h 1
#include "G4KineticTrackVector.hh"
class G4FieldPropagation
{
public:
G4FieldPropagation() {}
G4FieldPropagation(const G4FieldPropagation &) {}
virtual ~G4FieldPropagation() {}
// Operators
const G4FieldPropagation & operator=(const G4FieldPropagation &right);
int operator==(const G4FieldPropagation &right) const;
int operator!=(const G4FieldPropagation &right) const;
// Methods
// only theActive are propagated, nothing else
// only theSpectators define the field, nothing else
virtual void Transport(G4KineticTrackVector &theActive, const G4KineticTrackVector &theSpectators, G4double theTimeStep) = 0;
virtual G4double GetExcitationEnergy(G4int nHit, const G4KineticTrackVector &theParticles) = 0;
// methods for calculating potentials for different types of particles
virtual void Init(G4int z, G4int a) = 0; // prepare potentials' functions
// aPosition is relative to the nucleus center
virtual G4double GetNeutronPotential(G4double radius) = 0;
virtual G4double GetNeutronPotential(G4ThreeVector &aPosition) = 0;
virtual G4double GetProtonPotential(G4double radius) = 0;
virtual G4double GetProtonPotential(G4ThreeVector &aPosition) = 0;
virtual G4double GetAntiprotonPotential(G4double radius) = 0;
virtual G4double GetAntiprotonPotential(G4ThreeVector &aPosition) = 0;
virtual G4double GetKaonPotential(G4double radius) = 0;
virtual G4double GetKaonPotential(G4ThreeVector &aPosition) = 0;
virtual G4double GetPionPotential(G4double radius) = 0;
virtual G4double GetPionPotential(G4ThreeVector &aPosition) = 0;
};
#endif // G4FieldPropagation_h
@@ -0,0 +1,62 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4GeneratorPrecompoundInterface_h
#define G4GeneratorPrecompoundInterface_h 1
#include "G4Fancy3DNucleus.hh"
#include "G4Nucleon.hh"
#include "G4Nucleus.hh"
#include "G4VIntraNuclearTransportModel.hh"
#include "G4KineticTrackVector.hh"
#include "G4FragmentVector.hh"
#include "G4ReactionProductVector.hh"
#include "G4ReactionProduct.hh"
// Class Description
// Trivial implementation of an intra-nuclear transport. It pworvides coupling
// of high energy generators with pre equilibrium decay models.
// To be used in your physics list in case you need this physics.
// Class Description - End
class G4GeneratorPrecompoundInterface : public G4VIntraNuclearTransportModel
{
public:
G4GeneratorPrecompoundInterface(){}
~G4GeneratorPrecompoundInterface(){}
private:
G4int operator==(G4GeneratorPrecompoundInterface& right) {return (this == &right);}
G4int operator!=(G4GeneratorPrecompoundInterface& right) {return (this != &right);}
public:
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus );
G4ReactionProductVector* Propagate(G4KineticTrackVector* theSecondaries, G4V3DNucleus* theNucleus);
private:
};
#endif // G4GeneratorPrecompoundInterface_h
@@ -0,0 +1,56 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KM_DummyField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KM_DummyField_hh
#define G4KM_DummyField_hh
#include "globals.hh"
#include "G4MagneticField.hh"
class G4KM_DummyField : public G4MagneticField
{
public:
G4KM_DummyField() { }
~G4KM_DummyField() { }
virtual void GetFieldValue(const G4double [], G4double * ) const { }
};
#endif
@@ -0,0 +1,89 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KM_NucleonEqRhs.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KM_NucleonEqRhs_hh
#define G4KM_NucleonEqRhs_hh
#include "globals.hh"
//#include "G4EquationOfMotion.hh"
#include "G4Mag_EqRhs.hh"
#include "G4KM_DummyField.hh" // needed by G4Mag_EqRhs constructor.
#include "G4V3DNucleus.hh"
//class G4KM_NucleonEqRhs : public G4EquationOfMotion // I'd like
class G4KM_NucleonEqRhs : public G4Mag_EqRhs
{
public:
G4KM_NucleonEqRhs(G4KM_DummyField *field, G4V3DNucleus * nucleus);
~G4KM_NucleonEqRhs();
virtual void EvaluateRhsGivenB(const G4double y[], const G4double B[3],
G4double dydx[]) const;
virtual void SetChargeMomentumMass(G4double particleCharge,
G4double MomentumXc,
G4double MassXc2);
void SetMass(G4double aMass);
private:
// use G4VKM_NuclearDensity as it needs a GetDeriv() method.
G4V3DNucleus * theNucleus;
G4double factor;
G4int A;
G4double theMass;
};
inline void G4KM_NucleonEqRhs::SetMass(G4double aMass)
{
theMass = aMass;
}
inline G4KM_NucleonEqRhs::~G4KM_NucleonEqRhs()
{ }
// Here by design, but it is unnecessary for nuclear fields
inline void
G4KM_NucleonEqRhs::SetChargeMomentumMass(G4double ,G4double ,G4double )
{ }
#endif
@@ -0,0 +1,80 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KM_OpticalEqRhs.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KM_OpticalEqRhs_hh
#define G4KM_OpticalEqRhs_hh
#include "globals.hh"
//#include "G4EquationOfMotion.hh"
#include "G4Mag_EqRhs.hh"
#include "G4KM_DummyField.hh" // needed by G4Mag_EqRhs constructor.
#include "G4V3DNucleus.hh"
//class G4KM_OpticalEqRhs : public G4EquationOfMotion
class G4KM_OpticalEqRhs : public G4Mag_EqRhs
{
public:
G4KM_OpticalEqRhs(G4KM_DummyField *field, G4V3DNucleus * nucleus);
~G4KM_OpticalEqRhs();
virtual void EvaluateRhsGivenB(const G4double y[], const G4double B[3],
G4double dydx[]) const;
virtual void SetChargeMomentumMass(G4double particleCharge,
G4double MomentumXc,
G4double MassXc2);
void SetFactor(G4double mass, G4double opticalParameter);
private:
G4V3DNucleus * theNucleus;
G4double theFactor;
G4double theMass;
};
inline G4KM_OpticalEqRhs::~G4KM_OpticalEqRhs()
{ }
// Here by design, but it is unnecessary for nuclear fields
inline void G4KM_OpticalEqRhs::SetChargeMomentumMass(G4double ,G4double ,G4double )
{ }
#endif
@@ -0,0 +1,66 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KaonMinusField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KaonMinusField_h
#define G4KaonMinusField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4KaonMinusField: public G4VNuclearField
{
public:
G4KaonMinusField(G4V3DNucleus * nucleus, G4double coeff = 0.35*fermi);
virtual ~G4KaonMinusField();
private:
G4KaonMinusField(const G4KaonMinusField &right);
const G4KaonMinusField & operator=(const G4KaonMinusField & right);
int operator==(const G4KaonMinusField & right) const;
int operator!=(const G4KaonMinusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,66 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KaonPlusField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KaonPlusField_h
#define G4KaonPlusField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4KaonPlusField: public G4VNuclearField
{
public:
G4KaonPlusField(G4V3DNucleus * nucleus, G4double coeff = 0.35*fermi);
virtual ~G4KaonPlusField();
private:
G4KaonPlusField(const G4KaonPlusField &right);
const G4KaonPlusField & operator=(const G4KaonPlusField & right);
int operator==(const G4KaonPlusField & right) const;
int operator!=(const G4KaonPlusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4KaonZeroField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4KaonZeroField_h
#define G4KaonZeroField_h 1
#include "G4VNuclearField.hh"
class G4KaonZeroField: public G4VNuclearField
{
public:
G4KaonZeroField(G4V3DNucleus * nucleus, G4double coeff = 0.35*fermi);
virtual ~G4KaonZeroField();
private:
G4KaonZeroField(const G4KaonZeroField &right);
const G4KaonZeroField & operator=(const G4KaonZeroField & right);
int operator==(const G4KaonZeroField & right) const;
int operator!=(const G4KaonZeroField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,86 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4NeutronField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4NeutronField_h
#define G4NeutronField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
#include "G4FermiMomentum.hh"
#include "G4VNuclearDensity.hh"
#include <vector>
class G4NeutronField: public G4VNuclearField
{
public:
G4NeutronField(G4V3DNucleus * nucleus);
virtual ~G4NeutronField();
private:
G4NeutronField(const G4NeutronField &right);
const G4NeutronField & operator=(const G4NeutronField & right);
int operator==(const G4NeutronField & right) const;
int operator!=(const G4NeutronField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
private:
G4double GetDensity(const G4ThreeVector & aPosition)
{
return theDensity->GetDensity(aPosition);
}
G4double GetFermiMomentum(const G4double aDensity)
{
return theFermi.GetFermiMomentum(aDensity);
}
G4FermiMomentum theFermi;
G4double theA;
G4double theZ;
const G4VNuclearDensity * theDensity;
G4double theR;
std::vector<G4double> theFermiMomBuffer;
};
#endif
@@ -0,0 +1,68 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4PionMinusField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4PionMinusField_h
#define G4PionMinusField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4PionMinusField: public G4VNuclearField
{
public:
G4PionMinusField(G4V3DNucleus * nucleus, G4double coeff = 0.042*fermi);
virtual ~G4PionMinusField();
private:
G4PionMinusField(const G4PionMinusField &right);
const G4PionMinusField & operator=(const G4PionMinusField & right);
int operator==(const G4PionMinusField & right) const;
int operator!=(const G4PionMinusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4PionPlusField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4PionPlusField_hh
#define G4PionPlusField_hh
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4PionPlusField: public G4VNuclearField
{
public:
G4PionPlusField(G4V3DNucleus * nucleus, G4double coeff = 0.042*fermi);
virtual ~G4PionPlusField();
private:
G4PionPlusField(const G4PionPlusField &right);
const G4PionPlusField & operator=(const G4PionPlusField & right);
int operator==(const G4PionPlusField & right) const;
int operator!=(const G4PionPlusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4PionZeroField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4PionZeroField_h
#define G4PionZeroField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
class G4PionZeroField: public G4VNuclearField
{
public:
G4PionZeroField(G4V3DNucleus * nucleus, G4double coeff = 0.042*fermi);
virtual ~G4PionZeroField();
private:
G4PionZeroField(const G4PionZeroField &right);
const G4PionZeroField & operator=(const G4PionZeroField & right);
int operator==(const G4PionZeroField & right) const;
int operator!=(const G4PionZeroField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,87 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4ProtonField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4ProtonField_h
#define G4ProtonField_h 1
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
#include "G4FermiMomentum.hh"
#include "G4VNuclearDensity.hh"
#include <vector>
class G4ProtonField: public G4VNuclearField
{
public:
G4ProtonField(G4V3DNucleus * nucleus);
virtual ~G4ProtonField();
private:
G4ProtonField(const G4ProtonField &right);
const G4ProtonField & operator=(const G4ProtonField & right);
int operator==(const G4ProtonField & right) const;
int operator!=(const G4ProtonField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
private:
G4double GetDensity(const G4ThreeVector & aPosition)
{
return theDensity->GetDensity(aPosition);
}
G4double GetFermiMomentum(const G4double aDensity)
{
return theFermi.GetFermiMomentum(aDensity);
}
G4double theA;
G4double theZ;
G4double theBarrier;
G4double theRadius;
G4FermiMomentum theFermi;
const G4VNuclearDensity * theDensity;
std::vector<G4double> theFermiMomBuffer;
};
#endif
@@ -0,0 +1,85 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4RKFieldIntegrator_h
#define G4RKFieldIntegrator_h 1
#include "G4FieldPropagation.hh"
class G4RKFieldIntegrator : public G4FieldPropagation
{
public:
G4RKFieldIntegrator() {}
G4RKFieldIntegrator(const G4RKFieldIntegrator &):G4FieldPropagation() {}
~G4RKFieldIntegrator() {}
//Operators
const G4RKFieldIntegrator & operator=(const G4RKFieldIntegrator &) {return *this;}
int operator==(const G4RKFieldIntegrator &) const {return 1;}
int operator!=(const G4RKFieldIntegrator &) const {return 1;}
// only theActive are propagated, nothing else
// only theSpectators define the field, nothing else
void Transport(G4KineticTrackVector &theActive, const G4KineticTrackVector &theSpectators, G4double theTimeStep);
G4double GetExcitationEnergy(G4int nHitNucleons, const G4KineticTrackVector &theParticles);
// methods for calculating potentials for different types of particles
void Init(G4int z, G4int a) {theZ = z; theA = a;} // prepare potentials' functions
// aPosition is relative to the nucleus center
G4double GetNeutronPotential(G4double radius);
G4double GetNeutronPotential(G4ThreeVector &aPosition) {return GetNeutronPotential(aPosition.mag());}
G4double GetProtonPotential(G4double radius);
G4double GetProtonPotential(G4ThreeVector &aPosition) {return GetProtonPotential(aPosition.mag());}
G4double GetAntiprotonPotential(G4double radius);
G4double GetAntiprotonPotential(G4ThreeVector &aPosition) {return GetAntiprotonPotential(aPosition.mag());};
G4double GetKaonPotential(G4double radius);
G4double GetKaonPotential(G4ThreeVector &aPosition) {return GetKaonPotential(aPosition.mag());}
G4double GetPionPotential(G4double radius);
G4double GetPionPotential(G4ThreeVector &aPosition) {return GetPionPotential(aPosition.mag());}
private:
void Integrate(const G4KineticTrackVector & theActive, G4double theTimeStep);
G4double CalculateTotalEnergy(const G4KineticTrackVector& Barions);
G4double Erf(G4double X);
// parameters to calculate potentials
G4int theA;
G4int theZ;
// Vc(A, Z) = 1.44 * Z /(r0*(1 + pow(A, 1/3)))
// = colomb * Z / (1 + pow(A, 1/3))
static const G4double coulomb; // coulomb barier constant
static const G4double a_kaon; // kaon's potential constant
static const G4double a_pion; // pion's potential constant
static const G4double a_antiproton; // antiproton's potential constant
};
#endif // G4RKFieldIntegrator_h
@@ -0,0 +1,114 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4RKPropagation_h
#define G4RKPropagation_h 1
#include "G4VFieldPropagation.hh"
#include "G4VNuclearField.hh"
#include "G4V3DNucleus.hh"
#include "G4KM_DummyField.hh"
#include "G4Mag_EqRhs.hh"
#include <map>
class G4RKPropagation: public G4VFieldPropagation
{
public:
G4RKPropagation();
virtual ~G4RKPropagation();
private:
G4RKPropagation(const G4RKPropagation &right);
const G4RKPropagation & operator=(const G4RKPropagation & right);
G4int operator==(const G4RKPropagation & right) const;
G4int operator!=(const G4RKPropagation & right) const;
public:
virtual void Init(G4V3DNucleus * nucleus);
virtual void Transport(G4KineticTrackVector &theActive,
const G4KineticTrackVector &theSpectators,
G4double theTimeStep);
G4bool GetSphereIntersectionTimes(const G4KineticTrack * track,
G4double & t1, G4double & t2);
G4ThreeVector GetMomentumTransfer() const;
private:
G4double theOuterRadius;
G4V3DNucleus * theNucleus;
std::map <G4int, G4VNuclearField *, std::less<G4int> > * theFieldMap;
std::map <G4int, G4Mag_EqRhs *, std::less<G4int> > * theEquationMap;
G4KM_DummyField * theField;
G4ThreeVector theMomentumTranfer;
G4bool GetSphereIntersectionTimes(const G4double radius,
const G4ThreeVector & currentPos,
const G4LorentzVector & momentum,
G4double & t1, G4double & t2);
// implementation
G4bool FieldTransport(G4KineticTrack * track, const G4double timestep);
G4bool FreeTransport(G4KineticTrack * track, const G4double timestep);
void delete_FieldsAndMap(
std::map <G4int, G4VNuclearField *, std::less<G4int> > * aMap);
void delete_EquationsAndMap(
std::map <G4int, G4Mag_EqRhs *, std::less<G4int> > * aMap);
public:
inline G4double GetBarrier(G4int encoding)
{
std::map <G4int, G4VNuclearField *, std::less<G4int> >::iterator iter;
iter = theFieldMap->find(encoding);
if(iter == theFieldMap->end()) return 0;
return (*theFieldMap)[encoding]->GetBarrier();
}
inline G4double GetField(G4int encoding,G4ThreeVector pos)
{
std::map <G4int, G4VNuclearField *, std::less<G4int> >::iterator iter;
iter = theFieldMap->find(encoding);
if(iter == theFieldMap->end()) return 0;
return (*theFieldMap)[encoding]->GetField(pos);
}
};
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4SigmaMinusField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4SigmaMinusField_h
#define G4SigmaMinusField_h 1
#include "G4VNuclearField.hh"
class G4SigmaMinusField: public G4VNuclearField
{
public:
G4SigmaMinusField(G4V3DNucleus * nucleus, G4double coeff = 0.36*fermi);
virtual ~G4SigmaMinusField();
private:
G4SigmaMinusField(const G4SigmaMinusField &right);
const G4SigmaMinusField & operator=(const G4SigmaMinusField & right);
int operator==(const G4SigmaMinusField & right) const;
int operator!=(const G4SigmaMinusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,54 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
#ifndef G4SigmaPlusField_h
#define G4SigmaPlusField_h 1
#include "G4VNuclearField.hh"
class G4SigmaPlusField: public G4VNuclearField
{
public:
G4SigmaPlusField(G4V3DNucleus * nucleus, G4double coeff = 0.36*fermi);
virtual ~G4SigmaPlusField();
private:
G4SigmaPlusField(const G4SigmaPlusField &right);
const G4SigmaPlusField & operator=(const G4SigmaPlusField & right);
int operator==(const G4SigmaPlusField & right) const;
int operator!=(const G4SigmaPlusField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4SigmaZeroField.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4SigmaZeroField_h
#define G4SigmaZeroField_h 1
#include "G4VNuclearField.hh"
class G4SigmaZeroField: public G4VNuclearField
{
public:
G4SigmaZeroField(G4V3DNucleus * nucleus, G4double coeff = 0.36*fermi);
virtual ~G4SigmaZeroField();
private:
G4SigmaZeroField(const G4SigmaZeroField &right);
const G4SigmaZeroField & operator=(const G4SigmaZeroField & right);
int operator==(const G4SigmaZeroField & right) const;
int operator!=(const G4SigmaZeroField & right) const;
public:
virtual G4double GetField(const G4ThreeVector & aPosition);
virtual G4double GetBarrier();
virtual G4double GetCoeff() { return theCoeff; }
private:
G4double theCoeff;
};
#endif
@@ -0,0 +1,52 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
#ifndef G4VFieldPropagation_h
#define G4VFieldPropagation_h 1
#include "G4KineticTrackVector.hh"
#include "G4V3DNucleus.hh"
class G4VFieldPropagation
{
public:
G4VFieldPropagation();
virtual ~G4VFieldPropagation();
private:
G4VFieldPropagation(const G4VFieldPropagation &right);
const G4VFieldPropagation & operator=(const G4VFieldPropagation & right);
G4int operator==(const G4VFieldPropagation & right) const;
G4int operator!=(const G4VFieldPropagation & right) const;
public:
virtual void Init(G4V3DNucleus * theNucleus) = 0;
virtual void Transport(G4KineticTrackVector &theActive,
const G4KineticTrackVector &theSpectators,
G4double theTimeStep) = 0;
virtual G4ThreeVector GetMomentumTransfer() const =0;
};
#endif
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
// GEANT 4 class header file
//
// CERN, Geneva, Switzerland
//
// File name: G4VKM_NuclearDensity.hh
//
// Author: Alessandro Brunengo (Alessandro.Brunengo@ge.infn.it)
//
// Creation date: 5 June 2000
// -------------------------------------------------------------------
#ifndef G4VKM_NuclearDensity_hh
#define G4VKM_NuclearDensity_hh
#include "globals.hh"
#include "G4ThreeVector.hh"
class G4VKM_NuclearDensity
{
public:
G4VKM_NuclearDensity();
virtual ~G4VKM_NuclearDensity();
virtual G4double GetDensity(const G4ThreeVector & point) = 0;
virtual G4double GetDeriv(const G4ThreeVector & point) = 0;
};
inline G4VKM_NuclearDensity::G4VKM_NuclearDensity()
{ }
inline G4VKM_NuclearDensity::~G4VKM_NuclearDensity()
{ }
#endif
@@ -0,0 +1,65 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * 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. *
// ********************************************************************
//
#ifndef G4VNuclearField_h
#define G4VNuclearField_h 1
#include "globals.hh"
#include "G4ThreeVector.hh"
#include "G4V3DNucleus.hh"
#include "G4HadronicException.hh"
class G4VNuclearField
{
public:
G4VNuclearField(G4V3DNucleus * aNucleus = 0);
virtual ~G4VNuclearField();
void SetNucleus(G4V3DNucleus * aNucleus);
virtual G4double GetField(const G4ThreeVector & aPosition) = 0;
virtual G4double GetBarrier() = 0;
virtual G4double GetCoeff() { return 0; }
protected:
G4V3DNucleus * theNucleus;
const G4double radius;
private:
G4VNuclearField(const G4VNuclearField &right);
const G4VNuclearField & operator=(const G4VNuclearField & right);
G4int operator==(const G4VNuclearField & right) const;
G4int operator!=(const G4VNuclearField & right) const;
};
inline void G4VNuclearField::SetNucleus(G4V3DNucleus * aNucleus)
{
theNucleus = aNucleus;
}
#endif