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 !=
nullptr) {vectorOfParticles->push_back(aParticle);}
124 else {provShellId = -2;}
128 while (provShellId > -2);
135 return vectorOfParticles;
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)
213 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
216 G4double xDir = newsinTh*std::sin(newPhi);
217 G4double yDir = newsinTh*std::cos(newPhi);
226 while (shellId != transitionManager->
227 ReachableShell(
Z,shellNum)->FinalShellId())
229 if(shellNum == maxNumOfShells-1)
236 G4int transitionSize = (
G4int)transitionManager->
237 ReachableShell(
Z,shellNum)->OriginatingShellIds().size();
243 while (provShellId != transitionManager->
244 ReachableShell(
Z,shellNum)->OriginatingShellId(index))
246 if(index == transitionSize-1)
253 G4double transitionEnergy = transitionManager->
254 ReachableShell(
Z,shellNum)->TransitionEnergy(index);
258 newShellId = transitionManager->
259 ReachableShell(
Z,shellNum)->OriginatingShellId(index);
269 if(!fAuger)
return 0;
289 if ( shellId <= refAugerTransition->FinalShellId() )
294 if (shellId != pippo ) {
297 if(shellNum == maxNumOfShells)
307 G4int transitionLoopShellIndex = 0;
314 while (transitionLoopShellIndex < transitionSize) {
316 std::vector<G4int>::const_iterator
pos =
319 G4int transitionLoopShellId = *(
pos+transitionLoopShellIndex);
322 G4int augerIndex = 0;
324 if (augerIndex < numberOfPossibleAuger) {
328 transitionLoopShellId);
332 }
while (augerIndex < numberOfPossibleAuger);
334 transitionLoopShellIndex++;
340 G4double totalVacancyAugerProbability = partSum;
343 G4int transitionRandomShellIndex = 0;
344 G4int transitionRandomShellId = 1;
345 G4int augerIndex = 0;
350 G4int numberOfPossibleAuger = 0;
354 while (transitionRandomShellIndex < transitionSize) {
355 std::vector<G4int>::const_iterator
pos =
358 transitionRandomShellId = *(
pos+transitionRandomShellIndex);
361 numberOfPossibleAuger = (
G4int)(anAugerTransition->
362 AugerTransitionProbabilities(transitionRandomShellId))->size();
364 while (augerIndex < numberOfPossibleAuger) {
366 transitionRandomShellId);
370 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
376 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
break;}
377 transitionRandomShellIndex++;
384 if (!foundFlag) {
return 0;}
388 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
391 G4double xDir = newsinTh*std::sin(newPhi);
392 G4double yDir = newsinTh*std::cos(newPhi);
408 newShellId = transitionRandomShellId;
411 newElectronDirection,
424 minGammaEnergy = cut;
429 minElectronEnergy = cut;
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4GLOB_DLL std::ostream G4cout
void ActivateAugerElectronProduction(G4bool val)
Set threshold energy for Auger electron production.
void SetCutForSecondaryPhotons(G4double cut)
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
G4AtomicDeexcitation()
constructor
void SetCutForAugerElectrons(G4double cut)
Set threshold energy for fluorescence.
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
returns the id of the shell in wich the transition electron arrives
const G4DataVector * AugerTransitionProbabilities(G4int startShellId) const
G4double AugerTransitionEnergy(G4int index, G4int startShellId) const
const std::vector< G4int > * TransitionOriginatingShellIds() const
Returns the ids of the shells from wich an electron cuuld fill the vacancy in finalShellId.
G4double AugerTransitionProbability(G4int index, G4int startShellId) const
static G4Electron * Electron()
const G4DataVector & TransitionProbabilities() const
Return the probabilities of the transitions.
G4int OriginatingShellId(G4int index) const
Given the index of the originating shells returns its identity.
G4double TransitionProbability(G4int index) const
G4int FinalShellId() const
Return the identity if the vacancy.