267 if (verboseLevel > 3) {
268 G4cout <<
"G4LivermorePolarizedPhotoElectricModel::SampleSecondaries() Egamma(keV)= "
278 if(fWater && (material == fWater ||
280 if(gammaEnergy <= fWaterEnergyLimit) {
298 if(Z >= maxZ) { Z = maxZ-1; }
301 if(!fCrossSection[Z]) {
308 size_t nn = fNShellsUsed[
Z];
311 if(gammaEnergy >= (*(fParam[Z]))[0]) {
316 G4int idx = nn*6 - 4;
320 + x1*(*(fParam[
Z]))[idx+1]
321 + x2*(*(fParam[
Z]))[idx+2]
322 + x3*(*(fParam[
Z]))[idx+3]
323 + x4*(*(fParam[
Z]))[idx+4]);
324 for(shellIdx=0; shellIdx<
nn; ++shellIdx) {
325 idx = shellIdx*6 + 2;
326 if(gammaEnergy > (*(fParam[Z]))[idx-1]) {
327 G4double cs = (*(fParam[
Z]))[idx] + x1*(*(fParam[
Z]))[idx+1]
328 + x2*(*(fParam[
Z]))[idx+2] + x3*(*(fParam[
Z]))[idx+3]
329 + x4*(*(fParam[
Z]))[idx+4];
330 if(cs >= cs0) {
break; }
333 if(shellIdx >= nn) { shellIdx = nn-1; }
341 if(gammaEnergy >= (*(fParam[Z]))[1]) {
342 cs *= (fCrossSection[
Z])->
Value(gammaEnergy);
344 cs *= (fCrossSectionLE[
Z])->
Value(gammaEnergy);
347 for(
size_t j=0; j<
nn; ++j) {
349 if(gammaEnergy > (*(fParam[Z]))[6*shellIdx+1]) {
352 if(cs <= 0.0 || j+1 == nn) {
break; }
366 if(fDeexcitationActive && shellIdx + 1 < nn) {
373 if(gammaEnergy < bindingEnergy) {
393 fvect->push_back(electron);
399 G4int nbefore = fvect->size();
402 G4int nafter = fvect->size();
403 if(nafter > nbefore) {
405 for (
G4int j=nbefore; j<nafter; ++j) {
407 G4double e = ((*fvect)[j])->GetKineticEnergy();
408 if(esec + e > edep) {
411 ((*fvect)[j])->SetKineticEnergy(e);
414 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)
G4ParticleChangeForGamma * fParticleChange
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
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