Import Geant4 0.0.0 source tree
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# $Id: GNUmakefile,v 2.2 1998/08/22 01:33:23 gcosmo Exp $
|
||||
# --------------------------------------------------------------
|
||||
# GNUmakefile for materials library. Gabriele Cosmo, 18/9/96.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
name := G4materials
|
||||
|
||||
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
|
||||
|
||||
include $(G4INSTALL)/config/common.gmk
|
||||
|
||||
.PHONY: global
|
||||
|
||||
global: lib
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
$Id: History,v 2.5 1998/08/13 09:58:23 maire Exp $
|
||||
-------------------------------------------------------------------
|
||||
|
||||
=========================================================
|
||||
Geant4 - an Object-Oriented Toolkit for Simulation in HEP
|
||||
=========================================================
|
||||
|
||||
Category History file
|
||||
---------------------
|
||||
This file should be used by G4 developers and category coordinators
|
||||
to briefly summarize all major modifications introduced in the code
|
||||
and keep track of all category-tags.
|
||||
It DOES NOT substitute the CVS log-message one should put at every
|
||||
committal in the CVS repository !
|
||||
|
||||
----------------------------------------------------------
|
||||
* Reverse chronological order (last date on top), please *
|
||||
----------------------------------------------------------
|
||||
|
||||
August 13, 98 M.Maire - materials-00-02-01
|
||||
new static method G4Material::GetMaterial(name)
|
||||
|
||||
July 17, 98 M.Maire - materials-00-01-04
|
||||
correction in ComputeDensityCorrection() for gas
|
||||
(G4IonisParamMat.cc)
|
||||
|
||||
July 10, 98 M.Maire - materials-00-01-03
|
||||
Ionisation parameters put in a subclass
|
||||
coworks with em-00-01-03
|
||||
|
||||
July 8, 98 M.Maire - materials-00-01-02
|
||||
restored G4MaterialTable, ElementTable, ElementVector
|
||||
to be compatible with pre-beta01-02
|
||||
|
||||
July 7, 98 M.Maire - materials-00-01-01
|
||||
continue cleanup: Elements and Materials
|
||||
new output formats: operator<< overloaded
|
||||
|
||||
June 30, 98 M.Maire - materials-00-07-01
|
||||
new method AddMaterial() for mixture of mixtures.
|
||||
start the cleanup of the category. G4Isotope done.
|
||||
G4IsotopeTable typedef directly include in G4Isotope.hh
|
||||
G4MaterialTest.cc illustrate all possible case to
|
||||
define materials.
|
||||
|
||||
|
||||
June 06, 98 M.Maire - materials-00-06-01
|
||||
new G4AtomicShells class (Vladimir)
|
||||
kState = kVacuum removed (minimal lower density set
|
||||
by default)
|
||||
|
||||
April 17, 98 M.Maire - materials-00-05-01
|
||||
|
||||
April 08, 98 G.Cosmo
|
||||
- Added fixes for DEC-cxx 6.0 compiler, related to for-loop index
|
||||
declarations. Modified G4SandiaTable.cc.
|
||||
|
||||
March 5, 98 M.Maire - materials-00-04-01
|
||||
|
||||
January 29, 98 M.Maire - materials-00-03-01
|
||||
|
||||
December 19, 97 G.Cosmo - (alpha03)
|
||||
- Created.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,201 @@
|
||||
// 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: G4Element.hh,v 2.8 1998/11/16 17:26:43 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------- class G4Element -------------------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
// An element is a chemical element either directly defined in terms of
|
||||
// its charactaristics: its name, symbol,
|
||||
// Z (effective atomic number)
|
||||
// N (effective number of nucleons)
|
||||
// A (effective mass of a mole)
|
||||
// or in terms of a collection of constituent isotopes with specified
|
||||
// relative abundance (i.e. fraction of nb of atomes per volume).
|
||||
//
|
||||
// Quantities, with physical meaning or not, which are constant in a given
|
||||
// element are computed and stored here as Derived data members.
|
||||
//
|
||||
// The class contains as a private static member the table of defined
|
||||
// elements (an ordered vector of elements).
|
||||
//
|
||||
// Elements can be assembled singly or in mixtures into materials used
|
||||
// in volume definitions via the G4Material class.
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 09-07-96, new data members added by L.Urban
|
||||
// 17-01-97, aesthetic rearrangement, M.Maire
|
||||
// 20-01-97, Tsai formula for the rad length, M.Maire
|
||||
// 21-01-97, remove mixture flag, M.Maire
|
||||
// 24-01-97, new data member: fTaul
|
||||
// new method: ComputeIonisationPara, M.Maire
|
||||
// 20-03-97, corrected initialization of pointers, M.Maire
|
||||
// 27-06-97, new function GetIsotope(int), M.Maire
|
||||
// 24-02-98, fWeightVector becomes fRelativeAbundanceVector
|
||||
// 27-04-98, atomic shell stuff, V. Grichine
|
||||
// 09-07-98, Ionisation parameters removed from the class, M.Maire
|
||||
// 04-08-98, new method GetElement(elementName), M.Maire
|
||||
// 16-11-98, Subshell -> Shell, mma
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4ELEMENT_HH
|
||||
#define G4ELEMENT_HH
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include <rw/tpvector.h>
|
||||
#include <rw/tpordvec.h>
|
||||
#include "globals.hh"
|
||||
#include "G4Isotope.hh"
|
||||
#include "G4AtomicShells.hh"
|
||||
#include "G4IonisParamElm.hh"
|
||||
|
||||
typedef RWTPtrVector<G4Isotope> G4IsotopeVector;
|
||||
|
||||
class G4Element; //forward declaration
|
||||
typedef RWTPtrOrderedVector<G4Element> G4ElementTable;
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4Element
|
||||
{
|
||||
public:
|
||||
|
||||
//
|
||||
// Constructor to Build an element directly; no reference to isotopes
|
||||
//
|
||||
G4Element(const G4String& name, //its name
|
||||
const G4String& symbol, //its symbol
|
||||
G4double Zeff, //atomic number
|
||||
G4double Aeff); //mass of mole
|
||||
|
||||
//
|
||||
// Constructor to Build an element from isotopes via AddIsotope
|
||||
//
|
||||
G4Element(const G4String& name, //its name
|
||||
const G4String& symbol, //its symbol
|
||||
G4int nbIsotopes); //nb of isotopes
|
||||
|
||||
//
|
||||
// Add an isotope to the element
|
||||
//
|
||||
void AddIsotope(G4Isotope* isotope, //isotope
|
||||
G4double RelativeAbundance); //fraction of nb of
|
||||
//atomes per volume
|
||||
|
||||
~G4Element();
|
||||
|
||||
//
|
||||
// retrieval methods
|
||||
//
|
||||
G4String GetName() const {return fName;};
|
||||
G4String GetSymbol() const {return fSymbol;};
|
||||
G4double GetZ() const {return fZeff;};
|
||||
G4double GetN() const {return fNeff;};
|
||||
G4double GetA() const {return fAeff;};
|
||||
|
||||
G4int GetNbOfAtomicShells() const {return fNbOfAtomicShells;};
|
||||
G4double GetAtomicShell(G4int) const;
|
||||
|
||||
G4IsotopeVector* GetIsotopeVector() const {return theIsotopeVector;};
|
||||
size_t GetNumberOfIsotopes() const {return fNumberOfIsotopes;};
|
||||
G4double* GetRelativeAbundanceVector() const {return fRelativeAbundanceVector;};
|
||||
const G4Isotope* GetIsotope(G4int iso) const {return (*theIsotopeVector)[iso];};
|
||||
|
||||
static
|
||||
const G4ElementTable* GetElementTable() {return &theElementTable;};
|
||||
static
|
||||
size_t GetNumberOfElements() {return theElementTable.length();};
|
||||
size_t GetIndex() const {return fIndexInTable;};
|
||||
|
||||
static G4Element* GetElement(G4String name);
|
||||
|
||||
G4double GetfCoulomb() const {return fCoulomb;};
|
||||
G4double GetfRadTsai() const {return fRadTsai;};
|
||||
|
||||
G4IonisParamElm* GetIonisation() const {return fIonisation;};
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Element*);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Element&);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4ElementTable);
|
||||
|
||||
G4int operator==(const G4Element&) const;
|
||||
G4int operator!=(const G4Element&) const;
|
||||
|
||||
private:
|
||||
|
||||
G4Element(G4Element &right);
|
||||
const G4Element & operator=(const G4Element &right);
|
||||
|
||||
private:
|
||||
|
||||
void InitializePointers();
|
||||
void ComputeDerivedQuantities();
|
||||
void ComputeCoulombFactor();
|
||||
void ComputeLradTsaiFactor();
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
// Basic data members (which define an Element)
|
||||
//
|
||||
G4String fName; // name
|
||||
G4String fSymbol; // symbol
|
||||
G4double fZeff; // Effective atomic number
|
||||
G4double fNeff; // Effective number of nucleons
|
||||
G4double fAeff; // Effective mass of a mole
|
||||
|
||||
G4int fNbOfAtomicShells; // number of atomic shells
|
||||
G4double* fAtomicShells ; // Pointer to atomic shell binding energies
|
||||
|
||||
// Isotope vector contains constituent isotopes of the element
|
||||
size_t fNumberOfIsotopes; // Number of isotopes added to the element
|
||||
G4IsotopeVector* theIsotopeVector;
|
||||
G4double* fRelativeAbundanceVector; // Fraction of nb of atomes per volume
|
||||
// for each constituent
|
||||
|
||||
// Set up the static Table of Elements
|
||||
static G4ElementTable theElementTable;
|
||||
size_t fIndexInTable; // Position of the element in the table
|
||||
|
||||
//
|
||||
// Derived data members (computed from the basic data members)
|
||||
//
|
||||
G4double fCoulomb; // Coulomb correction factor
|
||||
G4double fRadTsai; // Tsai formula for the radiation length
|
||||
G4IonisParamElm* fIonisation; // Pointer to ionisation parameters
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4Element* G4Element::GetElement(G4String elementName)
|
||||
{
|
||||
// search the element by its name
|
||||
for (G4int J=0 ; J<theElementTable.length() ; J++)
|
||||
{
|
||||
if(theElementTable[J]->GetName() == elementName)
|
||||
return theElementTable[J];
|
||||
}
|
||||
|
||||
G4cerr << " Warning from GetElement(name). The element: " << elementName
|
||||
<< " does not exist in the ElementTable. Return NULL pointer \n";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
// 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: G4ElementTable.hh,v 2.3 1998/07/12 03:00:29 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD group
|
||||
// ---------------- G4ElementTable ----------------
|
||||
// History:
|
||||
// First implementation: Torre Wenaus, November 1995
|
||||
// ------------------------------------------------------------
|
||||
|
||||
#ifndef G4ELEMENTTABLE_HH
|
||||
#define G4ELEMENTTABLE_HH
|
||||
|
||||
#include "G4Element.hh"
|
||||
|
||||
#endif
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
// 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: G4ElementVector.hh,v 2.3 1998/07/12 03:00:30 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD group
|
||||
// ---------------- G4ElementVector ----------------
|
||||
// History:
|
||||
// First implementation: Torre Wenaus, November 1995
|
||||
// ------------------------------------------------------------
|
||||
|
||||
#ifndef G4ELEMENTVECTOR_HH
|
||||
#define G4ELEMENTVECTOR_HH
|
||||
|
||||
#include "G4Material.hh"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,79 @@
|
||||
// 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: G4IonisParamElm.hh,v 2.3 1998/07/13 17:13:50 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------- class G4IonisParamElm -------------------
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 09-07-98, data moved from G4Element. M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4IonisParamElm_HH
|
||||
#define G4IonisParamElm_HH
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4IonisParamElm
|
||||
{
|
||||
public:
|
||||
|
||||
G4IonisParamElm(G4double Z);
|
||||
~G4IonisParamElm();
|
||||
|
||||
// retrieval methods
|
||||
|
||||
G4double GetZ() const {return fZ;};
|
||||
G4double GetZ3() const {return fZ3;};
|
||||
G4double GetZZ3() const {return fZZ3;};
|
||||
G4double GetlogZ3() const {return flogZ3;};
|
||||
|
||||
G4double GetTau0() const {return fTau0;};
|
||||
G4double GetTaul() const {return fTaul;};
|
||||
G4double GetAlow() const {return fAlow;};
|
||||
G4double GetBlow() const {return fBlow;};
|
||||
G4double GetClow() const {return fClow;};
|
||||
G4double GetMeanExcitationEnergy() const {return fMeanExcitationEnergy;};
|
||||
G4double* GetShellCorrectionVector() const {return fShellCorrectionVector;};
|
||||
|
||||
G4int operator==(const G4IonisParamElm&) const;
|
||||
G4int operator!=(const G4IonisParamElm&) const;
|
||||
|
||||
private:
|
||||
|
||||
G4IonisParamElm(G4IonisParamElm &right);
|
||||
const G4IonisParamElm & operator=(const G4IonisParamElm &right);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
// data members
|
||||
//
|
||||
G4double fZ; // effective Z
|
||||
G4double fZ3; // pow (Z,1/3)
|
||||
G4double fZZ3; // pow (Z(Z+1),1/3)
|
||||
G4double flogZ3; // log(Z)/3
|
||||
|
||||
// ------ ionisation loss ---------------------------------
|
||||
|
||||
G4double fTau0 ; // 0.1*pow(Z,1/3)*MeV/proton_mass_c2
|
||||
G4double fTaul ; // 2*MeV/proton mass
|
||||
G4double fBetheBlochLow; // Bethe-Bloch at fTaul*particle mass
|
||||
G4double fAlow,fBlow,fClow; // parameters for the low energy ion.loss
|
||||
G4double fMeanExcitationEnergy; // 16*pow(Z,0.9)*eV
|
||||
G4double* fShellCorrectionVector; // shell correction coefficients
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,106 @@
|
||||
// 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: G4IonisParamMat.hh,v 2.3 1998/07/13 17:13:51 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 09-07-98, data moved from G4Material, M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4IonisParamMat_HH
|
||||
#define G4IonisParamMat_HH
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
class G4Material; // forward declaration
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4IonisParamMat
|
||||
{
|
||||
public:
|
||||
|
||||
G4IonisParamMat(G4Material*);
|
||||
~G4IonisParamMat();
|
||||
|
||||
//
|
||||
// retrieval methods
|
||||
//
|
||||
|
||||
G4double GetMeanExcitationEnergy() const {return fMeanExcitationEnergy;};
|
||||
G4double GetLogMeanExcEnergy() const {return fLogMeanExcEnergy;};
|
||||
G4double* GetShellCorrectionVector() const {return fShellCorrectionVector;};
|
||||
G4double GetTaul() const {return fTaul;};
|
||||
|
||||
G4double GetCdensity() const {return fCdensity;};
|
||||
G4double GetMdensity() const {return fMdensity;};
|
||||
G4double GetAdensity() const {return fAdensity;};
|
||||
G4double GetX0density() const {return fX0density;};
|
||||
G4double GetX1density() const {return fX1density;};
|
||||
|
||||
G4double GetF1fluct() const {return fF1fluct;};
|
||||
G4double GetF2fluct() const {return fF2fluct;};
|
||||
G4double GetEnergy1fluct() const {return fEnergy1fluct;};
|
||||
G4double GetLogEnergy1fluct() const {return fLogEnergy1fluct;};
|
||||
G4double GetEnergy2fluct() const {return fEnergy2fluct;};
|
||||
G4double GetLogEnergy2fluct() const {return fLogEnergy2fluct;};
|
||||
G4double GetEnergy0fluct() const {return fEnergy0fluct;};
|
||||
G4double GetRateionexcfluct() const {return fRateionexcfluct;};
|
||||
|
||||
G4int operator==(const G4IonisParamMat&) const;
|
||||
G4int operator!=(const G4IonisParamMat&) const;
|
||||
|
||||
private:
|
||||
|
||||
G4IonisParamMat(const G4IonisParamMat&);
|
||||
const G4IonisParamMat& operator=(const G4IonisParamMat&);
|
||||
|
||||
// Compute mean parameters : ExcitationEnergy,Shell corretion vector ...
|
||||
void ComputeMeanParameters();
|
||||
|
||||
// Compute parameters for the density effect
|
||||
void ComputeDensityEffect();
|
||||
|
||||
// Compute parameters for the energy fluctuation model
|
||||
void ComputeFluctModel();
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
// data members
|
||||
//
|
||||
G4Material* fMaterial; // this material
|
||||
|
||||
// parameters for energy loss calculation
|
||||
G4double fMeanExcitationEnergy; //
|
||||
G4double fLogMeanExcEnergy; //
|
||||
G4double* fShellCorrectionVector; // shell correction coefficients
|
||||
G4double fTaul; // lower limit of Bethe-Bloch formula
|
||||
|
||||
// parameters of the density correction....
|
||||
G4double fCdensity; // mat.constant
|
||||
G4double fMdensity; // exponent
|
||||
G4double fAdensity; //
|
||||
G4double fX0density; //
|
||||
G4double fX1density; //
|
||||
|
||||
// parameters of the energy fluctuation model
|
||||
G4double fF1fluct;
|
||||
G4double fF2fluct;
|
||||
G4double fEnergy1fluct;
|
||||
G4double fLogEnergy1fluct;
|
||||
G4double fEnergy2fluct;
|
||||
G4double fLogEnergy2fluct;
|
||||
G4double fEnergy0fluct;
|
||||
G4double fRateionexcfluct;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,123 @@
|
||||
// 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: G4Isotope.hh,v 2.5 1998/08/05 10:30:28 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD group
|
||||
//
|
||||
// ----------------- class G4Isotope ------------------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
// An isotope is a chemical isotope defined by its name,
|
||||
// Z (atomic number),
|
||||
// N (number of nucleons),
|
||||
// A (mass of a mole).
|
||||
//
|
||||
// The class contains as a private static member the table of defined
|
||||
// isotopes (an ordered vector of isotopes).
|
||||
//
|
||||
// Isotopes can be assembled into elements via the G4Element class.
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 17-01-97, aesthetic rearrangement, M.Maire
|
||||
// 04-08-98, new method GetIsotope(isotopeName), M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4ISOTOPE_HH
|
||||
#define G4ISOTOPE_HH
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include <rw/tpordvec.h>
|
||||
#include "globals.hh"
|
||||
|
||||
class G4Isotope;
|
||||
typedef RWTPtrOrderedVector<G4Isotope> G4IsotopeTable;
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4Isotope
|
||||
{
|
||||
public:
|
||||
|
||||
// Make an isotope
|
||||
G4Isotope(const G4String& name, //its name
|
||||
G4int z, //atomic number
|
||||
G4int n, //number of nucleons
|
||||
G4double a); //mass of mole
|
||||
|
||||
~G4Isotope();
|
||||
|
||||
// Retrieval methods
|
||||
G4String GetName() const {return fName;};
|
||||
G4int GetZ() const {return fZ;};
|
||||
G4int GetN() const {return fN;};
|
||||
G4double GetA() const {return fA;};
|
||||
size_t GetIndex() const {return fIndexInTable;};
|
||||
|
||||
static G4Isotope* GetIsotope(G4String name);
|
||||
|
||||
static
|
||||
const G4IsotopeTable* GetIsotopeTable() {return &theIsotopeTable;};
|
||||
static size_t GetNumberOfIsotopes() {return theIsotopeTable.length();};
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Isotope*);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Isotope&);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4IsotopeTable);
|
||||
|
||||
G4int operator==(const G4Isotope &right) const;
|
||||
G4int operator!=(const G4Isotope &right) const;
|
||||
|
||||
private:
|
||||
|
||||
G4Isotope(G4Isotope &right);
|
||||
G4Isotope & operator=(const G4Isotope &right);
|
||||
|
||||
private:
|
||||
|
||||
G4String fName; // name of the Isotope
|
||||
G4int fZ; // atomic number
|
||||
G4int fN; // number of nucleons
|
||||
G4double fA; // mass of a mole
|
||||
|
||||
static
|
||||
G4IsotopeTable theIsotopeTable;
|
||||
size_t fIndexInTable; // index in the Isotope Table
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4Isotope* G4Isotope::GetIsotope(G4String isotopeName)
|
||||
{
|
||||
// search the isotope by its name
|
||||
for (G4int J=0 ; J<theIsotopeTable.length() ; J++)
|
||||
{
|
||||
if(theIsotopeTable[J]->GetName() == isotopeName)
|
||||
return theIsotopeTable[J];
|
||||
}
|
||||
|
||||
G4cerr << " Warning from GetIsotope(name). The isotope: " << isotopeName
|
||||
<< " does not exist in the IsotopeTable. Return NULL pointer \n";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
// 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: G4IsotopeVector.hh,v 2.3 1998/07/12 03:00:33 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD group
|
||||
// ---------------- G4IsotopeVector ----------------
|
||||
// History:
|
||||
// First implementation: Torre Wenaus, November 1995
|
||||
// ------------------------------------------------------------
|
||||
|
||||
#ifndef G4ISOTOPEVECTOR_HH
|
||||
#define G4ISOTOPEVECTOR_HH
|
||||
|
||||
#include "G4Element.hh"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,115 @@
|
||||
// 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: G4MPVEntry.hh,v 2.1 1998/07/13 17:13:55 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MPVEntry Class Definition
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MPVEntry.hh
|
||||
// Description: A G4MPVEntry is an MaterialPropertyVector Entry.
|
||||
// One Material Property Vector contains many MPVEntries
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-25 by Peter Gumplinger
|
||||
// > cosmetics (only)
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef G4MPVEntry_h
|
||||
#define G4MPVEntry_h 1
|
||||
|
||||
/////////////
|
||||
// Includes
|
||||
/////////////
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
/////////////////////
|
||||
// Class Definition
|
||||
/////////////////////
|
||||
|
||||
class G4MPVEntry {
|
||||
|
||||
public:
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////G4MPVEntry.hh
|
||||
|
||||
// Well defined semantics for these operators
|
||||
// required by RWTPtrSortedVector
|
||||
|
||||
G4bool operator <(const G4MPVEntry &right) const;
|
||||
G4bool operator ==(const G4MPVEntry &right) const;
|
||||
G4MPVEntry& operator =(const G4MPVEntry &right);
|
||||
|
||||
///////////////////////////////
|
||||
// Constructor and Destructor
|
||||
///////////////////////////////
|
||||
|
||||
G4MPVEntry(G4double aPhotonMomentum, G4double aPropertyValue);
|
||||
|
||||
G4MPVEntry(const G4MPVEntry &right);
|
||||
|
||||
~G4MPVEntry();
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
G4double GetPhotonMomentum();
|
||||
|
||||
G4double GetProperty();
|
||||
|
||||
//////////
|
||||
// Tests
|
||||
//////////
|
||||
|
||||
void DumpEntry();
|
||||
|
||||
private:
|
||||
|
||||
/////////////////////////
|
||||
// Private Data members
|
||||
/////////////////////////
|
||||
|
||||
G4double thePhotonMomentum;
|
||||
G4double theProperty;
|
||||
};
|
||||
|
||||
////////////////////
|
||||
// Inline methods
|
||||
////////////////////
|
||||
|
||||
// GetPhotonMomentum
|
||||
// -----------------
|
||||
//
|
||||
|
||||
inline
|
||||
G4double G4MPVEntry::GetPhotonMomentum()
|
||||
{
|
||||
return thePhotonMomentum;
|
||||
}
|
||||
|
||||
// GetProperty
|
||||
// -----------
|
||||
//
|
||||
|
||||
inline
|
||||
G4double G4MPVEntry::GetProperty()
|
||||
{
|
||||
return theProperty;
|
||||
}
|
||||
|
||||
#endif /* G4MPVEntry_h */
|
||||
@@ -0,0 +1,283 @@
|
||||
// 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: G4Material.hh,v 2.10 1998/11/30 13:56:57 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------- class G4Material ---------------------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
// Materials defined via the G4Material class are used to define the
|
||||
// composition of Geant volumes.
|
||||
// a Material is always made of Elements. It can be defined directly
|
||||
// from scratch (defined by a single element), specifying :
|
||||
// its name,
|
||||
// density,
|
||||
// state informations,
|
||||
// and Z,A of the underlying Element.
|
||||
// or in terms of a collection of constituent Elements with specified weights
|
||||
// (composition specified either by fractional mass or atom counts).
|
||||
//
|
||||
// Quantities, with physical meaning or not, which are constant in a given
|
||||
// material are computed and stored here as Derived data members.
|
||||
// The class contains as a private static member the table of defined
|
||||
// materials (an ordered vector of materials).
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 10-07-96, new data members added by L.Urban
|
||||
// 12-12-96, new data members added by L.Urban
|
||||
// 20-01-97, aesthetic rearrangement. RadLength calculation modified
|
||||
// Data members Zeff and Aeff REMOVED (i.e. passed to the Elements).
|
||||
// (local definition of Zeff in DensityEffect and FluctModel...)
|
||||
// Vacuum defined as a G4State. Mixture flag removed, M.Maire
|
||||
// 29-01-97, State=Vacuum automatically set density=0 in the contructors.
|
||||
// Subsequent protections have been put in the calculation of
|
||||
// MeanExcEnergy, ShellCorrectionVector, DensityEffect, M.Maire
|
||||
// 20-03-97, corrected initialization of pointers, M.Maire
|
||||
// 10-06-97, new data member added by V.Grichine (fSandiaPhotoAbsCof)
|
||||
// 27-06-97, new function GetElement(int), M.Maire
|
||||
// 24-02-98, fFractionVector become fMassFractionVector
|
||||
// 28-05-98, kState=kVacuum removed:
|
||||
// The vacuum is an ordinary gas vith very low density, M.Maire
|
||||
// 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire
|
||||
// 09-07-98, Ionisation parameters removed from the class, M.Maire
|
||||
// 04-08-98, new method GetMaterial(materialName), M.Maire
|
||||
// 05-10-98, change name: NumDensity -> NbOfAtomsPerVolume
|
||||
// 18-11-98, SandiaTable interface modified.
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4MATERIAL_HH
|
||||
#define G4MATERIAL_HH
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include <rw/tpvector.h>
|
||||
#include <rw/tpordvec.h>
|
||||
#include "globals.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4MaterialPropertiesTable.hh"
|
||||
#include "G4IonisParamMat.hh"
|
||||
#include "G4SandiaTable.hh"
|
||||
|
||||
typedef RWTPtrVector<G4Element> G4ElementVector;
|
||||
|
||||
class G4Material; //forward declaration
|
||||
typedef RWTPtrOrderedVector<G4Material> G4MaterialTable;
|
||||
|
||||
enum G4State { kStateUndefined, kStateSolid, kStateLiquid, kStateGas };
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4Material
|
||||
{
|
||||
public:
|
||||
|
||||
//
|
||||
// Constructor to create a material from scratch.
|
||||
//
|
||||
G4Material(const G4String& name, //its name
|
||||
G4double z, //atomic number
|
||||
G4double a, //mass of mole
|
||||
G4double density, //density
|
||||
G4State state = kStateUndefined, //solid,liqid,gas
|
||||
G4double temp = STP_Temperature, //temperature
|
||||
G4double pressure = STP_Pressure); //pressure
|
||||
|
||||
//
|
||||
// Constructor to create a material from a combination of elements
|
||||
// and/or materials subsequently added via AddElement and/or AddMaterial
|
||||
//
|
||||
G4Material(const G4String& name, //its name
|
||||
G4double density, //density
|
||||
G4int nComponents, //nb of components
|
||||
G4State state = kStateUndefined, //solid,liquid,gas
|
||||
G4double temp = STP_Temperature, //temperature
|
||||
G4double pressure = STP_Pressure); //pressure
|
||||
|
||||
//
|
||||
// Add an element, giving number of atoms
|
||||
//
|
||||
void AddElement(G4Element* element, //the element
|
||||
G4int nAtoms); //nb of atoms in a molecule
|
||||
|
||||
//
|
||||
// Add an element or material, giving fraction of mass
|
||||
//
|
||||
void AddElement (G4Element* element , //the element
|
||||
G4double fraction); //fraction of mass
|
||||
|
||||
void AddMaterial(G4Material* material, //the material
|
||||
G4double fraction); //fraction of mass
|
||||
|
||||
|
||||
~G4Material();
|
||||
|
||||
//
|
||||
// retrieval methods
|
||||
//
|
||||
G4String GetName() const {return fName;};
|
||||
G4double GetDensity() const {return fDensity;};
|
||||
|
||||
G4State GetState() const {return fState;};
|
||||
G4double GetTemperature() const {return fTemp;};
|
||||
G4double GetPressure() const {return fPressure;};
|
||||
|
||||
const
|
||||
G4ElementVector* GetElementVector() const {return theElementVector;};
|
||||
size_t GetNumberOfElements() const {return fNumberOfElements;};
|
||||
const G4double* GetFractionVector() const {return fMassFractionVector;};
|
||||
const G4int* GetAtomsVector() const {return fAtomsVector;};
|
||||
|
||||
const
|
||||
G4Element* GetElement(G4int iel) const {return (*theElementVector)[iel];};
|
||||
|
||||
void SetMaterialPropertiesTable(G4MaterialPropertiesTable* anMPT)
|
||||
{fMaterialPropertiesTable = anMPT;};
|
||||
G4MaterialPropertiesTable* GetMaterialPropertiesTable() const
|
||||
{return fMaterialPropertiesTable;};
|
||||
|
||||
static
|
||||
const G4MaterialTable* GetMaterialTable() {return &theMaterialTable;};
|
||||
|
||||
static
|
||||
size_t GetNumberOfMaterials() {return theMaterialTable.length();};
|
||||
size_t GetIndex() const {return fIndexInTable;};
|
||||
|
||||
static G4Material* GetMaterial(G4String name);
|
||||
|
||||
const
|
||||
G4double* GetVecNbOfAtomsPerVolume() const {return VecNbOfAtomsPerVolume;};
|
||||
G4double GetTotNbOfAtomsPerVolume() const {return TotNbOfAtomsPerVolume;};
|
||||
G4double GetTotNbOfElectPerVolume() const {return TotNbOfElectPerVolume;};
|
||||
|
||||
//obsolete names (5-10-98) see the 2 functions above
|
||||
const
|
||||
G4double* GetAtomicNumDensityVector() const {return VecNbOfAtomsPerVolume;};
|
||||
G4double GetElectronDensity() const {return TotNbOfElectPerVolume;};
|
||||
|
||||
G4double GetRadlen() const {return fRadlen;};
|
||||
G4IonisParamMat* GetIonisation() const {return fIonisation;};
|
||||
G4SandiaTable* GetSandiaTable() const {return fSandiaTable;};
|
||||
|
||||
G4double GetZ() const;
|
||||
G4double GetA() const;
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Material*);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4Material&);
|
||||
|
||||
friend
|
||||
ostream& operator<<(ostream&, G4MaterialTable);
|
||||
|
||||
G4int operator==(const G4Material&) const;
|
||||
G4int operator!=(const G4Material&) const;
|
||||
|
||||
private:
|
||||
|
||||
G4Material(const G4Material&);
|
||||
const G4Material& operator=(const G4Material&);
|
||||
|
||||
void InitializePointers();
|
||||
|
||||
// Header routine for all derived quantities
|
||||
void ComputeDerivedQuantities();
|
||||
|
||||
// Compute Radiation length
|
||||
void ComputeRadiationLength();
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
// Basic data members ( To define a material)
|
||||
//
|
||||
|
||||
G4String fName; // Material name
|
||||
G4double fDensity; // Material density
|
||||
|
||||
G4State fState; // Material state (defaults to undefined,
|
||||
// determined internally based on density)
|
||||
G4double fTemp; // Temperature (defaults to STP)
|
||||
G4double fPressure; // Pressure (defaults to STP)
|
||||
|
||||
G4int maxNbComponents; // total number of components in the material
|
||||
size_t fNumberOfComponents; // Number of components declared so far
|
||||
|
||||
size_t fNumberOfElements; // Number of Elements in the material
|
||||
G4ElementVector* theElementVector; // vector of constituent Elements
|
||||
G4double* fMassFractionVector; // composition by fractional mass
|
||||
G4int* fAtomsVector; // composition by atom count
|
||||
|
||||
G4MaterialPropertiesTable* fMaterialPropertiesTable;
|
||||
|
||||
static
|
||||
G4MaterialTable theMaterialTable; // the material table
|
||||
size_t fIndexInTable; // Index of material in the material table
|
||||
|
||||
//
|
||||
// Derived data members (computed from the basic data members)
|
||||
//
|
||||
// some general atomic properties
|
||||
|
||||
G4double* VecNbOfAtomsPerVolume; // vector of nb of atoms per volume
|
||||
G4double TotNbOfAtomsPerVolume; // total nb of atoms per volume
|
||||
G4double TotNbOfElectPerVolume; // total nb of electrons per volume
|
||||
G4double fRadlen; // Radiation length
|
||||
|
||||
G4IonisParamMat* fIonisation; // ionisation parameters
|
||||
G4SandiaTable* fSandiaTable; // Sandia table
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4Material* G4Material::GetMaterial(G4String materialName)
|
||||
{
|
||||
// search the material by its name
|
||||
for (G4int J=0 ; J<theMaterialTable.length() ; J++)
|
||||
{
|
||||
if(theMaterialTable[J]->GetName() == materialName)
|
||||
return theMaterialTable[J];
|
||||
}
|
||||
|
||||
G4cerr << " Warning from GetMaterial(name). The material: " << materialName
|
||||
<< " does not exist in the MaterialTable. Return NULL pointer \n";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4Material::GetZ() const
|
||||
{
|
||||
if (fNumberOfElements > 1) {
|
||||
G4cerr << "WARNING in GetZ. The material: " << fName << " is a mixture." << endl;
|
||||
G4Exception ( " the Atomic number is not well defined." );
|
||||
}
|
||||
return (*theElementVector)(0)->GetZ();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
|
||||
inline
|
||||
G4double G4Material::GetA() const
|
||||
{
|
||||
if (fNumberOfElements > 1) {
|
||||
G4cerr << "WARNING in GetA. The material: " << fName << " is a mixture." << endl;
|
||||
G4Exception ( " the Atomic mass is not well defined." );
|
||||
}
|
||||
return (*theElementVector)(0)->GetA();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,107 @@
|
||||
// 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: G4MaterialPropertiesTable.hh,v 2.0 1998/07/02 17:19:40 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MaterialPropertiesTable Definition
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MaterialPropertiesTable.hh
|
||||
// Description: An Material properties table is a hash table, with
|
||||
// key = property name, and value = G4MaterialPropertyVector
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-25 by Peter Gumplinger
|
||||
// > cosmetics (only)
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef G4MaterialPropertiesTable_h
|
||||
#define G4MaterialPropertiesTable_h 1
|
||||
|
||||
/////////////
|
||||
// Includes
|
||||
/////////////
|
||||
|
||||
#include <math.h>
|
||||
#include <rw/tphdict.h>
|
||||
#include <rw/cstring.h>
|
||||
#include "globals.hh"
|
||||
#include "G4MaterialPropertyVector.hh"
|
||||
|
||||
#define RefractionIndex "RINDEX"
|
||||
|
||||
// unsigned hashString(const G4String &str);
|
||||
|
||||
/////////////////////
|
||||
// Class Definition
|
||||
/////////////////////
|
||||
|
||||
class G4MaterialPropertiesTable {
|
||||
|
||||
public:
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
G4MaterialPropertiesTable&
|
||||
operator =(const G4MaterialPropertiesTable &right);
|
||||
|
||||
////////////////
|
||||
// Constructor
|
||||
////////////////
|
||||
|
||||
G4MaterialPropertiesTable();
|
||||
|
||||
G4MaterialPropertiesTable(const G4MaterialPropertiesTable &right);
|
||||
|
||||
///////////////
|
||||
// Destructor
|
||||
///////////////
|
||||
|
||||
~G4MaterialPropertiesTable();
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
void AddProperty(char *key,
|
||||
G4double *PhotonMomenta,
|
||||
G4double *PropertyValues,
|
||||
G4int NumEntries);
|
||||
|
||||
void AddProperty(char *key, G4MaterialPropertyVector *opv);
|
||||
|
||||
void RemoveProperty(char *key);
|
||||
|
||||
G4MaterialPropertyVector* GetProperty(char *key);
|
||||
|
||||
void AddEntry(char *key, G4double aPhotonMomentum,
|
||||
G4double aPropertyValue);
|
||||
|
||||
void RemoveEntry(char *key, G4double aPhotonMomentum);
|
||||
|
||||
void DumpTable();
|
||||
|
||||
private:
|
||||
|
||||
/////////////////////////
|
||||
// Private Data members
|
||||
/////////////////////////
|
||||
|
||||
RWTPtrHashDictionary<G4String, G4MaterialPropertyVector> MPT;
|
||||
RWTPtrHashDictionaryIterator<G4String, G4MaterialPropertyVector>
|
||||
MPTiterator;
|
||||
};
|
||||
|
||||
#endif /* G4MaterialPropertiesTable_h */
|
||||
@@ -0,0 +1,157 @@
|
||||
// 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: G4MaterialPropertyVector.hh,v 2.0 1998/07/02 17:19:42 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MaterialPropertyVector Class Definition
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MaterialPropertyVector.hh
|
||||
//
|
||||
// Description: A one-to-one mapping from Photon Momentum to some
|
||||
// optical property
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-25 by Peter Gumplinger
|
||||
// > value.h -> templates.hh
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef G4MaterialPropertyVector_h
|
||||
#define G4MaterialPropertyVector_h 1
|
||||
|
||||
/////////////
|
||||
// Includes
|
||||
/////////////
|
||||
|
||||
#include <rw/tpsrtvec.h>
|
||||
#include <rw/cstring.h>
|
||||
#include "G4MPVEntry.hh"
|
||||
|
||||
/////////////////////
|
||||
// Class Definition
|
||||
/////////////////////
|
||||
|
||||
class G4MaterialPropertyVector {
|
||||
|
||||
public:
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
G4bool operator ++();
|
||||
G4MaterialPropertyVector&
|
||||
operator =(const G4MaterialPropertyVector &right);
|
||||
|
||||
/////////////////
|
||||
// Constructors
|
||||
/////////////////
|
||||
|
||||
G4MaterialPropertyVector() : MPV(0)
|
||||
{
|
||||
CurrentEntry = -1;
|
||||
NumEntries = 0;
|
||||
};
|
||||
|
||||
G4MaterialPropertyVector(G4double *PhotonMomenta,
|
||||
G4double *PropertyValues,
|
||||
G4int NumElements);
|
||||
|
||||
G4MaterialPropertyVector(const G4MaterialPropertyVector &right);
|
||||
|
||||
///////////////
|
||||
// Destructor
|
||||
///////////////
|
||||
|
||||
~G4MaterialPropertyVector();
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
void ResetIterator();
|
||||
|
||||
void AddElement(G4double aPhotonMomentum,
|
||||
G4double aPropertyValue);
|
||||
void RemoveElement(G4double aPhotonMomentum);
|
||||
|
||||
G4double GetProperty(G4double aPhotonMomentum) const;
|
||||
G4double GetPhotonMomentum(G4double aProperty) const;
|
||||
|
||||
// for use with G4MaterialPropertyVector iterator:
|
||||
// return property (or Photon momentum) at current point
|
||||
// of iterator
|
||||
|
||||
G4double GetProperty() const;
|
||||
G4double GetPhotonMomentum() const;
|
||||
|
||||
G4double GetMaxProperty() const;
|
||||
G4double GetMinProperty() const;
|
||||
G4double GetMaxPhotonMomentum() const;
|
||||
G4double GetMinPhotonMomentum() const;
|
||||
|
||||
//////////
|
||||
// Tests
|
||||
//////////
|
||||
|
||||
void DumpVector();
|
||||
|
||||
private:
|
||||
|
||||
/////////////////////
|
||||
// Helper Functions
|
||||
/////////////////////
|
||||
|
||||
G4MPVEntry GetEntry(G4int i) const;
|
||||
|
||||
void GetAdjacentBins(G4double aPhotonMomentum,
|
||||
G4int *left,G4int *right) const;
|
||||
|
||||
/////////////////////////
|
||||
// Private Data Members
|
||||
/////////////////////////
|
||||
|
||||
RWTPtrSortedVector<G4MPVEntry> MPV;
|
||||
G4int NumEntries;
|
||||
G4int CurrentEntry;
|
||||
};
|
||||
|
||||
///////////////////
|
||||
// Inline methods
|
||||
///////////////////
|
||||
|
||||
inline
|
||||
G4double G4MaterialPropertyVector::GetMaxProperty() const
|
||||
{
|
||||
return MPV.last()->GetProperty();
|
||||
}
|
||||
|
||||
inline
|
||||
G4double G4MaterialPropertyVector::GetMinProperty() const
|
||||
{
|
||||
return MPV.first()->GetProperty();
|
||||
}
|
||||
|
||||
inline
|
||||
G4double G4MaterialPropertyVector::GetMaxPhotonMomentum() const
|
||||
{
|
||||
return MPV.last()->GetPhotonMomentum();
|
||||
}
|
||||
|
||||
inline
|
||||
G4double G4MaterialPropertyVector::GetMinPhotonMomentum() const
|
||||
{
|
||||
return MPV.first()->GetPhotonMomentum();
|
||||
}
|
||||
|
||||
#endif /* G4MaterialPropertyVector_h */
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
// 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: G4MaterialTable.hh,v 2.3 1998/07/12 03:00:35 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
// GEANT 4 class header file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD group
|
||||
// ---------------- G4MaterialTable ----------------
|
||||
// History:
|
||||
// First implementation: Torre Wenaus, November 1995
|
||||
// ------------------------------------------------------------
|
||||
|
||||
#ifndef G4MATERIALTABLE_HH
|
||||
#define G4MATERIALTABLE_HH
|
||||
|
||||
#include "G4Material.hh"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,159 @@
|
||||
// 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: G4OpticalSurface.hh,v 2.0 1998/07/02 17:19:46 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4OpticalSurface Definition
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4OpticalSurface.hh
|
||||
// Description: A optical surface class for use in G4OpBoundaryProcess
|
||||
// Version: 2.0
|
||||
// Created: 1997-06-26
|
||||
// Author: Peter Gumplinger
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
// Cvs version:
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef G4OpticalSurface_h
|
||||
#define G4OpticalSurface_h 1
|
||||
|
||||
/////////////
|
||||
// Includes
|
||||
/////////////
|
||||
|
||||
#include "globals.hh"
|
||||
#include "templates.hh"
|
||||
|
||||
enum G4OpticalSurfaceFinish
|
||||
{
|
||||
polished, // smooth perfectly polished surface
|
||||
polishedfrontpainted, // smooth top-layer (front) paint
|
||||
polishedbackpainted, // same is 'polished' but with a back-paint
|
||||
ground, // rough surface
|
||||
groundfrontpainted, // rough top-layer (front) paint
|
||||
groundbackpainted // same as 'ground' but with a back-paint
|
||||
};
|
||||
|
||||
enum G4OpticalSurfaceType
|
||||
{
|
||||
dielectric_metal, // dielectric-metal interface
|
||||
dielectric_dielectric // dielectric-dielectric interface
|
||||
};
|
||||
|
||||
enum G4OpticalSurfaceModel
|
||||
{
|
||||
glisur, // original GEANT3 model
|
||||
unified // UNIFIED model
|
||||
};
|
||||
|
||||
class G4MaterialPropertiesTable;
|
||||
|
||||
/////////////////////
|
||||
// Class Definition
|
||||
/////////////////////
|
||||
|
||||
class G4OpticalSurface
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
G4OpticalSurface(const G4OpticalSurface &right);
|
||||
const G4OpticalSurface & operator=(const G4OpticalSurface &right);
|
||||
|
||||
G4int operator==(const G4OpticalSurface &right) const;
|
||||
G4int operator!=(const G4OpticalSurface &right) const;
|
||||
|
||||
public:
|
||||
|
||||
////////////////////////////////
|
||||
// Constructors and Destructor
|
||||
////////////////////////////////
|
||||
|
||||
G4OpticalSurface(const G4String& name,
|
||||
G4OpticalSurfaceModel model = glisur,
|
||||
G4OpticalSurfaceFinish finish = polished,
|
||||
G4OpticalSurfaceType type = dielectric_dielectric,
|
||||
G4double value = 1.0);
|
||||
|
||||
~G4OpticalSurface();
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
public:
|
||||
|
||||
// public methods
|
||||
|
||||
G4String GetName() const { return theName; };
|
||||
void SetName(const G4String& name){theName = name;};
|
||||
|
||||
// set/get the surface type
|
||||
|
||||
G4OpticalSurfaceType GetType() const {return theType;};
|
||||
void SetType(const G4OpticalSurfaceType type){theType = type;};
|
||||
|
||||
// set/get the surface finish
|
||||
|
||||
G4OpticalSurfaceFinish GetFinish() const {return theFinish;};
|
||||
void SetFinish(const G4OpticalSurfaceFinish finish)
|
||||
{theFinish = finish;};
|
||||
|
||||
// set/get the surface model to be followed (glisur || unified)
|
||||
|
||||
G4OpticalSurfaceModel GetModel() const {return theModel;};
|
||||
void SetModel(const G4OpticalSurfaceModel model)
|
||||
{theModel = model;};
|
||||
|
||||
G4double GetSigmaAlpha() const {return sigma_alpha;};
|
||||
void SetSigmaAlpha(const G4double s_a)
|
||||
{sigma_alpha = s_a;};
|
||||
|
||||
G4double GetPolish() const {return polish;};
|
||||
void SetPolish(const G4double plsh) {polish=plsh;};
|
||||
|
||||
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
|
||||
{ theMaterialPropertiesTable = anMPT;};
|
||||
|
||||
G4MaterialPropertiesTable* GetMaterialPropertiesTable() const
|
||||
{ return theMaterialPropertiesTable;};
|
||||
|
||||
void DumpInfo() const;
|
||||
|
||||
private:
|
||||
|
||||
// ------------------
|
||||
// Basic data members ( To define an optical surface)
|
||||
// ------------------
|
||||
|
||||
G4String theName; // Surface name
|
||||
|
||||
G4OpticalSurfaceModel theModel; // Surface model
|
||||
G4OpticalSurfaceFinish theFinish; // Surface finish
|
||||
G4OpticalSurfaceType theType; // Surface type
|
||||
|
||||
G4double sigma_alpha; // The sigma of micro-facet polar angle
|
||||
G4double polish; // Polish parameter in glisur model
|
||||
|
||||
G4MaterialPropertiesTable* theMaterialPropertiesTable;
|
||||
|
||||
};
|
||||
|
||||
////////////////////
|
||||
// Inline methods
|
||||
////////////////////
|
||||
|
||||
#endif /* G4OpticalSurface_h */
|
||||
@@ -0,0 +1,138 @@
|
||||
// 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: G4SandiaTable.hh,v 2.2 1998/12/10 11:43:35 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
//
|
||||
// 18.11.98 simplified public interface; new methods for materials. mma
|
||||
// 10.06.97 created. V. Grichine
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#ifndef G4SANDIATABLE_HH
|
||||
#define G4SANDIATABLE_HH
|
||||
|
||||
#include "G4OrderedTable.hh"
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
#include <assert.h>
|
||||
|
||||
class G4Material;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
class G4SandiaTable
|
||||
{
|
||||
public:
|
||||
|
||||
G4SandiaTable(G4Material*);
|
||||
~G4SandiaTable();
|
||||
|
||||
static G4int GetNbOfIntervals (G4int Z);
|
||||
static G4double GetSandiaCofPerAtom(G4int Z, G4int, G4int);
|
||||
static G4double* GetSandiaCofPerAtom(G4int Z, G4double energy);
|
||||
static G4double GetIonizationPot (G4int Z);
|
||||
static G4double GetZtoA (G4int Z);
|
||||
|
||||
G4int GetMatNbOfIntervals() {return fMatNbOfIntervals;};
|
||||
G4double GetSandiaCofForMaterial(G4int,G4int);
|
||||
G4double* GetSandiaCofForMaterial(G4double energy);
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Inline function implementations
|
||||
|
||||
|
||||
inline
|
||||
G4int G4SandiaTable::GetNbOfIntervals(G4int Z)
|
||||
{
|
||||
return fNbOfIntervals[Z];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4SandiaTable::GetSandiaCofPerAtom(G4int Z, G4int interval, G4int j)
|
||||
{
|
||||
assert (Z>0 && Z<101 && interval>=0 && interval<fNbOfIntervals[Z]
|
||||
&& j>=0 && j<5);
|
||||
|
||||
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,(int)j);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double* G4SandiaTable::GetSandiaCofPerAtom(G4int Z, G4double energy)
|
||||
{
|
||||
assert (Z > 0);
|
||||
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)
|
||||
{
|
||||
G4double AoverAvo = Z/(fZtoAratio[Z]*Avogadro*mole);
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
fSandiaCofPerAtom[0] = fSandiaCofPerAtom[1] = fSandiaCofPerAtom[2] =
|
||||
fSandiaCofPerAtom[3] = 0.;
|
||||
|
||||
return fSandiaCofPerAtom;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4SandiaTable::GetIonizationPot(G4int Z)
|
||||
{
|
||||
return fIonizationPotentials[Z]*eV;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
inline
|
||||
G4double G4SandiaTable::GetZtoA(G4int Z)
|
||||
{
|
||||
return fZtoAratio[Z];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,520 @@
|
||||
// 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: G4AtomicShells.cc,v 2.4 1998/11/16 17:26:45 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 24-04-98, implementation of the first version, V. Grichine
|
||||
// 16-11-98, GetBindingEnergy(Z,ShellNb), M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
|
||||
#include "G4AtomicShells.hh"
|
||||
#include <assert.h>
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4int
|
||||
G4AtomicShells::fNumberOfShells[101] =
|
||||
{
|
||||
0 , // nonexisting zero element
|
||||
|
||||
1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 3 , 4 , // 1 - 10
|
||||
|
||||
5 , 5 , 6 , 6 , 6 , 6 , 6 , 7 , 8 , 8 , // 11 - 20
|
||||
|
||||
9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 , // 21 - 30
|
||||
|
||||
11 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 , // 31 - 40
|
||||
|
||||
14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 , // 41 - 50
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
||||
16 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 , // 51 - 60
|
||||
|
||||
19 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 , // 61 - 70
|
||||
|
||||
21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 , // 71 - 80
|
||||
|
||||
23 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 , // 81 - 90
|
||||
|
||||
27 , 27 , 27 , 26 , 26 , 27 , 27 , 26 , 26 , 26 // 91 - 100
|
||||
|
||||
};
|
||||
|
||||
// The total shell number is:
|
||||
// 1 + G4AtomicShells::TotalNumberOfShells(100) = 1 + 1539 = 1540
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4double
|
||||
G4AtomicShells::fBindingEnergies[1540] =
|
||||
{
|
||||
0.0 , // Nonexisting zero element
|
||||
|
||||
// H ---------------------------------------------------------
|
||||
13.60 ,
|
||||
|
||||
// He ---------------------------------------------------------
|
||||
24.59 ,
|
||||
|
||||
// Li --------------------------------------------------------
|
||||
58.0 , 5.39 ,
|
||||
|
||||
// Be --------------------------------------------------------
|
||||
115.0 , 9.32 ,
|
||||
|
||||
// B --------------------------------------------------------
|
||||
192.0 , 12.93 , 8.3 ,
|
||||
|
||||
// C ---------------------------------------------------------
|
||||
288.0 , 16.59 , 11.26 ,
|
||||
|
||||
// N ---------------------------------------------------------
|
||||
403.0 , 37.3 , 20.33 , 14.53 ,
|
||||
|
||||
// O ---------------------------------------------------------
|
||||
543.1 , 41.6 , 28.48 , 13.62 ,
|
||||
|
||||
// F ---------------------------------------------------------
|
||||
696.7 , 37.85 , 17.42 ,
|
||||
|
||||
// Ne ---------------------------------------------------------
|
||||
870.1 , 48.47 , 21.66 , 21.56 ,
|
||||
|
||||
// Na ---------------------------------------------------------
|
||||
1075.0 , 66.0 , 34.0 , 34.0 , 5.14 ,
|
||||
|
||||
// Mg ---------------------------------------------------------
|
||||
1308.0 , 92.0 , 54.0 , 54.0 , 7.65 ,
|
||||
|
||||
// Al ---------------------------------------------------------
|
||||
1564.0 , 121. , 77.0 , 77.0 , 10.62 , 5.99 ,
|
||||
|
||||
// Si ---------------------------------------------------------
|
||||
1844.0 , 154.0 , 104.0 , 104.0 , 13.46 , 8.15 ,
|
||||
|
||||
// P ---------------------------------------------------------
|
||||
2148.0 , 191.0 , 135.0 , 134.0 , 16.15 , 10.49 ,
|
||||
|
||||
// S ---------------------------------------------------------
|
||||
2476.0 , 232.0 , 170.0 , 168.0 , 20.20 , 10.36 ,
|
||||
|
||||
// Cl ---------------------------------------------------------
|
||||
2829.0 , 277.0 , 208.0 , 206.0 , 24.54 , 12.97 ,
|
||||
|
||||
// Ar ---------------------------------------------------------
|
||||
3206.3 , 326.5 , 250.6 , 248.5 , 29.24 , 15.94 , 15.76 ,
|
||||
|
||||
// K ---------------------------------------------------------
|
||||
3610.0 , 381.0 , 299.0 , 296.0 , 37.0 , 19.0 , 18.7 , 4.34 ,
|
||||
|
||||
// Ca ---------------------------------------------------------
|
||||
4041.0 , 441.0 , 353.0 , 349.0 , 46.0 , 28.0 , 28.0 , 6.11 ,
|
||||
|
||||
// Sc ---------------------------------------------------------
|
||||
4494.0 , 503.0 , 408.0 , 403.0 , 55.0 , 33.0 , 33.0 , 8.0 , 6.54 ,
|
||||
|
||||
// Ti ---------------------------------------------------------
|
||||
4966.0 , 567.0 , 465.0 , 459.0 , 64.0 , 39.0 , 38.0 , 8.0 , 6.82 ,
|
||||
|
||||
// V ---------------------------------------------------------
|
||||
5465.0 , 633.0 , 525.0 , 518.0 , 72.0 , 44.0 , 43.0 , 8.0 , 6.74 ,
|
||||
|
||||
// Cr ---------------------------------------------------------
|
||||
5989.0 , 702.0 , 589.0 , 580.0 , 80.0 , 49.0 , 48.0 , 8.25 , 6.77 ,
|
||||
|
||||
// Mn ---------------------------------------------------------
|
||||
6539.0 , 755.0 , 656.0 , 645.0 , 89.0 , 55.0 , 53.0 , 9.0 , 7.43 ,
|
||||
|
||||
// Fe ---------------------------------------------------------
|
||||
7112.0 , 851.0 , 726.0 , 713.0 , 98.0 , 61.0 , 59.0 , 9.0 , 7.87 ,
|
||||
|
||||
// Co ---------------------------------------------------------
|
||||
7709.0 , 931.0 , 800.0 , 785.0 , 107.0 , 68.0 , 66.0 , 9.0 , 7.86 ,
|
||||
|
||||
// Ni ---------------------------------------------------------
|
||||
8333.0 , 1015.0 , 877.0 , 860.0 , 117.0 , 75.0 , 73.0 , 10.0 , 10.0 ,
|
||||
7.64 ,
|
||||
|
||||
// Cu ---------------------------------------------------------
|
||||
8979.0 , 1103.0 , 958.0 , 938.0 , 127.0 , 82.0 , 80.0 , 11.0 , 10.4 ,
|
||||
7.73 ,
|
||||
|
||||
// Zn ---------------------------------------------------------
|
||||
9659.0 , 1198.0 , 1047.0 , 1024.0 , 141.0 , 94.0 , 91.0 , 12.0 , 11.2 ,
|
||||
9.39 ,
|
||||
|
||||
// Ga ---------------------------------------------------------
|
||||
10367.0 , 1302.0 , 1146.0 , 1119.0 , 162.0 , 111.0 , 107.0 , 21.0 ,
|
||||
20.0 , 11.0 , 6.0 ,
|
||||
|
||||
// Ge ---------------------------------------------------------
|
||||
11103.0 , 1413.0 , 1251.0 , 1220.0 , 184.0 , 130.0 , 125.0 , 33.0 ,
|
||||
32.0 , 14.3 , 7.9 ,
|
||||
|
||||
// As ---------------------------------------------------------
|
||||
11867.0 , 1531.0 , 1362.0 , 1327.0 , 208.0 , 151.0 , 145.0 , 46.0 ,
|
||||
45.0 , 17.0 , 9.81 ,
|
||||
|
||||
// Se ---------------------------------------------------------
|
||||
12658.0 , 1656.0 , 1479.0 , 1439.0 , 234.0 , 173.0 , 166.0 , 61.0 ,
|
||||
60.0 , 20.15 , 9.75 ,
|
||||
|
||||
// Br ---------------------------------------------------------
|
||||
13474.0 , 1787.0 , 1602.0 , 1556.0 , 262.0 , 197.0 , 189.0 , 77.0 ,
|
||||
76.0 , 23.8 , 11.85 ,
|
||||
|
||||
// Kr ---------------------------------------------------------
|
||||
14326.0 , 1924.6 , 1730.9 , 1678.4 , 292.8 , 222.2 , 214.4 , 95.0 ,
|
||||
93.8 , 27.51 , 14.65 , 14.0 ,
|
||||
|
||||
// Rb ---------------------------------------------------------
|
||||
15200.0 , 2068.0 , 1867.0 , 1807.0 , 325.0 , 251.0 , 242.0 , 116.0 ,
|
||||
114.0 , 32.0 , 16.0 , 15.3 , 4.18 ,
|
||||
|
||||
// Sr ---------------------------------------------------------
|
||||
16105.0 , 2219.0 , 2010.0 , 1943.0 , 361.0 , 283.0 , 273.0 , 139.0 ,
|
||||
137.0 , 40.0 , 23.0 , 22.0 , 5.69 ,
|
||||
|
||||
// Y ---------------------------------------------------------
|
||||
17038.0 , 2375.0 , 2158.0 , 2083.0 , 397.0 , 315.0 , 304.0 , 163.0 ,
|
||||
161.0 , 48.0 , 30.0 , 29.0 , 6.38 , 6.48 ,
|
||||
|
||||
// Zr ---------------------------------------------------------
|
||||
17998.0 , 2536.0 , 2311.0 , 2227.0 , 434.0 , 348.0 , 335.0 , 187.0 ,
|
||||
185.0 , 56.0 , 35.0 , 33.0 , 8.61 , 6.84 ,
|
||||
|
||||
// Nb ----------------------------------------------------------
|
||||
18986.0 , 2702.0 , 2469.0 , 2375.0 , 472.0 , 382.0 , 367.0 , 212.0 ,
|
||||
209.0 , 62.0 , 40.0 , 38.0 , 7.17 , 6.88 ,
|
||||
|
||||
// Mo -----------------------------------------------------------
|
||||
20000.0 , 2872.0 , 2632.0 , 2527.0 , 511.0 , 416.0 , 399.0 , 237.0 ,
|
||||
234.0 , 68.0 , 45.0 , 42.0 , 8.56 , 7.10 ,
|
||||
|
||||
// Tc -----------------------------------------------------------
|
||||
21044.0 , 3048.0 , 2800.0 , 2683.0 , 551.0 , 451.0 , 432.0 , 263.0 ,
|
||||
259.0 , 74.0 , 49.0 , 45.0 , 8.6 , 7.28 ,
|
||||
|
||||
// Ru -----------------------------------------------------------
|
||||
22117.0 , 3230.0 , 2973.0 , 2844.0 , 592.0 , 488.0 , 466.0 , 290.0 ,
|
||||
286.0 , 81.0 , 53.0 , 49.0 , 8.5 , 7.37 ,
|
||||
|
||||
// Rh -----------------------------------------------------------
|
||||
23220.0 , 3418.0 , 3152.0 , 3010.0 , 634.0 , 526.0 , 501.0 , 318.0 ,
|
||||
313.0 , 87.0 , 58.0 , 53.0 , 9.56 , 7.46 ,
|
||||
|
||||
// Pd -----------------------------------------------------------
|
||||
24350.0 , 3611.0 , 3337.0 , 3180.0 , 677.0 , 565.0 , 537.0 , 347.0 ,
|
||||
342.0 , 93.0 , 63.0 , 57.0 , 8.78 , 8.34 , 7.52 ,
|
||||
|
||||
// Ag -----------------------------------------------------------
|
||||
25514.0 , 3812.0 , 3530.0 , 3357.0 , 724.0 , 608.0 , 577.0 , 379.0 ,
|
||||
373.0 , 101.0 , 69.0 , 63.0 , 11.0 , 10.0 , 7.58 ,
|
||||
|
||||
// Cd ------------------------------------------------------------
|
||||
26711.0 , 4022.0 , 3732.0 , 3542.0 , 775.0 , 655.0 , 621.0 , 415.0 ,
|
||||
408.0 , 112.0 , 78.0 , 71.0 , 14.0 , 13.0 , 8.99 ,
|
||||
|
||||
// In ------------------------------------------------------------
|
||||
27940.0 , 4242.0 , 3943.0 , 3735.0 , 830.0 , 707.0 , 669.0 , 455.0 ,
|
||||
447.0 , 126.0 , 90.0 , 82.0 , 21.0 , 20.0 , 10.0 , 5.79 ,
|
||||
|
||||
// Sn ------------------------------------------------------------
|
||||
29200.0 , 4469.0 , 4160.0 , 3933.0 , 888.0 , 761.0 , 719.0 , 497.0 ,
|
||||
489.0 , 141.0 , 102.0 , 93.0 , 29.0 , 28.0 , 12.0 , 7.34 ,
|
||||
|
||||
// Sb ------------------------------------------------------------
|
||||
30419.0 , 4698.0 , 4385.0 , 4137.0 , 949.0 , 817.0 , 771.0 , 542.0 ,
|
||||
533.0 , 157.0 , 114.0 , 104.0 , 38.0 , 37.0 , 15.0 , 8.64 ,
|
||||
|
||||
// Te ------------------------------------------------------------
|
||||
31814.0 , 4939.0 , 4612.0 , 4347.0 , 1012.0 , 876.0 , 825.0 , 589.0 ,
|
||||
578.0 , 174.0 , 127.0 , 117.0 , 48.0 , 46.0 , 17.84 , 9.01 ,
|
||||
|
||||
// I ------------------------------------------------------------
|
||||
33169.0 , 5188.0 , 4852.0 , 4557.0 , 1078.0 , 937.0 , 881.0 , 638.0 ,
|
||||
626.0 , 193.0 , 141.0 , 131.0 , 58.0 , 56.0 , 20.61 , 10.45 ,
|
||||
|
||||
// Xe ------------------------------------------------------------
|
||||
34570.0 , 5460.0 , 5110.0 , 4790.0 , 1148.7 , 1002.1 , 940.6 , 689.0 ,
|
||||
676.4 , 213.2 , 157.0 , 145.5 , 69.5 , 67.5 , 23.39 , 13.43 ,
|
||||
12.13 ,
|
||||
|
||||
// Cs ------------------------------------------------------------
|
||||
35985.0 , 5714.0 , 5359.0 , 5012.0 , 1220.0 , 1068.0 , 1000.0 , 742.0 ,
|
||||
728.0 , 233.0 , 174.0 , 164.0 , 81.0 , 79.0 , 25.0 , 14.0 ,
|
||||
12.3 , 3.89 ,
|
||||
|
||||
// Ba -------------------------------------------------------------
|
||||
37441.0 , 5989.0 , 5624.0 , 5247.0 , 1293.0 , 1138.0 , 1063.0 , 797.0 ,
|
||||
782.0 , 254.0 , 193.0 , 181.0 , 94.0 , 92.0 , 31.0 , 18.0 ,
|
||||
16.0 , 5.21 ,
|
||||
|
||||
// La -------------------------------------------------------------
|
||||
38925.0 , 6266.0 , 5891.0 , 5483.0 , 1365.0 , 1207.0 , 1124.0 , 851.0 ,
|
||||
834.0 , 273.0 , 210.0 , 196.0 , 105.0 , 103.0 , 36.0 , 22.0 ,
|
||||
19.0 , 5.75 , 5.58 ,
|
||||
|
||||
// Ce -------------------------------------------------------------
|
||||
40443.0 , 6548.0 , 6164.0 , 5723.0 , 1437.0 , 1275.0 , 1184.0 , 903.0 ,
|
||||
885.0 , 291.0 , 225.0 , 209.0 , 114.0 , 111.0 , 6.0 , 39.0 ,
|
||||
25.0 , 22.0 , 5.65 ,
|
||||
|
||||
// Pr -------------------------------------------------------------
|
||||
41991.0 , 6835.0 , 6440.0 , 5964.0 , 1509.0 , 1342.0 , 1244.0 , 954.0 ,
|
||||
934.0 , 307.0 , 238.0 , 220.0 , 121.0 , 117.0 , 6.0 , 41.0 ,
|
||||
27.0 , 24.0 , 5.42 ,
|
||||
|
||||
// Nd -------------------------------------------------------------
|
||||
43569.0 , 7126.0 , 6722.0 , 6208.0 , 1580.0 , 1408.0 , 1303.0 , 1005.0 ,
|
||||
983.0 , 321.0 , 250.0 , 230.0 , 126.0 , 122.0 , 6.0 , 42.0 ,
|
||||
28.0 , 25.0 , 5.49 ,
|
||||
|
||||
// Pm -------------------------------------------------------------
|
||||
45184.0 , 7428.0 , 7013.0 , 6459.0 , 1653.0 , 1476.0 , 1362.0 , 1057.0 ,
|
||||
1032.0 , 325.0 , 261.0 , 240.0 , 131.0 , 127.0 , 6.0 , 43.0 ,
|
||||
28.0 , 25.0 , 5.55 ,
|
||||
|
||||
// Sm -------------------------------------------------------------
|
||||
46834.0 , 7737.0 , 7312.0 , 6716.0 , 1728.0 , 1546.0 , 1422.0 , 1110.0 ,
|
||||
1083.0 , 349.0 , 273.0 , 251.0 , 137.0 , 132.0 , 6.0 , 44.0 ,
|
||||
29.0 , 25.0 , 5.63 ,
|
||||
|
||||
// Eu -------------------------------------------------------------
|
||||
48519.0 , 8052.0 , 7617.0 , 6977.0 , 1805.0 , 1618.0 , 1484.0 , 1164.0 ,
|
||||
1135.0 , 364.0 , 286.0 , 262.0 , 143.0 , 137.0 , 6.0 , 45.0 ,
|
||||
30.0 , 26.0 , 5.68 ,
|
||||
|
||||
// Gd -------------------------------------------------------------
|
||||
50239.0 , 8376.0 , 7930.0 , 7243.0 , 1884.0 , 1692.0 , 1547.0 , 1220.0 ,
|
||||
1189.0 , 380.0 , 300.0 , 273.0 , 150.0 , 143.0 , 6.0 , 46.0 ,
|
||||
31.0 , 27.0 , 6.0 , 6.16 ,
|
||||
|
||||
// Tb -------------------------------------------------------------
|
||||
51996.0 , 8708.0 , 8252.0 , 7514.0 , 1965.0 , 1768.0 , 1612.0 , 1277.0 ,
|
||||
1243.0 , 398.0 , 315.0 , 285.0 , 157.0 , 150.0 , 6.0 , 48.0 ,
|
||||
32.0 , 28.0 , 5.85 ,
|
||||
|
||||
// Dy -------------------------------------------------------------
|
||||
53789.0 , 9046.0 , 8581.0 , 7790.0 , 2048.0 , 1846.0 , 1678.0 , 1335.0 ,
|
||||
1298.0 , 416.0 , 331.0 , 297.0 , 164.0 , 157.0 , 6.0 , 50.0 ,
|
||||
33.0 , 28.0 , 5.93 ,
|
||||
|
||||
// Ho -------------------------------------------------------------
|
||||
55618.0 , 9394.0 , 8918.0 , 8071.0 , 2133.0 , 1926.0 , 1746.0 , 1395.0 ,
|
||||
1354.0 , 434.0 , 348.0 , 310.0 , 172.0 , 164.0 , 6.0 , 52.0 ,
|
||||
34.0 , 29.0 , 6.02 ,
|
||||
|
||||
// Er -------------------------------------------------------------
|
||||
57486.0 , 9751.0 , 9264.0 , 8358.0 , 2220.0 , 2008.0 , 1815.0 , 1456.0 ,
|
||||
1412.0 , 452.0 , 365.0 , 323.0 , 181.0 , 172.0 , 6.0 , 54.0 ,
|
||||
35.0 , 30.0 , 6.10 ,
|
||||
|
||||
// Tu -------------------------------------------------------------
|
||||
59390.0 , 10116.0 , 9617.0 , 8648.0 , 2309.0 , 2092.0 , 1885.0 , 1518.0 ,
|
||||
1471.0 , 471.0 , 382.0 , 336.0 , 190.0 , 181.0 , 7.0 , 56.0 ,
|
||||
36.0 , 30.0 , 6.18 ,
|
||||
|
||||
// Yb -------------------------------------------------------------
|
||||
61332.0 , 10486.0 , 9978.0 , 8944.0 , 2401.0 , 2178.0 , 1956.0 , 1580.0 ,
|
||||
1531.0 , 490.0 , 399.0 , 349.0 , 200.0 , 190.0 , 8.0 , 7.0 ,
|
||||
58.0 , 37.0 , 31.0 , 6.25 ,
|
||||
|
||||
// Lu -------------------------------------------------------------
|
||||
63314.0 , 10870.0 , 10349.0 , 9244.0 , 2499.0 , 2270.0 , 2032.0 , 1647.0 ,
|
||||
1596.0 , 514.0 , 420.0 , 366.0 , 213.0 , 202.0 , 13.0 , 12.0 ,
|
||||
62.0 , 39.0 , 32.0 , 6.6 , 7.0 ,
|
||||
|
||||
// Hf -------------------------------------------------------------
|
||||
65351.0 , 11271.0 , 10739.0 , 9561.0 , 2604.0 , 2369.0 , 2113.0 , 1720.0 ,
|
||||
1665.0 , 542.0 , 444.0 , 386.0 , 229.0 , 217.0 , 21.0 , 20.0 ,
|
||||
68.0 , 43.0 , 35.0 , 7.0 , 7.5 ,
|
||||
|
||||
// Ta -------------------------------------------------------------
|
||||
67416.0 , 11682.0 , 11136.0 , 9881.0 , 2712.0 , 2472.0 , 2197.0 , 1796.0 ,
|
||||
1737.0 , 570.0 , 469.0 , 407.0 , 245.0 , 232.0 , 30.0 , 28.0 ,
|
||||
74.0 , 47.0 , 38.0 , 8.3 , 7.9 ,
|
||||
|
||||
// W -------------------------------------------------------------
|
||||
69525.0 , 12100.0 , 11544.0 , 10207.0 , 2823.0 , 2577.0 , 2283.0 , 1874.0 ,
|
||||
1811.0 , 599.0 , 495.0 , 428.0 , 261.0 , 248.0 , 38.0 , 36.0 ,
|
||||
80.0 , 51.0 , 41.0 , 9.0 , 8.0 ,
|
||||
|
||||
// Re -------------------------------------------------------------
|
||||
71676.0 , 12527.0 , 11959.0 , 10535.0 , 2937.0 , 2686.0 , 2371.0 , 1953.0 ,
|
||||
1887.0 , 629.0 , 522.0 , 450.0 , 278.0 , 264.0 , 47.0 , 45.0 ,
|
||||
86.0 , 56.0 , 45.0 , 9.6 , 7.9 ,
|
||||
|
||||
// Os -------------------------------------------------------------
|
||||
73871.0 , 12968.0 , 12385.0 , 10871.0 , 3054.0 , 2797.0 , 2461.0 , 2035.0 ,
|
||||
1964.0 , 660.0 , 551.0 , 473.0 , 295.0 , 280.0 , 56.0 , 54.0 ,
|
||||
92.0 , 61.0 , 49.0 , 9.6 , 8.5 ,
|
||||
|
||||
// Ir -------------------------------------------------------------
|
||||
76111.0 , 13419.0 , 12824.0 , 11215.0 , 3175.0 , 2912.0 , 2554.0 , 2119.0 ,
|
||||
2044.0 , 693.0 , 581.0 , 497.0 , 314.0 , 298.0 , 67.0 , 64.0 ,
|
||||
99.0 , 66.0 , 53.0 , 9.6 , 9.1 ,
|
||||
|
||||
// Pt -------------------------------------------------------------
|
||||
78395.0 , 13880.0 , 13273.0 , 11564.0 , 3300.0 , 3030.0 , 2649.0 , 2206.0 ,
|
||||
2126.0 , 727.0 , 612.0 , 522.0 , 335.0 , 318.0 , 78.0 , 75.0 ,
|
||||
106.0 , 71.0 , 57.0 , 9.6 , 9.0 ,
|
||||
|
||||
// Au -------------------------------------------------------------
|
||||
80725.0 , 14353.0 , 13734.0 , 11919.0 , 3430.0 , 3153.0 , 2748.0 , 2295.0 ,
|
||||
2210.0 , 764.0 , 645.0 , 548.0 , 357.0 , 339.0 , 91.0 , 87.0 ,
|
||||
114.0 , 76.0 , 61.0 , 12.5 , 11.1 , 9.23 ,
|
||||
|
||||
// Hg -------------------------------------------------------------
|
||||
83102.0 , 14839.0 , 14209.0 , 12284.0 , 3567.0 , 3283.0 , 2852.0 , 2390.0 ,
|
||||
2300.0 , 806.0 , 683.0 , 579.0 , 382.0 , 363.0 , 107.0 , 103.0 ,
|
||||
125.0 , 85.0 , 68.0 , 14.0 , 12.0 , 10.4 ,
|
||||
|
||||
// Tl -------------------------------------------------------------
|
||||
85530.0 , 15347.0 , 14698.0 , 12658.0 , 3710.0 , 3420.0 , 2961.0 , 2490.0 ,
|
||||
2394.0 , 852.0 , 726.0 , 615.0 , 411.0 , 391.0 , 127.0 , 123.0 ,
|
||||
139.0 , 98.0 , 79.0 , 21.0 , 19.0 , 8.0 , 6.11 ,
|
||||
|
||||
// Pb -------------------------------------------------------------
|
||||
88005.0 , 15861.0 , 15200.0 , 13055.0 , 3857.0 , 3560.0 , 3072.0 , 2592.0 ,
|
||||
2490.0 , 899.0 , 769.0 , 651.0 , 441.0 , 419.0 , 148.0 , 144.0 ,
|
||||
153.0 , 111.0 , 90.0 , 27.0 , 25.0 , 10.0 , 7.42 ,
|
||||
|
||||
// Bi -------------------------------------------------------------
|
||||
90526.0 , 16388.0 , 15711.0 , 13419.0 , 4007.0 , 3704.0 , 3185.0 , 2696.0 ,
|
||||
2588.0 , 946.0 , 813.0 , 687.0 , 472.0 , 448.0 , 170.0 , 165.0 ,
|
||||
167.0 , 125.0 , 101.0 , 34.0 , 32.0 , 12.0 , 7.29 ,
|
||||
|
||||
// Po -------------------------------------------------------------
|
||||
93105.0 , 16939.0 , 16244.0 , 13814.0 , 4161.0 , 3852.0 , 3301.0 , 2802.0 ,
|
||||
2687.0 , 994.0 , 858.0 , 724.0 , 503.0 , 478.0 , 193.0 , 187.0 ,
|
||||
181.0 , 139.0 , 112.0 , 41.0 , 38.0 , 15.0 , 8.43 ,
|
||||
|
||||
// At -------------------------------------------------------------
|
||||
95730.0 , 17493.0 , 16785.0 , 14214.0 , 4320.0 , 4005.0 , 3420.0 , 2910.0 ,
|
||||
2788.0 , 1044.0 , 904.0 , 761.0 , 535.0 , 508.0 , 217.0 , 211.0 ,
|
||||
196.0 , 153.0 , 123.0 , 48.0 , 44.0 , 19.0 , 11.0 , 9.3 ,
|
||||
|
||||
// Rn -------------------------------------------------------------
|
||||
98404.0 , 18049.0 , 17337.0 , 14619.0 , 4483.0 , 4162.0 , 3452.0 , 3109.0 ,
|
||||
2890.0 , 1096.0 , 951.0 , 798.0 , 567.0 , 538.0 , 242.0 , 235.0 ,
|
||||
212.0 , 167.0 , 134.0 , 55.0 , 51.0 , 24.0 , 14.0 , 10.7 ,
|
||||
|
||||
// Fr -------------------------------------------------------------
|
||||
101137.0 , 18639.0 , 17907.0 , 15031.0 , 4652.0 , 4324.0 , 3666.0 , 3134.0 ,
|
||||
2998.0 , 1153.0 , 1003.0 , 839.0 , 603.0 , 572.0 , 268.0 , 260.0 ,
|
||||
231.0 , 183.0 , 147.0 , 65.0 , 61.0 , 33.0 , 19.0 , 14.0 ,
|
||||
4.0 ,
|
||||
|
||||
// Ra -------------------------------------------------------------
|
||||
103922.0 , 19237.0 , 18484.0 , 15444.0 , 4822.0 , 4491.0 , 3793.0 , 3254.0 ,
|
||||
3111.0 , 1214.0 , 1060.0 , 884.0 , 642.0 , 609.0 , 296.0 , 287.0 ,
|
||||
253.0 , 201.0 , 161.0 , 77.0 , 73.0 , 40.0 , 25.0 , 19.0 ,
|
||||
5.28 ,
|
||||
|
||||
// Ac -------------------------------------------------------------
|
||||
106755.0 , 19840.0 , 19083.0 , 15871.0 , 5002.0 , 4656.0 , 3921.0 , 3374.0 ,
|
||||
3223.0 , 1274.0 , 1116.0 , 928.0 , 680.0 , 645.0 , 322.0 , 313.0 ,
|
||||
274.0 , 218.0 , 174.0 , 88.0 , 83.0 , 45.0 , 29.0 , 22.0 ,
|
||||
5.7 , 6.3 ,
|
||||
|
||||
// Th -------------------------------------------------------------
|
||||
109651.0 , 20472.0 , 19693.0 , 16300.0 , 5182.0 , 4830.0 , 4049.0 , 3494.0 ,
|
||||
3335.0 , 1333.0 , 1171.0 , 970.0 , 717.0 , 679.0 , 347.0 , 338.0 ,
|
||||
293.0 , 233.0 , 185.0 , 97.0 , 91.0 , 50.0 , 33.0 , 25.0 ,
|
||||
6.0 , 6.0 ,
|
||||
|
||||
// Pa -------------------------------------------------------------
|
||||
112601.0 , 21105.0 , 20314.0 , 16733.0 , 5367.0 , 5001.0 , 4178.0 , 3613.0 ,
|
||||
3446.0 , 1390.0 , 1225.0 , 1011.0 , 752.0 , 712.0 , 372.0 , 362.0 ,
|
||||
312.0 , 248.0 , 195.0 , 104.0 , 97.0 , 6.0 , 50.0 , 32.0 ,
|
||||
24.0 , 6.0 , 6.0 ,
|
||||
|
||||
// U -------------------------------------------------------------
|
||||
115606.0 , 21757.0 , 20948.0 , 17166.0 , 5548.0 , 5182.0 , 4308.0 , 3733.0 ,
|
||||
3557.0 , 1446.0 , 1278.0 , 1050.0 , 785.0 , 743.0 , 396.0 , 386.0 ,
|
||||
329.0 , 261.0 , 203.0 , 110.0 , 101.0 , 6.0 , 52.0 , 34.0 ,
|
||||
24.0 , 6.1 , 6.0 ,
|
||||
|
||||
// Np -------------------------------------------------------------
|
||||
118678.0 , 22426.0 , 21600.0 , 17610.0 , 5723.0 , 5366.0 , 4440.0 , 3854.0 ,
|
||||
3669.0 , 1504.0 , 1331.0 , 1089.0 , 819.0 , 774.0 , 421.0 , 410.0 ,
|
||||
346.0 , 274.0 , 211.0 , 116.0 , 106.0 , 6.0 , 54.0 , 35.0 ,
|
||||
25.0 , 6.0 , 6.0 ,
|
||||
|
||||
// Pu -------------------------------------------------------------
|
||||
121818.0 , 23097.0 , 22266.0 , 18056.0 , 5933.0 , 5541.0 , 4557.0 , 3977.0 ,
|
||||
3783.0 , 1563.0 , 1384.0 , 1128.0 , 853.0 , 805.0 , 446.0 , 434.0 ,
|
||||
356.0 , 287.0 , 219.0 , 122.0 , 111.0 , 6.0 , 53.0 , 34.0 ,
|
||||
23.0 , 6.0 ,
|
||||
|
||||
// Am -------------------------------------------------------------
|
||||
125027.0 , 23773.0 , 22944.0 , 18504.0 , 6121.0 , 5710.0 , 4667.0 , 4102.0 ,
|
||||
3898.0 , 1623.0 , 1439.0 , 1167.0 , 887.0 , 836.0 , 467.0 , 452.0 ,
|
||||
355.0 , 301.0 , 220.0 , 123.0 , 112.0 , 6.0 , 54.0 , 44.0 ,
|
||||
36.0 , 6.0 ,
|
||||
|
||||
// Cm -------------------------------------------------------------
|
||||
128220.0 , 24460.0 , 23779.0 , 18930.0 , 6288.0 , 5895.0 , 4797.0 , 4236.0 ,
|
||||
4014.0 , 1664.0 , 1493.0 , 1194.0 , 919.0 , 864.0 , 494.0 , 479.0 ,
|
||||
384.0 , 314.0 , 239.0 , 126.0 , 119.0 , 11.0 , 60.0 , 39.0 ,
|
||||
27.0 , 5.0 , 6.0 ,
|
||||
|
||||
// Bk -------------------------------------------------------------
|
||||
131590.0 , 25275.0 , 24385.0 , 19452.0 , 6556.0 , 6147.0 , 4977.0 , 4366.0 ,
|
||||
4133.0 , 1729.0 , 1554.0 , 1236.0 , 955.0 , 898.0 , 520.0 , 504.0 ,
|
||||
401.0 , 329.0 , 248.0 , 142.0 , 124.0 , 12.0 , 63.0 , 41.0 ,
|
||||
27.0 , 4.0 , 6.0 ,
|
||||
|
||||
// Cf -------------------------------------------------------------
|
||||
135960.0 , 26110.0 , 25250.0 , 19930.0 , 6754.0 , 6359.0 , 5109.0 , 4492.0 ,
|
||||
4247.0 , 1789.0 , 1610.0 , 1273.0 , 987.0 , 925.0 , 546.0 , 529.0 ,
|
||||
412.0 , 338.0 , 251.0 , 142.0 , 129.0 , 9.0 , 61.0 , 39.0 ,
|
||||
25.0 , 6.0 ,
|
||||
|
||||
// Es -------------------------------------------------------------
|
||||
139490.0 , 26900.0 , 26020.0 , 20410.0 , 6977.0 , 6754.0 , 5252.0 , 4630.0 ,
|
||||
4369.0 , 1857.0 , 1674.0 , 1316.0 , 1024.0 , 959.0 , 573.0 , 554.0 ,
|
||||
429.0 , 353.0 , 260.0 , 148.0 , 135.0 , 9.0 , 63.0 , 40.0 ,
|
||||
25.0 , 6.0 ,
|
||||
|
||||
// Fm -------------------------------------------------------------
|
||||
143090.0 , 27700.0 , 26810.0 , 20900.0 , 7205.0 , 6793.0 , 5397.0 , 4766.0 ,
|
||||
4498.0 , 1933.0 , 1746.0 , 1366.0 , 1068.0 , 1000.0 , 606.0 , 587.0 ,
|
||||
453.0 , 375.0 , 275.0 , 160.0 , 145.0 , 15.0 , 69.0 , 45.0 ,
|
||||
29.0 , 7.0 ,
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int
|
||||
G4AtomicShells::GetNumberOfShells(G4int Z)
|
||||
{
|
||||
return fNumberOfShells[Z];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4double
|
||||
G4AtomicShells::GetBindingEnergy(G4int Z, G4int ShellNb)
|
||||
{
|
||||
assert (Z>=1 && Z<=101 && ShellNb<fNumberOfShells[Z]);
|
||||
|
||||
G4int indice = 1;
|
||||
for (G4int z = 1 ; z < Z ; z++) indice += fNumberOfShells[z];
|
||||
indice += ShellNb;
|
||||
return fBindingEnergies[indice]*eV;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
@@ -0,0 +1,296 @@
|
||||
// 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: G4Element.cc,v 2.7 1998/11/16 17:26:46 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------ class G4Element ------------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
//
|
||||
// 26-06-96, Code uses operators (+=, *=, ++, -> etc.) correctly, P. Urban
|
||||
// 09-07-96, new data members added by L.Urban
|
||||
// 17-01-97, aesthetic rearrangement, M.Maire
|
||||
// 20-01-97, Compute Tsai's formula for the rad length, M.Maire
|
||||
// 21-01-97, remove mixture flag, M.Maire
|
||||
// 24-01-97, ComputeIonisationParameters().
|
||||
// new data member: fTaul, M.Maire
|
||||
// 29-01-97, Forbidden to create Element with Z<1 or N<Z, M.Maire
|
||||
// 20-03-97, corrected initialization of pointers, M.Maire
|
||||
// 28-04-98, atomic subshell binding energies stuff, V. Grichine
|
||||
// 09-07-98, Ionisation parameters removed from the class, M.Maire
|
||||
// 16-11-98, name Subshell -> Shell; GetBindingEnergy(), mma
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#include "G4Element.hh"
|
||||
#include <iomanip.h>
|
||||
|
||||
G4ElementTable G4Element::theElementTable;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Constructor to Generate an element from scratch
|
||||
|
||||
G4Element::G4Element(const G4String& name, const G4String& symbol,
|
||||
G4double zeff, G4double aeff)
|
||||
{
|
||||
if (zeff<1.) G4Exception
|
||||
(" ERROR! It is not allowed to create an Element with Z < 1" );
|
||||
|
||||
if (aeff/(g/mole)<zeff) G4Exception
|
||||
(" ERROR! Attempt to create an Element with N < Z !!!" );
|
||||
|
||||
if ((zeff-G4int(zeff)) > perMillion)
|
||||
G4cerr << name <<
|
||||
" : WARNING ! Trying to define an element as a mixture directly via effective Z."
|
||||
<< endl;
|
||||
|
||||
InitializePointers();
|
||||
|
||||
fName = name;
|
||||
fSymbol = symbol;
|
||||
fZeff = zeff;
|
||||
fNeff = aeff/(g/mole);
|
||||
fAeff = aeff;
|
||||
|
||||
fNumberOfIsotopes = 0;
|
||||
|
||||
fNbOfAtomicShells = G4AtomicShells::GetNumberOfShells((G4int)fZeff);
|
||||
fAtomicShells = new G4double[fNbOfAtomicShells];
|
||||
for (G4int i=0;i<fNbOfAtomicShells;i++)
|
||||
fAtomicShells[i] = G4AtomicShells::GetBindingEnergy((G4int)fZeff,i);
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in table and set the index
|
||||
theElementTable.insert(this);
|
||||
fIndexInTable = theElementTable.index(this);
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Constructor to Generate element from a List of 'nIsotopes' isotopes, added
|
||||
// via AddIsotope
|
||||
|
||||
G4Element::G4Element(const G4String& name, const G4String& symbol, G4int nIsotopes)
|
||||
{
|
||||
InitializePointers();
|
||||
|
||||
size_t n = size_t(nIsotopes);
|
||||
|
||||
fName = name;
|
||||
fSymbol = symbol;
|
||||
fNumberOfIsotopes = 0;
|
||||
|
||||
theIsotopeVector = new G4IsotopeVector(n);
|
||||
fRelativeAbundanceVector = new G4double[nIsotopes];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Add an isotope to the element
|
||||
|
||||
void G4Element::AddIsotope(G4Isotope* isotope, G4double abundance)
|
||||
{
|
||||
if (theIsotopeVector == NULL)
|
||||
G4Exception("ERROR!!! - Trying to add an Isotope before contructing the element.");
|
||||
|
||||
// filling ...
|
||||
if ( fNumberOfIsotopes < theIsotopeVector->length() ) {
|
||||
fRelativeAbundanceVector[fNumberOfIsotopes] = abundance;
|
||||
(*theIsotopeVector)(fNumberOfIsotopes) = isotope;
|
||||
fNumberOfIsotopes ++;
|
||||
}
|
||||
else
|
||||
G4Exception
|
||||
("ERROR!!! - Attempt to add more than the declared number of constituent isotopes.");
|
||||
|
||||
// filled.
|
||||
if ( fNumberOfIsotopes == theIsotopeVector->length() ) {
|
||||
// Compute Zeff, Neff, Aeff
|
||||
G4int i;
|
||||
G4double wtSum=0.0;
|
||||
|
||||
fZeff = G4double( (*theIsotopeVector)(0)->GetZ() );
|
||||
fNeff = fAeff = 0.0;
|
||||
for (i=0;i<fNumberOfIsotopes;i++) {
|
||||
fNeff += fRelativeAbundanceVector[i]*(*theIsotopeVector)(i)->GetN();
|
||||
fAeff += fRelativeAbundanceVector[i]*(*theIsotopeVector)(i)->GetA();
|
||||
wtSum += fRelativeAbundanceVector[i];
|
||||
}
|
||||
fNeff /= wtSum;
|
||||
fAeff /= wtSum;
|
||||
|
||||
fNbOfAtomicShells = G4AtomicShells::GetNumberOfShells((G4int)fZeff);
|
||||
fAtomicShells = new G4double[fNbOfAtomicShells];
|
||||
for (i=0;i<fNbOfAtomicShells;i++)
|
||||
fAtomicShells[i] = G4AtomicShells::GetBindingEnergy((G4int)fZeff,i);
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in table and set the index
|
||||
theElementTable.insert(this);
|
||||
fIndexInTable = theElementTable.index(this);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Element::InitializePointers()
|
||||
{
|
||||
theIsotopeVector = NULL;
|
||||
fRelativeAbundanceVector = NULL;
|
||||
fAtomicShells = NULL;
|
||||
fIonisation = NULL;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Element::~G4Element()
|
||||
{
|
||||
if (theIsotopeVector) delete theIsotopeVector;
|
||||
if (fRelativeAbundanceVector) delete [] fRelativeAbundanceVector;
|
||||
if (fAtomicShells) delete [] fAtomicShells;
|
||||
if (fIonisation) delete fIonisation;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Element::G4Element(G4Element &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4Element & G4Element::operator=(const G4Element &right)
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Element::operator==(const G4Element &right) const
|
||||
{
|
||||
return (this == (G4Element *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Element::operator!=(const G4Element &right) const
|
||||
{
|
||||
return (this != (G4Element *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Element::ComputeDerivedQuantities()
|
||||
{
|
||||
// some basic functions of the atomic number
|
||||
|
||||
// Radiation Length
|
||||
ComputeCoulombFactor();
|
||||
ComputeLradTsaiFactor();
|
||||
|
||||
// parameters for energy loss by ionisation
|
||||
fIonisation = new G4IonisParamElm(fZeff);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Element::ComputeCoulombFactor()
|
||||
{
|
||||
//
|
||||
// Compute Coulomb correction factor (Phys Rev. D50 3-1 (1994) page 1254)
|
||||
|
||||
const G4double k1 = 0.0083 , k2 = 0.20206 ,k3 = 0.0020 , k4 = 0.0369 ;
|
||||
|
||||
G4double az2 = (fine_structure_const*fZeff)*(fine_structure_const*fZeff);
|
||||
G4double az4 = az2 * az2;
|
||||
|
||||
fCoulomb = (k1*az4 + k2 + 1./(1.+az2))*az2 - (k3*az4 + k4)*az4;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Element::ComputeLradTsaiFactor()
|
||||
{
|
||||
//
|
||||
// Compute Tsai's Expression for the Radiation Length
|
||||
// (Phys Rev. D50 3-1 (1994) page 1254)
|
||||
|
||||
const G4double Lrad_light[] = {5.31 , 4.79 , 4.74 , 4.71} ;
|
||||
const G4double Lprad_light[] = {6.144 , 5.621 , 5.805 , 5.924} ;
|
||||
|
||||
const G4double logZ3 = log(fZeff)/3.;
|
||||
|
||||
G4double Lrad, Lprad;
|
||||
G4int iz = (int)(fZeff+0.5) - 1 ;
|
||||
if (iz <= 3) { Lrad = Lrad_light[iz] ; Lprad = Lprad_light[iz] ; }
|
||||
else { Lrad = log(184.15) - logZ3 ; Lprad = log(1194.) - 2*logZ3 ; }
|
||||
|
||||
fRadTsai = 4*alpha_rcl2*fZeff*(fZeff*(Lrad-fCoulomb) + Lprad);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4double G4Element::GetAtomicShell(G4int i) const
|
||||
{
|
||||
if (i<0 || i>=fNbOfAtomicShells)
|
||||
G4Exception("Invalid argument in G4Element::GetAtomicShell");
|
||||
return fAtomicShells[i];
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Element* element)
|
||||
{
|
||||
long mode = flux.setf(ios::fixed,ios::floatfield);
|
||||
|
||||
flux
|
||||
<< " Element: " << setw(8) << element->fName << setw(3) << element->fSymbol
|
||||
<< " Z = " << setw(4) << setprecision(1) << element->fZeff
|
||||
<< " N = " << setw(5) << setprecision(1) << element->fNeff
|
||||
<< " A = " << setw(6) << setprecision(2) << (element->fAeff)/(g/mole)
|
||||
<< " g/mole";
|
||||
|
||||
for (G4int i=0; i<element->fNumberOfIsotopes; i++)
|
||||
flux
|
||||
<< "\n ---> " << (*(element->theIsotopeVector))[i]
|
||||
<< " abundance: " << setw(6) << setprecision(2)
|
||||
<< (element->fRelativeAbundanceVector[i])/perCent << " %";
|
||||
|
||||
flux.setf(mode,ios::floatfield);
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Element& element)
|
||||
{
|
||||
flux << &element;
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4ElementTable ElementTable)
|
||||
{
|
||||
//Dump info for all known elements
|
||||
flux << "\n***** Table : Nb of elements = " << ElementTable.length()
|
||||
<< " *****\n" << endl;
|
||||
|
||||
for (G4int i=0; i<ElementTable.length(); i++) flux << ElementTable[i]
|
||||
<< endl << endl;
|
||||
|
||||
return flux;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
// 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: G4IonisParamElm.cc,v 2.2 1998/07/12 03:00:39 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ------------ class G4IonisParamElm ------------
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
//
|
||||
// 09-07-98, data moved from G4Element. M.Maire
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#include "G4IonisParamElm.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamElm::G4IonisParamElm(G4double Z)
|
||||
{
|
||||
if (Z < 1.) G4Exception
|
||||
(" ERROR! It is not allowed to create an Element with Z < 1" );
|
||||
|
||||
// some basic functions of the atomic number
|
||||
fZ = Z;
|
||||
fZ3 = pow(fZ, 1./3.);
|
||||
fZZ3 = pow(fZ*(fZ+1.), 1./3.);
|
||||
flogZ3 = log(fZ)/3.;
|
||||
|
||||
// parameters for energy loss by ionisation
|
||||
fMeanExcitationEnergy = 16.*pow(fZ,0.9)*eV;
|
||||
|
||||
fTau0 = 0.1*fZ3*MeV/proton_mass_c2;
|
||||
fTaul = 2.*MeV/proton_mass_c2;
|
||||
|
||||
// compute the Bethe-Bloch formula for energy = fTaul*particle mass
|
||||
G4double rate = fMeanExcitationEnergy/electron_mass_c2 ;
|
||||
G4double w = fTaul*(fTaul+2.) ;
|
||||
fBetheBlochLow = (fTaul+1.)*(fTaul+1.)*log(2.*w/rate)/w - 1. ;
|
||||
fBetheBlochLow = 2.*fZ*twopi_mc2_rcl2*fBetheBlochLow ;
|
||||
|
||||
fClow = sqrt(fTaul)*fBetheBlochLow;
|
||||
fAlow = 6.458040 * fClow/fTau0;
|
||||
G4double Taum = 0.035*fZ3*MeV/proton_mass_c2;
|
||||
fBlow =-3.229020*fClow/(fTau0*sqrt(Taum));
|
||||
|
||||
// Shell correction factors
|
||||
fShellCorrectionVector = new G4double[3];
|
||||
G4double rate2 = rate*rate;
|
||||
|
||||
fShellCorrectionVector[0] = ( 1.10289e5 + 5.14781e8*rate)*rate2 ;
|
||||
fShellCorrectionVector[1] = ( 7.93805e3 - 2.22565e7*rate)*rate2 ;
|
||||
fShellCorrectionVector[2] = (-9.92256e1 + 2.10823e5*rate)*rate2 ;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamElm::~G4IonisParamElm()
|
||||
{ }
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamElm::G4IonisParamElm(G4IonisParamElm &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4IonisParamElm & G4IonisParamElm::operator=(const G4IonisParamElm &right)
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4IonisParamElm::operator==(const G4IonisParamElm &right) const
|
||||
{
|
||||
return (this == (G4IonisParamElm *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4IonisParamElm::operator!=(const G4IonisParamElm &right) const
|
||||
{
|
||||
return (this != (G4IonisParamElm *) &right);
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
// 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: G4IonisParamMat.cc,v 2.5 1998/10/05 14:33:14 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 18-07-98, bug corrected in ComputeDensityEffect() for gas
|
||||
// 09-07-98, data moved from G4Material, M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#include "G4IonisParamMat.hh"
|
||||
#include "G4Material.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamMat::G4IonisParamMat(G4Material* material)
|
||||
:fMaterial(material)
|
||||
{
|
||||
ComputeMeanParameters();
|
||||
ComputeDensityEffect();
|
||||
ComputeFluctModel();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4IonisParamMat::ComputeMeanParameters()
|
||||
{
|
||||
// compute mean excitation energy and shell correction vector
|
||||
|
||||
fTaul = (*(fMaterial->GetElementVector()))[0]->GetIonisation()->GetTaul();
|
||||
fLogMeanExcEnergy = 0.;
|
||||
|
||||
for (G4int i=0; i < fMaterial->GetNumberOfElements(); i++)
|
||||
fLogMeanExcEnergy += (fMaterial->GetVecNbOfAtomsPerVolume())[i]
|
||||
*((*(fMaterial->GetElementVector()))[i]->GetZ())
|
||||
*log((*(fMaterial->GetElementVector()))[i]->GetIonisation()
|
||||
->GetMeanExcitationEnergy());
|
||||
|
||||
fLogMeanExcEnergy /= fMaterial->GetTotNbOfElectPerVolume();
|
||||
fMeanExcitationEnergy = exp(fLogMeanExcEnergy);
|
||||
|
||||
fShellCorrectionVector = new G4double[3];
|
||||
|
||||
for (G4int j=0; j<=2; j++)
|
||||
{
|
||||
fShellCorrectionVector[j] = 0.;
|
||||
|
||||
for (G4int k=0; k<fMaterial->GetNumberOfElements(); k++)
|
||||
fShellCorrectionVector[j] += (fMaterial->GetVecNbOfAtomsPerVolume())[k]
|
||||
*((*(fMaterial->GetElementVector()))[k]->GetIonisation()
|
||||
->GetShellCorrectionVector()[j]);
|
||||
|
||||
fShellCorrectionVector[j] /= fMaterial->GetTotNbOfElectPerVolume();
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4IonisParamMat::ComputeDensityEffect()
|
||||
{
|
||||
// Compute parameters for the density effect correction in DE/Dx formula.
|
||||
// The parametrization is from R.M. Sternheimer, Phys. Rev.B,3:3681 (1971)
|
||||
|
||||
const G4double Cd2 = 4*pi*hbarc_squared*classic_electr_radius;
|
||||
const G4double twoln10 = 2.*log(10.);
|
||||
|
||||
G4int icase;
|
||||
|
||||
fCdensity = 1. + log(fMeanExcitationEnergy*fMeanExcitationEnergy
|
||||
/(Cd2*fMaterial->GetTotNbOfElectPerVolume()));
|
||||
|
||||
//
|
||||
// condensed materials
|
||||
//
|
||||
G4State State = fMaterial->GetState();
|
||||
|
||||
if ((State == kStateSolid)||(State == kStateLiquid)) {
|
||||
|
||||
const G4double E100keV = 100.*keV;
|
||||
const G4double ClimiS[] = {3.681 , 5.215 };
|
||||
const G4double X0valS[] = {1.0 , 1.5 };
|
||||
const G4double X1valS[] = {2.0 , 3.0 };
|
||||
|
||||
if(fMeanExcitationEnergy < E100keV) icase = 0 ;
|
||||
else icase = 1 ;
|
||||
|
||||
if(fCdensity < ClimiS[icase]) fX0density = 0.2;
|
||||
else fX0density = 0.326*fCdensity-X0valS[icase];
|
||||
|
||||
fX1density = X1valS[icase] ; fMdensity = 3.0;
|
||||
|
||||
//special: Hydrogen
|
||||
if ((fMaterial->GetNumberOfElements()==1)&&(fMaterial->GetZ()==1.)) {
|
||||
fX0density = 0.425; fX1density = 2.0; fMdensity = 5.949;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// gases
|
||||
//
|
||||
if (State == kStateGas) {
|
||||
|
||||
const G4double ClimiG[] = { 10. , 10.5 , 11. , 11.5 , 12.25 , 13.804};
|
||||
const G4double X0valG[] = { 1.6 , 1.7 , 1.8 , 1.9 , 2.0 , 2.0 };
|
||||
const G4double X1valG[] = { 4.0 , 4.0 , 4.0 , 4.0 , 4.0 , 5.0 };
|
||||
|
||||
icase = 5;
|
||||
fX0density = 0.326*fCdensity-2.5 ; fX1density = 5.0 ; fMdensity = 3. ;
|
||||
while((icase > 0)&&(fCdensity < ClimiG[icase])) icase-- ;
|
||||
fX0density = X0valG[icase] ; fX1density = X1valG[icase] ;
|
||||
|
||||
//special: Hydrogen
|
||||
if ((fMaterial->GetNumberOfElements()==1)&&(fMaterial->GetZ()==1.)) {
|
||||
fX0density = 1.837; fX1density = 3.0; fMdensity = 4.754;
|
||||
}
|
||||
|
||||
//special: Helium
|
||||
if ((fMaterial->GetNumberOfElements()==1)&&(fMaterial->GetZ()==2.)) {
|
||||
fX0density = 2.191; fX1density = 3.0; fMdensity = 3.297;
|
||||
}
|
||||
|
||||
// change parameters if the gas is not in STP.
|
||||
// For the correction the density(STP) is needed. Density(STP) is calculated here :
|
||||
|
||||
G4double Density = fMaterial->GetDensity();
|
||||
G4double Pressure = fMaterial->GetPressure();
|
||||
G4double Temp = fMaterial->GetTemperature();
|
||||
|
||||
G4double DensitySTP = Density*STP_Pressure*Temp/(Pressure*STP_Temperature);
|
||||
|
||||
G4double ParCorr = log(Density/DensitySTP) ;
|
||||
|
||||
fCdensity -= ParCorr;
|
||||
fX0density -= ParCorr/twoln10 ;
|
||||
fX1density -= ParCorr/twoln10 ;
|
||||
}
|
||||
|
||||
G4double Xa = fCdensity/twoln10 ;
|
||||
fAdensity = twoln10*(Xa-fX0density)
|
||||
/pow((fX1density-fX0density),fMdensity);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4IonisParamMat::ComputeFluctModel()
|
||||
{
|
||||
// compute parameters for the energy loss fluctuation model
|
||||
|
||||
// need an 'effective Z' ?????
|
||||
G4double Zeff = 0.;
|
||||
for (G4int i=0;i<fMaterial->GetNumberOfElements();i++)
|
||||
Zeff += (fMaterial->GetFractionVector())[i]
|
||||
*((*(fMaterial->GetElementVector()))[i]->GetZ());
|
||||
|
||||
if (Zeff > 2.) fF2fluct = 2./Zeff ;
|
||||
else fF2fluct = 0.;
|
||||
|
||||
fF1fluct = 1. - fF2fluct;
|
||||
fEnergy2fluct = 10.*Zeff*Zeff*eV;
|
||||
fLogEnergy2fluct = log(fEnergy2fluct);
|
||||
fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct*fLogEnergy2fluct)
|
||||
/fF1fluct;
|
||||
fEnergy1fluct = exp(fLogEnergy1fluct);
|
||||
fEnergy0fluct = 10.*eV;
|
||||
fRateionexcfluct = 0.4;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamMat::~G4IonisParamMat()
|
||||
{ }
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IonisParamMat::G4IonisParamMat(const G4IonisParamMat &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4IonisParamMat & G4IonisParamMat::operator=(const G4IonisParamMat &right)
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4IonisParamMat::operator==(const G4IonisParamMat &right) const
|
||||
{
|
||||
return (this == (G4IonisParamMat *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4IonisParamMat::operator!=(const G4IonisParamMat &right) const
|
||||
{
|
||||
return (this != (G4IonisParamMat *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
// 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: G4Isotope.cc,v 2.2 1998/07/12 03:00:41 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// --------------------------------------------------------------
|
||||
// GEANT 4 class implementation file
|
||||
//
|
||||
// For information related to this code contact:
|
||||
// CERN, CN Division, ASD Group
|
||||
//
|
||||
// ---------- class G4Isotope ---------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// 26-06-96, Code uses operators (+=, *=, ++, -> etc.) correctly, P. Urban
|
||||
// 29-01-97, Forbidden to create Isotope with Z<1 or N<Z, M.Maire
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#include "G4Isotope.hh"
|
||||
#include <iomanip.h>
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4IsotopeTable G4Isotope::theIsotopeTable;
|
||||
|
||||
// Create an isotope
|
||||
G4Isotope::G4Isotope(const G4String& Name, G4int Z, G4int N, G4double A)
|
||||
: fName(Name), fZ(Z), fN(N), fA(A)
|
||||
{
|
||||
if (Z<1) G4Exception
|
||||
(" ERROR! It is not allowed to create an Isotope with Z < 1" );
|
||||
|
||||
if (N<Z) G4Exception
|
||||
(" ERROR! Attempt to create an Isotope with N < Z !!!" );
|
||||
|
||||
theIsotopeTable.insert(this);
|
||||
fIndexInTable = theIsotopeTable.index(this);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Isotope::~G4Isotope() {}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Isotope::G4Isotope(G4Isotope &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Isotope & G4Isotope::operator=(const G4Isotope &right)
|
||||
{
|
||||
if (this != &right)
|
||||
{
|
||||
fName = right.fName;
|
||||
fZ = right.fZ;
|
||||
fN = right.fZ;
|
||||
fA = right.fA;
|
||||
theIsotopeTable = right.theIsotopeTable;
|
||||
fIndexInTable = right.fIndexInTable;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Isotope::operator==(const G4Isotope &right) const
|
||||
{
|
||||
return (this == (G4Isotope *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Isotope::operator!=(const G4Isotope &right) const
|
||||
{
|
||||
return (this != (G4Isotope *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Isotope* isotope)
|
||||
{
|
||||
long mode = flux.setf(ios::fixed,ios::floatfield);
|
||||
|
||||
flux
|
||||
<< " Isotope: " << setw(5) << isotope->fName
|
||||
<< " Z = " << setw(2) << isotope->fZ
|
||||
<< " N = " << setw(3) << isotope->fN
|
||||
<< " A = " << setw(6) << setprecision(2)
|
||||
<< (isotope->fA)/(g/mole) << " g/mole";
|
||||
|
||||
flux.setf(mode,ios::floatfield);
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Isotope& isotope)
|
||||
{
|
||||
flux << &isotope;
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4IsotopeTable IsotopeTable)
|
||||
{
|
||||
//Dump info for all known isotopes
|
||||
flux
|
||||
<< "\n***** Table : Nb of isotopes = " << IsotopeTable.length()
|
||||
<< " *****\n" << endl;
|
||||
|
||||
for (G4int i=0; i<IsotopeTable.length(); i++) flux << IsotopeTable[i] << endl;
|
||||
|
||||
return flux;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
// 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: G4MPVEntry.cc,v 2.1 1998/07/13 17:14:08 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MPVEntry Class Implementation
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MPVEntry.cc
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-25 by Peter Gumplinger
|
||||
// > cosmetics (only)
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "G4MPVEntry.hh"
|
||||
|
||||
/////////////////////////
|
||||
// Class Implementation
|
||||
/////////////////////////
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
// Overload the == operator
|
||||
// ------------------------
|
||||
// Well defined == semantics required by RWTPtrSortedVector
|
||||
//
|
||||
G4bool G4MPVEntry::operator ==(const G4MPVEntry &right) const
|
||||
{
|
||||
if (thePhotonMomentum == right.thePhotonMomentum)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
// Overload the < operator
|
||||
// -----------------------
|
||||
// Well defined < semantics required by RWTPtrSortedVector
|
||||
//
|
||||
G4bool G4MPVEntry::operator <(const G4MPVEntry &right) const
|
||||
{
|
||||
if (thePhotonMomentum < right.thePhotonMomentum)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
// Overload the = operator
|
||||
// -----------------------
|
||||
// Well defined = semantics required by RWTPtrSortedVector
|
||||
//
|
||||
G4MPVEntry& G4MPVEntry::operator =(const G4MPVEntry &right)
|
||||
{
|
||||
thePhotonMomentum = right.thePhotonMomentum;
|
||||
theProperty = right.theProperty;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// Constructors
|
||||
/////////////////
|
||||
|
||||
G4MPVEntry::G4MPVEntry(G4double aPhotonMomentum, G4double aProperty)
|
||||
{
|
||||
thePhotonMomentum = aPhotonMomentum;
|
||||
theProperty = aProperty;
|
||||
}
|
||||
|
||||
G4MPVEntry::G4MPVEntry(const G4MPVEntry &right)
|
||||
{
|
||||
thePhotonMomentum = right.thePhotonMomentum;
|
||||
theProperty = right.theProperty;
|
||||
}
|
||||
|
||||
|
||||
////////////////
|
||||
// Destructors
|
||||
////////////////
|
||||
|
||||
G4MPVEntry::~G4MPVEntry(){}
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
void G4MPVEntry::DumpEntry()
|
||||
{
|
||||
G4cout << "("
|
||||
<< thePhotonMomentum
|
||||
<< ", "
|
||||
<< theProperty
|
||||
<< ")"
|
||||
<< endl;
|
||||
}
|
||||
@@ -0,0 +1,444 @@
|
||||
// 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: G4Material.cc,v 2.7 1998/11/20 15:49:24 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
// ---------- class G4Material ----------
|
||||
//
|
||||
// Torre Wenaus, November 1995
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
//
|
||||
// 26-06-96, Code uses operators (+=, *=, ++, -> etc.) correctly, P. Urban
|
||||
// 10-07-96, new data members added by L.Urban
|
||||
// 12-12-96, new data members added by L.Urban
|
||||
// 20-01-97, aesthetic rearrangement. RadLength calculation modified.
|
||||
// Data members Zeff and Aeff REMOVED (i.e. passed to the Elements).
|
||||
// (local definition of Zeff in DensityEffect and FluctModel...)
|
||||
// Vacuum defined as a G4State. Mixture flag removed, M.Maire.
|
||||
// 29-01-97, State=Vacuum automatically set density=0 in the contructors.
|
||||
// Subsequent protections have been put in the calculation of
|
||||
// MeanExcEnergy, ShellCorrectionVector, DensityEffect, M.Maire.
|
||||
// 11-02-97, ComputeDensityEffect() rearranged, M.Maire.
|
||||
// 20-03-97, corrected initialization of pointers, M.Maire.
|
||||
// 28-05-98, the kState=kVacuum has been removed.
|
||||
// automatic check for a minimal density, M.Maire
|
||||
// 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire
|
||||
// 09-07-98, ionisation parameters removed from the class, M.Maire
|
||||
// 05-10-98, change names: NumDensity -> NbOfAtomsPerVolume
|
||||
// 18-11-98, new interface to SandiaTable
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
#include "G4Material.hh"
|
||||
#include "G4UnitsTable.hh"
|
||||
#include <iomanip.h>
|
||||
|
||||
|
||||
G4MaterialTable G4Material::theMaterialTable;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Constructor to create a material from scratch
|
||||
|
||||
G4Material::G4Material(const G4String& name, G4double z,
|
||||
G4double a, G4double density,
|
||||
G4State state, G4double temp, G4double pressure)
|
||||
{
|
||||
InitializePointers();
|
||||
|
||||
if (density < universe_mean_density)
|
||||
{ G4cout << "--- Warning from G4Material::G4Material()"
|
||||
<< " define a material with density=0 is not allowed. \n"
|
||||
<< " The material " << name << " will be constructed with the"
|
||||
<< " default minimal density: " << universe_mean_density/(g/cm3)
|
||||
<< "g/cm3" << endl;
|
||||
density = universe_mean_density;
|
||||
}
|
||||
|
||||
fName = name;
|
||||
fDensity = density;
|
||||
fState = state;
|
||||
fTemp = temp;
|
||||
fPressure = pressure;
|
||||
|
||||
// Initialize theElementVector allocating one
|
||||
// element corresponding to this material
|
||||
maxNbComponents = fNumberOfComponents = fNumberOfElements = 1;
|
||||
theElementVector = new G4ElementVector(1);
|
||||
theElementVector[0] = new G4Element(name, " ", z, a);
|
||||
fMassFractionVector = new G4double[1];
|
||||
fMassFractionVector[0] = 1. ;
|
||||
|
||||
if (fState == kStateUndefined)
|
||||
{
|
||||
if (fDensity > kGasThreshold) fState = kStateSolid;
|
||||
else fState = kStateGas;
|
||||
}
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in the table of Materials
|
||||
theMaterialTable.insert(this);
|
||||
fIndexInTable = theMaterialTable.index(this);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// Constructor to create a material from a List of constituents
|
||||
// (elements and/or materials) added with AddElement or AddMaterial
|
||||
|
||||
G4Material::G4Material(const G4String& name, G4double density, G4int nComponents,
|
||||
G4State state, G4double temp, G4double pressure)
|
||||
{
|
||||
|
||||
InitializePointers();
|
||||
|
||||
if (density < universe_mean_density)
|
||||
{G4cout << "--- Warning from G4Material::G4Material()"
|
||||
<< " define a material with density=0 is not allowed. \n"
|
||||
<< " The material " << name << " will be constructed with the"
|
||||
<< " default minimal density: " << universe_mean_density/(g/cm3)
|
||||
<< "g/cm3" << endl;
|
||||
density = universe_mean_density;
|
||||
}
|
||||
|
||||
fName = name;
|
||||
fDensity = density;
|
||||
fState = state;
|
||||
fTemp = temp;
|
||||
fPressure = pressure;
|
||||
|
||||
maxNbComponents = nComponents;
|
||||
fNumberOfComponents = fNumberOfElements = 0;
|
||||
theElementVector = new G4ElementVector(maxNbComponents);
|
||||
|
||||
if (fState == kStateUndefined)
|
||||
{
|
||||
if (fDensity > kGasThreshold) fState = kStateSolid;
|
||||
else fState = kStateGas;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// AddElement -- composition by atom count
|
||||
|
||||
void G4Material::AddElement(G4Element* element, G4int nAtoms)
|
||||
{
|
||||
// initialization
|
||||
if ( fNumberOfElements == 0 ) {
|
||||
fAtomsVector = new G4int [maxNbComponents];
|
||||
fMassFractionVector = new G4double[maxNbComponents];
|
||||
}
|
||||
|
||||
// filling ...
|
||||
if ( fNumberOfElements < maxNbComponents ) {
|
||||
(*theElementVector)[fNumberOfElements] = element;
|
||||
fAtomsVector [fNumberOfElements] = nAtoms;
|
||||
fNumberOfComponents = ++fNumberOfElements;
|
||||
}
|
||||
else
|
||||
G4Exception
|
||||
("ERROR!!! - Attempt to add more than the declared number of elements.");
|
||||
|
||||
// filled.
|
||||
if ( fNumberOfElements == maxNbComponents ) {
|
||||
// compute proportion by mass
|
||||
G4int i=0;
|
||||
G4double Zmol(0.), Amol(0.);
|
||||
for (i=0;i<fNumberOfElements;i++) {
|
||||
Zmol += fAtomsVector[i]*(*theElementVector)[i]->GetZ();
|
||||
Amol += fAtomsVector[i]*(*theElementVector)[i]->GetA();
|
||||
}
|
||||
for (i=0;i<fNumberOfElements;i++) {
|
||||
fMassFractionVector[i] = fAtomsVector[i]*(*theElementVector)[i]->GetA()/Amol;
|
||||
}
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in the static Table of Materials
|
||||
theMaterialTable.insert(this);
|
||||
fIndexInTable = theMaterialTable.index(this);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// AddElement -- composition by fraction of mass
|
||||
|
||||
void G4Material::AddElement(G4Element* element, G4double fraction)
|
||||
{
|
||||
// if fAtomsVector is non-NULL, complain. Apples and oranges. $$$
|
||||
if (fAtomsVector) {
|
||||
G4cerr << "This material is already being defined via elements by"
|
||||
<< "atoms." << endl;
|
||||
G4Exception ("You are mixing apples and oranges ...");
|
||||
}
|
||||
|
||||
// initialization
|
||||
if (fNumberOfComponents == 0) {
|
||||
fMassFractionVector = new G4double[100];
|
||||
}
|
||||
|
||||
// filling ...
|
||||
if (fNumberOfComponents < maxNbComponents) {
|
||||
size_t el = 0;
|
||||
while ((el<fNumberOfElements)&&(element!=(*theElementVector)[el])) el++;
|
||||
if (el<fNumberOfElements) fMassFractionVector[el] += fraction;
|
||||
else {
|
||||
if(el>=theElementVector->length()) theElementVector->resize(el+1);
|
||||
(*theElementVector)[el] = element;
|
||||
fMassFractionVector[el] = fraction;
|
||||
fNumberOfElements ++;
|
||||
}
|
||||
fNumberOfComponents++;
|
||||
}
|
||||
else
|
||||
G4Exception
|
||||
("ERROR!!! - Attempt to add more than the declared number of components.");
|
||||
|
||||
// filled.
|
||||
if (fNumberOfComponents == maxNbComponents) {
|
||||
// check sum of weights -- OK?
|
||||
G4int i;
|
||||
G4double wtSum(0.0);
|
||||
for (i=0;i<fNumberOfElements;i++) { wtSum += fMassFractionVector[i]; }
|
||||
if (abs(1.-wtSum) > perThousand) {
|
||||
G4cerr << "WARNING !! - Fractional masses do not sum to 1 :the Delta is > 0.001"
|
||||
<< "( the weights are NOT renormalized; the results may be wrong)"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in the static Table of Materials
|
||||
theMaterialTable.insert(this);
|
||||
fIndexInTable = theMaterialTable.index(this);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
// AddMaterial -- composition by fraction of mass
|
||||
|
||||
void G4Material::AddMaterial(G4Material* material, G4double fraction)
|
||||
{
|
||||
// if fAtomsVector is non-NULL, complain. Apples and oranges. $$$
|
||||
if (fAtomsVector) {
|
||||
G4cerr << "This material is already being defined via elements by"
|
||||
<< "atoms." << endl;
|
||||
G4Exception ("You are mixing apples and oranges ...");
|
||||
}
|
||||
// initialization
|
||||
if (fNumberOfComponents == 0) {
|
||||
fMassFractionVector = new G4double[100];
|
||||
}
|
||||
|
||||
// filling ...
|
||||
if (fNumberOfComponents < maxNbComponents) {
|
||||
for (G4int elm=0; elm < material->GetNumberOfElements(); elm++)
|
||||
{ G4Element* element = (*(material->GetElementVector()))[elm];
|
||||
size_t el = 0;
|
||||
while ((el<fNumberOfElements)&&(element!=(*theElementVector)[el])) el++;
|
||||
if (el<fNumberOfElements) fMassFractionVector[el] += fraction
|
||||
*(material->GetFractionVector())[elm];
|
||||
else {
|
||||
if(el>=theElementVector->length()) theElementVector->resize(el+1);
|
||||
(*theElementVector)[el] = element;
|
||||
fMassFractionVector[el] = fraction*(material->GetFractionVector())[elm];
|
||||
fNumberOfElements ++;
|
||||
}
|
||||
}
|
||||
fNumberOfComponents++;
|
||||
}
|
||||
else
|
||||
G4Exception
|
||||
("ERROR!!! - Attempt to add more than the declared number of components.");
|
||||
|
||||
// filled.
|
||||
if (fNumberOfComponents == maxNbComponents) {
|
||||
// check sum of weights -- OK?
|
||||
G4int i;
|
||||
G4double wtSum(0.0);
|
||||
for (i=0;i<fNumberOfElements;i++) { wtSum += fMassFractionVector[i]; }
|
||||
if (abs(1.-wtSum) > perThousand) {
|
||||
G4cerr << "WARNING !! - Fractional masses do not sum to 1 :the Delta is > 0.001"
|
||||
<< "( the weights are NOT renormalized; the results may be wrong)"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
ComputeDerivedQuantities();
|
||||
|
||||
// Store in the static Table of Materials
|
||||
theMaterialTable.insert(this);
|
||||
fIndexInTable = theMaterialTable.index(this);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Material::ComputeDerivedQuantities()
|
||||
{
|
||||
// Header routine to compute various properties of material.
|
||||
//
|
||||
|
||||
// Atoms density vector, Electrons density
|
||||
G4double Zi, Ai;
|
||||
TotNbOfAtomsPerVolume = 0.;
|
||||
VecNbOfAtomsPerVolume = new G4double[fNumberOfElements];
|
||||
TotNbOfElectPerVolume = 0.;
|
||||
for (G4int i=0;i<fNumberOfElements;i++) {
|
||||
Zi = (*theElementVector)[i]->GetZ();
|
||||
Ai = (*theElementVector)[i]->GetA();
|
||||
VecNbOfAtomsPerVolume[i] = Avogadro*fDensity*fMassFractionVector[i]/Ai;
|
||||
TotNbOfAtomsPerVolume += VecNbOfAtomsPerVolume[i];
|
||||
TotNbOfElectPerVolume += VecNbOfAtomsPerVolume[i]*Zi;
|
||||
}
|
||||
|
||||
//for gas, check coherence of the state conditions
|
||||
if (fState == kStateGas) {
|
||||
G4double ratio = TotNbOfAtomsPerVolume*k_Boltzmann*fTemp/fPressure;
|
||||
if ((ratio<0.5)||(ratio>2.)) {
|
||||
G4cout << "---warning from G4Material-- The state conditions of the gas: "
|
||||
<< fName << " are not consistent."
|
||||
<< "\n density = " << fDensity/(mg/cm3) << " mg/cm3"
|
||||
<< "\t pressure = " << fPressure/atmosphere << " atmosphere"
|
||||
<< "\t temperature = " << fTemp/kelvin << " kelvin"
|
||||
<< "\n rho*(T/P) would be of the order of: "
|
||||
<< (fDensity/(TotNbOfAtomsPerVolume*k_Boltzmann))/((mg/cm3)*(kelvin/atmosphere))
|
||||
<< " (mg/cm3)*(kelvin/atmosphere). The energy loss calculation maybe be affected \n";
|
||||
}
|
||||
}
|
||||
|
||||
ComputeRadiationLength();
|
||||
|
||||
fIonisation = new G4IonisParamMat(this);
|
||||
fSandiaTable = new G4SandiaTable(this);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Material::ComputeRadiationLength()
|
||||
{
|
||||
G4double radinv = 0.0 ;
|
||||
for (G4int i=0;i<fNumberOfElements;i++) {
|
||||
radinv += VecNbOfAtomsPerVolume[i]*((*theElementVector)[i]->GetfRadTsai());
|
||||
}
|
||||
fRadlen = (radinv <= 0.0 ? DBL_MAX : 1./radinv);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4Material::InitializePointers()
|
||||
{
|
||||
theElementVector = NULL;
|
||||
fMassFractionVector = NULL;
|
||||
fAtomsVector = NULL;
|
||||
fMaterialPropertiesTable = NULL;
|
||||
|
||||
VecNbOfAtomsPerVolume = NULL;
|
||||
fIonisation = NULL;
|
||||
fSandiaTable = NULL;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Material::~G4Material()
|
||||
{
|
||||
if (theElementVector) delete theElementVector;
|
||||
if (fMassFractionVector) delete [] fMassFractionVector;
|
||||
if (fAtomsVector) delete [] fAtomsVector;
|
||||
if (VecNbOfAtomsPerVolume) delete [] VecNbOfAtomsPerVolume;
|
||||
if (fIonisation) delete fIonisation;
|
||||
if (fSandiaTable) delete fSandiaTable;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4Material::G4Material(const G4Material &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
const G4Material & G4Material::operator=(const G4Material &right)
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Material::operator==(const G4Material &right) const
|
||||
{
|
||||
return (this == (G4Material *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4int G4Material::operator!=(const G4Material &right) const
|
||||
{
|
||||
return (this != (G4Material *) &right);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Material* material)
|
||||
{
|
||||
long mode = flux.setf(ios::fixed,ios::floatfield);
|
||||
|
||||
flux
|
||||
<< " Material: " << setw(8) << material->fName
|
||||
<< " density: " << setw(6) << setprecision(3)
|
||||
<< G4BestUnit(material->fDensity,"Volumic Mass")
|
||||
<< " temperature: " << setw(6) << setprecision(2)
|
||||
<< (material->fTemp)/kelvin << " K"
|
||||
<< " pressure: " << setw(6) << setprecision(2)
|
||||
<< (material->fPressure)/atmosphere << " atm"
|
||||
<< " RadLength: " << setw(7) << setprecision(3)
|
||||
<< G4BestUnit(material->fRadlen,"Length");
|
||||
|
||||
for (G4int i=0; i<material->fNumberOfElements; i++)
|
||||
flux
|
||||
<< "\n ---> " << (*(material->theElementVector))[i]
|
||||
<< " fractionMass: " << setw(6)<< setprecision(2)
|
||||
<< (material->fMassFractionVector[i])/perCent << " %"
|
||||
<< " Abundance " << setw(6)<< setprecision(2)
|
||||
<< 100*(material->VecNbOfAtomsPerVolume[i])/
|
||||
(material->TotNbOfAtomsPerVolume)
|
||||
<< " %";
|
||||
|
||||
flux.setf(mode,ios::floatfield);
|
||||
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4Material& material)
|
||||
{
|
||||
flux << &material;
|
||||
return flux;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
ostream& operator<<(ostream& flux, G4MaterialTable MaterialTable)
|
||||
{
|
||||
//Dump info for all known materials
|
||||
flux << "\n***** Table : Nb of materials = " << MaterialTable.length()
|
||||
<< " *****\n" << endl;
|
||||
|
||||
for (G4int i=0; i<MaterialTable.length(); i++) flux << MaterialTable[i]
|
||||
<< endl << endl;
|
||||
|
||||
return flux;
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
// 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: G4MaterialPropertiesTable.cc,v 2.1 1998/07/13 17:14:14 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MaterialPropertiesTable Implementation
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MaterialPropertiesTable.cc
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-26 by Peter Gumplinger
|
||||
// > cosmetics (only)
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "G4MaterialPropertiesTable.hh"
|
||||
|
||||
unsigned hashString(const G4String &str) { return str.hash(); }
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
G4MaterialPropertiesTable&
|
||||
G4MaterialPropertiesTable::operator =(const G4MaterialPropertiesTable &right)
|
||||
{
|
||||
// clear any current contents of MPT
|
||||
|
||||
MPT.clearAndDestroy();
|
||||
|
||||
// want to make an actual copy -- not a shallow copy which is
|
||||
// the default for RWTPrtHashDictionary's assignment operator
|
||||
|
||||
RWTPtrHashDictionary<G4String, G4MaterialPropertyVector>
|
||||
rightMPT(right.MPT);
|
||||
RWTPtrHashDictionaryIterator<G4String, G4MaterialPropertyVector>
|
||||
rightIterator(rightMPT);
|
||||
rightIterator.reset();
|
||||
while (++rightIterator) {
|
||||
G4MaterialPropertyVector *newProp =
|
||||
new G4MaterialPropertyVector(*(rightIterator.value()));
|
||||
RWCString *newKey =
|
||||
new RWCString(*(rightIterator.key()));
|
||||
MPT.insertKeyAndValue(newKey, newProp);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// Constructors
|
||||
/////////////////
|
||||
|
||||
G4MaterialPropertiesTable::G4MaterialPropertiesTable() : MPT(hashString),
|
||||
MPTiterator(MPT) {}
|
||||
|
||||
G4MaterialPropertiesTable::G4MaterialPropertiesTable
|
||||
(const G4MaterialPropertiesTable &right) :
|
||||
MPT(hashString), MPTiterator(MPT)
|
||||
{
|
||||
// want to make an actual copy -- not a shallow copy which is
|
||||
// the default for RWTPrtHashDictionary's assignment operator
|
||||
|
||||
RWTPtrHashDictionary<G4String, G4MaterialPropertyVector>
|
||||
rightMPT(right.MPT);
|
||||
RWTPtrHashDictionaryIterator<G4String, G4MaterialPropertyVector>
|
||||
rightIterator(rightMPT);
|
||||
|
||||
rightIterator.reset();
|
||||
|
||||
while (++rightIterator) {
|
||||
G4MaterialPropertyVector *newProp =
|
||||
new G4MaterialPropertyVector(*(rightIterator.value()));
|
||||
RWCString *newKey =
|
||||
new RWCString(*(rightIterator.key()));
|
||||
MPT.insertKeyAndValue(newKey, newProp);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////
|
||||
// Destructors
|
||||
////////////////
|
||||
|
||||
G4MaterialPropertiesTable::~G4MaterialPropertiesTable()
|
||||
{
|
||||
MPT.clearAndDestroy();
|
||||
}
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
void G4MaterialPropertiesTable::AddProperty(char *key,
|
||||
G4double *PhotonMomenta,
|
||||
G4double *PropertyValues,
|
||||
G4int NumEntries)
|
||||
{
|
||||
G4MaterialPropertyVector *mpv =
|
||||
new G4MaterialPropertyVector(PhotonMomenta,
|
||||
PropertyValues,
|
||||
NumEntries);
|
||||
G4String *newKey = new G4String(key);
|
||||
MPT.insertKeyAndValue(newKey, mpv);
|
||||
}
|
||||
|
||||
void G4MaterialPropertiesTable::AddProperty(char *key,
|
||||
G4MaterialPropertyVector *mpv)
|
||||
{
|
||||
// Provides a way of adding a property to the Material Properties
|
||||
// Table given an G4MaterialPropertyVector Reference and a key
|
||||
|
||||
G4String *theKey = new G4String(key);
|
||||
MPT.insertKeyAndValue(theKey, mpv);
|
||||
}
|
||||
|
||||
void G4MaterialPropertiesTable::RemoveProperty(char *key)
|
||||
{
|
||||
G4String target(key);
|
||||
MPT.remove(&target);
|
||||
}
|
||||
|
||||
G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty(char *key)
|
||||
{
|
||||
G4String target(key);
|
||||
|
||||
return MPT.findValue(&target);
|
||||
}
|
||||
|
||||
void G4MaterialPropertiesTable::AddEntry(char *key,
|
||||
G4double aPhotonMomentum,
|
||||
G4double aPropertyValue)
|
||||
{
|
||||
G4String target(key);
|
||||
G4MaterialPropertyVector *targetVector=MPT.findValue(&target);
|
||||
if (targetVector != NULL) {
|
||||
targetVector->AddElement(aPhotonMomentum, aPropertyValue);
|
||||
}
|
||||
else {
|
||||
G4Exception("G4MaterialPropertiesTable::AddEntry ==> "
|
||||
"Material Property Vector not found.");
|
||||
}
|
||||
}
|
||||
|
||||
void G4MaterialPropertiesTable::RemoveEntry(char *key,
|
||||
G4double aPhotonMomentum)
|
||||
{
|
||||
G4String target(key);
|
||||
G4MaterialPropertyVector *targetVector=MPT.findValue(&target);
|
||||
if (targetVector) {
|
||||
targetVector->RemoveElement(aPhotonMomentum);
|
||||
}
|
||||
else {
|
||||
G4Exception("G4MaterialPropertiesTable::AddEntry ==> "
|
||||
"Material Property Vector not found.");
|
||||
}
|
||||
}
|
||||
void G4MaterialPropertiesTable::DumpTable()
|
||||
{
|
||||
MPTiterator.reset();
|
||||
while(++MPTiterator) {
|
||||
G4cout << *MPTiterator.key() << endl;
|
||||
MPTiterator.value()->DumpVector();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,384 @@
|
||||
// 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: G4MaterialPropertyVector.cc,v 2.2 1998/07/13 17:14:16 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// G4MaterialPropertyVector Class Implementation
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4MaterialPropertyVector.cc
|
||||
// Version: 1.0
|
||||
// Created: 1996-02-08
|
||||
// Author: Juliet Armstrong
|
||||
// Updated: 1997-03-25 by Peter Gumplinger
|
||||
// > cosmetics (only)
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "G4MaterialPropertyVector.hh"
|
||||
|
||||
/////////////////////////
|
||||
// Class Implementation
|
||||
/////////////////////////
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
// ++ operator
|
||||
// -----------
|
||||
//
|
||||
G4bool G4MaterialPropertyVector::operator ++()
|
||||
{
|
||||
CurrentEntry++;
|
||||
if (CurrentEntry < NumEntries) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// = operator
|
||||
// ----------
|
||||
//
|
||||
G4MaterialPropertyVector&
|
||||
G4MaterialPropertyVector::operator =(const G4MaterialPropertyVector &right)
|
||||
{
|
||||
// clear the vector of current contents
|
||||
|
||||
MPV.clearAndDestroy();
|
||||
|
||||
// create an actual copy (instead of the shallow copy that the
|
||||
// assignment operator defaults to for RWTPtrSortedVector)
|
||||
|
||||
NumEntries = 0;
|
||||
CurrentEntry = -1;
|
||||
|
||||
for (G4int i = 0 ; i < right.NumEntries; i++) {
|
||||
G4MPVEntry *newElement = new G4MPVEntry(right.GetEntry(i));
|
||||
MPV.insert(newElement);
|
||||
NumEntries++;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// Constructors
|
||||
/////////////////
|
||||
|
||||
G4MaterialPropertyVector::G4MaterialPropertyVector(G4double *PhotonMomenta,
|
||||
G4double *PropertyValues,
|
||||
G4int NumElements)
|
||||
{
|
||||
NumEntries = 0;
|
||||
CurrentEntry = -1;
|
||||
|
||||
// create a vector filling it with the values
|
||||
// from PhotonMomenta[] and PropertyValues[]
|
||||
|
||||
for(G4int i = 0; i < NumElements; i++) {
|
||||
AddElement(PhotonMomenta[i], PropertyValues[i]);
|
||||
}
|
||||
}
|
||||
|
||||
G4MaterialPropertyVector::G4MaterialPropertyVector
|
||||
(const G4MaterialPropertyVector &right)
|
||||
{
|
||||
// create an actual copy (instead of the shallow copy that the
|
||||
// assignment operator defaults to for RWTPtrSortedVector)
|
||||
|
||||
NumEntries = 0;
|
||||
CurrentEntry = -1;
|
||||
|
||||
for (G4int i = 0 ; i < right.NumEntries; i++) {
|
||||
G4MPVEntry *newElement = new G4MPVEntry(right.GetEntry(i));
|
||||
MPV.insert(newElement);
|
||||
NumEntries++;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////
|
||||
// Destructors
|
||||
////////////////
|
||||
|
||||
G4MaterialPropertyVector::~G4MaterialPropertyVector()
|
||||
{
|
||||
MPV.clearAndDestroy();
|
||||
}
|
||||
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
void G4MaterialPropertyVector::AddElement(G4double aPhotonMomentum,
|
||||
G4double aPropertyValue)
|
||||
{
|
||||
G4MPVEntry *newElement;
|
||||
|
||||
newElement = new G4MPVEntry(aPhotonMomentum, aPropertyValue);
|
||||
MPV.insert(newElement);
|
||||
NumEntries++;
|
||||
}
|
||||
|
||||
void G4MaterialPropertyVector::RemoveElement(G4double aPhotonMomentum)
|
||||
{
|
||||
G4MPVEntry *newElement;
|
||||
G4MPVEntry *success;
|
||||
|
||||
newElement = new G4MPVEntry(aPhotonMomentum, DBL_MAX);
|
||||
success = MPV.remove(newElement);
|
||||
|
||||
if(success == NULL)
|
||||
{
|
||||
G4Exception("G4MaterialPropertyVector::RemoveElement==>"
|
||||
"element not found");
|
||||
return;
|
||||
}
|
||||
|
||||
NumEntries--;
|
||||
}
|
||||
|
||||
G4double
|
||||
G4MaterialPropertyVector::GetProperty(G4double aPhotonMomentum) const
|
||||
{
|
||||
G4MPVEntry *target, *temp;
|
||||
G4int left, right;
|
||||
G4double ratio1, ratio2, pmright, pmleft, InterpolatedValue;
|
||||
|
||||
/////////////////////////
|
||||
// Establish table range
|
||||
/////////////////////////
|
||||
|
||||
G4double PMmin = MPV.first()->GetPhotonMomentum();
|
||||
G4double minProp = MPV.first()->GetProperty();
|
||||
G4double PMmax = MPV.last()->GetPhotonMomentum();
|
||||
G4double maxProp = MPV.last()->GetProperty();
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Does value fall outside range of table?
|
||||
///////////////////////////////////////////
|
||||
|
||||
if (aPhotonMomentum < PMmin)
|
||||
{
|
||||
G4cout << "\nWarning: G4MaterialPropertyVector::GetProperty";
|
||||
G4cout << "\n==> attempt to Retrieve Property below range"
|
||||
<< endl;
|
||||
return minProp;
|
||||
}
|
||||
|
||||
if (aPhotonMomentum > PMmax)
|
||||
{
|
||||
G4cout << "\nWarning: G4MaterialPropertyVector::GetProperty";
|
||||
G4cout << "\n==> attempt to Retrieve Property above range"
|
||||
<< endl;
|
||||
return maxProp;
|
||||
}
|
||||
|
||||
target = new G4MPVEntry(aPhotonMomentum, 0.0);
|
||||
|
||||
temp = MPV.find(target);
|
||||
if (temp != NULL) {
|
||||
|
||||
////////////////////////
|
||||
// Return actual value
|
||||
////////////////////////
|
||||
|
||||
G4double retval = temp->GetProperty();
|
||||
delete target;
|
||||
return retval;
|
||||
}
|
||||
else {
|
||||
//////////////////////////////
|
||||
// Return interpolated value
|
||||
//////////////////////////////
|
||||
|
||||
GetAdjacentBins(aPhotonMomentum, &left, &right);
|
||||
|
||||
pmleft = MPV[left]->GetPhotonMomentum();
|
||||
pmright = MPV[right]->GetPhotonMomentum();
|
||||
ratio1 = (aPhotonMomentum-pmleft)/(pmright-pmleft);
|
||||
ratio2 = 1 - ratio1;
|
||||
InterpolatedValue = MPV[left]->GetProperty()*ratio2 +
|
||||
MPV[right]->GetProperty()*ratio1;
|
||||
|
||||
delete target;
|
||||
return InterpolatedValue;
|
||||
}
|
||||
}
|
||||
|
||||
G4double G4MaterialPropertyVector::GetProperty() const
|
||||
{
|
||||
// For use with G4MaterialPropertyVector iterator
|
||||
|
||||
if(CurrentEntry == -1 || CurrentEntry >= NumEntries) {
|
||||
G4Exception("G4MaterialPropertyVector::GetProperty ==>"
|
||||
"Iterator attempted to Retrieve Property out of range");
|
||||
return DBL_MAX;
|
||||
}
|
||||
else {
|
||||
return MPV[CurrentEntry]->GetProperty();
|
||||
}
|
||||
}
|
||||
|
||||
G4double G4MaterialPropertyVector::GetPhotonMomentum() const
|
||||
{
|
||||
// For use with G4MaterialPropertyVector iterator
|
||||
|
||||
if(CurrentEntry == -1 || CurrentEntry >= NumEntries) {
|
||||
G4Exception("G4MaterialPropertyVector::GetPhotonMomentum ==>"
|
||||
"Iterator attempted to Retrieve Photon Momentum out of range");
|
||||
return DBL_MAX;
|
||||
}
|
||||
else {
|
||||
return MPV[CurrentEntry]->GetPhotonMomentum();
|
||||
}
|
||||
}
|
||||
|
||||
G4double
|
||||
G4MaterialPropertyVector::GetPhotonMomentum(G4double aProperty) const
|
||||
{
|
||||
// ***NB***
|
||||
// Assumes that the property is an increasing function of photon momentum (e.g.
|
||||
// refraction index)
|
||||
// ***NB***
|
||||
//
|
||||
// Returns the photon momentum corresponding to the property value passed in.
|
||||
// If several photon momentum values correspond to the value passed in, the
|
||||
// function returns the first photon momentum in the vector that corresponds
|
||||
// to that value.
|
||||
|
||||
G4int left, right, mid;
|
||||
G4double ratio1, ratio2, pright, pleft, InterpolatedValue;
|
||||
|
||||
//////////////////////////
|
||||
// Establish Table range
|
||||
//////////////////////////
|
||||
|
||||
G4double PropMin = MPV.first()->GetProperty();
|
||||
G4double PMmin= MPV.first()->GetPhotonMomentum();
|
||||
G4double PropMax = MPV.last()->GetProperty();
|
||||
G4double PMmax= MPV.last()->GetPhotonMomentum();
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Does value fall outside range of table?
|
||||
///////////////////////////////////////////
|
||||
|
||||
if (aProperty < PropMin)
|
||||
{
|
||||
G4cout << "\nWarning: G4MaterialPropertyVector::GetPhotonMomentum";
|
||||
G4cout << "\n==> attempt to Retrieve Photon Momentum out of range"
|
||||
<< endl;
|
||||
return PMmin;
|
||||
}
|
||||
|
||||
if (aProperty > PropMax) {
|
||||
G4cout << "\nWarning: G4MaterialPropertyVector::GetPhotonMomentum";
|
||||
G4cout << "\n==> attempt to Retrieve Photon Momentum out of range"
|
||||
<< endl;
|
||||
return PMmax;
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// Return interpolated value
|
||||
//////////////////////////////
|
||||
|
||||
left = 0;
|
||||
right = MPV.entries();
|
||||
|
||||
// find values in bins on either side of aProperty
|
||||
|
||||
do {
|
||||
mid = (left + right)/2;
|
||||
if (MPV[mid]->GetProperty() == aProperty) {
|
||||
|
||||
// Get first photon momentum value in vector that
|
||||
// corresponds to property value
|
||||
|
||||
while (mid-1 >= 0 &&
|
||||
MPV[mid-1]->GetProperty() == aProperty) {
|
||||
mid--;
|
||||
}
|
||||
|
||||
InterpolatedValue = MPV[mid]->GetPhotonMomentum();
|
||||
goto end_GetPhotonMomentum;
|
||||
}
|
||||
if (MPV[mid]->GetProperty() < aProperty)
|
||||
left = mid;
|
||||
else
|
||||
right = mid;
|
||||
|
||||
} while ((right - left) > 1);
|
||||
|
||||
pleft = MPV[left]->GetProperty();
|
||||
pright = MPV[right]->GetProperty();
|
||||
ratio1 = (aProperty - pleft) / (pright - pleft);
|
||||
ratio2 = 1 - ratio1;
|
||||
InterpolatedValue = MPV[left]->GetPhotonMomentum()*ratio2 +
|
||||
MPV[right]->GetPhotonMomentum()*ratio1;
|
||||
|
||||
end_GetPhotonMomentum:
|
||||
|
||||
return InterpolatedValue;
|
||||
}
|
||||
|
||||
void G4MaterialPropertyVector::ResetIterator()
|
||||
{
|
||||
CurrentEntry = -1;
|
||||
}
|
||||
|
||||
void G4MaterialPropertyVector::DumpVector()
|
||||
{
|
||||
if (MPV.isEmpty()) {
|
||||
G4cerr << "nothing to dump" << endl;
|
||||
G4Exception("G4MaterialPropertyVector::DumpVector ==>"
|
||||
"Nothing to dump! Vector is empty");
|
||||
}
|
||||
|
||||
for (G4int i = 0; i < NumEntries; i++) {
|
||||
G4cout << "MPV["<< i << "]: ";
|
||||
MPV[i]->DumpEntry();
|
||||
G4cout << i << NumEntries << endl;
|
||||
}
|
||||
G4cout << " Done DumpVector " << endl;
|
||||
|
||||
}
|
||||
|
||||
G4MPVEntry G4MaterialPropertyVector::GetEntry(G4int i) const
|
||||
{
|
||||
return *MPV[i];
|
||||
}
|
||||
|
||||
void
|
||||
G4MaterialPropertyVector::GetAdjacentBins(G4double aPhotonMomentum,
|
||||
G4int *left,
|
||||
G4int *right) const
|
||||
{
|
||||
G4int mid;
|
||||
|
||||
*left = 0;
|
||||
*right = (MPV.entries() - 1);
|
||||
|
||||
// find values in bins on either side of aPhotonMomentum
|
||||
|
||||
do {
|
||||
mid = (*left + *right)/2;
|
||||
|
||||
if (MPV[mid]->GetPhotonMomentum() < aPhotonMomentum)
|
||||
{
|
||||
*left = mid;
|
||||
}
|
||||
else
|
||||
{
|
||||
*right = mid;
|
||||
}
|
||||
} while ((*right - *left) > 1);
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
// 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: G4OpticalSurface.cc,v 2.1 1998/07/13 17:14:17 urbi Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Optical Surface Class Implementation
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: G4OpticalSurface.cc
|
||||
// Description: An optical surface class for use in G4OpBoundaryProcess
|
||||
// Version: 2.0
|
||||
// Created: 1997-06-26
|
||||
// Author: Peter Gumplinger
|
||||
// mail: gum@triumf.ca
|
||||
//
|
||||
// Cvs version:
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "G4OpticalSurface.hh"
|
||||
|
||||
/////////////////////////
|
||||
// Class Implementation
|
||||
/////////////////////////
|
||||
|
||||
//////////////
|
||||
// Operators
|
||||
//////////////
|
||||
|
||||
const G4OpticalSurface &
|
||||
G4OpticalSurface::operator=(const G4OpticalSurface &right)
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// Constructors
|
||||
/////////////////
|
||||
|
||||
G4OpticalSurface::G4OpticalSurface(const G4String& name,
|
||||
G4OpticalSurfaceModel model,
|
||||
G4OpticalSurfaceFinish finish,
|
||||
G4OpticalSurfaceType type,
|
||||
G4double value)
|
||||
: theName(name),
|
||||
theModel(model),
|
||||
theFinish(finish),
|
||||
theType(type),
|
||||
theMaterialPropertiesTable(NULL)
|
||||
{
|
||||
if (model == glisur ){
|
||||
polish = value;
|
||||
sigma_alpha = 0.0;
|
||||
}
|
||||
else if ( model == unified ) {
|
||||
sigma_alpha = value;
|
||||
polish = 0.0;
|
||||
}
|
||||
else {
|
||||
G4Exception("G4OpticalSurface::G4OpticalSurface ==> "
|
||||
"Constructor called with INVALID model.");
|
||||
}
|
||||
}
|
||||
|
||||
G4OpticalSurface::G4OpticalSurface(const G4OpticalSurface &right)
|
||||
{
|
||||
*this = right;
|
||||
}
|
||||
|
||||
G4OpticalSurface::~G4OpticalSurface(){}
|
||||
|
||||
G4int G4OpticalSurface::operator==(const G4OpticalSurface &right) const
|
||||
{
|
||||
return (this == (G4OpticalSurface *) &right);
|
||||
}
|
||||
|
||||
G4int G4OpticalSurface::operator!=(const G4OpticalSurface &right) const
|
||||
{
|
||||
return (this != (G4OpticalSurface *) &right);
|
||||
}
|
||||
////////////
|
||||
// Methods
|
||||
////////////
|
||||
|
||||
void G4OpticalSurface::DumpInfo() const
|
||||
{
|
||||
|
||||
// Dump info for surface
|
||||
|
||||
G4cout <<
|
||||
" Surface type = " << theType << endl <<
|
||||
" Surface finish = " << theFinish << endl <<
|
||||
" Surface model = " << theModel << endl;
|
||||
|
||||
G4cout << endl;
|
||||
|
||||
G4cout << " Surface parameter " << endl;
|
||||
G4cout << " ----------------- " << endl;
|
||||
if (theModel == glisur ){
|
||||
G4cout << polish << endl;
|
||||
}
|
||||
else {
|
||||
G4cout << sigma_alpha << endl;
|
||||
}
|
||||
G4cout << endl;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
// 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: G4SandiaTable.cc,v 2.3 1998/12/08 15:12:29 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-00 $
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
//
|
||||
// 18.11.98 simplified public interface; new methods for materials. mma
|
||||
// 10.06.97 created. V. Grichine
|
||||
//
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
|
||||
#include "G4SandiaTable.hh"
|
||||
#include "G4StaticSandiaData.hh"
|
||||
#include "G4Material.hh"
|
||||
|
||||
G4int G4SandiaTable::fCumulInterval[101];
|
||||
G4double G4SandiaTable::fSandiaCofPerAtom[4];
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4SandiaTable::G4SandiaTable(G4Material* material)
|
||||
:fMaterial(material)
|
||||
{
|
||||
//build the CumulInterval array
|
||||
fCumulInterval[0] = 1;
|
||||
for (G4int Z=1; Z<101; Z++)
|
||||
fCumulInterval[Z] = fCumulInterval[Z-1] + fNbOfIntervals[Z];
|
||||
|
||||
//compute macroscopic Sandia coefs for a material
|
||||
ComputeMatSandiaMatrix();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4SandiaTable::~G4SandiaTable()
|
||||
{ delete fMatSandiaMatrix;}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
void G4SandiaTable::ComputeMatSandiaMatrix()
|
||||
{
|
||||
//get list of elements
|
||||
const G4int NbElm = fMaterial->GetNumberOfElements();
|
||||
const G4ElementVector* ElementVector = fMaterial->GetElementVector();
|
||||
|
||||
G4int* Z = new G4int[NbElm]; //Atomic number
|
||||
|
||||
//determine the total number of energy-intervals for this material
|
||||
fMatNbOfIntervals = 0;
|
||||
G4int elm;
|
||||
for (elm=0; elm<NbElm; elm++)
|
||||
{ Z[elm] = (int)(*ElementVector)(elm)->GetZ();
|
||||
fMatNbOfIntervals += fNbOfIntervals[Z[elm]];
|
||||
}
|
||||
|
||||
//create the sandia matrix for this material
|
||||
fMatSandiaMatrix = new G4OrderedTable(fMatNbOfIntervals);
|
||||
G4int interval;
|
||||
for (interval=0; interval<fMatNbOfIntervals; interval++)
|
||||
(*fMatSandiaMatrix)(interval) = new G4ValVector(5);
|
||||
|
||||
//copy the Energy bins (take care of the Ionization Potential)
|
||||
G4double Ebin;
|
||||
interval=0;
|
||||
for (elm=0; elm<NbElm; elm++)
|
||||
for (G4int row=fCumulInterval[Z[elm]-1];row<fCumulInterval[Z[elm]];row++)
|
||||
{ Ebin = fSandiaTable[row][0]*keV;
|
||||
if ((row==fCumulInterval[Z[elm]-1])&&(GetIonizationPot(Z[elm])<Ebin))
|
||||
Ebin = GetIonizationPot(Z[elm]);
|
||||
(*(*fMatSandiaMatrix)(interval++))(0) = Ebin;
|
||||
}
|
||||
|
||||
//sort the energies in increasing values
|
||||
G4double tmp;
|
||||
for (G4int i1=0; i1<fMatNbOfIntervals; i1++)
|
||||
for (G4int i2=i1+1; i2<fMatNbOfIntervals; i2++)
|
||||
{if ((*(*fMatSandiaMatrix)(i1))(0) > (*(*fMatSandiaMatrix)(i2))(0))
|
||||
{
|
||||
tmp = (*(*fMatSandiaMatrix)(i1))(0);
|
||||
(*(*fMatSandiaMatrix)(i1))(0) = (*(*fMatSandiaMatrix)(i2))(0);
|
||||
(*(*fMatSandiaMatrix)(i2))(0) = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
//ready to compute the Sandia coefs for the material
|
||||
const G4double* NbOfAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume();
|
||||
for (interval=0; interval<fMatNbOfIntervals; interval++)
|
||||
{
|
||||
Ebin = (*(*fMatSandiaMatrix)(interval))(0);
|
||||
for (elm=0; elm<NbElm; elm++)
|
||||
{
|
||||
GetSandiaCofPerAtom(Z[elm], Ebin);
|
||||
for (G4int j=1; j<5; j++)
|
||||
(*(*fMatSandiaMatrix)(interval))(j) += NbOfAtomsPerVolume[elm]*
|
||||
fSandiaCofPerAtom[j-1];
|
||||
}
|
||||
}
|
||||
delete [] Z;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4double G4SandiaTable::GetSandiaCofForMaterial(G4int interval, G4int j)
|
||||
{
|
||||
assert (interval>=0 && interval<fMatNbOfIntervals && j>=0 && j<5);
|
||||
return ((*(*fMatSandiaMatrix)(interval))(j));
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
|
||||
G4double* G4SandiaTable::GetSandiaCofForMaterial(G4double energy)
|
||||
{
|
||||
G4int interval = fMatNbOfIntervals - 1;
|
||||
while ((interval>0)&&(energy<(*(*fMatSandiaMatrix)(interval))(0))) interval--;
|
||||
return &((*(*fMatSandiaMatrix)(interval))(1));
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
|
||||
Reference in New Issue
Block a user