191 std::vector<G4DynamicParticle*>* photonVector = 0;
192 std::vector<G4DynamicParticle*> electronVector;
197 G4double eKineticEnergy = photonEnergy - bindingEnergy;
201 if (eKineticEnergy > 0.)
204 G4double safety = aStep.GetPostStepPoint()->GetSafety();
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;
279 energyDeposit += bindingEnergy;
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"
G4int SelectRandomAtom(const G4MaterialCutsCouple *couple, G4double e) const
G4int SelectRandomShell(G4int Z, G4double e) const
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
G4RDVPhotoElectricAngularDistribution * ElectronAngularGenerator
const std::vector< G4double > * GetEnergyCutsVector(size_t pcIdx) const
static G4RDAtomicTransitionManager * Instance()
G4double BindingEnergy() const
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
G4RDVCrossSectionHandler * crossSectionHandler
G4RDAtomicShell * Shell(G4int Z, size_t shellIndex) const
G4RDVRangeTest * rangeTest
virtual G4bool Escape(const G4ParticleDefinition *particle, const G4MaterialCutsCouple *couple, G4double energy, G4double safety) const =0
static G4ProductionCutsTable * GetProductionCutsTable()
const G4ThreeVector & GetMomentumDirection() const
const G4ThreeVector & GetPolarization() const
G4ParticleChange aParticleChange
G4RDVCrossSectionHandler * shellCrossSectionHandler
static G4Electron * Electron()
G4ParticleDefinition * GetDefinition() const
G4double cutForLowEnergySecondaryPhotons
virtual G4ThreeVector GetPhotoElectronDirection(const G4ThreeVector &direction, const G4double kineticEnergy, const G4ThreeVector &polarization, const G4int shellID) const =0
G4RDAtomicDeexcitation deexcitationManager
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)