51 minGammaEnergy(100.*
eV),
52 minElectronEnergy(100.*
eV),
62 std::vector<G4DynamicParticle*>* vectorOfParticles;
64 vectorOfParticles =
new std::vector<G4DynamicParticle*>;
66 G4int provShellId = 0;
86 else if ( provShellId == -1)
93 G4Exception(
"G4RDAtomicDeexcitation::GenerateParticles()",
95 "Starting shell uncorrect: check it!");
113 else if ( provShellId == -1)
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;
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);
268 ReachableShell(Z,shellNum)->OriginatingShellId(index);
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);
484 newElectronDirection,
G4DynamicParticle * GenerateFluorescence(G4int Z, G4int shellId, G4int provShellId)
G4double AugerTransitionEnergy(G4int index, G4int startShellId) const
void SetCutForSecondaryPhotons(G4double cut)
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
void ActivateAugerElectronProduction(G4bool val)
~G4RDAtomicDeexcitation()
const G4RDFluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
static G4RDAtomicTransitionManager * Instance()
G4int NumberOfReachableShells(G4int Z) const
G4double TransitionProbability(G4int index) const
G4int FinalShellId() const
static const double twopi
G4double AugerTransitionProbability(G4int index, G4int startShellId) const
G4int OriginatingShellId(G4int index) const
G4int NumberOfReachableAugerShells(G4int Z) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4DynamicParticle * GenerateAuger(G4int Z, G4int shellId)
const std::vector< G4int > * TransitionOriginatingShellIds() const
const G4RDAugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
const G4DataVector * AugerTransitionProbabilities(G4int startShellId) const
G4int FinalShellId() const
G4double minElectronEnergy
void SetCutForAugerElectrons(G4double cut)
G4int SelectTypeOfTransition(G4int Z, G4int shellId)
const G4DataVector & TransitionProbabilities() const
static G4Electron * Electron()
static const G4double pos