Import Geant4 3.1.0 source tree
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
// based on the Program) you indicate your acceptance of this statement,
|
||||
// and all its terms.
|
||||
//
|
||||
// $Id: G4SandiaTable.hh,v 1.6 2000/06/15 17:35:25 gcosmo Exp $
|
||||
// GEANT4 tag $Name: geant4-03-00 $
|
||||
// $Id: G4SandiaTable.hh,v 1.8 2001/04/03 12:32:54 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-03-01 $
|
||||
|
||||
// class description
|
||||
//
|
||||
@@ -17,6 +17,9 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
//
|
||||
// 03.04.01 fnulcof[4] added; returned if energy < emin
|
||||
// 30.01.01 major bug in the computation of AoverAvo and in the units (/g!)
|
||||
// in GetSandiaCofPerAtom(). mma
|
||||
// 18.11.98 simplified public interface; new methods for materials. mma
|
||||
// 10.06.97 created. V. Grichine
|
||||
//
|
||||
@@ -54,12 +57,34 @@ public: // with description
|
||||
G4double GetSandiaCofForMaterial(G4int,G4int);
|
||||
G4double* GetSandiaCofForMaterial(G4double energy);
|
||||
|
||||
public: // without description
|
||||
|
||||
private:
|
||||
|
||||
void ComputeMatSandiaMatrix();
|
||||
|
||||
private:
|
||||
|
||||
static const G4double fSandiaTable[981][5];
|
||||
static const G4int fNbOfIntervals[101];
|
||||
static G4int fCumulInterval[101];
|
||||
static const G4double fZtoAratio[101];
|
||||
static const G4double fIonizationPotentials[101];
|
||||
|
||||
static G4double fSandiaCofPerAtom[4];
|
||||
|
||||
G4Material* fMaterial;
|
||||
G4int fMatNbOfIntervals;
|
||||
G4OrderedTable* fMatSandiaMatrix;
|
||||
|
||||
G4double fnulcof[4];
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Methods for PAI model
|
||||
|
||||
public: // without description
|
||||
|
||||
inline void SandiaSwap( G4double** da,
|
||||
G4int i,
|
||||
G4int j );
|
||||
@@ -81,28 +106,11 @@ public: // without description
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
void ComputeMatSandiaMatrix();
|
||||
|
||||
private:
|
||||
|
||||
static const G4double fSandiaTable[981][5];
|
||||
static const G4int fNbOfIntervals[101];
|
||||
static G4int fCumulInterval[101];
|
||||
static const G4double fZtoAratio[101];
|
||||
static const G4double fIonizationPotentials[101];
|
||||
|
||||
static G4double fSandiaCofPerAtom[4];
|
||||
|
||||
G4Material* fMaterial;
|
||||
G4int fMatNbOfIntervals;
|
||||
G4OrderedTable* fMatSandiaMatrix;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// data members for PAI model
|
||||
|
||||
private:
|
||||
static const G4int fNumberOfElements ;
|
||||
static const G4int fIntervalLimit ;
|
||||
static const G4int fNumberOfIntervals ;
|
||||
@@ -114,6 +122,9 @@ private:
|
||||
// G4OrderedTable*
|
||||
G4int fMaxInterval ;
|
||||
|
||||
//
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
};
|
||||
|
||||
@@ -138,8 +149,8 @@ G4double G4SandiaTable::GetSandiaCofPerAtom(G4int Z, G4int interval, G4int j)
|
||||
|
||||
G4int row = fCumulInterval[Z-1] + interval;
|
||||
if (j==0) return fSandiaTable[row][0]*keV;
|
||||
G4double AoverAvo = Z/(fZtoAratio[Z]*Avogadro*mole);
|
||||
return fSandiaTable[row][j]*AoverAvo*cm2*pow(keV,G4double(j));
|
||||
G4double AoverAvo = Z*amu/fZtoAratio[Z];
|
||||
return AoverAvo*(fSandiaTable[row][j]*cm2*pow(keV,G4double(j))/g);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
@@ -148,19 +159,24 @@ inline
|
||||
G4double* G4SandiaTable::GetSandiaCofPerAtom(G4int Z, G4double energy)
|
||||
{
|
||||
assert (Z > 0);
|
||||
|
||||
G4double Emin = fSandiaTable[fCumulInterval[Z-1]][0]*keV;
|
||||
G4double Iopot = fIonizationPotentials[Z]*eV;
|
||||
if (Iopot > Emin) Emin = Iopot;
|
||||
|
||||
G4int interval = fNbOfIntervals[Z] - 1;
|
||||
G4int row = fCumulInterval[Z-1] + interval;
|
||||
while ((interval>0) && (energy<fSandiaTable[row][0]*keV))
|
||||
row = fCumulInterval[Z-1] + --interval;
|
||||
|
||||
if (energy >= fIonizationPotentials[Z]*eV)
|
||||
if (energy >= Emin)
|
||||
{
|
||||
G4double AoverAvo = Z/(fZtoAratio[Z]*Avogadro*mole);
|
||||
G4double AoverAvo = Z*amu/fZtoAratio[Z];
|
||||
|
||||
fSandiaCofPerAtom[0]=fSandiaTable[row][1]*AoverAvo*cm2*keV;
|
||||
fSandiaCofPerAtom[1]=fSandiaTable[row][2]*AoverAvo*cm2*keV*keV;
|
||||
fSandiaCofPerAtom[2]=fSandiaTable[row][3]*AoverAvo*cm2*keV*keV*keV;
|
||||
fSandiaCofPerAtom[3]=fSandiaTable[row][4]*AoverAvo*cm2*keV*keV*keV*keV;
|
||||
fSandiaCofPerAtom[0]=AoverAvo*(fSandiaTable[row][1]*cm2*keV/g);
|
||||
fSandiaCofPerAtom[1]=AoverAvo*(fSandiaTable[row][2]*cm2*keV*keV/g);
|
||||
fSandiaCofPerAtom[2]=AoverAvo*(fSandiaTable[row][3]*cm2*keV*keV*keV/g);
|
||||
fSandiaCofPerAtom[3]=AoverAvo*(fSandiaTable[row][4]*cm2*keV*keV*keV*keV/g);
|
||||
}
|
||||
else
|
||||
fSandiaCofPerAtom[0] = fSandiaCofPerAtom[1] = fSandiaCofPerAtom[2] =
|
||||
|
||||
Reference in New Issue
Block a user