51 minGammaEnergy(100.*
eV),
52 minElectronEnergy(100.*
eV),
62 std::vector<G4DynamicParticle*>* vectorOfParticles;
64 vectorOfParticles =
new std::vector<G4DynamicParticle*>;
66 G4int provShellId = 0;
77 provShellId = SelectTypeOfTransition(Z, givenShellId);
83 aParticle = GenerateFluorescence(Z,givenShellId,provShellId);
86 else if ( provShellId == -1)
88 aParticle = GenerateAuger(Z, givenShellId);
93 G4Exception(
"G4RDAtomicDeexcitation::GenerateParticles()",
95 "Starting shell uncorrect: check it!");
102 provShellId = SelectTypeOfTransition(Z,newShellId);
110 aParticle = GenerateFluorescence(Z,newShellId,provShellId);
113 else if ( provShellId == -1)
115 aParticle = GenerateAuger(Z, newShellId);
120 G4Exception(
"G4RDAtomicDeexcitation::GenerateParticles()",
122 "Starting shell uncorrect: check it!");
126 if (aParticle != 0) {vectorOfParticles->push_back(aParticle);}
127 else {provShellId = -2;}
131 while (provShellId > -2);
133 return vectorOfParticles;
136 G4int G4RDAtomicDeexcitation::SelectTypeOfTransition(
G4int Z,
G4int shellId)
140 G4Exception(
"G4RDAtomicDeexcitation::SelectTypeOfTransition()",
142 "Zero or negative shellId!");
147 G4int provShellId = -1;
159 if ( shellId <= refShell->FinalShellId())
163 if(shellNum ==maxNumOfShells-1)
184 while(transProb < trSize){
188 if(partialProb <= partSum)
222 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
225 G4double xDir = newsinTh*std::sin(newPhi);
226 G4double yDir = newsinTh*std::cos(newPhi);
235 while (shellId != transitionManager->
236 ReachableShell(Z,shellNum)->FinalShellId())
238 if(shellNum == maxNumOfShells-1)
245 size_t transitionSize = transitionManager->
246 ReachableShell(Z,shellNum)->OriginatingShellIds().size();
252 while (provShellId != transitionManager->
253 ReachableShell(Z,shellNum)->OriginatingShellId(index))
255 if(index == transitionSize-1)
262 G4double transitionEnergy = transitionManager->
263 ReachableShell(Z,shellNum)->TransitionEnergy(index);
267 newShellId = transitionManager->
268 ReachableShell(Z,shellNum)->OriginatingShellId(index);
279 if(!fAuger)
return 0;
289 G4Exception(
"G4RDAtomicDeexcitation::GenerateAuger()",
291 "Zero or negative shellId!");
311 if ( shellId <= refAugerTransition->FinalShellId() )
316 if (shellId != pippo ) {
319 if(shellNum == maxNumOfShells)
348 G4int transitionLoopShellIndex = 0;
356 G4int transitionSize =
358 while (transitionLoopShellIndex < transitionSize) {
360 std::vector<G4int>::const_iterator
pos =
363 G4int transitionLoopShellId = *(pos+transitionLoopShellIndex);
364 G4int numberOfPossibleAuger =
366 G4int augerIndex = 0;
370 if (augerIndex < numberOfPossibleAuger) {
375 transitionLoopShellId);
379 }
while (augerIndex < numberOfPossibleAuger);
381 transitionLoopShellIndex++;
409 G4double totalVacancyAugerProbability = partSum;
413 G4int transitionRandomShellIndex = 0;
414 G4int transitionRandomShellId = 1;
415 G4int augerIndex = 0;
420 G4int numberOfPossibleAuger =
424 while (transitionRandomShellIndex < transitionSize) {
426 std::vector<G4int>::const_iterator pos =
429 transitionRandomShellId = *(pos+transitionRandomShellIndex);
432 numberOfPossibleAuger = (anAugerTransition->
433 AugerTransitionProbabilities(transitionRandomShellId))->size();
435 while (augerIndex < numberOfPossibleAuger) {
437 transitionRandomShellId);
441 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
447 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
break;}
448 transitionRandomShellIndex++;
455 if (!foundFlag) {
return 0;}
459 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
462 G4double xDir = newsinTh*std::sin(newPhi);
463 G4double yDir = newsinTh*std::cos(newPhi);
480 newShellId = transitionRandomShellId;
484 newElectronDirection,
499 minGammaEnergy = cut;
504 minElectronEnergy = cut;
const G4RDFluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
G4double TransitionProbability(G4int index) const
G4double AugerTransitionProbability(G4int index, G4int startShellId) const
G4double AugerTransitionEnergy(G4int index, G4int startShellId) const
void SetCutForSecondaryPhotons(G4double cut)
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
const G4DataVector & TransitionProbabilities() const
void ActivateAugerElectronProduction(G4bool val)
~G4RDAtomicDeexcitation()
const std::vector< G4int > * TransitionOriginatingShellIds() const
G4int NumberOfReachableAugerShells(G4int Z) const
G4int NumberOfReachableShells(G4int Z) const
static constexpr double twopi
static G4RDAtomicTransitionManager * Instance()
G4int FinalShellId() const
static constexpr double eV
const G4RDAugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4int OriginatingShellId(G4int index) const
void SetCutForAugerElectrons(G4double cut)
static G4Electron * Electron()
G4int FinalShellId() const
static const G4double pos
const G4DataVector * AugerTransitionProbabilities(G4int startShellId) const