Files
geant4/source/processes/hadronic/models/cascade/pre_compound/include/G4PreEquilibrium.hh
T
2016-06-08 16:57:27 +02:00

480 lines
14 KiB
C++

//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// $Id: G4PreEquilibrium.hh,v 1.9 2001/07/11 10:03:54 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
// Hadronic Process: Pre-equilibrium HETC
// Joseph L. Chuma, TRIUMF, 24-Mar-2000
#ifndef G4PREEQUILIBRIUM
#define G4PREEQUILIBRIUM
#include "globals.hh"
#include "G4DynamicParticle.hh"
#include "G4Nucleus.hh"
#include "g4std/vector"
class G4PreEquilibrium
{
private:
struct EXITON
{
G4int protons;
G4int neutrons;
G4int hols; // not sure what these are
};
struct MASTRUCT
{
G4ThreeVector momentum;
G4double array[6];
};
struct PARZS
{
G4int particleType;
G4double energy;
G4double angle1;
G4double angle2;
G4double what;
G4double charge;
};
struct IPSTRUCT
{
G4int proton;
G4int ip1;
G4int ip2;
G4int nuclearZone;
G4int ip4; // values from 0 to N
};
#define G4Vector G4std::vector
typedef G4Vector< G4DynamicParticle* > DPvector;
typedef G4Vector< G4double > Dvector;
typedef G4Vector< G4int > Ivector;
typedef G4Vector< MASTRUCT > MAvector;
typedef G4Vector< PARZS > PARZvector;
typedef G4Vector< IPSTRUCT > IPvector;
public:
G4PreEquilibrium( G4Nucleus *aNucleus )
: theNucleus(aNucleus)
{}
~G4PreEquilibrium()
{}
G4PreEquilibrium operator=( const G4PreEquilibrium & );
G4PreEquilibrium( const G4PreEquilibrium & );
private:
void mashnk( G4int &, const G4double, const G4double, const G4double,
const G4double, const G4double, const G4double, const G4double );
G4double cemgeo( const G4int, const G4int );
G4double bf( const G4double, const G4double, const G4double );
G4double quadraticInterpolation( const G4double, const G4double *,
const G4double *, const G4int );
G4double massDefect( const G4double, const G4double ) const;
G4double gamagu( const G4int );
G4double tkin( const G4int, const G4double );
void transitionRates( const G4double, const G4double,
G4double &, G4double &, G4double & );
G4double tkinm1( const G4int, const G4double, const G4double );
G4double barfit( const G4double, const G4double, const G4int );
G4bool cascem( G4ThreeVector );
void cascem1( G4ThreeVector, MASTRUCT &, IPSTRUCT &, G4int & );
G4bool pointe( MASTRUCT &, IPSTRUCT &, G4double *, G4int *,
G4ThreeVector, G4double, G4double, G4double,
G4double, G4double, const G4double );
G4double geometricalParticlePath( const MASTRUCT, const IPSTRUCT );
G4bool refrac( const G4int, MASTRUCT &, IPSTRUCT & ) const;
G4double wopt( const G4double, const G4double, const G4int );
void typint( MASTRUCT &, IPSTRUCT &, G4double *, G4int *, G4ThreeVector,
G4double, G4double, G4double, G4double, G4double, G4int, G4int & );
G4int elasticScattering( const G4ThreeVector, const G4double, const G4double, const MASTRUCT,
const IPSTRUCT, const G4int *, const G4int, const G4int,
const G4int, const G4int, const G4int, const G4int );
G4bool inelasticScattering( MASTRUCT &, IPSTRUCT &, G4int *, G4int, G4int, G4int,
G4int, G4int, G4ThreeVector, G4double, G4double, G4int, G4int );
G4double wim( const G4int, const MASTRUCT, const IPSTRUCT );
void pauliPrinciple( MASTRUCT &, IPSTRUCT &, G4ThreeVector, G4int, G4int, const G4int );
void absorption( const MASTRUCT, const IPSTRUCT, G4double *, G4int, G4int &, G4ThreeVector );
void chargeInAbsorption( const G4int, const G4int, G4int &, G4int & );
void momentaCalc( const MASTRUCT, const G4ThreeVector, const G4double, G4ThreeVector,
G4ThreeVector, const G4double, const G4double, const G4double );
void partnerSelection( const MASTRUCT, const IPSTRUCT, G4double *, G4int * );
void chinel( IPSTRUCT &, const G4int, const G4int, const G4int, const G4int,
const G4int, const G4int, const G4double, const G4int, G4int * );
void direction( G4ThreeVector, const G4double, const G4double, const G4int,
const G4int, const G4int, const MASTRUCT, G4int &, const G4int );
G4int coefficientTypeA( const G4int, const G4int, const G4int );
G4bool vmnsp( const MASTRUCT, const IPSTRUCT, const G4double, const G4int,
G4int &, const G4int, const G4int, const G4double );
G4double secondaryParticleMomentum( const G4int, const G4double );
G4int coefficientTypeB( const G4int, const G4int, const G4int );
void statisticalModel( const G4double, const G4ThreeVector, const MASTRUCT,
const G4int *, const G4int );
void isocem( const G4double, const G4ThreeVector, const G4double, const MASTRUCT,
const G4int *, const G4int );
G4ThreeVector cms( const G4ThreeVector, const G4ThreeVector, const G4double ) const;
void bertcem( const G4int, const G4int );
G4double fintfis( const G4double, const G4double, const G4double, const G4double );
G4double fints2( G4double, G4double, G4double, G4double );
G4double erupcem( DPvector &, DPvector &, DPvector &, DPvector &, DPvector &, DPvector & );
void precof();
G4double arfaf( G4double * );
G4double fam( const G4double, const G4double, const G4double );
G4double gameqf( const G4int, const G4double, const G4double, const G4double, const G4double );
G4double poten( const G4int, const IPSTRUCT ) const;
G4double cinema( const G4ThreeVector, const G4ThreeVector, G4ThreeVector &,
G4double &, G4double &, G4double &, G4double &, const G4double ) const;
G4ThreeVector rotation( const G4ThreeVector, const G4ThreeVector, const G4ThreeVector ) const;
G4double crossSectionInterp( const G4double, const G4int );
G4double sigmat( const G4int, const G4int, const G4int,
const G4int, const G4int, const G4double );
void slqek( G4int &, G4int &, G4int &, G4int &, G4int &,
const G4int, const G4int, const G4int,
const G4int, const G4int, const G4int,
const G4int, const G4int );
G4double costa( const G4int, const G4double );
G4double cosex( const G4int, const G4double, const G4double );
G4double cosel( const G4int, const G4int, const G4int,
const G4double, const G4double );
void lpoly( const G4double, const G4int, G4double * );
inline void SetINDI( const G4bool v )
{ indi = v; }
inline G4bool GetINDI() const
{ return indi; }
inline void SetING( const G4int i )
{ ing = i; }
inline G4int GetING() const
{ return ing; }
inline void SetCM0( const G4double v )
{ cm0 = v; }
inline G4double GetCM0() const
{ return cm0; }
inline void SetT0( const G4double v )
{ t0 = v; }
inline G4double GetT0() const
{ return t0; }
inline void SetT1( const G4double v )
{ t1 = v; }
inline G4double GetT1() const
{ return t1; }
inline void SetT2( const G4double v )
{ t2 = v; }
inline G4double GetT2() const
{ return t2; }
inline void SetME0( const G4double v )
{ me0 = v; }
inline G4double GetME0() const
{ return me0; }
inline void SetMQ0( const G4double v )
{ mq0 = v; }
inline G4double GetMQ0() const
{ return mq0; }
inline void SetA( const G4double v )
{ a = v; }
inline G4double GetA() const
{ return a; }
inline void SetZ( const G4double v )
{ z = v; }
inline G4double GetZ() const
{ return z; }
inline G4double GetUP() const
{ return up; }
inline void SetUP( const G4double v )
{ up = v; }
inline void SetU( const G4double v )
{ u = v; }
inline G4double GetU() const
{ return u; }
inline G4double GetT1Y( const G4int i ) const
{ return t1y[i]; }
inline G4double GetT2XY( const G4int i ) const
{ return t2xy[i]; }
inline G4double shell( const G4double a, const G4double z )
{
// Cameron (Can.J.Phys.35(1957)1021) shell and pairing corrections
//
return t1y[int(z)-1] + t2xy[int(a-z)-1];
}
inline void SetRBIG( const G4int i, const G4double v )
{ rbig[i] = v; }
inline G4double GetRBIG( const G4int i ) const
{ return rbig[i]; }
inline void SetR0( const G4double v )
{ r0 = v; }
inline G4double GetR0() const
{ return r0; }
inline G4double SetBN( const G4double v )
{ bn = v; }
inline G4double GetBN() const
{ return bn; }
inline void SetAC( const G4double v )
{ ac = v; }
inline G4double GetAC() const
{ return ac; }
inline G4int GetN0() const
{ return n0; }
inline void SetN0( const G4int v )
{ n0 = v; }
inline G4int GetH0() const
{ return h0; }
inline void SetH0( const G4int v )
{ h0 = v; }
inline G4int GetP0() const
{ return p0; }
inline void SetP0( const G4int v )
{ p0 = v; }
inline G4int GetPZ0() const
{ return pz0; }
inline void SetPZ0( const G4int v )
{ pz0 = v; }
inline G4ThreeVector GetLXYZ() const
{ return lxyz; }
inline void SetLXYZ( const G4ThreeVector v )
{ lxyz = v; }
inline void SetWF( const G4double v )
{ wf = v; }
inline G4double GetWF() const
{ return wf; }
inline void SetANG1( const G4int i, const G4int j, const G4int k, const G4double v )
{ ang1[i][j][k] = v; }
inline G4double GetANG1( const G4int i, const G4int j, const G4int k ) const
{ return ang1[i][j][k]; }
inline void SetANG2( const G4int i, const G4int j, const G4int k, const G4double v )
{ ang2[i][j][k] = v; }
inline G4double GetANG2( const G4int i, const G4int j, const G4int k ) const
{ return ang2[i][j][k]; }
inline void SetEPART( const G4int i, const G4int j, const G4double v )
{ epart[i][j] = v; }
inline G4double GetEPART( const G4int i, const G4int j ) const
{ return epart[i][j]; }
inline void SetHEPART( const G4int i, const G4int j, const G4double v )
{ hepart[i][j] = v; }
inline G4double GetHEPART( const G4int i, const G4int j ) const
{ return hepart[i][j]; }
inline void SetNHIST( const G4int v )
{ nhist = v; }
inline G4double GetNHIST() const
{ return nhist; }
inline G4double GetZ_FCOMON( const G4int i, const G4int j ) const
{ return z_fcomon[i][j]; }
inline G4double GetA_FCOMON( const G4int i, const G4int j ) const
{ return a_fcomon[i][j]; }
private:
static G4double t1y[130];
static G4double t2xy[200];
static G4double oneThird;
static G4double twoThirds;
static G4double fourThirds;
EXITON exitons;
G4ThreeVector lxyz;
Dvector rbig;
Dvector af;
Dvector ngen;
Dvector gb;
Dvector alj;
Dvector afj;
Dvector zfj;
Dvector rj;
Dvector vj;
Dvector bj;
Dvector r0j;
Dvector rsm;
Dvector rhon;
Dvector rhop;
Dvector tfp;
Dvector tfn;
G4Vector< Dvector* > spt;
MAvector pmemo;
PARZvector parz;
IPvector imemo;
G4Nucleus *theNucleus;
G4bool indi;
G4int n0;
G4int nhist;
G4int h0;
G4int p0;
G4int pz0;
G4int KTOT;
G4int ing;
G4double up; // excitation energy before evaporation
G4double ap; // atomic weight before evaporation
G4double zp; // atomic number before evaporation
G4double u; // excitation energy after evaporation
G4double a; // atomic weight after evaporation
G4double z; // atomic number after evaporation
G4double wf;
G4double ac;
G4double exn;
G4double r0;
G4double cm0;
G4double t0;
G4double t1;
G4double t2;
G4double mq0;
G4double me0;
G4double bn;
G4double wam;
G4double aNucl;
G4double zNucl;
G4double a_fcomon[10][17];
G4double z_fcomon[10][17];
G4double epart[100][2];
G4double hepart[100][4];
G4double ang1[100][3][2];
G4double ang2[100][3][4];
};
#endif