99 intrinsicLowEnergyLimit(10*
eV),
100 intrinsicHighEnergyLimit(100*
GeV),
101 cutForLowEnergySecondaryPhotons(250.*
eV),
102 cutForLowEnergySecondaryElectrons(250.*
eV)
107 G4Exception(
"G4LowEnergyPhotoElectric::G4LowEnergyPhotoElectric()",
109 "Energy limit outside intrinsic process validity range!");
143 G4String crossSectionFile =
"phot/pe-cs-";
147 G4String shellCrossSectionFile =
"phot/pe-ss-cs-";
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;
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;
372 if (name ==
"default")
378 else if (name ==
"standard")
384 else if (name ==
"polarized")
392 G4Exception(
"G4LowEnergyPhotoElectric::SetAngularGenerator()",
394 "Generator does not exist!");
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
const G4double intrinsicHighEnergyLimit
G4RDVEMDataSet * BuildMeanFreePathForMaterials(const G4DataVector *energyCuts=0)
G4double cutForLowEnergySecondaryPhotons
G4int SelectRandomAtom(const G4MaterialCutsCouple *couple, G4double e) const
G4RDVRangeTest * rangeTest
G4RDVPhotoElectricAngularDistribution * ElectronAngularGenerator
virtual G4ThreeVector GetPhotoElectronDirection(const G4ThreeVector &direction, const G4double kineticEnergy, const G4ThreeVector &polarization, const G4int shellID) const =0
static constexpr double keV
G4RDVEMDataSet * meanFreePathTable
const G4ThreeVector & GetMomentumDirection() const
virtual G4bool Escape(const G4ParticleDefinition *particle, const G4MaterialCutsCouple *couple, G4double energy, G4double safety) const =0
void SetCutForAugerElectrons(G4double cut)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4double cutForLowEnergySecondaryElectrons
void ActivateAugerElectronProduction(G4bool val)
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
G4LowEnergyPhotoElectric(const G4String &processName="LowEnPhotoElec")
void AddSecondary(G4Track *aSecondary)
G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
void BuildPhysicsTable(const G4ParticleDefinition &photon)
G4ParticleChange aParticleChange
const G4double intrinsicLowEnergyLimit
void LoadData(const G4String &dataFile)
void SetAngularGenerator(G4RDVPhotoElectricAngularDistribution *distribution)
void SetCutForSecondaryPhotons(G4double cut)
G4ParticleDefinition * GetDefinition() const
static G4RDAtomicTransitionManager * Instance()
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4bool IsApplicable(const G4ParticleDefinition &)
virtual void Initialize(const G4Track &)
G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
G4RDVCrossSectionHandler * shellCrossSectionHandler
G4RDAtomicShell * Shell(G4int Z, size_t shellIndex) const
void SetCutForLowEnSecElectrons(G4double)
const G4String & GetProcessName() const
G4int SelectRandomShell(G4int Z, G4double e) const
static constexpr double eV
G4RDAtomicDeexcitation deexcitationManager
G4StepPoint * GetPostStepPoint() const
void ProposeEnergy(G4double finalEnergy)
G4double BindingEnergy() const
G4Material * GetMaterial() const
static G4Electron * Electron()
virtual void PrintGeneratorInformation() const =0
G4RDVCrossSectionHandler * crossSectionHandler
static G4ProductionCutsTable * GetProductionCutsTable()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
const G4ThreeVector & GetPolarization() const
G4double ValueForMaterial(const G4Material *material, G4double e) const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
~G4LowEnergyPhotoElectric()
G4double GetSafety() const
G4double GetKineticEnergy() const
void LoadShellData(const G4String &dataFile)
G4GLOB_DLL std::ostream G4cout
void ActivateAuger(G4bool)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4double bindingEnergy(G4int A, G4int Z)
void SetCutForLowEnSecPhotons(G4double)
void ProposeTrackStatus(G4TrackStatus status)
static constexpr double GeV
const G4DynamicParticle * GetDynamicParticle() const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void SetNumberOfSecondaries(G4int totSecondaries)