G4Nucleus Class Reference

#include <G4Nucleus.hh>

Inheritance diagram for G4Nucleus:

G4LayeredNucleus

Public Member Functions

 G4Nucleus ()
 G4Nucleus (const G4double A, const G4double Z)
 G4Nucleus (const G4int A, const G4int Z)
 G4Nucleus (const G4Material *aMaterial)
 ~G4Nucleus ()
 G4Nucleus (const G4Nucleus &right)
G4Nucleusoperator= (const G4Nucleus &right)
G4bool operator== (const G4Nucleus &right) const
G4bool operator!= (const G4Nucleus &right) const
void ChooseParameters (const G4Material *aMaterial)
void SetParameters (const G4double A, const G4double Z)
void SetParameters (const G4int A, const G4int Z)
G4int GetA_asInt () const
G4int GetN_asInt () const
G4int GetZ_asInt () const
const G4IsotopeGetIsotope ()
void SetIsotope (const G4Isotope *iso)
G4DynamicParticleReturnTargetParticle () const
G4double AtomicMass (const G4double A, const G4double Z) const
G4double AtomicMass (const G4int A, const G4int Z) const
G4double GetThermalPz (const G4double mass, const G4double temp) const
G4ReactionProduct GetThermalNucleus (G4double aMass, G4double temp=-1) const
G4ReactionProduct GetBiasedThermalNucleus (G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const
G4double Cinema (G4double kineticEnergy)
G4double EvaporationEffects (G4double kineticEnergy)
G4double AnnihilationEvaporationEffects (G4double kineticEnergy, G4double ekOrg)
G4double GetPNBlackTrackEnergy () const
G4double GetDTABlackTrackEnergy () const
G4double GetAnnihilationPNBlackTrackEnergy () const
G4double GetAnnihilationDTABlackTrackEnergy () const
G4ThreeVector GetFermiMomentum ()
G4ReactionProductVectorFragmentate ()
void AddExcitationEnergy (G4double anEnergy)
void AddMomentum (const G4ThreeVector aMomentum)
G4double GetEnergyDeposit ()

Detailed Description

Definition at line 50 of file G4Nucleus.hh.


Constructor & Destructor Documentation

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 }

G4Nucleus::G4Nucleus ( const G4double  A,
const G4double  Z 
)

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 }

G4Nucleus::G4Nucleus ( const G4int  A,
const G4int  Z 
)

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 (  ) 

Definition at line 105 of file G4Nucleus.cc.

00105 {}

G4Nucleus::G4Nucleus ( const G4Nucleus right  )  [inline]

Definition at line 61 of file G4Nucleus.hh.

00062     { *this = right; }


Member Function Documentation

void G4Nucleus::AddExcitationEnergy ( G4double  anEnergy  ) 

Definition at line 435 of file G4Nucleus.cc.

00436   {
00437     excitationEnergy+=anEnergy;
00438   }

void G4Nucleus::AddMomentum ( const G4ThreeVector  aMomentum  ) 

Definition at line 430 of file G4Nucleus.cc.

00431   {
00432     momentum+=(aMomentum);
00433   }

G4double G4Nucleus::AnnihilationEvaporationEffects ( G4double  kineticEnergy,
G4double  ekOrg 
)

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   }

G4double G4Nucleus::AtomicMass ( const G4int  A,
const G4int  Z 
) const

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   }

G4double G4Nucleus::AtomicMass ( const G4double  A,
const G4double  Z 
) const

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 }

G4double G4Nucleus::Cinema ( G4double  kineticEnergy  ) 

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   }

G4double G4Nucleus::EvaporationEffects ( G4double  kineticEnergy  ) 

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 (  ) 

Definition at line 424 of file G4Nucleus.cc.

00425   {
00426     // needs implementation!
00427     return NULL;
00428   }

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().

00110     { return theA; }   

G4double G4Nucleus::GetAnnihilationDTABlackTrackEnergy (  )  const [inline]

Definition at line 159 of file G4Nucleus.hh.

Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGFragmentation::ReactionStage(), and G4ReactionDynamics::TwoCluster().

00160     { return dtaBlackTrackEnergyfromAnnihilation; }

G4double G4Nucleus::GetAnnihilationPNBlackTrackEnergy (  )  const [inline]

Definition at line 156 of file G4Nucleus.hh.

Referenced by G4ReactionDynamics::GenerateXandPt(), G4RPGTwoCluster::ReactionStage(), G4RPGFragmentation::ReactionStage(), and G4ReactionDynamics::TwoCluster().

00157     { return pnBlackTrackEnergyfromAnnihilation; }

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().

00154     { return dtaBlackTrackEnergy; }

G4double G4Nucleus::GetEnergyDeposit (  )  [inline]

Definition at line 184 of file G4Nucleus.hh.

Referenced by G4WilsonAbrasionModel::ApplyYourself(), and G4BertiniEvaporation::BreakItUp().

00184 {return excitationEnergy; }

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]

Definition at line 119 of file G4Nucleus.hh.

Referenced by G4HadronicProcess::GetTargetIsotope().

00120     { return fIsotope; }

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().

00113     { return theA-theZ; }   

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().

00151     { return pnBlackTrackEnergy; }

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 }

G4double G4Nucleus::GetThermalPz ( const G4double  mass,
const G4double  temp 
) const

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().

00116     { return theZ; }   

G4bool G4Nucleus::operator!= ( const G4Nucleus right  )  const [inline]

Definition at line 89 of file G4Nucleus.hh.

00090     { return ( this != (G4Nucleus *) &right ); }

G4Nucleus& G4Nucleus::operator= ( const G4Nucleus right  )  [inline]

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     }

G4bool G4Nucleus::operator== ( const G4Nucleus right  )  const [inline]

Definition at line 86 of file G4Nucleus.hh.

00087     { return ( this == (G4Nucleus *) &right ); }

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     }

void G4Nucleus::SetParameters ( const G4int  A,
const G4int  Z 
)

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 }

void G4Nucleus::SetParameters ( const G4double  A,
const G4double  Z 
)

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 }


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