G4PreCompoundDeuteron Class Reference

#include <G4PreCompoundDeuteron.hh>

Inheritance diagram for G4PreCompoundDeuteron:

G4PreCompoundIon G4PreCompoundFragment G4VPreCompoundFragment

Public Member Functions

 G4PreCompoundDeuteron ()
 ~G4PreCompoundDeuteron ()

Protected Member Functions

virtual G4double GetRj (G4int NumberParticles, G4int NumberCharged)
virtual G4double CrossSection (G4double ekin)
virtual G4double FactorialFactor (G4int N, G4int P)
virtual G4double CoalescenceFactor (G4int A)
virtual G4double GetAlpha ()
G4double GetOpt12 (G4double K)
G4double GetOpt34 (G4double K)

Detailed Description

Definition at line 42 of file G4PreCompoundDeuteron.hh.


Constructor & Destructor Documentation

G4PreCompoundDeuteron::G4PreCompoundDeuteron (  ) 

Definition at line 47 of file G4PreCompoundDeuteron.cc.

References G4VPreCompoundFragment::GetA(), and G4VPreCompoundFragment::GetZ().

00048   : G4PreCompoundIon(G4Deuteron::Deuteron(), &theDeuteronCoulombBarrier)
00049 {
00050   theA = GetA();
00051   theZ = GetZ();
00052   ResidualA = ResidualZ = 0; 
00053   ResidualAthrd = FragmentAthrd = 0.0;
00054   FragmentA = theA;
00055 }

G4PreCompoundDeuteron::~G4PreCompoundDeuteron (  ) 

Definition at line 57 of file G4PreCompoundDeuteron.cc.

00058 {}


Member Function Documentation

G4double G4PreCompoundDeuteron::CoalescenceFactor ( G4int  A  )  [protected, virtual]

Implements G4PreCompoundIon.

Definition at line 65 of file G4PreCompoundDeuteron.cc.

00066 {
00067   return 16.0/G4double(A);
00068 }    

G4double G4PreCompoundDeuteron::CrossSection ( G4double  ekin  )  [protected, virtual]

Implements G4PreCompoundIon.

Definition at line 86 of file G4PreCompoundDeuteron.cc.

References G4endl, G4VPreCompoundFragment::g4pow, G4VPreCompoundFragment::GetA(), G4PreCompoundIon::GetOpt0(), GetOpt12(), GetOpt34(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), G4VPreCompoundFragment::OPTxs, G4VPreCompoundFragment::ResidualA13(), and G4Pow::Z13().

00087 {
00088   ResidualA = GetRestA();
00089   ResidualZ = GetRestZ(); 
00090   theA = GetA();
00091   theZ = GetZ();
00092   ResidualAthrd = ResidualA13();
00093   FragmentA = theA + ResidualA;
00094   FragmentAthrd = g4pow->Z13(FragmentA);
00095 
00096   if (OPTxs==0) { return GetOpt0( K); }
00097   else if( OPTxs==1 || OPTxs==2) { return GetOpt12( K); }
00098   else if (OPTxs==3 || OPTxs==4) { return GetOpt34( K); }
00099   else{
00100     std::ostringstream errOs;
00101     errOs << "BAD DEUTERON CROSS SECTION OPTION !!"  <<G4endl;
00102     throw G4HadronicException(__FILE__, __LINE__, errOs.str());
00103     return 0.;
00104   }
00105 }

G4double G4PreCompoundDeuteron::FactorialFactor ( G4int  N,
G4int  P 
) [protected, virtual]

Implements G4PreCompoundIon.

Definition at line 60 of file G4PreCompoundDeuteron.cc.

00061 {
00062   return G4double((N-1)*(N-2)*(P-1)*P)/2.0;
00063 }

G4double G4PreCompoundDeuteron::GetAlpha (  )  [protected, virtual]

Implements G4PreCompoundIon.

Definition at line 107 of file G4PreCompoundDeuteron.cc.

00108 {
00109   G4double C = 0.0;
00110   G4int aZ = theZ + ResidualZ;
00111   if (aZ >= 70) 
00112     {
00113       C = 0.10;
00114     } 
00115   else 
00116     {
00117       C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375; 
00118     }
00119   return 1.0 + C/2.0;
00120 }

G4double G4PreCompoundDeuteron::GetOpt12 ( G4double  K  )  [protected]

Definition at line 125 of file G4PreCompoundDeuteron.cc.

References G4VPreCompoundFragment::g4pow, and G4Pow::powZ().

Referenced by CrossSection().

00126 {
00127   G4double Kc = K;
00128 
00129   // JMQ xsec is set constat above limit of validity
00130   if (K > 50*MeV) { Kc = 50*MeV; }
00131 
00132   G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
00133  
00134   G4double    p0 = -38.21;
00135   G4double    p1 = 922.6;
00136   G4double    p2 = -2804.;
00137   G4double    landa0 = -0.0323;
00138   G4double    landa1 = -5.48;
00139   G4double    mm0 = 336.1;
00140   G4double    mu1 = 0.48;
00141   G4double    nu0 = 524.3;
00142   G4double    nu1 = -371.8;
00143   G4double    nu2 = -5.924;  
00144   G4double    delta=1.2;            
00145 
00146   Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
00147   p = p0 + p1/Ec + p2/(Ec*Ec);
00148   landa = landa0*ResidualA + landa1;
00149   G4double resmu1 = g4pow->powZ(ResidualA,mu1); 
00150   mu = mm0*resmu1;
00151   nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
00152   q = landa - nu/(Ec*Ec) - 2*p*Ec;
00153   r = mu + 2*nu/Ec + p*(Ec*Ec);
00154 
00155   ji=std::max(Kc,Ec);
00156   if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
00157   else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
00158                  
00159   if (xs <0.0) {xs=0.0;}
00160               
00161   return xs;
00162 }

G4double G4PreCompoundDeuteron::GetOpt34 ( G4double  K  )  [protected]

Definition at line 165 of file G4PreCompoundDeuteron.cc.

References G4VPreCompoundFragment::g4pow, and G4Pow::powZ().

Referenced by CrossSection().

00167 {
00168 
00169   G4double landa, mu, nu, p ,signor(1.),sig;
00170   G4double ec,ecsq,xnulam,etest(0.),a; 
00171   G4double b,ecut,cut,ecut2,geom,elab;
00172 
00173   G4double     flow = 1.e-18;
00174   G4double     spill= 1.e+18;
00175 
00176   G4double     p0 = 0.798;
00177   G4double     p1 = 420.3;
00178   G4double     p2 = -1651.;
00179   G4double     landa0 = 0.00619;
00180   G4double     landa1 = -7.54;
00181   G4double     mm0 = 583.5;
00182   G4double     mu1 = 0.337;
00183   G4double     nu0 = 421.8;
00184   G4double     nu1 = -474.5;
00185   G4double     nu2 = -3.592;      
00186  
00187   G4double     ra=0.80;
00188         
00189   //JMQ 13/02/09 increase of reduced radius to lower the barrier
00190   // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
00191   ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
00192   ecsq = ec * ec;
00193   p = p0 + p1/ec + p2/ecsq;
00194   landa = landa0*ResidualA + landa1;
00195   a = g4pow->powZ(ResidualA,mu1);
00196   mu = mm0 * a;
00197   nu = a* (nu0+nu1*ec+nu2*ecsq);  
00198   xnulam = nu / landa;
00199   if (xnulam > spill) { xnulam=0.; }
00200   if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
00201 
00202   a = -2.*p*ec + landa - nu/ecsq;
00203   b = p*ecsq + mu + 2.*nu/ec;
00204   ecut = 0.;
00205   cut = a*a - 4.*p*b;
00206   if (cut > 0.) { ecut = std::sqrt(cut); }
00207   ecut = (ecut-a) / (p+p);
00208   ecut2 = ecut;
00209   //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
00210   //ecut<0 means that there is no cut with energy axis, i.e. xs is set 
00211   //to 0 bellow minimum
00212   //  if (cut < 0.) ecut2 = ecut - 2.;
00213   if (cut < 0.) { ecut2 = ecut; }
00214   elab = K * FragmentA / G4double(ResidualA);
00215   sig = 0.;
00216 
00217   if (elab <= ec) { //start for E<Ec
00218     if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
00219   }           //end for E<Ec
00220   else {           //start for E>Ec
00221     sig = (landa*elab+mu+nu/elab) * signor;
00222     geom = 0.;
00223     if (xnulam < flow || elab < etest) { return sig; }
00224     geom = std::sqrt(theA*K);
00225     geom = 1.23*ResidualAthrd + ra + 4.573/geom;
00226     geom = 31.416 * geom * geom;
00227     sig = std::max(geom,sig);
00228   }           //end for E>Ec
00229   return sig;
00230 }

G4double G4PreCompoundDeuteron::GetRj ( G4int  NumberParticles,
G4int  NumberCharged 
) [protected, virtual]

Implements G4PreCompoundIon.

Definition at line 70 of file G4PreCompoundDeuteron.cc.

00071 {
00072   G4double rj = 0.0;
00073   if(nCharged >=1 && (nParticles-nCharged) >=1) {
00074     G4double denominator = G4double(nParticles*(nParticles-1));
00075     rj = 2*nCharged*(nParticles-nCharged)/denominator; 
00076   }
00077   return rj;
00078 }


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