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;
95 else if ( provShellId == -1)
101 G4Exception(
"G4AtomicDeexcitation::Constructor",
"de0002",
JustWarning,
"Transition selection invalid, energy local deposited");
113 else if ( provShellId == -1)
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;
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 size_t transitionSize = 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);
259 ReachableShell(
Z,shellNum)->OriginatingShellId(index);
289 if ( shellId <= refAugerTransition->FinalShellId() )
294 if (shellId != pippo ) {
297 if(shellNum == maxNumOfShells)
307 G4int transitionLoopShellIndex = 0;
312 G4int transitionSize =
314 while (transitionLoopShellIndex < transitionSize) {
316 std::vector<G4int>::const_iterator
pos =
319 G4int transitionLoopShellId = *(
pos+transitionLoopShellIndex);
320 G4int numberOfPossibleAuger =
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 = (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);
411 newElectronDirection,
static const G4double pos
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
static constexpr double twopi
static constexpr double eV
G4GLOB_DLL std::ostream G4cout
G4DynamicParticle * GenerateFluorescence(G4int Z, G4int shellId, G4int provShellId)
Generates a particle from a radiative transition and returns it.
void ActivateAugerElectronProduction(G4bool val)
Set threshold energy for Auger electron production.
void SetCutForSecondaryPhotons(G4double cut)
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
G4int SelectTypeOfTransition(G4int Z, G4int shellId)
Activate Auger electron production.
G4AtomicDeexcitation()
constructor
G4double minElectronEnergy
G4DynamicParticle * GenerateAuger(G4int Z, G4int shellId)
Generates a particle from a non-radiative transition and returns it.
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.