#include <G4Nucleus.hh>
Inheritance diagram for G4Nucleus:
Definition at line 50 of file G4Nucleus.hh.
G4Nucleus::G4Nucleus | ( | ) |
Definition at line 49 of file G4Nucleus.cc.
00050 : theA(0), theZ(0), aEff(0.0), zEff(0) 00051 { 00052 pnBlackTrackEnergy = 0.0; 00053 dtaBlackTrackEnergy = 0.0; 00054 pnBlackTrackEnergyfromAnnihilation = 0.0; 00055 dtaBlackTrackEnergyfromAnnihilation = 0.0; 00056 excitationEnergy = 0.0; 00057 momentum = G4ThreeVector(0.,0.,0.); 00058 fermiMomentum = 1.52*hbarc/fermi; 00059 theTemp = 293.16*kelvin; 00060 fIsotope = 0; 00061 }
Definition at line 63 of file G4Nucleus.cc.
References SetParameters().
00064 { 00065 SetParameters( A, Z ); 00066 pnBlackTrackEnergy = 0.0; 00067 dtaBlackTrackEnergy = 0.0; 00068 pnBlackTrackEnergyfromAnnihilation = 0.0; 00069 dtaBlackTrackEnergyfromAnnihilation = 0.0; 00070 excitationEnergy = 0.0; 00071 momentum = G4ThreeVector(0.,0.,0.); 00072 fermiMomentum = 1.52*hbarc/fermi; 00073 theTemp = 293.16*kelvin; 00074 fIsotope = 0; 00075 }
Definition at line 77 of file G4Nucleus.cc.
References SetParameters().
00078 { 00079 SetParameters( A, Z ); 00080 pnBlackTrackEnergy = 0.0; 00081 dtaBlackTrackEnergy = 0.0; 00082 pnBlackTrackEnergyfromAnnihilation = 0.0; 00083 dtaBlackTrackEnergyfromAnnihilation = 0.0; 00084 excitationEnergy = 0.0; 00085 momentum = G4ThreeVector(0.,0.,0.); 00086 fermiMomentum = 1.52*hbarc/fermi; 00087 theTemp = 293.16*kelvin; 00088 fIsotope = 0; 00089 }
G4Nucleus::G4Nucleus | ( | const G4Material * | aMaterial | ) |
Definition at line 91 of file G4Nucleus.cc.
References ChooseParameters(), and G4Material::GetTemperature().
00092 { 00093 ChooseParameters( aMaterial ); 00094 pnBlackTrackEnergy = 0.0; 00095 dtaBlackTrackEnergy = 0.0; 00096 pnBlackTrackEnergyfromAnnihilation = 0.0; 00097 dtaBlackTrackEnergyfromAnnihilation = 0.0; 00098 excitationEnergy = 0.0; 00099 momentum = G4ThreeVector(0.,0.,0.); 00100 fermiMomentum = 1.52*hbarc/fermi; 00101 theTemp = aMaterial->GetTemperature(); 00102 fIsotope = 0; 00103 }
G4Nucleus::~G4Nucleus | ( | ) |
G4Nucleus::G4Nucleus | ( | const G4Nucleus & | right | ) | [inline] |
void G4Nucleus::AddExcitationEnergy | ( | G4double | anEnergy | ) |
void G4Nucleus::AddMomentum | ( | const G4ThreeVector | aMomentum | ) |
Definition at line 323 of file G4Nucleus.cc.
References G4UniformRand.
Referenced by G4RPGInelastic::CalculateMomenta(), and G4InelasticInteraction::CalculateMomenta().
00324 { 00325 // Nuclear evaporation as a function of atomic number and kinetic 00326 // energy (MeV) of primary particle. Modified for annihilation effects. 00327 // 00328 if( aEff < 1.5 || ekOrg < 0.) 00329 { 00330 pnBlackTrackEnergyfromAnnihilation = 0.0; 00331 dtaBlackTrackEnergyfromAnnihilation = 0.0; 00332 return 0.0; 00333 } 00334 G4double ek = kineticEnergy/GeV; 00335 G4float ekin = std::min( 4.0, std::max( 0.1, ek ) ); 00336 const G4float atno = std::min( 120., aEff ); 00337 const G4float gfa = 2.0*((aEff-1.0)/70.)*std::exp(-(aEff-1.0)/70.); 00338 00339 G4float cfa = std::max( 0.15, 0.35 + ((0.35-0.05)/2.3)*std::log(ekin) ); 00340 G4float exnu = 7.716 * cfa * std::exp(-cfa) 00341 * ((atno-1.0)/120.)*std::exp(-(atno-1.0)/120.); 00342 G4float fpdiv = std::max( 0.5, 1.0-0.25*ekin*ekin ); 00343 00344 pnBlackTrackEnergyfromAnnihilation = exnu*fpdiv; 00345 dtaBlackTrackEnergyfromAnnihilation = exnu*(1.0-fpdiv); 00346 00347 G4double ran1 = -6.0; 00348 G4double ran2 = -6.0; 00349 for( G4int i=0; i<12; ++i ) { 00350 ran1 += G4UniformRand(); 00351 ran2 += G4UniformRand(); 00352 } 00353 pnBlackTrackEnergyfromAnnihilation *= 1.0 + ran1*gfa; 00354 dtaBlackTrackEnergyfromAnnihilation *= 1.0 + ran2*gfa; 00355 00356 pnBlackTrackEnergyfromAnnihilation = std::max( 0.0, pnBlackTrackEnergyfromAnnihilation); 00357 dtaBlackTrackEnergyfromAnnihilation = std::max( 0.0, dtaBlackTrackEnergyfromAnnihilation); 00358 G4double blackSum = pnBlackTrackEnergyfromAnnihilation+dtaBlackTrackEnergyfromAnnihilation; 00359 if (blackSum >= ekOrg/GeV) { 00360 pnBlackTrackEnergyfromAnnihilation *= ekOrg/GeV/blackSum; 00361 dtaBlackTrackEnergyfromAnnihilation *= ekOrg/GeV/blackSum; 00362 } 00363 00364 return (pnBlackTrackEnergyfromAnnihilation+dtaBlackTrackEnergyfromAnnihilation)*GeV; 00365 }
Definition at line 247 of file G4Nucleus.cc.
References G4NucleiProperties::GetNuclearMass().
00248 { 00249 // Now returns (atomic mass - electron masses) 00250 return G4NucleiProperties::GetNuclearMass(A, Z); 00251 }
Definition at line 240 of file G4Nucleus.cc.
References G4NucleiProperties::GetNuclearMass().
Referenced by G4WilsonAbrasionModel::ApplyYourself(), G4LETritonInelastic::ApplyYourself(), G4LEDeuteronInelastic::ApplyYourself(), and G4LEAlphaInelastic::ApplyYourself().
00241 { 00242 // Now returns (atomic mass - electron masses) 00243 return G4NucleiProperties::GetNuclearMass(A, Z); 00244 }
void G4Nucleus::ChooseParameters | ( | const G4Material * | aMaterial | ) |
Definition at line 158 of file G4Nucleus.cc.
References G4UniformRand, G4Material::GetElementVector(), G4Element::GetIsotope(), G4Element::GetN(), G4Isotope::GetN(), G4Material::GetNumberOfElements(), G4Element::GetNumberOfIsotopes(), G4Element::GetRelativeAbundanceVector(), G4Material::GetTotNbOfAtomsPerVolume(), G4Material::GetVecNbOfAtomsPerVolume(), G4Element::GetZ(), and G4Isotope::GetZ().
Referenced by G4Nucleus().
00159 { 00160 G4double random = G4UniformRand(); 00161 G4double sum = aMaterial->GetTotNbOfAtomsPerVolume(); 00162 const G4ElementVector* theElementVector = aMaterial->GetElementVector(); 00163 G4double running(0); 00164 // G4Element* element(0); 00165 G4Element* element = (*theElementVector)[aMaterial->GetNumberOfElements()-1]; 00166 00167 for (unsigned int i = 0; i < aMaterial->GetNumberOfElements(); ++i) { 00168 running += aMaterial->GetVecNbOfAtomsPerVolume()[i]; 00169 if (running > random*sum) { 00170 element = (*theElementVector)[i]; 00171 break; 00172 } 00173 } 00174 00175 if (element->GetNumberOfIsotopes() > 0) { 00176 G4double randomAbundance = G4UniformRand(); 00177 G4double sumAbundance = element->GetRelativeAbundanceVector()[0]; 00178 unsigned int iso=0; 00179 while (iso < element->GetNumberOfIsotopes() && 00180 sumAbundance < randomAbundance) { 00181 ++iso; 00182 sumAbundance += element->GetRelativeAbundanceVector()[iso]; 00183 } 00184 theA=element->GetIsotope(iso)->GetN(); 00185 theZ=element->GetIsotope(iso)->GetZ(); 00186 aEff=theA; 00187 zEff=theZ; 00188 } else { 00189 aEff = element->GetN(); 00190 zEff = element->GetZ(); 00191 theZ = G4int(zEff + 0.5); 00192 theA = G4int(aEff + 0.5); 00193 } 00194 }
Definition at line 368 of file G4Nucleus.cc.
Referenced by G4RPGXiZeroInelastic::ApplyYourself(), G4RPGXiMinusInelastic::ApplyYourself(), G4RPGSigmaPlusInelastic::ApplyYourself(), G4RPGSigmaMinusInelastic::ApplyYourself(), G4RPGProtonInelastic::ApplyYourself(), G4RPGPiPlusInelastic::ApplyYourself(), G4RPGPiMinusInelastic::ApplyYourself(), G4RPGOmegaMinusInelastic::ApplyYourself(), G4RPGNeutronInelastic::ApplyYourself(), G4RPGLambdaInelastic::ApplyYourself(), G4RPGKZeroInelastic::ApplyYourself(), G4RPGKPlusInelastic::ApplyYourself(), G4RPGKMinusInelastic::ApplyYourself(), G4RPGAntiXiZeroInelastic::ApplyYourself(), G4RPGAntiXiMinusInelastic::ApplyYourself(), G4RPGAntiSigmaPlusInelastic::ApplyYourself(), G4RPGAntiSigmaMinusInelastic::ApplyYourself(), G4RPGAntiProtonInelastic::ApplyYourself(), G4RPGAntiOmegaMinusInelastic::ApplyYourself(), G4RPGAntiNeutronInelastic::ApplyYourself(), G4RPGAntiLambdaInelastic::ApplyYourself(), G4RPGAntiKZeroInelastic::ApplyYourself(), G4LEXiZeroInelastic::ApplyYourself(), G4LEXiMinusInelastic::ApplyYourself(), G4LESigmaPlusInelastic::ApplyYourself(), G4LESigmaMinusInelastic::ApplyYourself(), G4LEProtonInelastic::ApplyYourself(), G4LEPionPlusInelastic::ApplyYourself(), G4LEPionMinusInelastic::ApplyYourself(), G4LEOmegaMinusInelastic::ApplyYourself(), G4LENeutronInelastic::ApplyYourself(), G4LELambdaInelastic::ApplyYourself(), G4LEKaonZeroInelastic::ApplyYourself(), G4LEKaonPlusInelastic::ApplyYourself(), G4LEKaonMinusInelastic::ApplyYourself(), G4LEAntiXiZeroInelastic::ApplyYourself(), G4LEAntiXiMinusInelastic::ApplyYourself(), G4LEAntiSigmaPlusInelastic::ApplyYourself(), G4LEAntiSigmaMinusInelastic::ApplyYourself(), G4LEAntiProtonInelastic::ApplyYourself(), G4LEAntiOmegaMinusInelastic::ApplyYourself(), G4LEAntiNeutronInelastic::ApplyYourself(), G4LEAntiLambdaInelastic::ApplyYourself(), G4LEAntiKaonZeroInelastic::ApplyYourself(), G4RPGInelastic::CalculateMomenta(), and G4InelasticInteraction::CalculateMomenta().
00369 { 00370 // derived from original FORTRAN code CINEMA by H. Fesefeldt (14-Oct-1987) 00371 // 00372 // input: kineticEnergy (MeV) 00373 // returns modified kinetic energy (MeV) 00374 // 00375 static const G4double expxu = 82.; // upper bound for arg. of exp 00376 static const G4double expxl = -expxu; // lower bound for arg. of exp 00377 00378 G4double ek = kineticEnergy/GeV; 00379 G4double ekLog = std::log( ek ); 00380 G4double aLog = std::log( aEff ); 00381 G4double em = std::min( 1.0, 0.2390 + 0.0408*aLog*aLog ); 00382 G4double temp1 = -ek * std::min( 0.15, 0.0019*aLog*aLog*aLog ); 00383 G4double temp2 = std::exp( std::max( expxl, std::min( expxu, -(ekLog-em)*(ekLog-em)*2.0 ) ) ); 00384 G4double result = 0.0; 00385 if( std::abs( temp1 ) < 1.0 ) 00386 { 00387 if( temp2 > 1.0e-10 )result = temp1*temp2; 00388 } 00389 else result = temp1*temp2; 00390 if( result < -ek )result = -ek; 00391 return result*GeV; 00392 }
Definition at line 264 of file G4Nucleus.cc.
References G4UniformRand.
Referenced by G4RPGXiZeroInelastic::ApplyYourself(), G4RPGXiMinusInelastic::ApplyYourself(), G4RPGSigmaPlusInelastic::ApplyYourself(), G4RPGSigmaMinusInelastic::ApplyYourself(), G4RPGProtonInelastic::ApplyYourself(), G4RPGPiPlusInelastic::ApplyYourself(), G4RPGPiMinusInelastic::ApplyYourself(), G4RPGOmegaMinusInelastic::ApplyYourself(), G4RPGNeutronInelastic::ApplyYourself(), G4RPGLambdaInelastic::ApplyYourself(), G4RPGKZeroInelastic::ApplyYourself(), G4RPGKPlusInelastic::ApplyYourself(), G4RPGKMinusInelastic::ApplyYourself(), G4RPGAntiXiZeroInelastic::ApplyYourself(), G4RPGAntiXiMinusInelastic::ApplyYourself(), G4RPGAntiSigmaPlusInelastic::ApplyYourself(), G4RPGAntiSigmaMinusInelastic::ApplyYourself(), G4RPGAntiProtonInelastic::ApplyYourself(), G4RPGAntiOmegaMinusInelastic::ApplyYourself(), G4RPGAntiNeutronInelastic::ApplyYourself(), G4RPGAntiLambdaInelastic::ApplyYourself(), G4RPGAntiKZeroInelastic::ApplyYourself(), G4LEXiZeroInelastic::ApplyYourself(), G4LEXiMinusInelastic::ApplyYourself(), G4LESigmaPlusInelastic::ApplyYourself(), G4LESigmaMinusInelastic::ApplyYourself(), G4LEProtonInelastic::ApplyYourself(), G4LEPionPlusInelastic::ApplyYourself(), G4LEPionMinusInelastic::ApplyYourself(), G4LEOmegaMinusInelastic::ApplyYourself(), G4LENeutronInelastic::ApplyYourself(), G4LELambdaInelastic::ApplyYourself(), G4LEKaonZeroInelastic::ApplyYourself(), G4LEKaonPlusInelastic::ApplyYourself(), G4LEKaonMinusInelastic::ApplyYourself(), G4LEAntiXiZeroInelastic::ApplyYourself(), G4LEAntiXiMinusInelastic::ApplyYourself(), G4LEAntiSigmaPlusInelastic::ApplyYourself(), G4LEAntiSigmaMinusInelastic::ApplyYourself(), G4LEAntiProtonInelastic::ApplyYourself(), G4LEAntiOmegaMinusInelastic::ApplyYourself(), G4LEAntiNeutronInelastic::ApplyYourself(), G4LEAntiLambdaInelastic::ApplyYourself(), and G4LEAntiKaonZeroInelastic::ApplyYourself().
00265 { 00266 // derived from original FORTRAN code EXNU by H. Fesefeldt (10-Dec-1986) 00267 // 00268 // Nuclear evaporation as function of atomic number 00269 // and kinetic energy (MeV) of primary particle 00270 // 00271 // returns kinetic energy (MeV) 00272 // 00273 if( aEff < 1.5 ) 00274 { 00275 pnBlackTrackEnergy = dtaBlackTrackEnergy = 0.0; 00276 return 0.0; 00277 } 00278 G4double ek = kineticEnergy/GeV; 00279 G4float ekin = std::min( 4.0, std::max( 0.1, ek ) ); 00280 const G4float atno = std::min( 120., aEff ); 00281 const G4float gfa = 2.0*((aEff-1.0)/70.)*std::exp(-(aEff-1.0)/70.); 00282 // 00283 // 0.35 value at 1 GeV 00284 // 0.05 value at 0.1 GeV 00285 // 00286 G4float cfa = std::max( 0.15, 0.35 + ((0.35-0.05)/2.3)*std::log(ekin) ); 00287 G4float exnu = 7.716 * cfa * std::exp(-cfa) 00288 * ((atno-1.0)/120.)*std::exp(-(atno-1.0)/120.); 00289 G4float fpdiv = std::max( 0.5, 1.0-0.25*ekin*ekin ); 00290 // 00291 // pnBlackTrackEnergy is the kinetic energy (in GeV) available for 00292 // proton/neutron black track particles 00293 // dtaBlackTrackEnergy is the kinetic energy (in GeV) available for 00294 // deuteron/triton/alpha black track particles 00295 // 00296 pnBlackTrackEnergy = exnu*fpdiv; 00297 dtaBlackTrackEnergy = exnu*(1.0-fpdiv); 00298 00299 if( G4int(zEff+0.1) != 82 ) 00300 { 00301 G4double ran1 = -6.0; 00302 G4double ran2 = -6.0; 00303 for( G4int i=0; i<12; ++i ) 00304 { 00305 ran1 += G4UniformRand(); 00306 ran2 += G4UniformRand(); 00307 } 00308 pnBlackTrackEnergy *= 1.0 + ran1*gfa; 00309 dtaBlackTrackEnergy *= 1.0 + ran2*gfa; 00310 } 00311 pnBlackTrackEnergy = std::max( 0.0, pnBlackTrackEnergy ); 00312 dtaBlackTrackEnergy = std::max( 0.0, dtaBlackTrackEnergy ); 00313 while( pnBlackTrackEnergy+dtaBlackTrackEnergy >= ek ) 00314 { 00315 pnBlackTrackEnergy *= 1.0 - 0.5*G4UniformRand(); 00316 dtaBlackTrackEnergy *= 1.0 - 0.5*G4UniformRand(); 00317 } 00318 // G4cout << "EvaporationEffects "<<kineticEnergy<<" " 00319 // <<pnBlackTrackEnergy+dtaBlackTrackEnergy<<endl; 00320 return (pnBlackTrackEnergy+dtaBlackTrackEnergy)*GeV; 00321 }
G4ReactionProductVector * G4Nucleus::Fragmentate | ( | ) |
G4int G4Nucleus::GetA_asInt | ( | void | ) | const [inline] |
Definition at line 109 of file G4Nucleus.hh.
Referenced by G4RPGReaction::AddBlackTrackParticles(), G4WilsonAbrasionModel::ApplyYourself(), G4TheoFSGenerator::ApplyYourself(), G4QMDReaction::ApplyYourself(), G4PreCompoundModel::ApplyYourself(), G4ParaFissionModel::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4MuonMinusBoundDecay::ApplyYourself(), G4MuMinusCapturePrecompound::ApplyYourself(), G4LowEIonFragmentation::ApplyYourself(), G4LFission::ApplyYourself(), G4LETritonInelastic::ApplyYourself(), G4LEpp::ApplyYourself(), G4LEnp::ApplyYourself(), G4LENDModel::ApplyYourself(), G4LENDInelastic::ApplyYourself(), G4LENDFission::ApplyYourself(), G4LENDElastic::ApplyYourself(), G4LENDCapture::ApplyYourself(), G4LElastic::ApplyYourself(), G4LEDeuteronInelastic::ApplyYourself(), G4LEAlphaInelastic::ApplyYourself(), G4LCapture::ApplyYourself(), G4INCLXXInterface::ApplyYourself(), G4HEXiZeroInelastic::ApplyYourself(), G4HEXiMinusInelastic::ApplyYourself(), G4HESigmaPlusInelastic::ApplyYourself(), G4HESigmaMinusInelastic::ApplyYourself(), G4HEProtonInelastic::ApplyYourself(), G4HEPionPlusInelastic::ApplyYourself(), G4HEPionMinusInelastic::ApplyYourself(), G4HEOmegaMinusInelastic::ApplyYourself(), G4HENeutronInelastic::ApplyYourself(), G4HELambdaInelastic::ApplyYourself(), G4HEKaonZeroShortInelastic::ApplyYourself(), G4HEKaonZeroLongInelastic::ApplyYourself(), G4HEKaonZeroInelastic::ApplyYourself(), G4HEKaonPlusInelastic::ApplyYourself(), G4HEKaonMinusInelastic::ApplyYourself(), G4HEAntiXiZeroInelastic::ApplyYourself(), G4HEAntiXiMinusInelastic::ApplyYourself(), G4HEAntiSigmaPlusInelastic::ApplyYourself(), G4HEAntiSigmaMinusInelastic::ApplyYourself(), G4HEAntiProtonInelastic::ApplyYourself(), G4HEAntiOmegaMinusInelastic::ApplyYourself(), G4HEAntiNeutronInelastic::ApplyYourself(), G4HEAntiLambdaInelastic::ApplyYourself(), G4HEAntiKaonZeroInelastic::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4EmCaptureCascade::ApplyYourself(), G4ElectroVDNuclearModel::ApplyYourself(), G4ChiralInvariantPhaseSpace::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4CascadeInterface::ApplyYourself(), G4BinaryLightIonReaction::ApplyYourself(), G4BinaryCascade::ApplyYourself(), G4HadronStoppingProcess::AtRestDoIt(), G4BertiniEvaporation::BreakItUp(), G4RPGInelastic::CalculateMomenta(), G4InelasticInteraction::CalculateMomenta(), G4HadronicProcess::CheckEnergyMomentumConservation(), G4HadronicProcess::CheckResult(), G4CascadeInterface::createTarget(), G4InelasticInteraction::ExtractResidualNucleus(), G4ReactionDynamics::GenerateXandPt(), G4QuasiElasticChannel::GetFraction(), G4QGSModel< ParticipantType >::Init(), G4FTFModel::Init(), G4RPGReaction::NuclearReaction(), G4ReactionDynamics::NuclearReaction(), G4WHadronElasticProcess::PostStepDoIt(), G4HadronicProcess::PostStepDoIt(), G4HadronElasticProcess::PostStepDoIt(), G4RPGTwoCluster::ReactionStage(), G4RPGTwoBody::ReactionStage(), G4RPGPionSuppression::ReactionStage(), G4RPGFragmentation::ReactionStage(), G4RPGReaction::Rotate(), G4QuasiElasticChannel::Scatter(), G4ProjectileDiffractiveChannel::Scatter(), G4HadronicWhiteBoard::SetTargetNucleus(), G4ReactionDynamics::SuppressChargedPions(), G4ReactionDynamics::TwoBody(), and G4ReactionDynamics::TwoCluster().
G4double G4Nucleus::GetAnnihilationDTABlackTrackEnergy | ( | ) | const [inline] |
Definition at line 159 of file G4Nucleus.hh.
Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGFragmentation::ReactionStage(), and G4ReactionDynamics::TwoCluster().
G4double G4Nucleus::GetAnnihilationPNBlackTrackEnergy | ( | ) | const [inline] |
Definition at line 156 of file G4Nucleus.hh.
Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGFragmentation::ReactionStage(), and G4ReactionDynamics::TwoCluster().
G4ReactionProduct G4Nucleus::GetBiasedThermalNucleus | ( | G4double | aMass, | |
G4ThreeVector | aVelocity, | |||
G4double | temp = -1 | |||
) | const |
Definition at line 108 of file G4Nucleus.cc.
References G4UniformRand, G4ReactionProduct::GetMass(), G4ReactionProduct::GetMomentum(), G4ParticleDefinition::GetPDGMass(), GetThermalNucleus(), and G4Neutron::Neutron().
Referenced by G4NeutronHPFissionFS::ApplyYourself(), G4NeutronHPElasticFS::ApplyYourself(), G4NeutronHPCaptureFS::ApplyYourself(), G4FissionLibrary::ApplyYourself(), G4NeutronHPInelasticBaseFS::BaseApply(), G4NeutronHPInelasticCompFS::CompositeApply(), and G4NeutronHPThermalBoost::GetThermalEnergy().
00109 { 00110 G4double velMag = aVelocity.mag(); 00111 G4ReactionProduct result; 00112 G4double value = 0; 00113 G4double random = 1; 00114 G4double norm = 3.*std::sqrt(k_Boltzmann*temp*aMass*G4Neutron::Neutron()->GetPDGMass()); 00115 norm /= G4Neutron::Neutron()->GetPDGMass(); 00116 norm *= 5.; 00117 norm += velMag; 00118 norm /= velMag; 00119 while(value/norm<random) 00120 { 00121 result = GetThermalNucleus(aMass, temp); 00122 G4ThreeVector targetVelocity = 1./result.GetMass()*result.GetMomentum(); 00123 value = (targetVelocity+aVelocity).mag()/velMag; 00124 random = G4UniformRand(); 00125 } 00126 return result; 00127 }
G4double G4Nucleus::GetDTABlackTrackEnergy | ( | ) | const [inline] |
Definition at line 153 of file G4Nucleus.hh.
Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGTwoBody::ReactionStage(), G4RPGFragmentation::ReactionStage(), G4ReactionDynamics::TwoBody(), and G4ReactionDynamics::TwoCluster().
G4double G4Nucleus::GetEnergyDeposit | ( | ) | [inline] |
Definition at line 184 of file G4Nucleus.hh.
Referenced by G4WilsonAbrasionModel::ApplyYourself(), and G4BertiniEvaporation::BreakItUp().
G4ThreeVector G4Nucleus::GetFermiMomentum | ( | ) |
Definition at line 398 of file G4Nucleus.cc.
References G4UniformRand, and G4INCL::Math::pi.
00399 { 00400 // chv: .. we assume zero temperature! 00401 00402 // momentum is equally distributed in each phasespace volume dpx, dpy, dpz. 00403 G4double ranflat1= 00404 CLHEP::RandFlat::shoot((G4double)0.,(G4double)fermiMomentum); 00405 G4double ranflat2= 00406 CLHEP::RandFlat::shoot((G4double)0.,(G4double)fermiMomentum); 00407 G4double ranflat3= 00408 CLHEP::RandFlat::shoot((G4double)0.,(G4double)fermiMomentum); 00409 G4double ranmax = (ranflat1>ranflat2? ranflat1: ranflat2); 00410 ranmax = (ranmax>ranflat3? ranmax : ranflat3); 00411 00412 // Isotropic momentum distribution 00413 G4double costheta = 2.*G4UniformRand() - 1.0; 00414 G4double sintheta = std::sqrt(1.0 - costheta*costheta); 00415 G4double phi = 2.0*pi*G4UniformRand(); 00416 00417 G4double pz=costheta*ranmax; 00418 G4double px=sintheta*std::cos(phi)*ranmax; 00419 G4double py=sintheta*std::sin(phi)*ranmax; 00420 G4ThreeVector p(px,py,pz); 00421 return p; 00422 }
const G4Isotope* G4Nucleus::GetIsotope | ( | ) | [inline] |
G4int G4Nucleus::GetN_asInt | ( | ) | const [inline] |
Definition at line 112 of file G4Nucleus.hh.
Referenced by G4ReactionDynamics::GenerateXandPt(), G4QuasiElasticChannel::GetFraction(), G4ProjectileDiffractiveChannel::GetFraction(), G4ReactionDynamics::TwoBody(), and G4ReactionDynamics::TwoCluster().
G4double G4Nucleus::GetPNBlackTrackEnergy | ( | ) | const [inline] |
Definition at line 150 of file G4Nucleus.hh.
Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGTwoBody::ReactionStage(), G4RPGFragmentation::ReactionStage(), G4ReactionDynamics::TwoBody(), and G4ReactionDynamics::TwoCluster().
G4ReactionProduct G4Nucleus::GetThermalNucleus | ( | G4double | aMass, | |
G4double | temp = -1 | |||
) | const |
Definition at line 130 of file G4Nucleus.cc.
References G4ReactionProduct::GetMass(), GetThermalPz(), G4Neutron::Neutron(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMass(), G4ReactionProduct::SetMomentum(), and G4ReactionProduct::SetTotalEnergy().
Referenced by GetBiasedThermalNucleus(), G4NeutronHPorLFissionData::GetCrossSection(), G4NeutronHPorLElasticData::GetCrossSection(), G4NeutronHPorLEInelasticData::GetCrossSection(), G4NeutronHPorLCaptureData::GetCrossSection(), G4NeutronHPInelasticData::GetCrossSection(), G4NeutronHPFissionData::GetCrossSection(), G4NeutronHPElasticData::GetCrossSection(), and G4NeutronHPCaptureData::GetCrossSection().
00131 { 00132 G4double currentTemp = temp; 00133 if(currentTemp < 0) currentTemp = theTemp; 00134 G4ReactionProduct theTarget; 00135 theTarget.SetMass(targetMass*G4Neutron::Neutron()->GetPDGMass()); 00136 G4double px, py, pz; 00137 px = GetThermalPz(theTarget.GetMass(), currentTemp); 00138 py = GetThermalPz(theTarget.GetMass(), currentTemp); 00139 pz = GetThermalPz(theTarget.GetMass(), currentTemp); 00140 theTarget.SetMomentum(px, py, pz); 00141 G4double tMom = std::sqrt(px*px+py*py+pz*pz); 00142 G4double tEtot = std::sqrt((tMom+theTarget.GetMass())* 00143 (tMom+theTarget.GetMass())- 00144 2.*tMom*theTarget.GetMass()); 00145 if(1-tEtot/theTarget.GetMass()>0.001) 00146 { 00147 theTarget.SetTotalEnergy(tEtot); 00148 } 00149 else 00150 { 00151 theTarget.SetKineticEnergy(tMom*tMom/(2.*theTarget.GetMass())); 00152 } 00153 return theTarget; 00154 }
Definition at line 254 of file G4Nucleus.cc.
Referenced by GetThermalNucleus().
00255 { 00256 G4double result = G4RandGauss::shoot(); 00257 result *= std::sqrt(k_Boltzmann*temp*mass); // Das ist impuls (Pz), 00258 // nichtrelativistische rechnung 00259 // Maxwell verteilung angenommen 00260 return result; 00261 }
G4int G4Nucleus::GetZ_asInt | ( | void | ) | const [inline] |
Definition at line 115 of file G4Nucleus.hh.
Referenced by G4RPGReaction::AddBlackTrackParticles(), G4LightMedia::AntiLambdaExchange(), G4LightMedia::AntiNeutronExchange(), G4LightMedia::AntiOmegaMinusExchange(), G4LightMedia::AntiProtonExchange(), G4LightMedia::AntiSigmaMinusExchange(), G4LightMedia::AntiSigmaPlusExchange(), G4LightMedia::AntiXiMinusExchange(), G4LightMedia::AntiXiZeroExchange(), G4WilsonAbrasionModel::ApplyYourself(), G4TheoFSGenerator::ApplyYourself(), G4QMDReaction::ApplyYourself(), G4PreCompoundModel::ApplyYourself(), G4ParaFissionModel::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4NeutronHPThermalScattering::ApplyYourself(), G4NeutronHPorLFissionModel::ApplyYourself(), G4NeutronHPorLElasticModel::ApplyYourself(), G4NeutronHPorLEInelasticModel::ApplyYourself(), G4NeutronHPorLCaptureModel::ApplyYourself(), G4MuonMinusBoundDecay::ApplyYourself(), G4MuMinusCapturePrecompound::ApplyYourself(), G4LowEIonFragmentation::ApplyYourself(), G4LFission::ApplyYourself(), G4LETritonInelastic::ApplyYourself(), G4LEpp::ApplyYourself(), G4LEnp::ApplyYourself(), G4LENDModel::ApplyYourself(), G4LENDInelastic::ApplyYourself(), G4LENDFission::ApplyYourself(), G4LENDElastic::ApplyYourself(), G4LENDCapture::ApplyYourself(), G4LElastic::ApplyYourself(), G4LEDeuteronInelastic::ApplyYourself(), G4LEAlphaInelastic::ApplyYourself(), G4LCapture::ApplyYourself(), G4INCLXXInterface::ApplyYourself(), G4HEXiZeroInelastic::ApplyYourself(), G4HEXiMinusInelastic::ApplyYourself(), G4HESigmaPlusInelastic::ApplyYourself(), G4HESigmaMinusInelastic::ApplyYourself(), G4HEProtonInelastic::ApplyYourself(), G4HEPionPlusInelastic::ApplyYourself(), G4HEPionMinusInelastic::ApplyYourself(), G4HEOmegaMinusInelastic::ApplyYourself(), G4HENeutronInelastic::ApplyYourself(), G4HELambdaInelastic::ApplyYourself(), G4HEKaonZeroShortInelastic::ApplyYourself(), G4HEKaonZeroLongInelastic::ApplyYourself(), G4HEKaonZeroInelastic::ApplyYourself(), G4HEKaonPlusInelastic::ApplyYourself(), G4HEKaonMinusInelastic::ApplyYourself(), G4HEAntiXiZeroInelastic::ApplyYourself(), G4HEAntiXiMinusInelastic::ApplyYourself(), G4HEAntiSigmaPlusInelastic::ApplyYourself(), G4HEAntiSigmaMinusInelastic::ApplyYourself(), G4HEAntiProtonInelastic::ApplyYourself(), G4HEAntiOmegaMinusInelastic::ApplyYourself(), G4HEAntiNeutronInelastic::ApplyYourself(), G4HEAntiLambdaInelastic::ApplyYourself(), G4HEAntiKaonZeroInelastic::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4EmCaptureCascade::ApplyYourself(), G4ElectroVDNuclearModel::ApplyYourself(), G4ElectroNuclearReaction::ApplyYourself(), G4ChiralInvariantPhaseSpace::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4BinaryLightIonReaction::ApplyYourself(), G4BinaryCascade::ApplyYourself(), G4HadronStoppingProcess::AtRestDoIt(), G4BertiniEvaporation::BreakItUp(), G4HadronicProcess::CheckEnergyMomentumConservation(), G4HadronicProcess::CheckResult(), G4CascadeInterface::createTarget(), G4InelasticInteraction::ExtractResidualNucleus(), G4ReactionDynamics::GenerateXandPt(), G4QuasiElasticChannel::GetFraction(), G4ProjectileDiffractiveChannel::GetFraction(), G4QGSModel< ParticipantType >::Init(), G4FTFModel::Init(), G4LightMedia::KaonPlusExchange(), G4LightMedia::KaonZeroShortExchange(), G4LightMedia::LambdaExchange(), G4LightMedia::NeutronExchange(), G4LightMedia::OmegaMinusExchange(), G4LightMedia::PionPlusExchange(), G4WHadronElasticProcess::PostStepDoIt(), G4HadronicProcess::PostStepDoIt(), G4HadronElasticProcess::PostStepDoIt(), G4LightMedia::ProtonExchange(), G4RPGTwoCluster::ReactionStage(), G4RPGTwoBody::ReactionStage(), G4RPGPionSuppression::ReactionStage(), G4RPGFragmentation::ReactionStage(), G4QuasiElasticChannel::Scatter(), G4ProjectileDiffractiveChannel::Scatter(), G4HadronicWhiteBoard::SetTargetNucleus(), G4LightMedia::SigmaMinusExchange(), G4LightMedia::SigmaPlusExchange(), G4ReactionDynamics::SuppressChargedPions(), G4ReactionDynamics::TwoBody(), G4ReactionDynamics::TwoCluster(), G4LightMedia::XiMinusExchange(), and G4LightMedia::XiZeroExchange().
Definition at line 64 of file G4Nucleus.hh.
References aEff, dtaBlackTrackEnergy, dtaBlackTrackEnergyfromAnnihilation, excitationEnergy, fermiMomentum, fIsotope, momentum, pnBlackTrackEnergy, pnBlackTrackEnergyfromAnnihilation, theA, theTemp, theZ, and zEff.
00065 { 00066 if (this != &right) { 00067 theA=right.theA; 00068 theZ=right.theZ; 00069 aEff=right.aEff; 00070 zEff=right.zEff; 00071 fIsotope = right.fIsotope; 00072 pnBlackTrackEnergy=right.pnBlackTrackEnergy; 00073 dtaBlackTrackEnergy=right.dtaBlackTrackEnergy; 00074 pnBlackTrackEnergyfromAnnihilation = 00075 right.pnBlackTrackEnergyfromAnnihilation; 00076 dtaBlackTrackEnergyfromAnnihilation = 00077 right.dtaBlackTrackEnergyfromAnnihilation; 00078 theTemp = right.theTemp; 00079 excitationEnergy = right.excitationEnergy; 00080 momentum = right.momentum; 00081 fermiMomentum = right.fermiMomentum; 00082 } 00083 return *this; 00084 }
G4DynamicParticle * G4Nucleus::ReturnTargetParticle | ( | ) | const |
Definition at line 227 of file G4Nucleus.cc.
References G4UniformRand, G4Neutron::Neutron(), G4Proton::Proton(), and G4DynamicParticle::SetDefinition().
Referenced by G4LightMedia::AntiLambdaExchange(), G4LightMedia::AntiNeutronExchange(), G4LightMedia::AntiOmegaMinusExchange(), G4LightMedia::AntiProtonExchange(), G4LightMedia::AntiSigmaMinusExchange(), G4LightMedia::AntiSigmaPlusExchange(), G4LightMedia::AntiXiMinusExchange(), G4LightMedia::AntiXiZeroExchange(), G4RPGXiZeroInelastic::ApplyYourself(), G4RPGXiMinusInelastic::ApplyYourself(), G4RPGSigmaPlusInelastic::ApplyYourself(), G4RPGSigmaMinusInelastic::ApplyYourself(), G4RPGProtonInelastic::ApplyYourself(), G4RPGPiPlusInelastic::ApplyYourself(), G4RPGPiMinusInelastic::ApplyYourself(), G4RPGOmegaMinusInelastic::ApplyYourself(), G4RPGNeutronInelastic::ApplyYourself(), G4RPGLambdaInelastic::ApplyYourself(), G4RPGKZeroInelastic::ApplyYourself(), G4RPGKPlusInelastic::ApplyYourself(), G4RPGKMinusInelastic::ApplyYourself(), G4RPGAntiXiZeroInelastic::ApplyYourself(), G4RPGAntiXiMinusInelastic::ApplyYourself(), G4RPGAntiSigmaPlusInelastic::ApplyYourself(), G4RPGAntiSigmaMinusInelastic::ApplyYourself(), G4RPGAntiProtonInelastic::ApplyYourself(), G4RPGAntiOmegaMinusInelastic::ApplyYourself(), G4RPGAntiNeutronInelastic::ApplyYourself(), G4RPGAntiLambdaInelastic::ApplyYourself(), G4RPGAntiKZeroInelastic::ApplyYourself(), G4LEXiZeroInelastic::ApplyYourself(), G4LEXiMinusInelastic::ApplyYourself(), G4LESigmaPlusInelastic::ApplyYourself(), G4LESigmaMinusInelastic::ApplyYourself(), G4LEProtonInelastic::ApplyYourself(), G4LEpp::ApplyYourself(), G4LEPionPlusInelastic::ApplyYourself(), G4LEPionMinusInelastic::ApplyYourself(), G4LEOmegaMinusInelastic::ApplyYourself(), G4LEnp::ApplyYourself(), G4LENeutronInelastic::ApplyYourself(), G4LELambdaInelastic::ApplyYourself(), G4LEKaonZeroInelastic::ApplyYourself(), G4LEKaonPlusInelastic::ApplyYourself(), G4LEKaonMinusInelastic::ApplyYourself(), G4LEAntiXiZeroInelastic::ApplyYourself(), G4LEAntiXiMinusInelastic::ApplyYourself(), G4LEAntiSigmaPlusInelastic::ApplyYourself(), G4LEAntiSigmaMinusInelastic::ApplyYourself(), G4LEAntiProtonInelastic::ApplyYourself(), G4LEAntiOmegaMinusInelastic::ApplyYourself(), G4LEAntiNeutronInelastic::ApplyYourself(), G4LEAntiLambdaInelastic::ApplyYourself(), G4LEAntiKaonZeroInelastic::ApplyYourself(), G4LightMedia::KaonPlusExchange(), G4LightMedia::KaonZeroShortExchange(), G4LightMedia::LambdaExchange(), G4LightMedia::NeutronExchange(), G4LightMedia::OmegaMinusExchange(), G4LightMedia::PionPlusExchange(), G4LightMedia::ProtonExchange(), G4LightMedia::SigmaMinusExchange(), G4LightMedia::SigmaPlusExchange(), G4LightMedia::XiMinusExchange(), and G4LightMedia::XiZeroExchange().
00228 { 00229 // choose a proton or a neutron as the target particle 00230 00231 G4DynamicParticle *targetParticle = new G4DynamicParticle; 00232 if( G4UniformRand() < zEff/aEff ) 00233 targetParticle->SetDefinition( G4Proton::Proton() ); 00234 else 00235 targetParticle->SetDefinition( G4Neutron::Neutron() ); 00236 return targetParticle; 00237 }
void G4Nucleus::SetIsotope | ( | const G4Isotope * | iso | ) | [inline] |
Definition at line 122 of file G4Nucleus.hh.
References G4Isotope::GetN(), and G4Isotope::GetZ().
Referenced by G4CrossSectionDataStore::SampleZandA().
00123 { 00124 fIsotope = iso; 00125 if(iso) { 00126 theZ = iso->GetZ(); 00127 theA = iso->GetN(); 00128 aEff = theA; 00129 zEff = theZ; 00130 } 00131 }
Definition at line 212 of file G4Nucleus.cc.
00213 { 00214 theZ = Z; 00215 theA = A; 00216 if( theA<1 || theZ<0 || theZ>theA ) 00217 { 00218 throw G4HadronicException(__FILE__, __LINE__, 00219 "G4Nucleus::SetParameters called with non-physical parameters"); 00220 } 00221 aEff = A; // atomic weight 00222 zEff = Z; // atomic number 00223 fIsotope = 0; 00224 }
Definition at line 198 of file G4Nucleus.cc.
References G4lrint().
Referenced by G4NeutronHPInelastic::ApplyYourself(), G4NeutronHPFission::ApplyYourself(), G4NeutronHPElastic::ApplyYourself(), G4NeutronHPCapture::ApplyYourself(), G4Nucleus(), and G4ElementSelector::SelectZandA().
00199 { 00200 theZ = G4lrint(Z); 00201 theA = G4lrint(A); 00202 if (theA<1 || theZ<0 || theZ>theA) { 00203 throw G4HadronicException(__FILE__, __LINE__, 00204 "G4Nucleus::SetParameters called with non-physical parameters"); 00205 } 00206 aEff = A; // atomic weight 00207 zEff = Z; // atomic number 00208 fIsotope = 0; 00209 }