Ignore:
Timestamp:
Apr 6, 2009, 12:30:29 PM (15 years ago)
Author:
garnier
Message:

update processes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc

    r819 r962  
    2424// ********************************************************************
    2525//
    26 //
    27 // $Id: G4AlphaEvaporationProbability.cc,v 1.4 2006/06/29 20:10:19 gunter Exp $
    28 // GEANT4 tag $Name: geant4-09-01-patch-02 $
     26//J.M. Quesada (August2008). Based on:
    2927//
    3028// Hadronic Process: Nuclear De-excitations
    31 // by V. Lara (Nov 1999)
    32 //
    33 
     29// by V. Lara (Oct 1998)
     30//
     31// Modif (03 September 2008) by J. M. Quesada for external choice of inverse
     32// cross section option
    3433
    3534#include "G4AlphaEvaporationProbability.hh"
    3635
    3736G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() :
    38     G4EvaporationProbability(4,2,4) // A,Z,Gamma
    39 {
    40     //  const G4int NumExcitedStates = 31+1;
    41     std::vector<G4double>::size_type NumExcitedStatesEnergy = 31+1;
    42     std::vector<G4int>::size_type NumExcitedStatesSpin = 31+1;
    43     ExcitEnergies.reserve(NumExcitedStatesEnergy);
    44     ExcitSpins.reserve(NumExcitedStatesSpin);
    45     ExcitEnergies.insert(ExcitEnergies.begin(),NumExcitedStatesEnergy,0.0);
    46     ExcitSpins.insert(ExcitSpins.begin(),NumExcitedStatesSpin,0);
    47 //    for (G4int i = 0; i < NumExcitedStates; i++) {
    48 //      ExcitEnergies(i) = 0.0;
    49 //      ExcitSpins(i) = 0;
    50 //    }
    51 
    52     ExcitEnergies[18] = 7.98*MeV;
    53     ExcitEnergies[20] = 6.90*MeV;
    54     ExcitEnergies[25] = 5.83*MeV;
    55     ExcitEnergies[26] = 8.57*MeV;
    56     ExcitEnergies[31] = 5.33*MeV;
    57 
    58     ExcitSpins[18] = 4;
    59     ExcitSpins[20] = 6;
    60     ExcitSpins[25] = 7;
    61     ExcitSpins[26] = 4;
    62     ExcitSpins[31] = 13;
    63        
    64     SetExcitationEnergiesPtr(&ExcitEnergies);
    65     SetExcitationSpinsPtr(&ExcitSpins);         
     37    G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier
     38{
     39       
    6640}
    6741
     
    9367}
    9468
    95 G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ) const
     69
     70 G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 
     71  { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));}
     72       
     73 G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &)
     74  { return 0.0; }
     75
     76G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ)
    9677{
    9778    // Data comes from
     
    11697    return C;
    11798}
     99
     100///////////////////////////////////////////////////////////////////////////////////
     101//J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections
     102//OPT=0 Dostrovski's parameterization
     103//OPT=1,2 Chatterjee's paramaterization
     104//OPT=3,4 Kalbach's parameterization
     105//
     106G4double G4AlphaEvaporationProbability::CrossSection(const  G4Fragment & fragment,
     107                                                     const  G4double K)
     108{
     109  theA=GetA();
     110  theZ=GetZ();
     111  ResidualA=fragment.GetA()-theA;
     112  ResidualZ=fragment.GetZ()-theZ;
     113 
     114  ResidualAthrd=std::pow(ResidualA,0.33333);
     115  FragmentA=fragment.GetA();
     116  FragmentAthrd=std::pow(FragmentA,0.33333);
     117 
     118 
     119  if (OPTxs==0) {std::ostringstream errOs;
     120    errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (Alpha's)!!" 
     121          <<G4endl;
     122    throw G4HadronicException(__FILE__, __LINE__, errOs.str());
     123    return 0.;}
     124 
     125  if( OPTxs==1 || OPTxs==2) return G4AlphaEvaporationProbability::GetOpt12( K);
     126  else if (OPTxs==3 || OPTxs==4)  return G4AlphaEvaporationProbability::GetOpt34( K);
     127  else{
     128    std::ostringstream errOs;
     129    errOs << "BAD Alpha CROSS SECTION OPTION AT EVAPORATION!!"  <<G4endl;
     130    throw G4HadronicException(__FILE__, __LINE__, errOs.str());
     131    return 0.;
     132  }
     133}
     134
     135
     136//
     137//********************* OPT=1,2 : Chatterjee's cross section ************************
     138//(fitting to cross section from Bechetti & Greenles OM potential)
     139
     140G4double G4AlphaEvaporationProbability::GetOpt12(const  G4double K)
     141{
     142// c     ** alpha from huizenga and igo
     143  G4double Kc=K;
     144 
     145  // JMQ xsec is set constat above limit of validity
     146  if (K>50) Kc=50;
     147 
     148  G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
     149 
     150  G4double     p0 = 10.95;
     151  G4double     p1 = -85.2;
     152  G4double     p2 = 1146.;
     153  G4double     landa0 = 0.0643;
     154  G4double     landa1 = -13.96;
     155  G4double     mu0 = 781.2;
     156  G4double     mu1 = 0.29;
     157  G4double     nu0 = -304.7;
     158  G4double     nu1 = -470.0;
     159  G4double     nu2 = -8.580;   
     160  G4double     delta=1.2;         
     161
     162 
     163  Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
     164  p = p0 + p1/Ec + p2/(Ec*Ec);
     165  landa = landa0*ResidualA + landa1;
     166  mu = mu0*std::pow(ResidualA,mu1);
     167  nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec));
     168  q = landa - nu/(Ec*Ec) - 2*p*Ec;
     169  r = mu + 2*nu/Ec + p*(Ec*Ec);
     170 
     171  ji=std::max(Kc,Ec);
     172  if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
     173  else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
     174                 
     175  if (xs <0.0) {xs=0.0;}
     176 
     177  return xs;
     178 
     179}
     180
     181// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
     182G4double G4AlphaEvaporationProbability::GetOpt34(const  G4double K)
     183// c     ** alpha from huizenga and igo
     184{
     185 
     186  G4double landa, mu, nu, p , signor(1.),sig;
     187  G4double ec,ecsq,xnulam,etest(0.),a;
     188  G4double b,ecut,cut,ecut2,geom,elab;
     189
     190
     191  G4double     flow = 1.e-18;
     192  G4double     spill= 1.e+18;
     193
     194  G4double       p0 = 10.95;
     195  G4double     p1 = -85.2;
     196  G4double     p2 = 1146.;
     197  G4double     landa0 = 0.0643;
     198  G4double     landa1 = -13.96;
     199  G4double     mu0 = 781.2;
     200  G4double     mu1 = 0.29;
     201  G4double     nu0 = -304.7;
     202  G4double     nu1 = -470.0;
     203  G4double     nu2 = -8.580;       
     204 
     205  G4double      ra=1.20;
     206 
     207  //JMQ 13/02/09 increase of reduced radius to lower the barrier
     208  // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
     209  ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
     210  ecsq = ec * ec;
     211  p = p0 + p1/ec + p2/ecsq;
     212  landa = landa0*ResidualA + landa1;
     213  a = std::pow(ResidualA,mu1);
     214  mu = mu0 * a;
     215  nu = a* (nu0+nu1*ec+nu2*ecsq); 
     216  xnulam = nu / landa;
     217  if (xnulam > spill) xnulam=0.;
     218  if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);
     219 
     220  a = -2.*p*ec + landa - nu/ecsq;
     221  b = p*ecsq + mu + 2.*nu/ec;
     222  ecut = 0.;
     223  cut = a*a - 4.*p*b;
     224  if (cut > 0.) ecut = std::sqrt(cut);
     225  ecut = (ecut-a) / (p+p);
     226  ecut2 = ecut;
     227  if (cut < 0.) ecut2 = ecut - 2.;
     228  elab = K * FragmentA / ResidualA;
     229  sig = 0.;
     230 
     231  if (elab <= ec) { //start for E<Ec
     232    if (elab > ecut2)  sig = (p*elab*elab+a*elab+b) * signor;
     233  }           //end for E<Ec
     234  else {           //start for E>Ec
     235    sig = (landa*elab+mu+nu/elab) * signor;
     236    geom = 0.;
     237    if (xnulam < flow || elab < etest) return sig;
     238    geom = std::sqrt(theA*K);
     239    geom = 1.23*ResidualAthrd + ra + 4.573/geom;
     240    geom = 31.416 * geom * geom;
     241    sig = std::max(geom,sig);
     242  }           //end for E>Ec
     243  return sig;
     244 
     245}
     246
     247//   ************************** end of cross sections *******************************
Note: See TracChangeset for help on using the changeset viewer.