103 G4cout <<
"### === G4UAtomicDeexcitation::InitialiseForNewRun()" <<
G4endl;
130 G4cout <<
"### G4UAtomicDeexcitation::InitialiseForNewRun WARNING "
133 <<
" is unknown, Analytical cross section will be used" <<
G4endl;
184 G4cout <<
"### G4UAtomicDeexcitation::InitialiseForNewRun WARNING "
187 <<
" is unknown, PIXE is disabled" <<
G4endl;
235 std::vector<G4DynamicParticle*>* vectorOfParticles,
254 G4int provShellId = 0;
279 else if ( provShellId == -1)
287 G4Exception(
"G4UAtomicDeexcitation::GenerateParticles()",
301 else if ( provShellId == -1)
309 G4Exception(
"G4UAtomicDeexcitation::GenerateParticles()",
"de0002",
JustWarning,
"Energy deposited locally");
315 vectorOfParticles->push_back(aParticle);
318 else {provShellId = -2;}
320 while (provShellId > -2);
324 G4Exception(
"G4UAtomicDeexcitation::GenerateParticles()",
"de0001",
JustWarning,
"Energy deposited locally");
345 if(Z > 93 || Z < 6 ) {
return xsec; }
362 mass = proton_mass_c2;
363 escaled = kineticEnergy*mass/(pdef->
GetPDGMass());
380 if (q2) {xsec *= q2;}
409 G4Exception(
"G4UAtomicDeexcitation::SelecttypeOfTransition()",
"de0002",
JustWarning,
"Energy deposited locally");
414 G4int provShellId = -1;
423 if ( shellId <= refShell->FinalShellId())
427 if(shellNum ==maxNumOfShells-1)
448 while(transProb < trSize){
452 if(partialProb <= partSum)
484 G4Exception(
"G4UAtomicDeexcitation::GenerateFluorescence()",
"de0002",
JustWarning,
"Energy deposited locally");
491 G4double newsinTh = std::sqrt((1.-newcosTh)*(1. + newcosTh));
494 G4double xDir = newsinTh*std::sin(newPhi);
495 G4double yDir = newsinTh*std::cos(newPhi);
505 ReachableShell(Z,shellNum)->FinalShellId())
507 if(shellNum == maxNumOfShells-1)
515 ReachableShell(Z,shellNum)->OriginatingShellIds().size();
522 ReachableShell(Z,shellNum)->OriginatingShellId(index))
524 if(index == transitionSize-1)
532 ReachableShell(Z,shellNum)->TransitionEnergy(index);
539 ReachableShell(Z,shellNum)->OriginatingShellId(index);
576 if ( shellId <= refAugerTransition->FinalShellId() )
581 if (shellId != pippo ) {
584 if(shellNum == maxNumOfShells)
601 G4int transitionLoopShellIndex = 0;
609 G4int transitionSize =
611 while (transitionLoopShellIndex < transitionSize) {
613 std::vector<G4int>::const_iterator
pos =
616 G4int transitionLoopShellId = *(pos+transitionLoopShellIndex);
617 G4int numberOfPossibleAuger =
619 G4int augerIndex = 0;
623 if (augerIndex < numberOfPossibleAuger) {
628 transitionLoopShellId);
632 }
while (augerIndex < numberOfPossibleAuger);
634 transitionLoopShellIndex++;
662 G4double totalVacancyAugerProbability = partSum;
666 G4int transitionRandomShellIndex = 0;
667 G4int transitionRandomShellId = 1;
668 G4int augerIndex = 0;
673 G4int numberOfPossibleAuger = 0;
677 while (transitionRandomShellIndex < transitionSize) {
679 std::vector<G4int>::const_iterator
pos =
682 transitionRandomShellId = *(pos+transitionRandomShellIndex);
685 numberOfPossibleAuger = (anAugerTransition->
686 AugerTransitionProbabilities(transitionRandomShellId))->size();
688 while (augerIndex < numberOfPossibleAuger) {
690 transitionRandomShellId);
694 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
700 if (partSum >= (partialProb*totalVacancyAugerProbability) ) {
break;}
701 transitionRandomShellIndex++;
716 G4double newsinTh = std::sqrt(1.-newcosTh*newcosTh);
719 G4double xDir = newsinTh*std::sin(newPhi);
720 G4double yDir = newsinTh*std::cos(newPhi);
747 newElectronDirection,
G4double AugerTransitionProbability(G4int index, G4int startShellId) const
void SetPIXEElectronCrossSectionModel(const G4String &)
static G4LossTableManager * Instance()
G4bool IsFluoActive() const
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=0)
CLHEP::Hep3Vector G4ThreeVector
G4DynamicParticle * GenerateAuger(G4int Z, G4int shellId)
G4bool IsPIXEActive() const
const G4AugerTransition * ReachableAugerShell(G4int Z, G4int shellIndex) const
G4double EffectiveChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4int NumberOfReachableShells(G4int Z) const
virtual void InitialiseForExtraAtom(G4int Z)
const G4String & GetName() const
G4double AugerTransitionEnergy(G4int index, G4int startShellId) const
void SetPIXECrossSectionModel(const G4String &)
G4VhShellCrossSection * ePIXEshellCS
const G4DataVector & TransitionProbabilities() const
virtual G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=0)
G4VhShellCrossSection * PIXEshellCS
const G4String & GetParticleName() const
G4bool IsAugerActive() const
G4AtomicTransitionManager * transitionManager
G4int FinalShellId() const
G4int OriginatingShellId(G4int index) const
const G4String & PIXEElectronCrossSectionModel() const
virtual void InitialiseForNewRun()
void SetCutForSecondaryPhotons(G4double cut)
G4GLOB_DLL std::ostream G4cout
void SetCutForAugerElectrons(G4double cut)
G4EmCorrections * EmCorrections()
G4VhShellCrossSection * anaPIXEshellCS
G4int NumberOfReachableAugerShells(G4int Z) const
G4double minElectronEnergy
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)
static G4Positron * Positron()
G4double GetPDGMass() const
G4double TransitionProbability(G4int index) const
G4int SelectTypeOfTransition(G4int Z, G4int shellId)
const G4FluoTransition * ReachableShell(G4int Z, size_t shellIndex) const
const G4ParticleDefinition * thePositron
static G4Electron * Electron()
const std::vector< G4int > * TransitionOriginatingShellIds() const
G4DynamicParticle * GenerateFluorescence(G4int Z, G4int shellId, G4int provShellId)
const G4String & PIXECrossSectionModel() const
virtual void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4double gammaCut, G4double eCut)
static const double eplus
virtual ~G4UAtomicDeexcitation()
const G4ParticleDefinition * theElectron
const G4DataVector * AugerTransitionProbabilities(G4int startShellId) const
G4double GetPDGCharge() const
G4int FinalShellId() const
static G4AtomicTransitionManager * Instance()
virtual G4double CrossSection(G4int Z, G4AtomicShellEnumerator shell, G4double incidentEnergy, G4double mass, const G4Material *mat)=0
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
static const G4double pos
static G4int GetNumberOfShells(G4int Z)