62 #include "G4ParticleChangeForLoss.hh"    81   crossSectionHandler(0), energySpectrum(0)
   108       G4Exception(
"G4LivermoreIonisationModel::Initialise",
   110           "Livermore Ionisation Model is applicable only to electrons");
   132   const size_t nbins = 20;
   135   G4int ndec = 
G4int(std::log10(emax/emin) + 0.5);
   136   if(ndec <= 0) { ndec = 1; }
   141                      emin,emax,nbins*ndec);
   153       G4cout << 
"Livermore Ionisation model is initialized " << G4endl
   186       G4Exception(
"G4LivermoreIonisationModel::ComputeCrossSectionPerAtom",
   188           "The cross section handler is not correctly initialized");
   201       G4cout << 
"Cross section for delta emission > "    202          << cutEnergy/
keV << 
" keV at "    203          << energy/
keV << 
" keV and Z = " << iZ << 
" --> "    222   const G4double* theAtomicNumDensityVector =
   226   for (
size_t iel=0; iel<NumberOfElements; iel++ ) 
   228       G4int iZ = (
G4int)((*theElementVector)[iel]->GetZ());
   235       sPower   += e * cs * theAtomicNumDensityVector[iel];
   238       sPower   += esp * theAtomicNumDensityVector[iel];
   244       G4cout << 
"Stopping power < " << cutEnergy/
keV    245          << 
" keV at " << kineticEnergy/
keV << 
" keV = "    246          << sPower/(
keV/
mm) << 
" keV/mm" << G4endl;
   255                                  std::vector<G4DynamicParticle*>* fvect,
   281                               kineticEnergy, shellIndex);
   283   if (energyDelta == 0.) 
   293   fvect->push_back(delta);
   300   finalP               = finalP.
unit();
   303   G4double theEnergyDeposit = bindingEnergy;
   307   G4double finalKinEnergy = kineticEnergy - energyDelta - theEnergyDeposit;
   308   if(finalKinEnergy < 0.0) 
   310       theEnergyDeposit += finalKinEnergy;
   311       finalKinEnergy    = 0.0;
   319   if (theEnergyDeposit < 0)
   321       G4cout <<  
"G4LivermoreIonisationModel: Negative energy deposit: "   322          << theEnergyDeposit/
eV << 
" eV" << 
G4endl;
   323       theEnergyDeposit = 0.0;
   331       G4cout << 
"-----------------------------------------------------------" << 
G4endl;
   332       G4cout << 
"Energy balance from G4LivermoreIonisation" << 
G4endl;
   333       G4cout << 
"Incoming primary energy: " << kineticEnergy/
keV << 
" keV" << 
G4endl;
   334       G4cout << 
"-----------------------------------------------------------" << 
G4endl;
   335       G4cout << 
"Outgoing primary energy: " << finalKinEnergy/
keV << 
" keV" << 
G4endl;
   337       G4cout << 
"Fluorescence: " << (bindingEnergy-theEnergyDeposit)/
keV << 
" keV" << G4endl;
   338       G4cout << 
"Local energy deposit " << theEnergyDeposit/
keV << 
" keV" << 
G4endl;
   339       G4cout << 
"Total final state: " << (finalKinEnergy+energyDelta+bindingEnergy)
   341       G4cout << 
"-----------------------------------------------------------" << 
G4endl;
 G4double LowEnergyLimit() const
 
G4double fIntrinsicLowEnergyLimit
 
virtual void PrintData() const =0
 
G4ParticleChangeForLoss * GetParticleChangeForLoss()
 
std::vector< G4Element * > G4ElementVector
 
G4double GetCrossSectionAboveThresholdForElement(G4double energy, G4double cutEnergy, G4int Z)
 
G4double FindValue(G4int Z, G4double e) const
 
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
 
const G4Material * GetMaterial() const
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
G4VEmAngularDistribution * GetAngularDistribution()
 
G4VEnergySpectrum * energySpectrum
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle *> *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
 
G4AtomicTransitionManager * transitionManager
 
G4eIonisationCrossSectionHandler * crossSectionHandler
 
G4ParticleChangeForLoss * fParticleChange
 
virtual G4double SampleEnergy(G4int Z, G4double minKineticEnergy, G4double maxKineticEnergy, G4double kineticEnergy, G4int shell=0, const G4ParticleDefinition *pd=0) const =0
 
G4double GetKineticEnergy() const
 
G4ThreeVector GetMomentum() const
 
virtual G4double AverageEnergy(G4int Z, G4double minKineticEnergy, G4double maxKineticEnergy, G4double kineticEnergy, G4int shell=0, const G4ParticleDefinition *pd=0) const =0
 
const G4double * GetAtomicNumDensityVector() const
 
G4GLOB_DLL std::ostream G4cout
 
G4double fIntrinsicHighEnergyLimit
 
G4double HighEnergyLimit() const
 
G4VEMDataSet * BuildMeanFreePathForMaterials(const G4DataVector *energyCuts=0)
 
virtual G4double MaxEnergyOfSecondaries(G4double kineticEnergy, G4int Z=0, const G4ParticleDefinition *pd=0) const =0
 
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0, G4double cut=0, G4double emax=DBL_MAX)
 
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
 
void LoadShellData(const G4String &dataFile)
 
G4LivermoreIonisationModel(const G4ParticleDefinition *p=0, const G4String &processName="LowEnergyIoni")
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static const G4double emax
 
virtual ~G4LivermoreIonisationModel()
 
const G4ThreeVector & GetMomentumDirection() const
 
virtual G4double Excitation(G4int Z, G4double kineticEnergy) const =0
 
void SetAngularDistribution(G4VEmAngularDistribution *)
 
size_t GetNumberOfElements() const
 
G4int SelectRandomAtom(const G4MaterialCutsCouple *couple, G4double e) const
 
static G4Electron * Electron()
 
const G4ElementVector * GetElementVector() const
 
G4double BindingEnergy() const
 
G4int NumberOfShells(G4int Z) const
 
static G4AtomicTransitionManager * Instance()
 
G4int SelectRandomShell(G4int Z, G4double e) const