Ignore:
Timestamp:
Nov 5, 2010, 3:45:55 PM (14 years ago)
Author:
garnier
Message:

update ti head

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc

    r1337 r1340  
    2424// ********************************************************************
    2525//
    26 //
    27 // $Id: G4PreCompoundHe3.cc,v 1.6 2010/04/09 14:06:17 vnivanch Exp $
    28 // GEANT4 tag $Name: geant4-09-04-beta-01 $
     26// $Id: G4PreCompoundHe3.cc,v 1.7 2010/08/28 15:16:55 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-03-ref-09 $
    2928//
    3029// -------------------------------------------------------------------
     
    3938// Modified: 
    4039// 21.08.2008 J. M. Quesada add choice of options 
     40// 20.08.2010 V.Ivanchenko added G4Pow and G4PreCompoundParameters pointers
     41//                         use int Z and A and cleanup
    4142//
    4243 
    4344#include "G4PreCompoundHe3.hh"
    44 
    45 G4ReactionProduct * G4PreCompoundHe3::GetReactionProduct() const
    46 {
    47   G4ReactionProduct * theReactionProduct =
    48     new G4ReactionProduct(G4He3::He3Definition());
    49   theReactionProduct->SetMomentum(GetMomentum().vect());
    50   theReactionProduct->SetTotalEnergy(GetMomentum().e());
    51 #ifdef PRECOMPOUND_TEST
    52   theReactionProduct->SetCreatorModel("G4PrecompoundModel");
    53 #endif
    54   return theReactionProduct;
    55 }   
    56 
    57 G4double G4PreCompoundHe3::FactorialFactor(const G4double N, const G4double P)
    58 {
    59   return
    60       (N-3.0)*(P-2.0)*(
    61                        (((N-2.0)*(P-1.0))/2.0) *(
    62                                                  (((N-1.0)*P)/3.0)
    63                                                  )
    64                        );
    65 }
    66  
    67 G4double G4PreCompoundHe3::CoalescenceFactor(const G4double A)
    68 {
    69   return 243.0/(A*A);
     45#include "G4He3.hh"
     46
     47G4PreCompoundHe3::G4PreCompoundHe3()
     48  : G4PreCompoundIon(G4He3::He3(), &theHe3CoulombBarrier)
     49{}
     50
     51G4PreCompoundHe3::~G4PreCompoundHe3()
     52{}
     53
     54G4double G4PreCompoundHe3::FactorialFactor(G4int N, G4int P)
     55{
     56  return G4double((N-3)*(P-2)*(N-2)*(P-1)*(N-1)*P)/6.0;
     57}
     58 
     59G4double G4PreCompoundHe3::CoalescenceFactor(G4int A)
     60{
     61  return 243.0/G4double(A*A);
    7062}   
    7163
    72 G4double G4PreCompoundHe3::GetRj(const G4int NumberParticles, const G4int NumberCharged)
     64G4double G4PreCompoundHe3::GetRj(G4int nParticles, G4int nCharged)
    7365{
    7466  G4double rj = 0.0;
    75   G4double denominator = NumberParticles*(NumberParticles-1)*(NumberParticles-2);
    76   if(NumberCharged >=2 && (NumberParticles-NumberCharged) >= 1) {
    77     rj = 3.0*static_cast<G4double>(NumberCharged*(NumberCharged-1)*(NumberParticles-NumberCharged))
    78       / static_cast<G4double>(denominator); 
     67  if(nCharged >=2 && (nParticles-nCharged) >= 1) {
     68    G4double denominator = G4double(nParticles*(nParticles-1)*(nParticles-2));
     69    rj = G4double(3*nCharged*(nCharged-1)*(nParticles-nCharged))/denominator; 
    7970  }
    8071  return rj;
    8172}
    8273
    83 ////////////////////////////////////////////////////////////////////////////////////
     74////////////////////////////////////////////////////////////////////////////////
    8475//J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections
    8576//OPT=0 Dostrovski's parameterization
     
    8778//OPT=3,4 Kalbach's parameterization
    8879//
    89 G4double G4PreCompoundHe3::CrossSection(const  G4double K)
    90 {
    91   ResidualA=GetRestA();
    92   ResidualZ=GetRestZ();
    93   theA=GetA();
    94   theZ=GetZ();
    95   ResidualAthrd=std::pow(ResidualA,0.33333);
    96   FragmentA=GetA()+GetRestA();
    97   FragmentAthrd=std::pow(FragmentA,0.33333);
    98 
     80G4double G4PreCompoundHe3::CrossSection(G4double K)
     81{
     82  ResidualA = GetRestA();
     83  ResidualZ = GetRestZ();
     84  theA = GetA();
     85  theZ = GetZ();
     86  ResidualAthrd = ResidualA13();
     87  FragmentA = theA + ResidualA;
     88  FragmentAthrd = g4pow->Z13(FragmentA);
    9989
    10090  if (OPTxs==0) return GetOpt0( K);
     
    10999}
    110100
    111 // *********************** OPT=0 : Dostrovski's cross section  *****************************
    112 
    113 G4double G4PreCompoundHe3::GetOpt0(const  G4double K)
    114 {
    115   const G4double r0 = G4PreCompoundParameters::GetAddress()->Getr0();
    116   // cross section is now given in mb (r0 is in mm) for the sake of consistency
    117   //with the rest of the options
    118   return 1.e+25*pi*(r0*ResidualAthrd)*(r0*ResidualAthrd)*GetAlpha()*(1.+GetBeta()/K);
    119 }
    120 //
    121 //----------------
    122 //
    123101G4double G4PreCompoundHe3::GetAlpha()
    124102{
    125103  G4double C = 0.0;
    126   G4double aZ = GetZ() + GetRestZ();
     104  G4int aZ = theZ + ResidualZ;
    127105  if (aZ <= 30)
    128106    {
     
    131109  else if (aZ <= 50)
    132110    {
    133       C = 0.1 + -((aZ-50.)/20.)*0.02;
     111      C = 0.1 - (aZ - 30)*0.001;
    134112    }
    135113  else if (aZ < 70)
    136114    {
    137       C = 0.08 + -((aZ-70.)/20.)*0.02;
     115      C = 0.08 - (aZ - 50)*0.001;
    138116    }
    139117  else
     
    143121  return 1.0 + C*(4.0/3.0);
    144122}
    145 //
    146 //--------------------
    147 //
    148 G4double G4PreCompoundHe3::GetBeta()
    149 {
    150   return -GetCoulombBarrier();
    151 }
    152 //
    153 //********************* OPT=1,2 : Chatterjee's cross section ************************
     123
     124//********************* OPT=1,2 : Chatterjee's cross section *****************
    154125//(fitting to cross section from Bechetti & Greenles OM potential)
    155126
    156127G4double G4PreCompoundHe3::GetOpt12(const  G4double K)
    157128{
    158 
    159   G4double Kc=K;
     129  G4double Kc = K;
    160130
    161131  // JMQ xsec is set constat above limit of validity
    162   if (K>50) Kc=50;
     132  if (K > 50*MeV) { Kc = 50*MeV; }
    163133
    164134  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
    165135
    166   G4double      p0 = -3.06;
     136  G4double     p0 = -3.06;
    167137  G4double     p1 = 278.5;
    168138  G4double     p2 = -1389.;
     
    179149  p = p0 + p1/Ec + p2/(Ec*Ec);
    180150  landa = landa0*ResidualA + landa1;
    181   mu = mu0*std::pow(ResidualA,mu1);
    182   nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
     151
     152  G4double resmu1 = g4pow->powZ(ResidualA,mu1);
     153  mu = mu0*resmu1;
     154  nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
    183155  q = landa - nu/(Ec*Ec) - 2*p*Ec;
    184156  r = mu + 2*nu/Ec + p*(Ec*Ec);
     
    198170//c     ** 3he from o.m. of gibson et al
    199171{
    200 
    201172  G4double landa, mu, nu, p , signor(1.),sig;
    202173  G4double ec,ecsq,xnulam,etest(0.),a;
    203174  G4double b,ecut,cut,ecut2,geom,elab;
    204175
    205 
    206176  G4double     flow = 1.e-18;
    207177  G4double     spill= 1.e+18;
    208 
    209178
    210179  G4double     p0 = -2.88;
     
    227196  p = p0 + p1/ec + p2/ecsq;
    228197  landa = landa0*ResidualA + landa1;
    229   a = std::pow(ResidualA,mu1);
     198  a = g4pow->powZ(ResidualA,mu1);
    230199  mu = mu0 * a;
    231200  nu = a* (nu0+nu1*ec+nu2*ecsq); 
    232201  xnulam = nu / landa;
    233   if (xnulam > spill) xnulam=0.;
    234   if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
     202  if (xnulam > spill) { xnulam=0.; }
     203  if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
    235204 
    236205  a = -2.*p*ec + landa - nu/ecsq;
     
    241210  ecut = (ecut-a) / (p+p);
    242211  ecut2 = ecut;
    243 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
    244 //ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum
    245 //  if (cut < 0.) ecut2 = ecut - 2.;
    246   if (cut < 0.) ecut2 = ecut;
     212  //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
     213  // ecut<0 means that there is no cut with energy axis, i.e. xs is set
     214  // to 0 bellow minimum
     215  //  if (cut < 0.) ecut2 = ecut - 2.;
     216  if (cut < 0.) { ecut2 = ecut; }
    247217  elab = K * FragmentA / ResidualA;
    248218  sig = 0.;
    249219 
    250220  if (elab <= ec) { //start for E<Ec
    251     if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
     221    if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
    252222  }           //end for E<Ec
    253223  else {           //start for E>Ec
    254224    sig = (landa*elab+mu+nu/elab) * signor;
    255225    geom = 0.;
    256     if (xnulam < flow || elab < etest) return sig;
     226    if (xnulam < flow || elab < etest) { return sig; }
    257227    geom = std::sqrt(theA*K);
    258228    geom = 1.23*ResidualAthrd + ra + 4.573/geom;
     
    263233 
    264234}
    265 
    266 //   ************************** end of cross sections *******************************
    267 
    268 
    269 
    270 
Note: See TracChangeset for help on using the changeset viewer.