99 intrinsicLowEnergyLimit(10*
eV),
100 intrinsicHighEnergyLimit(100*
GeV),
101 cutForLowEnergySecondaryPhotons(250.*
eV),
102 cutForLowEnergySecondaryElectrons(250.*
eV)
104 if (lowEnergyLimit < intrinsicLowEnergyLimit ||
105 highEnergyLimit > intrinsicHighEnergyLimit)
107 G4Exception(
"G4LowEnergyPhotoElectric::G4LowEnergyPhotoElectric()",
109 "Energy limit outside intrinsic process validity range!");
114 meanFreePathTable = 0;
116 generatorName =
"geant4.6.2";
124 << lowEnergyLimit /
keV <<
" keV - "
125 << highEnergyLimit /
GeV <<
" GeV"
132 delete crossSectionHandler;
133 delete shellCrossSectionHandler;
134 delete meanFreePathTable;
136 delete ElectronAngularGenerator;
142 crossSectionHandler->
Clear();
143 G4String crossSectionFile =
"phot/pe-cs-";
144 crossSectionHandler->
LoadData(crossSectionFile);
146 shellCrossSectionHandler->
Clear();
147 G4String shellCrossSectionFile =
"phot/pe-ss-cs-";
148 shellCrossSectionHandler->
LoadShellData(shellCrossSectionFile);
150 delete meanFreePathTable;
166 if (photonEnergy <= lowEnergyLimit)
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;
237 cutg = std::min(cutForLowEnergySecondaryPhotons,cutg);
240 cute = std::min(cutForLowEnergySecondaryPhotons,cute);
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;
349 cutForLowEnergySecondaryPhotons = cut;
355 cutForLowEnergySecondaryElectrons = cut;
366 ElectronAngularGenerator = distribution;
372 if (name ==
"default")
374 delete ElectronAngularGenerator;
376 generatorName =
name;
378 else if (name ==
"standard")
380 delete ElectronAngularGenerator;
382 generatorName =
name;
384 else if (name ==
"polarized")
386 delete ElectronAngularGenerator;
388 generatorName =
name;
392 G4Exception(
"G4LowEnergyPhotoElectric::SetAngularGenerator()",
394 "Generator does not exist!");