49 minGammaEnergy(100.*eV),
50 minElectronEnergy(100.*eV),
54 G4cout <<
" ********************************************************** " <<
G4endl;
56 G4cout <<
" ********************************************************** " <<
G4endl;
58 G4cout <<
" * Class G4AtomicDeexcitation is obsolete. It has been * " <<
G4endl;
59 G4cout <<
" * discontinued and is going to be removed by next Geant4 * " <<
G4endl;
60 G4cout <<
" * release please migrate to G4UAtomDeexcitation. * " <<
G4endl;
62 G4cout <<
" ********************************************************** " <<
G4endl;
74 std::vector<G4DynamicParticle*>* vectorOfParticles;
75 vectorOfParticles =
new std::vector<G4DynamicParticle*>;
78 G4int provShellId = 0;
89 provShellId = SelectTypeOfTransition(Z, givenShellId);
93 aParticle = GenerateFluorescence(Z,givenShellId,provShellId);
95 else if ( provShellId == -1)
97 aParticle = GenerateAuger(Z, givenShellId);
101 G4Exception(
"G4AtomicDeexcitation::Constructor",
"de0002",
JustWarning,
"Transition selection invalid, energy local deposited");
108 provShellId = SelectTypeOfTransition(Z,newShellId);
111 aParticle = GenerateFluorescence(Z,newShellId,provShellId);
113 else if ( provShellId == -1)
115 aParticle = GenerateAuger(Z, newShellId);
119 G4Exception(
"G4AtomicDeexcitation::constructor",
"de0002",
JustWarning,
"Transition selection invalid, energy local deposited" );
123 if (aParticle != 0) {vectorOfParticles->push_back(aParticle);}
124 else {provShellId = -2;}
128 while (provShellId > -2);
135 return vectorOfParticles;
138G4int G4AtomicDeexcitation::SelectTypeOfTransition(
G4int Z,
G4int shellId)
141 {
G4Exception(
"G4AtomicDeexcitation::SelectTypeOfTransition()",
"de0002",
JustWarning ,
"zero or negative shellId");}
147 G4int provShellId = -1;
156 if ( shellId <= refShell->FinalShellId())
160 if(shellNum ==maxNumOfShells-1)
181 while(transProb < trSize){
185 if(partialProb <= partSum)
221 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
224 G4double xDir = newsinTh*std::sin(newPhi);
225 G4double yDir = newsinTh*std::cos(newPhi);
234 while (shellId != transitionManager->
235 ReachableShell(Z,shellNum)->FinalShellId())
237 if(shellNum == maxNumOfShells-1)
244 size_t transitionSize = transitionManager->
245 ReachableShell(Z,shellNum)->OriginatingShellIds().size();
251 while (provShellId != transitionManager->
252 ReachableShell(Z,shellNum)->OriginatingShellId(index))
254 if(index == transitionSize-1)
261 G4double transitionEnergy = transitionManager->
262 ReachableShell(Z,shellNum)->TransitionEnergy(index);
266 newShellId = transitionManager->
267 ReachableShell(Z,shellNum)->OriginatingShellId(index);
278 if(!fAuger)
return 0;
306 if ( shellId <= refAugerTransition->FinalShellId() )
311 if (shellId != pippo ) {
314 if(shellNum == maxNumOfShells)
332 G4int transitionLoopShellIndex = 0;
340 G4int transitionSize =
342 while (transitionLoopShellIndex < transitionSize) {
344 std::vector<G4int>::const_iterator pos =
347 G4int transitionLoopShellId = *(pos+transitionLoopShellIndex);
348 G4int numberOfPossibleAuger =
350 G4int augerIndex = 0;
354 if (augerIndex < numberOfPossibleAuger) {
359 transitionLoopShellId);
363 }
while (augerIndex < numberOfPossibleAuger);
365 transitionLoopShellIndex++;
393 G4double totalVacancyAugerProbability = partSum;
397 G4int transitionRandomShellIndex = 0;
398 G4int transitionRandomShellId = 1;
399 G4int augerIndex = 0;
404 G4int numberOfPossibleAuger = 0;
408 while (transitionRandomShellIndex < transitionSize) {
410 std::vector<G4int>::const_iterator pos =
413 transitionRandomShellId = *(pos+transitionRandomShellIndex);
416 numberOfPossibleAuger = (anAugerTransition->
417 AugerTransitionProbabilities(transitionRandomShellId))->size();
419 while (augerIndex < numberOfPossibleAuger) {
421 transitionRandomShellId);
425 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
431 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
break;}
432 transitionRandomShellIndex++;
439 if (!foundFlag) {
return 0;}
443 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
446 G4double xDir = newsinTh*std::sin(newPhi);
447 G4double yDir = newsinTh*std::cos(newPhi);
464 newShellId = transitionRandomShellId;
468 newElectronDirection,
483 minGammaEnergy = cut;
488 minElectronEnergy = cut;
G4DLLIMPORT std::ostream G4cout
void ActivateAugerElectronProduction(G4bool val)
void SetCutForSecondaryPhotons(G4double cut)
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
void SetCutForAugerElectrons(G4double cut)
G4int NumberOfReachableShells(G4int Z) const
const G4AugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
const G4FluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
static G4AtomicTransitionManager * Instance()
G4int NumberOfReachableAugerShells(G4int Z) const
G4int FinalShellId() const
const G4DataVector * AugerTransitionProbabilities(G4int startShellId) const
G4double AugerTransitionEnergy(G4int index, G4int startShellId) const
const std::vector< G4int > * TransitionOriginatingShellIds() const
G4double AugerTransitionProbability(G4int index, G4int startShellId) const
static G4Electron * Electron()
const G4DataVector & TransitionProbabilities() const
G4int OriginatingShellId(G4int index) const
G4double TransitionProbability(G4int index) const
G4int FinalShellId() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)