Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmCaptureCascade Class Reference

#include <G4EmCaptureCascade.hh>

Inheritance diagram for G4EmCaptureCascade:

Public Member Functions

 G4EmCaptureCascade ()
virtual ~G4EmCaptureCascade ()
virtual G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual void ModelDescription (std::ostream &outFile) const
Public Member Functions inherited from G4HadronicInteraction
 G4HadronicInteraction (const G4String &modelName="HadronicModel")
virtual ~G4HadronicInteraction ()
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4double GetMinEnergy () const
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
void SetMinEnergy (G4double anEnergy)
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
G4double GetMaxEnergy () const
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
void SetMaxEnergy (const G4double anEnergy)
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
G4int GetVerboseLevel () const
void SetVerboseLevel (G4int value)
const G4StringGetModelName () const
void DeActivateFor (const G4Material *aMaterial)
void ActivateFor (const G4Material *aMaterial)
void DeActivateFor (const G4Element *anElement)
void ActivateFor (const G4Element *anElement)
G4bool IsBlocked (const G4Material *aMaterial) const
G4bool IsBlocked (const G4Element *anElement) const
void SetRecoilEnergyThreshold (G4double val)
G4double GetRecoilEnergyThreshold () const
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
virtual void InitialiseModel ()
 G4HadronicInteraction (const G4HadronicInteraction &right)=delete
const G4HadronicInteractionoperator= (const G4HadronicInteraction &right)=delete
G4bool operator== (const G4HadronicInteraction &right) const =delete
G4bool operator!= (const G4HadronicInteraction &right) const =delete

Additional Inherited Members

Protected Member Functions inherited from G4HadronicInteraction
void SetModelName (const G4String &nam)
G4bool IsBlocked () const
void Block ()
Protected Attributes inherited from G4HadronicInteraction
G4HadFinalState theParticleChange
G4int verboseLevel
G4double theMinEnergy
G4double theMaxEnergy
G4bool isBlocked

Detailed Description

Definition at line 66 of file G4EmCaptureCascade.hh.

Constructor & Destructor Documentation

◆ G4EmCaptureCascade()

G4EmCaptureCascade::G4EmCaptureCascade ( )
explicit

Definition at line 55 of file G4EmCaptureCascade.cc.

56 : G4HadronicInteraction("emCaptureCascade")
57{
58 theElectron = G4Electron::Electron();
59 theGamma = G4Gamma::Gamma();
61 fTime = 0.0;
62
63 // Calculate the Energy of K Mesoatom Level for this Element using
64 // the Energy of Hydrogen Atom taken into account finite size of the
65 // nucleus
66 static const G4int nlevels = 28;
67 static const G4int listK[nlevels] = {
68 1, 2, 4, 6, 8, 11, 14, 17, 18, 21, 24,
69 26, 29, 32, 38, 40, 41, 44, 49, 53, 55,
70 60, 65, 70, 75, 81, 85, 92};
71 static const G4double listKEnergy[nlevels] = {
72 0.00275, 0.011, 0.043, 0.098, 0.173, 0.326,
73 0.524, 0.765, 0.853, 1.146, 1.472,
74 1.708, 2.081, 2.475, 3.323, 3.627,
75 3.779, 4.237, 5.016, 5.647, 5.966,
76 6.793, 7.602, 8.421, 9.249, 10.222,
77 10.923,11.984};
78
79 fKLevelEnergy[0] = 0.0;
80 fKLevelEnergy[1] = listKEnergy[0];
81 G4int idx = 1;
82 for(G4int i=1; i<nlevels; ++i) {
83 G4int z1 = listK[idx];
84 G4int z2 = listK[i];
85 if(z1+1 < z2) {
86 G4double dz = G4double(z2 - z1);
87 G4double y1 = listKEnergy[idx]/G4double(z1*z1);
88 G4double y2 = listKEnergy[i]/G4double(z2*z2);
89 for(G4int z=z1+1; z<z2; ++z) {
90 fKLevelEnergy[z] = (y1 + (y2 - y1)*(z - z1)/dz)*z*z;
91 }
92 }
93 fKLevelEnergy[z2] = listKEnergy[i];
94 idx = i;
95 }
96 for(G4int i = 0; i<14; ++i) { fLevelEnergy[i] = 0.0; }
97}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
static G4Electron * Electron()
Definition G4Electron.cc:91
static G4Gamma * Gamma()
Definition G4Gamma.cc:81
G4HadronicInteraction(const G4String &modelName="HadronicModel")
static G4MuonMinus * MuonMinus()

◆ ~G4EmCaptureCascade()

G4EmCaptureCascade::~G4EmCaptureCascade ( )
virtual

Definition at line 101 of file G4EmCaptureCascade.cc.

102{}

Member Function Documentation

◆ ApplyYourself()

G4HadFinalState * G4EmCaptureCascade::ApplyYourself ( const G4HadProjectile & aTrack,
G4Nucleus & targetNucleus )
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 107 of file G4EmCaptureCascade.cc.

109{
110 result.Clear();
111 result.SetStatusChange(isAlive);
112 fTime = projectile.GetGlobalTime();
113
114 G4int Z = targetNucleus.GetZ_asInt();
115 G4int A = targetNucleus.GetA_asInt();
117 G4double mass = fMuMass * massA / (fMuMass + massA) ;
118 G4double e = 13.6 * eV * (Z * Z) * mass/ electron_mass_c2;
119
120 // precise corrections of energy only for K-shell
121 fLevelEnergy[0] = fKLevelEnergy[std::min(Z, 92)];
122 for(G4int i=1; i<14; ++i) {
123 fLevelEnergy[i] = e/(G4double)((i+1)*(i+1));
124 }
125
126 G4int nElec = Z;
127 G4int nAuger = 1;
128 G4int nLevel = 13;
129 G4double pGamma = (Z*Z*Z*Z);
130
131 // Capture on 14-th level
132 G4double edep = fLevelEnergy[13];
133 AddNewParticle(theElectron,edep);
134 G4double deltaE;
135
136 // Emit new photon or electron
137 // Simplified model for probabilities
138 // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1.
139 do {
140
141 // case of Auger electrons
142 if((nAuger < nElec) && ((pGamma + 10000.0) * G4UniformRand() < 10000.0) ) {
143 ++nAuger;
144 deltaE = fLevelEnergy[nLevel-1] - fLevelEnergy[nLevel];
145 --nLevel;
146 AddNewParticle(theElectron, deltaE);
147
148 } else {
149
150 // Case of photon cascade, probabilities from
151 // C.S.Wu and L.Wilets, Ann. Rev. Nuclear Sci. 19 (1969) 527.
152
153 G4double var = (10.0 + G4double(nLevel - 1) ) * G4UniformRand();
154 G4int iLevel = nLevel - 1 ;
155 if(var > 10.0) iLevel -= G4int(var-10.0) + 1;
156 if( iLevel < 0 ) iLevel = 0;
157 deltaE = fLevelEnergy[iLevel] - fLevelEnergy[nLevel];
158 nLevel = iLevel;
159 AddNewParticle(theGamma, deltaE);
160 }
161 edep += deltaE;
162
163 // Loop checking, 06-Aug-2015, Vladimir Ivanchenko
164 } while( nLevel > 0 );
165
166 result.SetLocalEnergyDeposit(edep);
167 return &result;
168}
@ isAlive
const G4double A[17]
#define G4UniformRand()
Definition Randomize.hh:52
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4int GetA_asInt() const
Definition G4Nucleus.hh:78
G4int GetZ_asInt() const
Definition G4Nucleus.hh:84

◆ ModelDescription()

void G4EmCaptureCascade::ModelDescription ( std::ostream & outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 172 of file G4EmCaptureCascade.cc.

173{
174 outFile << "Simulation of electromagnetic cascade from capture level"
175 << " to K-shell of the mesonic atom\n."
176 << "Probabilities of gamma and Auger transitions from\n"
177 << " N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.\n";
178}

The documentation for this class was generated from the following files: