Geant4  10.02.p03
G4NeutronField Class Reference

#include <G4NeutronField.hh>

Inheritance diagram for G4NeutronField:
Collaboration diagram for G4NeutronField:

Public Member Functions

 G4NeutronField (G4V3DNucleus *nucleus)
 
virtual ~G4NeutronField ()
 
virtual G4double GetField (const G4ThreeVector &aPosition)
 
virtual G4double GetBarrier ()
 
- Public Member Functions inherited from G4VNuclearField
 G4VNuclearField (G4V3DNucleus *aNucleus=0)
 
virtual ~G4VNuclearField ()
 
void SetNucleus (G4V3DNucleus *aNucleus)
 
virtual G4double GetCoeff ()
 

Private Member Functions

 G4NeutronField (const G4NeutronField &right)
 
const G4NeutronFieldoperator= (const G4NeutronField &right)
 
int operator== (const G4NeutronField &right) const
 
int operator!= (const G4NeutronField &right) const
 
G4double GetDensity (const G4ThreeVector &aPosition)
 
G4double GetFermiMomentum (const G4double aDensity)
 

Private Attributes

G4FermiMomentum theFermi
 
G4int theA
 
G4int theZ
 
const G4VNuclearDensitytheDensity
 
G4double theR
 
std::vector< G4doubletheFermiMomBuffer
 

Additional Inherited Members

- Protected Attributes inherited from G4VNuclearField
G4V3DNucleustheNucleus
 
const G4double radius
 

Detailed Description

Definition at line 48 of file G4NeutronField.hh.

Constructor & Destructor Documentation

◆ G4NeutronField() [1/2]

G4NeutronField::G4NeutronField ( G4V3DNucleus nucleus)

Definition at line 45 of file G4NeutronField.cc.

45  :
47 {
52  for (G4double aR=0.;aR<theR; aR+=0.3*fermi)
53  {
54  G4ThreeVector aPosition(0,0,aR);
55  G4double density = GetDensity(aPosition);
56  G4double fermiMom = GetFermiMomentum(density);
57  theFermiMomBuffer.push_back(fermiMom);
58  }
59  {
60  G4ThreeVector aPosition(0,0,theR);
61  G4double density = GetDensity(aPosition);
62  G4double fermiMom = GetFermiMomentum(density);
63  theFermiMomBuffer.push_back(fermiMom);
64  }
65  {
66  G4ThreeVector aPosition(0,0,theR+0.001*fermi);
67  theFermiMomBuffer.push_back(0);
68  }
69  {
70  G4ThreeVector aPosition(0,0,1.*m);
71  theFermiMomBuffer.push_back(0);
72  }
73 }
G4FermiMomentum theFermi
virtual G4int GetCharge()=0
G4double GetDensity(const G4ThreeVector &aPosition)
G4VNuclearField(G4V3DNucleus *aNucleus=0)
virtual const G4VNuclearDensity * GetNuclearDensity() const =0
virtual G4int GetMassNumber()=0
virtual G4double GetOuterRadius()=0
G4double density
Definition: TRTMaterials.hh:39
std::vector< G4double > theFermiMomBuffer
void Init(G4int anA, G4int aZ)
const G4VNuclearDensity * theDensity
G4V3DNucleus * theNucleus
static const double m
Definition: G4SIunits.hh:128
double G4double
Definition: G4Types.hh:76
G4double GetFermiMomentum(const G4double aDensity)
static const double fermi
Definition: G4SIunits.hh:102
Here is the call graph for this function:

◆ ~G4NeutronField()

G4NeutronField::~G4NeutronField ( )
virtual

Definition at line 75 of file G4NeutronField.cc.

76 { }

◆ G4NeutronField() [2/2]

G4NeutronField::G4NeutronField ( const G4NeutronField right)
private

Member Function Documentation

◆ GetBarrier()

G4double G4NeutronField::GetBarrier ( )
virtual

Implements G4VNuclearField.

Definition at line 91 of file G4NeutronField.cc.

92 {
93 /*
94  * G4double A = theNucleus->GetMassNumber();
95  * G4double Z = theNucleus->GetCharge();
96  *
97  * return G4NucleiPropertiesTable::GetBindingEnergy(Z, A)/A;
98  */
99  return 0.;
100 }

◆ GetDensity()

G4double G4NeutronField::GetDensity ( const G4ThreeVector aPosition)
inlineprivate

Definition at line 68 of file G4NeutronField.hh.

69  {
70  return theDensity->GetDensity(aPosition);
71  }
G4double GetDensity(const G4ThreeVector &aPosition) const
const G4VNuclearDensity * theDensity
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFermiMomentum()

G4double G4NeutronField::GetFermiMomentum ( const G4double  aDensity)
inlineprivate

Definition at line 73 of file G4NeutronField.hh.

74  {
75  return theFermi.GetFermiMomentum(aDensity);
76  }
G4FermiMomentum theFermi
G4double GetFermiMomentum(G4double density)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetField()

G4double G4NeutronField::GetField ( const G4ThreeVector aPosition)
virtual

Implements G4VNuclearField.

Definition at line 78 of file G4NeutronField.cc.

79 {
80  G4double x = aPosition.mag();
81  unsigned int index = static_cast<unsigned int>(x/(0.3*fermi));
82  if( (index+2) > theFermiMomBuffer.size()) return theFermiMomBuffer.back();
84  G4double y2 = theFermiMomBuffer[index+1];
85  G4double x1 = (0.3*fermi)*index;
86  G4double x2 = (0.3*fermi)*(index+1);
87  G4double fermiMom = y1 + (x-x1)*(y2-y1)/(x2-x1);
88  return -1*(fermiMom*fermiMom)/(2*neutron_mass_c2);
89 }
Double_t y2[nxs]
Double_t y1[nxs]
Double_t x2[nxs]
Int_t index
std::vector< G4double > theFermiMomBuffer
double mag() const
Double_t x1[nxs]
float neutron_mass_c2
Definition: hepunit.py:276
double G4double
Definition: G4Types.hh:76
static const double fermi
Definition: G4SIunits.hh:102
Here is the call graph for this function:

◆ operator!=()

int G4NeutronField::operator!= ( const G4NeutronField right) const
private

◆ operator=()

const G4NeutronField& G4NeutronField::operator= ( const G4NeutronField right)
private

◆ operator==()

int G4NeutronField::operator== ( const G4NeutronField right) const
private

Member Data Documentation

◆ theA

G4int G4NeutronField::theA
private

Definition at line 79 of file G4NeutronField.hh.

◆ theDensity

const G4VNuclearDensity* G4NeutronField::theDensity
private

Definition at line 81 of file G4NeutronField.hh.

◆ theFermi

G4FermiMomentum G4NeutronField::theFermi
private

Definition at line 78 of file G4NeutronField.hh.

◆ theFermiMomBuffer

std::vector<G4double> G4NeutronField::theFermiMomBuffer
private

Definition at line 84 of file G4NeutronField.hh.

◆ theR

G4double G4NeutronField::theR
private

Definition at line 82 of file G4NeutronField.hh.

◆ theZ

G4int G4NeutronField::theZ
private

Definition at line 80 of file G4NeutronField.hh.


The documentation for this class was generated from the following files: