99     intrinsicLowEnergyLimit(10*
eV),
 
  100     intrinsicHighEnergyLimit(100*
GeV),
 
  101     cutForLowEnergySecondaryPhotons(250.*
eV),
 
  102     cutForLowEnergySecondaryElectrons(250.*
eV)
 
  104   if (lowEnergyLimit < intrinsicLowEnergyLimit || 
 
  105       highEnergyLimit > intrinsicHighEnergyLimit)
 
  107       G4Exception(
"G4LowEnergyPhotoElectric::G4LowEnergyPhotoElectric()",
 
  109                   "Energy limit outside intrinsic process validity range!");
 
  114   meanFreePathTable = 0;
 
  116   generatorName = 
"geant4.6.2";
 
  124          << lowEnergyLimit / 
keV << 
" keV - " 
  125          << highEnergyLimit / 
GeV << 
" GeV" 
  132   delete crossSectionHandler;
 
  133   delete shellCrossSectionHandler;
 
  134   delete meanFreePathTable;
 
  136   delete ElectronAngularGenerator;
 
  142   crossSectionHandler->
Clear();
 
  143   G4String crossSectionFile = 
"phot/pe-cs-";
 
  144   crossSectionHandler->
LoadData(crossSectionFile);
 
  146   shellCrossSectionHandler->
Clear();
 
  147   G4String shellCrossSectionFile = 
"phot/pe-ss-cs-";
 
  148   shellCrossSectionHandler->
LoadShellData(shellCrossSectionFile);
 
  150   delete meanFreePathTable;
 
  166   if (photonEnergy <= lowEnergyLimit)
 
  191   std::vector<G4DynamicParticle*>* photonVector = 0;
 
  192   std::vector<G4DynamicParticle*> electronVector;
 
  201   if (eKineticEnergy > 0.)
 
  217       electronVector.push_back(electron);
 
  221       energyDeposit += eKineticEnergy;
 
  226       bindingEnergy = photonEnergy;
 
  229   G4int nElectrons = electronVector.size();
 
  230   size_t nTotPhotons = 0;
 
  237   cutg = 
std::min(cutForLowEnergySecondaryPhotons,cutg);
 
  240   cute = 
std::min(cutForLowEnergySecondaryPhotons,cute);
 
  248   if (Z > 5  && (bindingEnergy > cutg || bindingEnergy > cute))
 
  251       nTotPhotons = photonVector->size();
 
  252       for (
size_t k=0; k<nTotPhotons; k++)
 
  254       aPhoton = (*photonVector)[k];
 
  261           if (itsEnergy > itsCut && itsEnergy <= bindingEnergy)
 
  267           bindingEnergy -= itsEnergy;
 
  273                   (*photonVector)[k] = 0;
 
  281   G4int nSecondaries  = nElectrons + nPhotons;
 
  284   for (
G4int l = 0; l<nElectrons; l++ )
 
  286       aPhoton = electronVector[l];
 
  291   for ( 
size_t ll = 0; ll < nTotPhotons; ll++)
 
  293       aPhoton = (*photonVector)[ll];
 
  301   if (energyDeposit < 0)
 
  304          << 
"G4LowEnergyPhotoElectric::PostStepDoIt - Negative energy deposit" 
  342   if(cross > 0.0) meanFreePath = 1.0/cross;
 
  349   cutForLowEnergySecondaryPhotons = cut;
 
  355   cutForLowEnergySecondaryElectrons = cut;
 
  366   ElectronAngularGenerator = distribution;
 
  372   if (name == 
"default") 
 
  374       delete ElectronAngularGenerator;
 
  376       generatorName = 
name;
 
  378   else if (name == 
"standard")
 
  380       delete ElectronAngularGenerator;
 
  382       generatorName = 
name;
 
  384   else if (name == 
"polarized")
 
  386       delete ElectronAngularGenerator;
 
  388       generatorName = 
name;
 
  392       G4Exception(
"G4LowEnergyPhotoElectric::SetAngularGenerator()",
 
  394                   "Generator does not exist!");
 
void SetCutForLowEnSecElectrons(G4double)
 
G4double ValueForMaterial(const G4Material *material, G4double e) const 
 
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const 
 
void SetCutForSecondaryPhotons(G4double cut)
 
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
 
void ActivateAugerElectronProduction(G4bool val)
 
G4double GetKineticEnergy() const 
 
G4bool IsApplicable(const G4ParticleDefinition &)
 
const G4DynamicParticle * GetDynamicParticle() const 
 
void BuildPhysicsTable(const G4ParticleDefinition &photon)
 
const G4MaterialCutsCouple * GetMaterialCutsCouple() const 
 
void LoadShellData(const G4String &dataFile)
 
G4ParticleDefinition * GetDefinition() const 
 
G4RDVEMDataSet * BuildMeanFreePathForMaterials(const G4DataVector *energyCuts=0)
 
void ActivateAuger(G4bool)
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
void SetAngularGenerator(G4RDVPhotoElectricAngularDistribution *distribution)
 
static G4RDAtomicTransitionManager * Instance()
 
void SetCutForLowEnSecPhotons(G4double)
 
G4GLOB_DLL std::ostream G4cout
 
const G4ThreeVector & GetMomentumDirection() const 
 
G4double BindingEnergy() const 
 
G4int SelectRandomShell(G4int Z, G4double e) const 
 
G4LowEnergyPhotoElectric(const G4String &processName="LowEnPhotoElec")
 
G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
 
static constexpr double eV
 
const G4String & GetProcessName() const 
 
G4Material * GetMaterial() const 
 
~G4LowEnergyPhotoElectric()
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
virtual G4bool Escape(const G4ParticleDefinition *particle, const G4MaterialCutsCouple *couple, G4double energy, G4double safety) const =0
 
virtual void Initialize(const G4Track &)
 
static G4ProductionCutsTable * GetProductionCutsTable()
 
G4double energy(const ThreeVector &p, const G4double m)
 
void SetNumberOfSecondaries(G4int totSecondaries)
 
G4StepPoint * GetPostStepPoint() const 
 
void SetCutForAugerElectrons(G4double cut)
 
G4int SelectRandomAtom(const G4MaterialCutsCouple *couple, G4double e) const 
 
const G4ThreeVector & GetPolarization() const 
 
void ProposeEnergy(G4double finalEnergy)
 
G4ParticleChange aParticleChange
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
G4RDAtomicShell * Shell(G4int Z, size_t shellIndex) const 
 
static constexpr double GeV
 
G4double GetSafety() const 
 
void AddSecondary(G4Track *aSecondary)
 
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
 
static G4Electron * Electron()
 
virtual G4ThreeVector GetPhotoElectronDirection(const G4ThreeVector &direction, const G4double kineticEnergy, const G4ThreeVector &polarization, const G4int shellID) const =0
 
void LoadData(const G4String &dataFile)
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
void ProposeTrackStatus(G4TrackStatus status)
 
G4double bindingEnergy(G4int A, G4int Z)
 
static constexpr double keV
 
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
 
virtual void PrintGeneratorInformation() const =0