G4EmCaptureCascade Class Reference

#include <G4EmCaptureCascade.hh>

Inheritance diagram for G4EmCaptureCascade:

G4HadronicInteraction

Public Member Functions

 G4EmCaptureCascade ()
 ~G4EmCaptureCascade ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
void ModelDescription (std::ostream &outFile) const

Detailed Description

Definition at line 67 of file G4EmCaptureCascade.hh.


Constructor & Destructor Documentation

G4EmCaptureCascade::G4EmCaptureCascade (  ) 

Definition at line 56 of file G4EmCaptureCascade.cc.

References G4Electron::Electron(), G4Gamma::Gamma(), G4ParticleDefinition::GetPDGMass(), and G4MuonMinus::MuonMinus().

00057   : G4HadronicInteraction("emCaptureCascade")
00058 { 
00059   theElectron = G4Electron::Electron();
00060   theGamma = G4Gamma::Gamma();
00061   fMuMass = G4MuonMinus::MuonMinus()->GetPDGMass();
00062   fTime = 0.0;
00063 
00064   // Calculate the Energy of K Mesoatom Level for this Element using
00065   // the Energy of Hydrogen Atom taken into account finite size of the
00066   // nucleus 
00067   const G4int nlevels = 28;
00068   const G4int listK[nlevels] = {
00069       1, 2,  4,  6,  8, 11, 14, 17, 18, 21, 24,
00070      26, 29, 32, 38, 40, 41, 44, 49, 53, 55,
00071      60, 65, 70, 75, 81, 85, 92};
00072   const G4double listKEnergy[nlevels] = {
00073      0.00275, 0.011, 0.043, 0.098, 0.173, 0.326,
00074      0.524, 0.765, 0.853, 1.146, 1.472,
00075      1.708, 2.081, 2.475, 3.323, 3.627, 
00076      3.779, 4.237, 5.016, 5.647, 5.966,
00077      6.793, 7.602, 8.421, 9.249, 10.222,
00078     10.923,11.984};
00079 
00080   fKLevelEnergy[0] = 0.0;
00081   fKLevelEnergy[1] = listKEnergy[0];
00082   G4int idx = 1;
00083   for(G4int i=1; i<nlevels; ++i) {
00084     G4int z1 = listK[idx];
00085     G4int z2 = listK[i];
00086     if(z1+1 < z2) {
00087       G4double dz = G4double(z2 - z1);
00088       G4double y1 = listKEnergy[idx]/G4double(z1*z1);
00089       G4double y2 = listKEnergy[i]/G4double(z2*z2);
00090       for(G4int z=z1+1; z<z2; ++z) {
00091         fKLevelEnergy[z] = (y1 + (y2 - y1)*(z - z1)/dz)*z*z;
00092       }
00093     }
00094     fKLevelEnergy[z2] = listKEnergy[i];
00095     idx = i;  
00096   }
00097   for( G4int i = 0; i<14; ++i) { fLevelEnergy[i] = 0.0; }
00098 }

G4EmCaptureCascade::~G4EmCaptureCascade (  ) 

Definition at line 102 of file G4EmCaptureCascade.cc.

00103 {}


Member Function Documentation

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

Implements G4HadronicInteraction.

Definition at line 108 of file G4EmCaptureCascade.cc.

References G4HadFinalState::Clear(), G4UniformRand, G4Nucleus::GetA_asInt(), G4HadProjectile::GetGlobalTime(), G4NucleiProperties::GetNuclearMass(), G4Nucleus::GetZ_asInt(), isAlive, G4HadFinalState::SetLocalEnergyDeposit(), and G4HadFinalState::SetStatusChange().

00110 {
00111   result.Clear();
00112   result.SetStatusChange(isAlive);
00113   fTime = projectile.GetGlobalTime();
00114 
00115   G4int Z = targetNucleus.GetZ_asInt(); 
00116   G4int A = targetNucleus.GetA_asInt(); 
00117   G4double massA = G4NucleiProperties::GetNuclearMass(A, Z);
00118   G4double mass = fMuMass * massA / (fMuMass + massA) ;
00119   G4double e = 13.6 * eV * Z * Z * mass/ electron_mass_c2;
00120 
00121   // precise corrections of energy only for K-shell
00122   fLevelEnergy[0] = fKLevelEnergy[Z];
00123   for( G4int i = 2; i < 15; ++i) {
00124     fLevelEnergy[i-1] = e/G4double(i*i);
00125   }
00126 
00127   G4int nElec  = G4int(Z);
00128   G4int nAuger = 1;
00129   G4int nLevel = 13;
00130   G4double pGamma = Z*Z*Z*Z;
00131 
00132   // Capture on 14-th level
00133   G4double edep = fLevelEnergy[13];
00134   AddNewParticle(theElectron,edep);
00135   G4double deltaE;
00136 
00137   // Emit new photon or electron
00138   // Simplified model for probabilities
00139   // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1.
00140   do {
00141 
00142     // case of Auger electrons
00143     if((nAuger < nElec) && ((pGamma + 10000.0) * G4UniformRand() < 10000.0) ) {
00144       ++nAuger;
00145       deltaE =  fLevelEnergy[nLevel-1] -  fLevelEnergy[nLevel];
00146       --nLevel;
00147       AddNewParticle(theElectron, deltaE);
00148 
00149     } else {
00150 
00151       // Case of photon cascade, probabilities from
00152       // C.S.Wu and L.Wilets, Ann. Rev. Nuclear Sci. 19 (1969) 527.
00153 
00154       G4double var = (10.0 + G4double(nLevel - 1) ) * G4UniformRand();
00155       G4int iLevel = nLevel - 1 ;
00156       if(var > 10.0) iLevel -= G4int(var-10.0) + 1;
00157       if( iLevel < 0 ) iLevel = 0;
00158       deltaE =  fLevelEnergy[iLevel] -  fLevelEnergy[nLevel];
00159       nLevel = iLevel;
00160       AddNewParticle(theGamma, deltaE);
00161     }
00162     edep += deltaE;
00163 
00164   } while( nLevel > 0 );
00165 
00166   result.SetLocalEnergyDeposit(edep);
00167   return &result;
00168 }

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

Reimplemented from G4HadronicInteraction.

Definition at line 172 of file G4EmCaptureCascade.cc.

00173 {
00174   outFile << "Simulation of electromagnetic cascade from capture level"
00175           << " to K-shell of the mesonic atom\n."
00176           << "Probabilities of gamma and Auger transitions from\n"
00177           << "  N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.\n";
00178 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:52 2013 for Geant4 by  doxygen 1.4.7