215{
217 if (verboseLevel > 3) {
218 G4cout <<
"G4LivermorePhotoElectricModel::SampleSecondaries() Egamma(keV)= "
219 << gammaEnergy/keV <<
G4endl;
220 }
221
222
225
226
228
229
230
232 gammaEnergy);
234
235
236
237
238
239 if(Z >= maxZ) { Z = maxZ-1; }
240
241
242 if(!fCrossSection[Z]) {
243 char* path = getenv("G4LEDATA");
244 ReadData(Z, path);
245 if(!fCrossSection[Z]) {
247 return;
248 }
249 }
250
251
252 size_t shellIdx = 0;
253 size_t nn = fNShellsUsed[Z];
254
255 if(nn > 1) {
256 if(gammaEnergy >= (fParam[Z])[0]) {
262
263
265 + x2*(fParam[Z])[idx+2]
266 + x3*(fParam[Z])[idx+3]
267 + x4*(fParam[Z])[idx+4]);
268 for(shellIdx=0; shellIdx<
nn; ++shellIdx) {
269 idx = shellIdx*6 + 2;
270 if(gammaEnergy > (fParam[Z])[idx-1]) {
271 G4double cs = (fParam[Z])[idx] + x1*(fParam[Z])[idx+1]
272 + x2*(fParam[Z])[idx+2] + x3*(fParam[Z])[idx+3]
273 + x4*(fParam[Z])[idx+4];
274 if(cs >= cs0) { break; }
275 }
276 }
277 if(shellIdx >= nn) { shellIdx =
nn-1; }
278
279 } else {
280
281
282
284
285 if(gammaEnergy >= (fParam[Z])[1]) {
286 cs *= (fCrossSection[Z])->
Value(gammaEnergy);
287 } else {
288 cs *= (fCrossSectionLE[Z])->
Value(gammaEnergy);
289 }
290
291 for(
size_t j=0; j<
nn; ++j) {
293 if(gammaEnergy > (fParam[Z])[6*shellIdx+1]) {
295 }
296 if(cs <= 0.0 || j+1 == nn) { break; }
297 }
298 }
299 }
300
302
303
304
305
306
308
309
310 if(fDeexcitationActive && shellIdx + 1 == nn) {
313 }
314
315
316
317 if(gammaEnergy < bindingEnergy) {
319 return;
320 }
321
322
325
326
329 eKineticEnergy,
330 shellIdx,
332
333
335 electronDirection,
336 eKineticEnergy);
337 fvect->push_back(electron);
338
339
340 if(shell) {
343 size_t nbefore = fvect->size();
344
346 size_t nafter = fvect->size();
347 if(nafter > nbefore) {
348 for (size_t j=nbefore; j<nafter; ++j) {
349 edep -= ((*fvect)[j])->GetKineticEnergy();
350 }
351 }
352 }
353 }
354
355 if(edep > 0.0) {
357 }
358}
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
G4int GetComponentID(G4int Z, size_t idx)
G4double GetValueForComponent(G4int Z, size_t idx, G4double kinEnergy)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
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)
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
G4VEmAngularDistribution * GetAngularDistribution()
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4double bindingEnergy(G4int A, G4int Z)