#include <G4MuMinusCaptureCascade.hh>
Public Member Functions | |
G4MuMinusCaptureCascade () | |
~G4MuMinusCaptureCascade () | |
G4int | DoCascade (const G4double Z, const G4double A, G4GHEKinematicsVector *Cascade) |
void | DoBoundMuonMinusDecay (G4double Z, G4int *nCascade, G4GHEKinematicsVector *Cascade) |
G4double | GetKShellEnergy (G4double Z) |
G4ThreeVector & | GetRandomVec () |
Definition at line 48 of file G4MuMinusCaptureCascade.hh.
G4MuMinusCaptureCascade::G4MuMinusCaptureCascade | ( | ) |
Definition at line 55 of file G4MuMinusCaptureCascade.cc.
References G4Electron::Electron(), G4Gamma::Gamma(), G4ParticleDefinition::GetPDGMass(), and G4MuonMinus::MuonMinus().
00056 { 00057 theElectron = G4Electron::Electron(); 00058 theGamma = G4Gamma::Gamma(); 00059 Emass = theElectron->GetPDGMass(); 00060 MuMass = G4MuonMinus::MuonMinus()->GetPDGMass(); 00061 }
G4MuMinusCaptureCascade::~G4MuMinusCaptureCascade | ( | ) |
void G4MuMinusCaptureCascade::DoBoundMuonMinusDecay | ( | G4double | Z, | |
G4int * | nCascade, | |||
G4GHEKinematicsVector * | Cascade | |||
) |
Definition at line 181 of file G4MuMinusCaptureCascade.cc.
References G4AntiNeutrinoE::AntiNeutrinoE(), G4UniformRand, GetKShellEnergy(), GetRandomVec(), and G4NeutrinoMu::NeutrinoMu().
Referenced by G4MuonMinusCaptureAtRest::AtRestDoIt().
00184 { 00185 // Simulation on Decay of mu- on a K-shell of the muonic atom 00186 G4double xmax = ( 1.0 + Emass*Emass/ (MuMass*MuMass) ); 00187 G4double xmin = 2.0*Emass/MuMass; 00188 G4double KEnergy = GetKShellEnergy(Z); 00189 /* 00190 G4cout << "G4MuMinusCaptureCascade::DoBoundMuonMinusDecay" 00191 << " XMAX= " << xmax 00192 << " Ebound= " << KEnergy 00193 << G4endl; 00194 */ 00195 G4double pmu = std::sqrt(KEnergy*(KEnergy + 2.0*MuMass)); 00196 G4double emu = KEnergy + MuMass; 00197 G4ThreeVector moment = GetRandomVec(); 00198 G4LorentzVector MU(pmu*moment,emu); 00199 G4ThreeVector bst = MU.boostVector(); 00200 00201 G4double Eelect, Pelect, x, ecm; 00202 G4LorentzVector EL, NN; 00203 // Calculate electron energy 00204 do { 00205 do { 00206 x = xmin + (xmax-xmin)*G4UniformRand(); 00207 } while (G4UniformRand() > (3.0 - 2.0*x)*x*x ); 00208 Eelect = x*MuMass*0.5; 00209 Pelect = 0.0; 00210 if(Eelect > Emass) { 00211 Pelect = std::sqrt( Eelect*Eelect - Emass*Emass ); 00212 } else { 00213 Pelect = 0.0; 00214 Eelect = Emass; 00215 } 00216 G4ThreeVector e_mom = GetRandomVec(); 00217 EL = G4LorentzVector(Pelect*e_mom,Eelect); 00218 EL.boost(bst); 00219 Eelect = EL.e() - Emass - 2.0*KEnergy; 00220 // 00221 // Calculate rest frame parameters of 2 neutrinos 00222 // 00223 NN = MU - EL; 00224 ecm = NN.mag2(); 00225 } while (Eelect < 0.0 || ecm < 0.0); 00226 00227 // 00228 // Create electron 00229 // 00230 moment = std::sqrt(Eelect * (Eelect + 2.0*Emass))*(EL.vect().unit()); 00231 AddNewParticle(theElectron, moment, Emass, nCascade, Cascade); 00232 // 00233 // Create Neutrinos 00234 // 00235 ecm = 0.5*std::sqrt(ecm); 00236 bst = NN.boostVector(); 00237 G4ThreeVector p1 = ecm * GetRandomVec(); 00238 G4LorentzVector N1 = G4LorentzVector(p1,ecm); 00239 N1.boost(bst); 00240 G4ThreeVector p1lab = N1.vect(); 00241 AddNewParticle(G4AntiNeutrinoE::AntiNeutrinoE(),p1lab,0.0,nCascade,Cascade); 00242 NN -= N1; 00243 G4ThreeVector p2lab = NN.vect(); 00244 AddNewParticle(G4NeutrinoMu::NeutrinoMu(),p2lab,0.0,nCascade,Cascade); 00245 00246 return; 00247 }
G4int G4MuMinusCaptureCascade::DoCascade | ( | const G4double | Z, | |
const G4double | A, | |||
G4GHEKinematicsVector * | Cascade | |||
) |
Definition at line 114 of file G4MuMinusCaptureCascade.cc.
References G4UniformRand, GetKShellEnergy(), and GetRandomVec().
Referenced by G4MuonMinusCaptureAtRest::AtRestDoIt().
00116 { 00117 // Inicialization - cascade start from 14th level 00118 // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1. 00119 G4int nPart = 0; 00120 G4double EnergyLevel[14]; 00121 00122 G4double mass = MuMass * massA / (MuMass + massA) ; 00123 00124 const G4double KEnergy = 13.6 * eV * Z * Z * mass/ electron_mass_c2; 00125 00126 EnergyLevel[0] = GetKShellEnergy(Z); 00127 for( G4int i = 2; i < 15; i++ ) { 00128 EnergyLevel[i-1] = KEnergy / (i*i) ; 00129 } 00130 00131 G4int nElec = G4int(Z); 00132 G4int nAuger = 1; 00133 G4int nLevel = 13; 00134 G4double DeltaE; 00135 G4double pGamma = Z*Z*Z*Z; 00136 00137 // Capture on 14-th level 00138 G4double ptot = std::sqrt(EnergyLevel[13]*(EnergyLevel[13] + 2.0*Emass)); 00139 G4ThreeVector moment = ptot * GetRandomVec(); 00140 00141 AddNewParticle(theElectron,moment,Emass,&nPart,Cascade); 00142 00143 // Emit new photon or electron 00144 // Simplified model for probabilities 00145 // N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1. 00146 do { 00147 00148 // case of Auger electrons 00149 if((nAuger < nElec) && ((pGamma + 10000.0) * G4UniformRand() < 10000.0) ) { 00150 nAuger++; 00151 DeltaE = EnergyLevel[nLevel-1] - EnergyLevel[nLevel]; 00152 nLevel--; 00153 00154 ptot = std::sqrt(DeltaE * (DeltaE + 2.0*Emass)); 00155 moment = ptot * GetRandomVec(); 00156 00157 AddNewParticle(theElectron, moment, Emass, &nPart, Cascade); 00158 00159 } else { 00160 00161 // Case of photon cascade, probabilities from 00162 // C.S.Wu and L.Wilets, Ann. Rev. Nuclear Sci. 19 (1969) 527. 00163 00164 G4double var = (10.0 + G4double(nLevel - 1) ) * G4UniformRand(); 00165 G4int iLevel = nLevel - 1 ; 00166 if(var > 10.0) iLevel -= G4int(var-10.0) + 1; 00167 if( iLevel < 0 ) iLevel = 0; 00168 DeltaE = EnergyLevel[iLevel] - EnergyLevel[nLevel]; 00169 nLevel = iLevel; 00170 moment = DeltaE * GetRandomVec(); 00171 AddNewParticle(theGamma, moment, 0.0, &nPart, Cascade); 00172 } 00173 00174 } while( nLevel > 0 ); 00175 00176 return nPart; 00177 }
Definition at line 70 of file G4MuMinusCaptureCascade.cc.
Referenced by DoBoundMuonMinusDecay(), and DoCascade().
00071 { 00072 // Calculate the Energy of K Mesoatom Level for this Element using 00073 // the Energy of Hydrogen Atom taken into account finite size of the 00074 // nucleus (V.Ivanchenko) 00075 const G4int ListK = 28; 00076 static G4double ListZK[ListK] = { 00077 1., 2., 4., 6., 8., 11., 14., 17., 18., 21., 24., 00078 26., 29., 32., 38., 40., 41., 44., 49., 53., 55., 00079 60., 65., 70., 75., 81., 85., 92.}; 00080 static G4double ListKEnergy[ListK] = { 00081 0.00275, 0.011, 0.043, 0.098, 0.173, 0.326, 00082 0.524, 0.765, 0.853, 1.146, 1.472, 00083 1.708, 2.081, 2.475, 3.323, 3.627, 00084 3.779, 4.237, 5.016, 5.647, 5.966, 00085 6.793, 7.602, 8.421, 9.249, 10.222, 00086 10.923,11.984}; 00087 00088 // Energy with finit size corrections 00089 G4double KEnergy = GetLinApprox(ListK,ListZK,ListKEnergy,Z); 00090 00091 return KEnergy; 00092 }
G4ThreeVector & G4MuMinusCaptureCascade::GetRandomVec | ( | ) | [inline] |
Definition at line 111 of file G4MuMinusCaptureCascade.hh.
References G4UniformRand.
Referenced by DoBoundMuonMinusDecay(), and DoCascade().
00112 { 00113 // 00114 // generate uniform vector 00115 // 00116 G4double cost = 2.0 * G4UniformRand() - 1.0; 00117 G4double sint = std::sqrt((1.0 - cost)*(1.0 + cost)); 00118 G4double Phi = CLHEP::twopi * G4UniformRand(); 00119 randomVect = G4ThreeVector(sint * std::cos(Phi), sint * std::sin(Phi), cost); 00120 return randomVect; 00121 }