G4InuclSpecialFunctions Namespace Reference


Functions

G4double bindingEnergy (G4int A, G4int Z)
G4double bindingEnergyAsymptotic (G4int A, G4int Z)
G4double FermiEnergy (G4int A, G4int Z, G4int ntype)
void paraMaker (G4double Z, std::pair< std::vector< G4double >, std::vector< G4double > > &parms)
void paraMakerTruncated (G4double Z, std::pair< G4double, G4double > &parms)
G4double getAL (G4int A)
G4double csNN (G4double e)
G4double csPN (G4double e)
G4double G4cbrt (G4double x)
G4double inuclRndm ()
G4double randomGauss (G4double sigma)
G4double randomPHI ()
std::pair< G4double, G4doublerandomCOS_SIN ()
G4double nucleiLevelDensity (G4int A)
G4LorentzVector generateWithFixedTheta (G4double ct, G4double p, G4double mass=0.)
G4LorentzVector generateWithRandomAngles (G4double p, G4double mass=0.)
G4double bindingEnergy (G4int A, G4int Z)
G4double bindingEnergyAsymptotic (G4int A, G4int Z)
G4double getAL (G4int A)
G4double csNN (G4double e)
G4double csPN (G4double e)
G4double FermiEnergy (G4int A, G4int Z, G4int ntype)
G4double G4cbrt (G4double x)
G4double inuclRndm ()
G4double randomGauss (G4double sigma)
G4double randomPHI ()
std::pair< G4double, G4doublerandomCOS_SIN ()
G4LorentzVector generateWithFixedTheta (G4double ct, G4double p, G4double mass)
G4LorentzVector generateWithRandomAngles (G4double p, G4double mass)
G4double nucleiLevelDensity (G4int a)
void paraMaker (G4double Z, std::pair< std::vector< G4double >, std::vector< G4double > > &parms)
void paraMakerTruncated (G4double Z, std::pair< G4double, G4double > &parms)


Function Documentation

G4double G4InuclSpecialFunctions::bindingEnergy ( G4int  A,
G4int  Z 
)

Definition at line 37 of file bindingEnergy.cc.

References G4NucleiProperties::GetBindingEnergy().

Referenced by G4VAtomDeexcitation::AlongStepDeexcitation(), G4eIonisationSpectrum::AverageEnergy(), G4NonEquilibriumEvaporator::collide(), G4Fissioner::collide(), G4EquilibriumEvaporator::collide(), G4BigBanger::collide(), G4CascadeColliderBase::explosion(), G4AtomicTransitionManager::G4AtomicTransitionManager(), G4ProtonField::GetBarrier(), G4SigmaZeroField::GetField(), G4SigmaPlusField::GetField(), G4SigmaMinusField::GetField(), G4PionZeroField::GetField(), G4PionPlusField::GetField(), G4PionMinusField::GetField(), G4KaonZeroField::GetField(), G4KaonPlusField::GetField(), G4KaonMinusField::GetField(), G4AntiProtonField::GetField(), G4CascadeRecoilMaker::goodNucleus(), G4NucleiModel::initializeCascad(), G4hImpactIonisation::PostStepDoIt(), G4eIonisationSpectrum::Probability(), G4eIonisationSpectrum::SampleEnergy(), G4PenelopePhotoElectricModel::SampleSecondaries(), G4PenelopeIonisationModel::SampleSecondaries(), G4PenelopeComptonModel::SampleSecondaries(), G4PEEffectModel::SampleSecondaries(), G4PEEffectFluoModel::SampleSecondaries(), G4MuElecInelasticModel::SampleSecondaries(), G4LivermorePolarizedPhotoElectricModel::SampleSecondaries(), G4LivermorePhotoElectricModel::SampleSecondaries(), G4LivermoreIonisationModel::SampleSecondaries(), G4KleinNishinaModel::SampleSecondaries(), G4DNARuddIonisationModel::SampleSecondaries(), G4DNARuddIonisationExtendedModel::SampleSecondaries(), G4DNABornIonisationModel::SampleSecondaries(), and G4KM_OpticalEqRhs::SetFactor().

00037                                                                 {
00038   // NOTE:  Test condition copied from G4NucleiProperties.cc; not encapsulated
00039   if (A < 1 || Z < 0 || Z > A) return 0.;
00040 
00041   return G4NucleiProperties::GetBindingEnergy(A, Z);
00042 }

G4double G4InuclSpecialFunctions::bindingEnergyAsymptotic ( G4int  A,
G4int  Z 
)

Definition at line 33 of file bindingEnergyAsymptotic.cc.

References G4cbrt().

Referenced by G4Fissioner::collide().

00033                                                                           {
00034   // calculates the nuclei binding energy 
00035   // using smooth liquid high energy formula  
00036   G4double X = (1.0 - 2.0*Z/A); X *= X;
00037   G4double X1 = G4cbrt(A);
00038   G4double X2 = X1 * X1;
00039   G4double X3 = 1.0 / X1;
00040   G4double X4 = 1.0 / X2;
00041   G4double X5 = (1.0 - 0.62025 * X4); X5 *= X5;
00042 
00043   G4double DM = 17.035 * (1.0 - 1.846 * X) * A -
00044     25.8357 * (1.0 - 1.712 * X) * X2 * X5 -
00045     0.779 * Z * (Z - 1) * X3 * 
00046     (1.0 - 1.5849 * X4 + 1.2273 / A + 1.5772 * X4 * X4) +
00047     0.4328 * G4cbrt(Z*Z*Z*Z) * X3 * 
00048     (1.0 - 0.57811 * X3 - 0.14518 * X4 + 0.496 / A);
00049 
00050   return DM;
00051 }

G4double G4InuclSpecialFunctions::FermiEnergy ( G4int  A,
G4int  Z,
G4int  ntype 
)

Definition at line 72 of file G4InuclSpecialFunctions.cc.

References G4cbrt().

Referenced by G4NonEquilibriumEvaporator::collide().

00072                                                                            {
00073   const G4double C = 55.4;
00074   G4double arg = (ntype==0) ? G4double(A-Z)/A : G4double(Z)/A;
00075 
00076   return C * G4cbrt(arg*arg);   // 2/3 power
00077 }

void G4InuclSpecialFunctions::paraMaker ( G4double  Z,
std::pair< std::vector< G4double >, std::vector< G4double > > &  parms 
)

Definition at line 38 of file paraMaker.cc.

References G4cout, G4endl, and G4CascadeInterpolator< NBINS >::interpolate().

Referenced by G4EquilibriumEvaporator::collide().

00039                                                                       {
00040   G4int verboseLevel(0);
00041 
00042   if (verboseLevel > 3) {
00043     G4cout << " >>> G4InuclSpecialFunctions::paraMaker" << G4endl;
00044   }
00045 
00046   // calculates the coefficients for the phenomenological formulas for
00047   // coulumb barier, c.s. etc needed for evaporators
00048 
00049   static const G4double Z1[5] = {10.0, 20.0, 30.0, 50.0, 70.0};
00050   static const G4double AP[5] = {0.42, 0.58, 0.68, 0.77, 0.80};
00051   static const G4double CP[5] = {0.50, 0.28, 0.20, 0.15, 0.10};
00052   static const G4double AA[5] = {0.68, 0.82, 0.91, 0.97, 0.98};
00053   static const G4double CA[5] = {0.10, 0.10, 0.10, 0.08, 0.06};
00054 
00055   // Set up input buffer for results
00056   std::vector<G4double>& AK = parms.first; 
00057   AK.resize(6,0.);
00058 
00059   std::vector<G4double>& CPA = parms.second;
00060   CPA.resize(6,0.);
00061 
00062   AK[0] = 0.0;
00063   CPA[0] = 0.0;
00064 
00065   static G4CascadeInterpolator<5> interp(Z1, false);    // Do not extrapolate
00066   AK[1]  = interp.interpolate(Z, AP);
00067   AK[5]  = interp.interpolate(Z, AA);
00068   CPA[1] = interp.interpolate(Z, CP);
00069   CPA[5] = interp.interpolate(Z, CA);
00070   
00071   AK[2] = AK[1] + 0.06;
00072   AK[3] = AK[1] + 0.12;
00073   AK[4] = AK[5] - 0.06;
00074 
00075   CPA[2] = CPA[1] * 0.5;
00076   CPA[3] = CPA[1] / 3.0;  
00077   CPA[4] = 4.0 * CPA[5] / 3.0;
00078 
00079   return;       // Buffer filled
00080 }

void G4InuclSpecialFunctions::paraMakerTruncated ( G4double  Z,
std::pair< G4double, G4double > &  parms 
)

Definition at line 83 of file paraMaker.cc.

References G4cout, G4endl, and G4CascadeInterpolator< NBINS >::interpolate().

Referenced by G4NonEquilibriumEvaporator::collide().

00084                                                                        {
00085   G4int verboseLevel(0);
00086 
00087   if (verboseLevel > 3) {
00088     G4cout << " >>> G4InuclSpecialFunctions::paraMakerTruncated" << G4endl;
00089   }
00090 
00091   // truncated version of the previous one
00092   static const G4double Z1[5] = {10.0, 20.0, 30.0, 50.0, 70.0};
00093   static const G4double AP[5] = {0.42, 0.58, 0.68, 0.77, 0.8};
00094   static const G4double CP[5] = {0.5, 0.28, 0.2, 0.15, 0.1};
00095 
00096   // Set up buffers for output
00097   G4double& AK2=parms.first;
00098   G4double& CP2=parms.second;
00099 
00100   static G4CascadeInterpolator<5> interp(Z1, false);            // Do not extrapolate
00101   AK2 = interp.interpolate(Z, AP);
00102   CP2 = interp.interpolate(Z, CP);
00103 
00104   return;       // Buffer filled
00105 }

G4double G4InuclSpecialFunctions::getAL ( G4int  A  ) 

Definition at line 42 of file G4InuclSpecialFunctions.cc.

References G4cbrt().

Referenced by G4NonEquilibriumEvaporator::collide(), and G4EquilibriumEvaporator::collide().

00042                                                {
00043   return 0.76 + 2.2 / G4cbrt(A);
00044 }

G4double G4InuclSpecialFunctions::csNN ( G4double  e  ) 

Definition at line 46 of file G4InuclSpecialFunctions.cc.

Referenced by G4NonEquilibriumEvaporator::collide().

00046                                                  {
00047   G4double snn;
00048 
00049   if (e < 40.0) {
00050     snn = -1174.8 / (e * e) + 3088.5 / e + 5.3107;
00051   } else {
00052     snn = 93074.0 / (e * e) - 11.148 / e + 22.429;
00053   }
00054 
00055   return snn; 
00056 }

G4double G4InuclSpecialFunctions::csPN ( G4double  e  ) 

Definition at line 58 of file G4InuclSpecialFunctions.cc.

Referenced by G4NonEquilibriumEvaporator::collide().

00058                                                  {
00059   G4double spn;
00060 
00061   if (e < 40.0) {
00062     spn = -5057.4 / (e * e) + 9069.2 / e + 6.9466;
00063   } else {
00064     spn = 239380.0 / (e * e) + 1802.0 / e + 27.147;
00065   }
00066 
00067   return spn; 
00068 }

G4double G4InuclSpecialFunctions::G4cbrt ( G4double  x  ) 

Definition at line 79 of file G4InuclSpecialFunctions.cc.

Referenced by bindingEnergyAsymptotic(), G4NonEquilibriumEvaporator::collide(), G4Fissioner::collide(), G4EquilibriumEvaporator::collide(), FermiEnergy(), G4RegionModel::G4RegionModel(), G4NucleiModel::generateModel(), G4NucleiModel::generateNucleonMomentum(), getAL(), G4CascadeColliderBase::inelasticInteractionPossible(), and G4IntraNucleiCascader::initialize().

00079                                                    {
00080   return x==0 ? 0. : (x<0?-1.:1.)*std::exp(std::log(std::fabs(x))/3.);
00081 }

G4double G4InuclSpecialFunctions::inuclRndm (  ) 

Definition at line 83 of file G4InuclSpecialFunctions.cc.

References G4UniformRand.

Referenced by G4NonEquilibriumEvaporator::collide(), G4Fissioner::collide(), G4EquilibriumEvaporator::collide(), G4NucleiModel::generateNucleonMomentum(), G4NucleiModel::initializeCascad(), randomCOS_SIN(), randomGauss(), randomPHI(), and G4IntraNucleiCascader::setupCascade().

00083                                             { 
00084   return G4UniformRand(); 
00085 } 

G4double G4InuclSpecialFunctions::randomGauss ( G4double  sigma  ) 

Definition at line 87 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by G4Fissioner::collide().

00087                                                             {
00088   const G4double eps = 1.0e-6;
00089   G4double r1 = inuclRndm();
00090   r1 = r1 > eps ? r1 : eps;
00091   G4double r2 = inuclRndm();
00092   r2 = r2 > eps ? r2 : eps;
00093   r2 = r2 < 1.0 - eps ? r2 : 1.0 - eps; 
00094 
00095   return sigma * std::sin(twopi * r1) * std::sqrt(-2.0 * std::log(r2)); 
00096 } 

G4double G4InuclSpecialFunctions::randomPHI (  ) 

Definition at line 98 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by generateWithFixedTheta(), generateWithRandomAngles(), and G4NucleiModel::initializeCascad().

00098                                             { 
00099   return twopi * inuclRndm();
00100 } 

std::pair<G4double, G4double> G4InuclSpecialFunctions::randomCOS_SIN (  ) 

Definition at line 102 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by generateWithRandomAngles().

00102                                                                    {
00103   G4double CT = 1.0 - 2.0 * inuclRndm();
00104 
00105   return std::pair<G4double, G4double>(CT, std::sqrt(1.0 - CT*CT));
00106 }

G4double G4InuclSpecialFunctions::nucleiLevelDensity ( G4int  A  ) 

Definition at line 33 of file nucleiLevelDensity.cc.

Referenced by G4Fissioner::collide().

00033                                                             {
00034   const G4double NLD[226] = {
00035     // 20 - 29
00036     3.94, 3.84, 3.74, 3.64, 3.55, 4.35, 4.26, 4.09, 3.96, 4.18,
00037     // 30 - 39
00038     4.39, 4.61, 4.82, 4.44, 4.44, 4.43, 4.42, 5.04, 5.66, 5.8,
00039     // 40 - 49
00040     5.95, 5.49, 6.18, 7.11, 6.96, 7.2, 7.73, 6.41, 6.85, 6.77,
00041     // 50 - 59
00042     6.91, 7.3, 7.2, 6.86, 8.06, 7.8, 7.82, 8.41, 8.13, 7.19,
00043     // 60 - 69
00044     8.35, 8.13, 8.02, 8.93, 8.9, 9.7, 9.65, 10.55, 9.38, 9.72,
00045     // 70 - 79
00046     10.66, 11.98, 12.76, 12.1, 12.86, 13.0, 12.81, 12.8, 12.65, 12.0,
00047     // 80 - 89
00048     12.69, 14.05, 13.33, 13.28, 13.22, 13.17, 8.66, 11.03, 10.4, 13.47,
00049     // 90 - 99
00050     10.17, 12.22, 11.62, 12.95, 13.15, 13.57, 12.87, 16.2, 14.71, 15.69,
00051     // 100 - 109
00052     14.1, 18.56, 16.22, 16.7, 17.13, 17.0, 16.86, 16.2, 15.61, 16.8,
00053     // 110 - 119
00054     17.93, 17.5, 16.97, 17.3, 17.6, 15.78, 16.8, 17.49, 16.03, 15.08,
00055     // 120 - 129
00056     16.74, 17.74, 17.43, 18.1, 17.1, 19.01, 17.02, 17.0, 17.02, 18.51,
00057     // 130 - 139
00058     17.2, 16.8, 16.97, 16.14, 16.91, 17.69, 15.5, 14.56, 14.35, 16.5,
00059     // 140 - 149
00060     18.29, 17.8, 17.05, 21.31, 19.15, 19.5, 19.78, 20.3, 20.9, 21.9,
00061     // 150 - 159
00062     22.89, 25.68, 24.6, 24.91, 23.24, 22.9, 22.46, 21.98, 21.64, 21.8,
00063     // 160 - 169
00064     21.85, 21.7, 21.69, 23.7, 21.35, 23.03, 20.66, 21.81, 20.77, 22.2,
00065     // 170 - 179
00066     22.58, 22.55, 21.45, 21.16, 21.02, 20.87, 22.09, 22.0, 21.28, 23.05,
00067     // 180 - 189
00068     21.7, 21.18, 22.28, 23.0, 22.11, 23.56, 22.83, 24.88, 22.6, 23.5,
00069     // 190 - 199
00070     23.89, 23.9, 23.94, 21.16, 22.3, 21.7, 21.19, 20.7, 20.29, 21.32,
00071     // 200 - 209
00072     19.0, 17.93, 17.85, 15.7, 13.54, 11.9, 10.02, 10.48, 10.28, 11.72,
00073     // 210 - 219
00074     13.81, 14.7, 15.5, 16.3, 17.2, 18.0, 18.9, 19.7, 20.6, 21.4,
00075     // 220 - 229
00076     22.3, 23.1, 24.0, 24.8, 25.6, 26.5, 27.3, 28.2, 29.0, 29.9,
00077     // 230 - 239
00078     30.71, 30.53, 31.45, 29.6, 30.2, 30.65, 30.27, 29.52, 30.08, 29.8,
00079     // 240 - 245
00080     29.87, 30.25, 30.5, 29.8, 29.17, 28.67};
00081 
00082   return (a>=20) ? NLD[a-20] : 0.1*a;
00083 }

G4LorentzVector G4InuclSpecialFunctions::generateWithFixedTheta ( G4double  ct,
G4double  p,
G4double  mass = 0. 
)

Definition at line 109 of file G4InuclSpecialFunctions.cc.

References randomPHI().

Referenced by G4NucleiModel::initializeCascad().

00110                                                                {
00111   G4double phi = randomPHI();
00112   G4double pt = p * std::sqrt(std::fabs(1.0 - ct * ct));
00113 
00114   static G4ThreeVector pvec;    // Buffers to avoid memory thrashing
00115   static G4LorentzVector momr;
00116 
00117   pvec.set(pt*std::cos(phi), pt*std::sin(phi), p*ct);
00118   momr.setVectM(pvec, mass);
00119 
00120   return momr;
00121 }

G4LorentzVector G4InuclSpecialFunctions::generateWithRandomAngles ( G4double  p,
G4double  mass = 0. 
)

Definition at line 124 of file G4InuclSpecialFunctions.cc.

References randomCOS_SIN(), and randomPHI().

Referenced by G4NonEquilibriumEvaporator::collide(), G4Fissioner::collide(), G4EquilibriumEvaporator::collide(), G4NucleiModel::generateNucleonMomentum(), and G4NucleiModel::initializeCascad().

00124                                                                            {
00125   std::pair<G4double, G4double> COS_SIN = randomCOS_SIN();
00126   G4double phi = randomPHI();
00127   G4double pt = p * COS_SIN.second;
00128   
00129   static G4ThreeVector pvec;    // Buffers to avoid memory thrashing
00130   static G4LorentzVector momr;
00131 
00132   pvec.set(pt*std::cos(phi), pt*std::sin(phi), p*COS_SIN.first);
00133   momr.setVectM(pvec, mass);
00134 
00135   return momr;
00136 }

G4double G4InuclSpecialFunctions::bindingEnergy ( G4int  A,
G4int  Z 
)

Definition at line 37 of file bindingEnergy.cc.

References G4NucleiProperties::GetBindingEnergy().

Referenced by G4VAtomDeexcitation::AlongStepDeexcitation(), G4eIonisationSpectrum::AverageEnergy(), G4BigBanger::collide(), G4EquilibriumEvaporator::collide(), G4Fissioner::collide(), G4NonEquilibriumEvaporator::collide(), G4CascadeColliderBase::explosion(), G4AtomicTransitionManager::G4AtomicTransitionManager(), G4ProtonField::GetBarrier(), G4AntiProtonField::GetField(), G4KaonMinusField::GetField(), G4KaonPlusField::GetField(), G4KaonZeroField::GetField(), G4PionMinusField::GetField(), G4PionPlusField::GetField(), G4PionZeroField::GetField(), G4SigmaMinusField::GetField(), G4SigmaPlusField::GetField(), G4SigmaZeroField::GetField(), G4CascadeRecoilMaker::goodNucleus(), G4NucleiModel::initializeCascad(), G4hImpactIonisation::PostStepDoIt(), G4eIonisationSpectrum::Probability(), G4eIonisationSpectrum::SampleEnergy(), G4DNABornIonisationModel::SampleSecondaries(), G4DNARuddIonisationExtendedModel::SampleSecondaries(), G4DNARuddIonisationModel::SampleSecondaries(), G4KleinNishinaModel::SampleSecondaries(), G4LivermoreIonisationModel::SampleSecondaries(), G4LivermorePhotoElectricModel::SampleSecondaries(), G4LivermorePolarizedPhotoElectricModel::SampleSecondaries(), G4MuElecInelasticModel::SampleSecondaries(), G4PEEffectFluoModel::SampleSecondaries(), G4PEEffectModel::SampleSecondaries(), G4PenelopeComptonModel::SampleSecondaries(), G4PenelopeIonisationModel::SampleSecondaries(), G4PenelopePhotoElectricModel::SampleSecondaries(), and G4KM_OpticalEqRhs::SetFactor().

00037                                                                 {
00038   // NOTE:  Test condition copied from G4NucleiProperties.cc; not encapsulated
00039   if (A < 1 || Z < 0 || Z > A) return 0.;
00040 
00041   return G4NucleiProperties::GetBindingEnergy(A, Z);
00042 }

G4double G4InuclSpecialFunctions::bindingEnergyAsymptotic ( G4int  A,
G4int  Z 
)

Definition at line 33 of file bindingEnergyAsymptotic.cc.

References G4cbrt().

Referenced by G4Fissioner::collide().

00033                                                                           {
00034   // calculates the nuclei binding energy 
00035   // using smooth liquid high energy formula  
00036   G4double X = (1.0 - 2.0*Z/A); X *= X;
00037   G4double X1 = G4cbrt(A);
00038   G4double X2 = X1 * X1;
00039   G4double X3 = 1.0 / X1;
00040   G4double X4 = 1.0 / X2;
00041   G4double X5 = (1.0 - 0.62025 * X4); X5 *= X5;
00042 
00043   G4double DM = 17.035 * (1.0 - 1.846 * X) * A -
00044     25.8357 * (1.0 - 1.712 * X) * X2 * X5 -
00045     0.779 * Z * (Z - 1) * X3 * 
00046     (1.0 - 1.5849 * X4 + 1.2273 / A + 1.5772 * X4 * X4) +
00047     0.4328 * G4cbrt(Z*Z*Z*Z) * X3 * 
00048     (1.0 - 0.57811 * X3 - 0.14518 * X4 + 0.496 / A);
00049 
00050   return DM;
00051 }

G4double G4InuclSpecialFunctions::getAL ( G4int  A  ) 

Definition at line 42 of file G4InuclSpecialFunctions.cc.

References G4cbrt().

Referenced by G4EquilibriumEvaporator::collide(), and G4NonEquilibriumEvaporator::collide().

00042                                                {
00043   return 0.76 + 2.2 / G4cbrt(A);
00044 }

G4double G4InuclSpecialFunctions::csNN ( G4double  e  ) 

Definition at line 46 of file G4InuclSpecialFunctions.cc.

Referenced by G4NonEquilibriumEvaporator::collide().

00046                                                  {
00047   G4double snn;
00048 
00049   if (e < 40.0) {
00050     snn = -1174.8 / (e * e) + 3088.5 / e + 5.3107;
00051   } else {
00052     snn = 93074.0 / (e * e) - 11.148 / e + 22.429;
00053   }
00054 
00055   return snn; 
00056 }

G4double G4InuclSpecialFunctions::csPN ( G4double  e  ) 

Definition at line 58 of file G4InuclSpecialFunctions.cc.

Referenced by G4NonEquilibriumEvaporator::collide().

00058                                                  {
00059   G4double spn;
00060 
00061   if (e < 40.0) {
00062     spn = -5057.4 / (e * e) + 9069.2 / e + 6.9466;
00063   } else {
00064     spn = 239380.0 / (e * e) + 1802.0 / e + 27.147;
00065   }
00066 
00067   return spn; 
00068 }

G4double G4InuclSpecialFunctions::FermiEnergy ( G4int  A,
G4int  Z,
G4int  ntype 
)

Definition at line 72 of file G4InuclSpecialFunctions.cc.

References G4cbrt().

Referenced by G4NonEquilibriumEvaporator::collide().

00072                                                                            {
00073   const G4double C = 55.4;
00074   G4double arg = (ntype==0) ? G4double(A-Z)/A : G4double(Z)/A;
00075 
00076   return C * G4cbrt(arg*arg);   // 2/3 power
00077 }

G4double G4InuclSpecialFunctions::G4cbrt ( G4double  x  ) 

Definition at line 79 of file G4InuclSpecialFunctions.cc.

Referenced by bindingEnergyAsymptotic(), G4EquilibriumEvaporator::collide(), G4Fissioner::collide(), G4NonEquilibriumEvaporator::collide(), FermiEnergy(), G4RegionModel::G4RegionModel(), G4NucleiModel::generateModel(), G4NucleiModel::generateNucleonMomentum(), getAL(), G4CascadeColliderBase::inelasticInteractionPossible(), and G4IntraNucleiCascader::initialize().

00079                                                    {
00080   return x==0 ? 0. : (x<0?-1.:1.)*std::exp(std::log(std::fabs(x))/3.);
00081 }

G4double G4InuclSpecialFunctions::inuclRndm (  ) 

Definition at line 83 of file G4InuclSpecialFunctions.cc.

References G4UniformRand.

Referenced by G4EquilibriumEvaporator::collide(), G4Fissioner::collide(), G4NonEquilibriumEvaporator::collide(), G4NucleiModel::generateNucleonMomentum(), G4NucleiModel::initializeCascad(), randomCOS_SIN(), randomGauss(), randomPHI(), and G4IntraNucleiCascader::setupCascade().

00083                                             { 
00084   return G4UniformRand(); 
00085 } 

G4double G4InuclSpecialFunctions::randomGauss ( G4double  sigma  ) 

Definition at line 87 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by G4Fissioner::collide().

00087                                                             {
00088   const G4double eps = 1.0e-6;
00089   G4double r1 = inuclRndm();
00090   r1 = r1 > eps ? r1 : eps;
00091   G4double r2 = inuclRndm();
00092   r2 = r2 > eps ? r2 : eps;
00093   r2 = r2 < 1.0 - eps ? r2 : 1.0 - eps; 
00094 
00095   return sigma * std::sin(twopi * r1) * std::sqrt(-2.0 * std::log(r2)); 
00096 } 

G4double G4InuclSpecialFunctions::randomPHI (  ) 

Definition at line 98 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by generateWithFixedTheta(), generateWithRandomAngles(), and G4NucleiModel::initializeCascad().

00098                                             { 
00099   return twopi * inuclRndm();
00100 } 

std::pair<G4double, G4double> G4InuclSpecialFunctions::randomCOS_SIN (  ) 

Definition at line 102 of file G4InuclSpecialFunctions.cc.

References inuclRndm().

Referenced by generateWithRandomAngles().

00102                                                                    {
00103   G4double CT = 1.0 - 2.0 * inuclRndm();
00104 
00105   return std::pair<G4double, G4double>(CT, std::sqrt(1.0 - CT*CT));
00106 }

G4LorentzVector G4InuclSpecialFunctions::generateWithFixedTheta ( G4double  ct,
G4double  p,
G4double  mass 
)

Definition at line 109 of file G4InuclSpecialFunctions.cc.

References randomPHI().

Referenced by G4NucleiModel::initializeCascad().

00110                                                                {
00111   G4double phi = randomPHI();
00112   G4double pt = p * std::sqrt(std::fabs(1.0 - ct * ct));
00113 
00114   static G4ThreeVector pvec;    // Buffers to avoid memory thrashing
00115   static G4LorentzVector momr;
00116 
00117   pvec.set(pt*std::cos(phi), pt*std::sin(phi), p*ct);
00118   momr.setVectM(pvec, mass);
00119 
00120   return momr;
00121 }

G4LorentzVector G4InuclSpecialFunctions::generateWithRandomAngles ( G4double  p,
G4double  mass 
)

Definition at line 124 of file G4InuclSpecialFunctions.cc.

References randomCOS_SIN(), and randomPHI().

Referenced by G4EquilibriumEvaporator::collide(), G4Fissioner::collide(), G4NonEquilibriumEvaporator::collide(), G4NucleiModel::generateNucleonMomentum(), and G4NucleiModel::initializeCascad().

00124                                                                            {
00125   std::pair<G4double, G4double> COS_SIN = randomCOS_SIN();
00126   G4double phi = randomPHI();
00127   G4double pt = p * COS_SIN.second;
00128   
00129   static G4ThreeVector pvec;    // Buffers to avoid memory thrashing
00130   static G4LorentzVector momr;
00131 
00132   pvec.set(pt*std::cos(phi), pt*std::sin(phi), p*COS_SIN.first);
00133   momr.setVectM(pvec, mass);
00134 
00135   return momr;
00136 }

G4double G4InuclSpecialFunctions::nucleiLevelDensity ( G4int  a  ) 

Definition at line 33 of file nucleiLevelDensity.cc.

Referenced by G4Fissioner::collide().

00033                                                             {
00034   const G4double NLD[226] = {
00035     // 20 - 29
00036     3.94, 3.84, 3.74, 3.64, 3.55, 4.35, 4.26, 4.09, 3.96, 4.18,
00037     // 30 - 39
00038     4.39, 4.61, 4.82, 4.44, 4.44, 4.43, 4.42, 5.04, 5.66, 5.8,
00039     // 40 - 49
00040     5.95, 5.49, 6.18, 7.11, 6.96, 7.2, 7.73, 6.41, 6.85, 6.77,
00041     // 50 - 59
00042     6.91, 7.3, 7.2, 6.86, 8.06, 7.8, 7.82, 8.41, 8.13, 7.19,
00043     // 60 - 69
00044     8.35, 8.13, 8.02, 8.93, 8.9, 9.7, 9.65, 10.55, 9.38, 9.72,
00045     // 70 - 79
00046     10.66, 11.98, 12.76, 12.1, 12.86, 13.0, 12.81, 12.8, 12.65, 12.0,
00047     // 80 - 89
00048     12.69, 14.05, 13.33, 13.28, 13.22, 13.17, 8.66, 11.03, 10.4, 13.47,
00049     // 90 - 99
00050     10.17, 12.22, 11.62, 12.95, 13.15, 13.57, 12.87, 16.2, 14.71, 15.69,
00051     // 100 - 109
00052     14.1, 18.56, 16.22, 16.7, 17.13, 17.0, 16.86, 16.2, 15.61, 16.8,
00053     // 110 - 119
00054     17.93, 17.5, 16.97, 17.3, 17.6, 15.78, 16.8, 17.49, 16.03, 15.08,
00055     // 120 - 129
00056     16.74, 17.74, 17.43, 18.1, 17.1, 19.01, 17.02, 17.0, 17.02, 18.51,
00057     // 130 - 139
00058     17.2, 16.8, 16.97, 16.14, 16.91, 17.69, 15.5, 14.56, 14.35, 16.5,
00059     // 140 - 149
00060     18.29, 17.8, 17.05, 21.31, 19.15, 19.5, 19.78, 20.3, 20.9, 21.9,
00061     // 150 - 159
00062     22.89, 25.68, 24.6, 24.91, 23.24, 22.9, 22.46, 21.98, 21.64, 21.8,
00063     // 160 - 169
00064     21.85, 21.7, 21.69, 23.7, 21.35, 23.03, 20.66, 21.81, 20.77, 22.2,
00065     // 170 - 179
00066     22.58, 22.55, 21.45, 21.16, 21.02, 20.87, 22.09, 22.0, 21.28, 23.05,
00067     // 180 - 189
00068     21.7, 21.18, 22.28, 23.0, 22.11, 23.56, 22.83, 24.88, 22.6, 23.5,
00069     // 190 - 199
00070     23.89, 23.9, 23.94, 21.16, 22.3, 21.7, 21.19, 20.7, 20.29, 21.32,
00071     // 200 - 209
00072     19.0, 17.93, 17.85, 15.7, 13.54, 11.9, 10.02, 10.48, 10.28, 11.72,
00073     // 210 - 219
00074     13.81, 14.7, 15.5, 16.3, 17.2, 18.0, 18.9, 19.7, 20.6, 21.4,
00075     // 220 - 229
00076     22.3, 23.1, 24.0, 24.8, 25.6, 26.5, 27.3, 28.2, 29.0, 29.9,
00077     // 230 - 239
00078     30.71, 30.53, 31.45, 29.6, 30.2, 30.65, 30.27, 29.52, 30.08, 29.8,
00079     // 240 - 245
00080     29.87, 30.25, 30.5, 29.8, 29.17, 28.67};
00081 
00082   return (a>=20) ? NLD[a-20] : 0.1*a;
00083 }

void G4InuclSpecialFunctions::paraMaker ( G4double  Z,
std::pair< std::vector< G4double >, std::vector< G4double > > &  parms 
)

Definition at line 38 of file paraMaker.cc.

References G4cout, G4endl, and G4CascadeInterpolator< NBINS >::interpolate().

Referenced by G4EquilibriumEvaporator::collide().

00039                                                                       {
00040   G4int verboseLevel(0);
00041 
00042   if (verboseLevel > 3) {
00043     G4cout << " >>> G4InuclSpecialFunctions::paraMaker" << G4endl;
00044   }
00045 
00046   // calculates the coefficients for the phenomenological formulas for
00047   // coulumb barier, c.s. etc needed for evaporators
00048 
00049   static const G4double Z1[5] = {10.0, 20.0, 30.0, 50.0, 70.0};
00050   static const G4double AP[5] = {0.42, 0.58, 0.68, 0.77, 0.80};
00051   static const G4double CP[5] = {0.50, 0.28, 0.20, 0.15, 0.10};
00052   static const G4double AA[5] = {0.68, 0.82, 0.91, 0.97, 0.98};
00053   static const G4double CA[5] = {0.10, 0.10, 0.10, 0.08, 0.06};
00054 
00055   // Set up input buffer for results
00056   std::vector<G4double>& AK = parms.first; 
00057   AK.resize(6,0.);
00058 
00059   std::vector<G4double>& CPA = parms.second;
00060   CPA.resize(6,0.);
00061 
00062   AK[0] = 0.0;
00063   CPA[0] = 0.0;
00064 
00065   static G4CascadeInterpolator<5> interp(Z1, false);    // Do not extrapolate
00066   AK[1]  = interp.interpolate(Z, AP);
00067   AK[5]  = interp.interpolate(Z, AA);
00068   CPA[1] = interp.interpolate(Z, CP);
00069   CPA[5] = interp.interpolate(Z, CA);
00070   
00071   AK[2] = AK[1] + 0.06;
00072   AK[3] = AK[1] + 0.12;
00073   AK[4] = AK[5] - 0.06;
00074 
00075   CPA[2] = CPA[1] * 0.5;
00076   CPA[3] = CPA[1] / 3.0;  
00077   CPA[4] = 4.0 * CPA[5] / 3.0;
00078 
00079   return;       // Buffer filled
00080 }

void G4InuclSpecialFunctions::paraMakerTruncated ( G4double  Z,
std::pair< G4double, G4double > &  parms 
)

Definition at line 83 of file paraMaker.cc.

References G4cout, G4endl, and G4CascadeInterpolator< NBINS >::interpolate().

Referenced by G4NonEquilibriumEvaporator::collide().

00084                                                                        {
00085   G4int verboseLevel(0);
00086 
00087   if (verboseLevel > 3) {
00088     G4cout << " >>> G4InuclSpecialFunctions::paraMakerTruncated" << G4endl;
00089   }
00090 
00091   // truncated version of the previous one
00092   static const G4double Z1[5] = {10.0, 20.0, 30.0, 50.0, 70.0};
00093   static const G4double AP[5] = {0.42, 0.58, 0.68, 0.77, 0.8};
00094   static const G4double CP[5] = {0.5, 0.28, 0.2, 0.15, 0.1};
00095 
00096   // Set up buffers for output
00097   G4double& AK2=parms.first;
00098   G4double& CP2=parms.second;
00099 
00100   static G4CascadeInterpolator<5> interp(Z1, false);            // Do not extrapolate
00101   AK2 = interp.interpolate(Z, AP);
00102   CP2 = interp.interpolate(Z, CP);
00103 
00104   return;       // Buffer filled
00105 }


Generated on Mon May 27 17:54:09 2013 for Geant4 by  doxygen 1.4.7