265 if (verboseLevel > 3) {
266 G4cout <<
"G4LivermorePhotoElectricModel::SampleSecondaries() Egamma(keV)= "
276 if(fWater && (material == fWater ||
278 if(gammaEnergy <= fWaterEnergyLimit) {
296 if(Z >= maxZ) { Z = maxZ-1; }
299 if(!fCrossSection[Z]) {
306 size_t nn = fNShellsUsed[
Z];
309 if(gammaEnergy >= (*(fParam[Z]))[0]) {
314 G4int idx = nn*6 - 4;
318 + x1*(*(fParam[
Z]))[idx+1]
319 + x2*(*(fParam[
Z]))[idx+2]
320 + x3*(*(fParam[
Z]))[idx+3]
321 + x4*(*(fParam[
Z]))[idx+4]);
322 for(shellIdx=0; shellIdx<
nn; ++shellIdx) {
323 idx = shellIdx*6 + 2;
324 if(gammaEnergy > (*(fParam[Z]))[idx-1]) {
325 G4double cs = (*(fParam[
Z]))[idx] + x1*(*(fParam[
Z]))[idx+1]
326 + x2*(*(fParam[
Z]))[idx+2] + x3*(*(fParam[
Z]))[idx+3]
327 + x4*(*(fParam[
Z]))[idx+4];
328 if(cs >= cs0) {
break; }
331 if(shellIdx >= nn) { shellIdx = nn-1; }
339 if(gammaEnergy >= (*(fParam[Z]))[1]) {
340 cs *= (fCrossSection[
Z])->
Value(gammaEnergy);
342 cs *= (fCrossSectionLE[
Z])->
Value(gammaEnergy);
345 for(
size_t j=0; j<
nn; ++j) {
347 if(gammaEnergy > (*(fParam[Z]))[6*shellIdx+1]) {
350 if(cs <= 0.0 || j+1 == nn) {
break; }
364 if(fDeexcitationActive && shellIdx + 1 < nn) {
371 if(gammaEnergy < bindingEnergy) {
391 fvect->push_back(electron);
397 G4int nbefore = fvect->size();
400 G4int nafter = fvect->size();
401 if(nafter > nbefore) {
403 for (
G4int j=nbefore; j<nafter; ++j) {
405 G4double e = ((*fvect)[j])->GetKineticEnergy();
406 if(esec + e > edep) {
409 ((*fvect)[j])->SetKineticEnergy(e);
412 for (
G4int jj=nafter-1; jj>j; --jj) {
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
G4double GetKineticEnergy() const
G4VEmAngularDistribution * GetAngularDistribution()
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
G4int GetComponentID(G4int Z, size_t idx)
G4GLOB_DLL std::ostream G4cout
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
const G4ThreeVector & GetMomentumDirection() const
G4double GetValueForComponent(G4int Z, size_t idx, G4double kinEnergy)
const G4Material * GetBaseMaterial() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeTrackStatus(G4TrackStatus status)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
G4double bindingEnergy(G4int A, G4int Z)
static constexpr double keV
G4ParticleChangeForGamma * fParticleChange
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
const G4Material * GetMaterial() const