70 fminimalEnergy = 1.0*CLHEP::eV;
73 fSandiaCof.resize(4,0.0);
90 if(
nullptr == fParticleChange) {
94 fMatEnergyTh.resize(nmat, 0.0);
95 for(std::size_t i=0; i<nmat; ++i) {
97 ->GetSandiaTable()->GetSandiaCofForMaterial(0, 0);
118 return x1 * (fSandiaCof[0] + x1 * (fSandiaCof[1] +
119 x1 * (fSandiaCof[2] + x1 * fSandiaCof[3])));
132 energy = std::max(energy, fMatEnergyTh[material->
GetIndex()]);
138 return x1 * (SandiaCof[0] + x1 * (SandiaCof[1] +
139 x1 * (SandiaCof[2] + x1 * SandiaCof[3])));
166 for(; i<nShells; ++i) {
180 if ( (fPEBelowKShell || 0 == i) && i < nShells ) {
183 edep = bindingEnergy;
188 if(
nullptr != fAtomDeexcitation) {
195 if(eshell > bindingEnergy && eshell <= energy) {
196 bindingEnergy = eshell;
199 std::size_t nbefore = fvect->size();
201 std::size_t nafter = fvect->size();
202 for (std::size_t j=nbefore; j<nafter; ++j) {
203 G4double e = ((*fvect)[j])->GetKineticEnergy();
204 if(esec + e > edep) {
207 ((*fvect)[j])->SetKineticEnergy(e);
220 for (std::size_t jj=nafter-1; jj>j; --jj) {
233 G4double elecKineEnergy = energy - bindingEnergy;
234 if (elecKineEnergy > fminimalEnergy) {
240 fvect->push_back(aParticle);
242 edep += elecKineEnergy;
243 elecKineEnergy = 0.0;
245 if(std::abs(energy - elecKineEnergy - esec - edep) > CLHEP::eV) {
246 G4cout <<
"### G4PEffectFluoModel dE(eV)= "
247 << (energy - elecKineEnergy - esec - edep)/eV
249 <<
" E(keV)= " << energy/keV
250 <<
" Ebind(keV)= " << bindingEnergy/keV
251 <<
" Ee(keV)= " << elecKineEnergy/keV
252 <<
" Esec(keV)= " << esec/keV
253 <<
" Edep(keV)= " << edep/keV
G4GLOB_DLL std::ostream G4cout
G4double BindingEnergy() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
G4int GetNbOfAtomicShells() const
G4double GetAtomicShell(G4int index) const
static G4EmParameters * Instance()
G4bool PhotoeffectBelowKShell() const
static G4LossTableManager * Instance()
G4VAtomDeexcitation * AtomDeexcitation()
const G4Material * GetMaterial() const
G4SandiaTable * GetSandiaTable() const
static std::size_t GetNumberOfMaterials()
std::size_t GetIndex() const
static G4MaterialTable * GetMaterialTable()
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
~G4PEEffectFluoModel() override
G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy) override
G4PEEffectFluoModel(const G4String &nam="PhotoElectric")
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double, G4double) override
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double GetSandiaCofForMaterial(G4int, G4int) const
void GetSandiaCofPerAtom(G4int Z, G4double energy, std::vector< G4double > &coeff) const
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
G4VEmAngularDistribution * GetAngularDistribution()
G4ParticleChangeForGamma * GetParticleChangeForGamma()
void SetCurrentCouple(const G4MaterialCutsCouple *)
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void SetDeexcitationFlag(G4bool val)
void SetAngularDistribution(G4VEmAngularDistribution *)
const G4MaterialCutsCouple * CurrentCouple() const
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)