#include <G4PreCompoundIon.hh>
Inheritance diagram for G4PreCompoundIon:
Public Member Functions | |
G4PreCompoundIon (const G4ParticleDefinition *, G4VCoulombBarrier *aCoulombBarrier) | |
virtual | ~G4PreCompoundIon () |
Protected Member Functions | |
virtual G4double | ProbabilityDistributionFunction (G4double eKin, const G4Fragment &aFragment) |
virtual G4double | CrossSection (G4double ekin)=0 |
virtual G4double | GetRj (G4int NumberParticles, G4int NumberCharged)=0 |
virtual G4double | FactorialFactor (G4int N, G4int P)=0 |
virtual G4double | CoalescenceFactor (G4int A)=0 |
virtual G4double | GetAlpha ()=0 |
G4double | GetBeta () |
G4double | GetOpt0 (G4double ekin) |
Definition at line 42 of file G4PreCompoundIon.hh.
G4PreCompoundIon::G4PreCompoundIon | ( | const G4ParticleDefinition * | , | |
G4VCoulombBarrier * | aCoulombBarrier | |||
) |
Definition at line 47 of file G4PreCompoundIon.cc.
References G4PreCompoundParameters::Getr0(), G4INCL::Math::pi, and G4VPreCompoundFragment::theParameters.
00049 : G4PreCompoundFragment(part,aCoulombBarrier) 00050 { 00051 G4double r0 = theParameters->Getr0(); 00052 fact = 0.75*CLHEP::millibarn/(CLHEP::pi*r0*r0*r0); 00053 }
G4PreCompoundIon::~G4PreCompoundIon | ( | ) | [virtual] |
Implemented in G4PreCompoundAlpha, G4PreCompoundDeuteron, G4PreCompoundHe3, and G4PreCompoundTriton.
Referenced by ProbabilityDistributionFunction().
Implemented in G4PreCompoundAlpha, G4PreCompoundDeuteron, G4PreCompoundHe3, and G4PreCompoundTriton.
Referenced by ProbabilityDistributionFunction().
Implemented in G4PreCompoundAlpha, G4PreCompoundDeuteron, G4PreCompoundHe3, and G4PreCompoundTriton.
Referenced by ProbabilityDistributionFunction().
virtual G4double G4PreCompoundIon::GetAlpha | ( | ) | [protected, pure virtual] |
Implemented in G4PreCompoundAlpha, G4PreCompoundDeuteron, G4PreCompoundHe3, and G4PreCompoundTriton.
Referenced by GetOpt0().
G4double G4PreCompoundIon::GetBeta | ( | ) | [inline, protected] |
Definition at line 86 of file G4PreCompoundIon.hh.
References G4VPreCompoundFragment::GetCoulombBarrier().
Referenced by GetOpt0().
00087 { 00088 return -GetCoulombBarrier(); 00089 }
Definition at line 92 of file G4PreCompoundIon.hh.
References GetAlpha(), GetBeta(), G4PreCompoundParameters::Getr0(), G4INCL::Math::pi, G4VPreCompoundFragment::ResidualA13(), and G4VPreCompoundFragment::theParameters.
Referenced by G4PreCompoundTriton::CrossSection(), G4PreCompoundHe3::CrossSection(), G4PreCompoundDeuteron::CrossSection(), and G4PreCompoundAlpha::CrossSection().
00093 { 00094 G4double r0 = theParameters->Getr0()*ResidualA13(); 00095 // cross section is now given in mb (r0 is in mm) for the sake of consistency 00096 //with the rest of the options 00097 return 1.e+25*CLHEP::pi*r0*r0*ResidualA13()*GetAlpha()*(1.+GetBeta()/K); 00098 }
virtual G4double G4PreCompoundIon::GetRj | ( | G4int | NumberParticles, | |
G4int | NumberCharged | |||
) | [protected, pure virtual] |
Implemented in G4PreCompoundAlpha, G4PreCompoundDeuteron, G4PreCompoundHe3, and G4PreCompoundTriton.
Referenced by ProbabilityDistributionFunction().
G4double G4PreCompoundIon::ProbabilityDistributionFunction | ( | G4double | eKin, | |
const G4Fragment & | aFragment | |||
) | [protected, virtual] |
Implements G4PreCompoundFragment.
Definition at line 59 of file G4PreCompoundIon.cc.
References CoalescenceFactor(), CrossSection(), FactorialFactor(), G4VPreCompoundFragment::g4pow, G4VPreCompoundFragment::GetA(), G4Fragment::GetA_asInt(), G4VPreCompoundFragment::GetBindingEnergy(), G4Fragment::GetExcitationEnergy(), G4PreCompoundParameters::GetLevelDensity(), G4VPreCompoundFragment::GetMaximalKineticEnergy(), G4Fragment::GetNumberOfCharged(), G4Fragment::GetNumberOfHoles(), G4Fragment::GetNumberOfParticles(), G4VPreCompoundFragment::GetReducedMass(), G4VPreCompoundFragment::GetRestA(), GetRj(), G4VPreCompoundFragment::IsItPossible(), G4Pow::powN(), and G4VPreCompoundFragment::theParameters.
00061 { 00062 if ( !IsItPossible(aFragment) ) { return 0.0; } 00063 G4double efinal = eKin + GetBindingEnergy(); 00064 //G4cout << "Efinal= " << efinal << " Ekin= " << eKin << G4endl; 00065 if(efinal <= 0.0 ) { return 0.0; } 00066 00067 G4double U = aFragment.GetExcitationEnergy(); 00068 G4int P = aFragment.GetNumberOfParticles(); 00069 G4int H = aFragment.GetNumberOfHoles(); 00070 G4int A = GetA(); 00071 G4int N = P + H; 00072 00073 G4double g0 = (6.0/pi2)*aFragment.GetA_asInt()*theParameters->GetLevelDensity(); 00074 G4double g1 = (6.0/pi2)*GetRestA()*theParameters->GetLevelDensity(); 00075 00076 //JMQ 06/02/209 This is THE BUG that was killing cluster emission 00077 // G4double gj = (6.0/pi2)*GetA() * 00078 // G4PreCompoundParameters::GetAddress()->GetLevelDensity(); 00079 00080 G4double gj = g1; 00081 00082 G4double A0 = G4double(P*P+H*H+P-3*H)/(4.0*g0); 00083 G4double A1 = std::max(0.0,(A0*g0 + A*(A-2*P-1)*0.25)/g1); 00084 00085 G4double E0 = U - A0; 00086 //G4cout << "E0= " << E0 << G4endl; 00087 if (E0 <= 0.0) { return 0.0; } 00088 00089 G4double E1 = (std::max(0.0,GetMaximalKineticEnergy() - eKin - A1)); 00090 00091 G4double Aj = A*(A+1)/(4.0*gj); 00092 G4double Ej = std::max(0.0,efinal - Aj); 00093 00094 G4double rj = GetRj(P, aFragment.GetNumberOfCharged()); 00095 G4double xs = CrossSection(eKin); 00096 00097 //G4cout << "rj= " << rj << " xs= " << xs << G4endl; 00098 00099 // JMQ 10/02/09 reshaping of the formula (unnecessary std::pow elimitated) 00100 /* 00101 G4double r0 = theParameters->Getr0(); 00102 G4double pA = (3.0/4.0) * std::sqrt(std::max(0.0, 2.0/(GetReducedMass()* 00103 (eKin+GetBindingEnergy()))))/(pi * r0 * r0 *r0* GetRestA())* 00104 eKin*CrossSection(eKin)*millibarn* 00105 CoalescenceFactor(aFragment.GetA_asInt()) * FactorialFactor(N,P)* 00106 GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged()); 00107 00108 G4double pB = std::pow((g1*E1)/(g0*E0),N-GetA()-1.0)*(g1/g0); 00109 G4double pC = std::pow((gj*Ej)/(g0*E0),GetA()-1.0)*(gj/g0)/E0; 00110 pA *= pB * pC; 00111 */ 00112 00113 G4double pA = fact*eKin*xs*rj 00114 * CoalescenceFactor(aFragment.GetA_asInt()) * FactorialFactor(N,P) 00115 * std::sqrt(2.0/(GetReducedMass()*efinal)) 00116 * g4pow->powN(g1*E1/(g0*E0), N-A-1) 00117 * g4pow->powN(gj*Ej/(g0*E0), A-1)*gj*g1/(g0*g0*E0*GetRestA()); 00118 00119 return pA; 00120 }