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/G4PreCompoundIon.cc

    r1337 r1340  
    2424// ********************************************************************
    2525//
    26 // $Id: G4PreCompoundIon.cc,v 1.16 2009/02/10 16:01:37 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-04-beta-01 $
     26// $Id: G4PreCompoundIon.cc,v 1.17 2010/08/28 15:16:55 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-03-ref-09 $
    2828//
    2929// -------------------------------------------------------------------
     
    3838// Modified: 
    3939// 10.02.2009 J. M. Quesada fixed bug in density level of light fragments 
     40// 20.08.2010 V.Ivanchenko added G4Pow and G4PreCompoundParameters pointers
     41//                         use int Z and A and cleanup
    4042//
    4143
    4244#include "G4PreCompoundIon.hh"
    43 #include "G4PreCompoundParameters.hh"
    4445
    45 G4bool G4PreCompoundIon::IsItPossible(const G4Fragment& aFragment)
     46G4PreCompoundIon::
     47G4PreCompoundIon(const G4ParticleDefinition* part,
     48                 G4VCoulombBarrier* aCoulombBarrier)
     49  : G4PreCompoundFragment(part,aCoulombBarrier)
    4650{
    47   G4int pplus = aFragment.GetNumberOfCharged();   
    48   G4int pneut = aFragment.GetNumberOfParticles()-pplus;
    49   return (pneut >= (GetA()-GetZ()) && pplus >= GetZ());
     51  G4double r0 = theParameters->Getr0();
     52  fact = 0.75*CLHEP::millibarn/(CLHEP::pi*r0*r0*r0);
    5053}
    5154
     55G4PreCompoundIon::~G4PreCompoundIon()
     56{}
     57
    5258G4double G4PreCompoundIon::
    53 ProbabilityDistributionFunction(const G4double eKin,
     59ProbabilityDistributionFunction(G4double eKin,
    5460                                const G4Fragment& aFragment)
    5561{
    56   if ( !IsItPossible(aFragment) ) return 0.0;
    57  
    58   const G4double r0 = G4PreCompoundParameters::GetAddress()->Getr0();
     62  if ( !IsItPossible(aFragment) ) { return 0.0; }
     63  G4double efinal = eKin + GetBindingEnergy();
     64  //G4cout << "Efinal= " << efinal << " Ekin= " << eKin << G4endl;
     65  if(efinal <= 0.0 ) { return 0.0; }
    5966
    6067  G4double U = aFragment.GetExcitationEnergy();
    61   G4double P = aFragment.GetNumberOfParticles();
    62   G4double H = aFragment.GetNumberOfHoles();
    63   G4double N = P + H;
     68  G4int P = aFragment.GetNumberOfParticles();
     69  G4int H = aFragment.GetNumberOfHoles();
     70  G4int A = GetA();
     71  G4int N = P + H;
    6472
    65   G4double g0 = (6.0/pi2)*aFragment.GetA() *
    66     G4PreCompoundParameters::GetAddress()->GetLevelDensity();
    67  
    68   G4double g1 = (6.0/pi2)*GetRestA() *
    69     G4PreCompoundParameters::GetAddress()->GetLevelDensity();
     73  G4double g0 = (6.0/pi2)*aFragment.GetA_asInt()*theParameters->GetLevelDensity();
     74  G4double g1 = (6.0/pi2)*GetRestA()*theParameters->GetLevelDensity();
    7075
    7176  //JMQ 06/02/209  This is  THE BUG that was killing cluster emission
     
    7580  G4double gj = g1;
    7681
    77   G4double A0 = ((P*P+H*H+P-H)/4.0 - H/2.0)/g0;
     82  G4double A0 = G4double(P*P+H*H+P-3*H)/(4.0*g0);
     83  G4double A1 = std::max(0.0,(A0*g0 + A*(A-2*P-1)*0.25)/g1);
    7884
    79   G4double A1 = std::max(0.0,(A0*g0 + GetA()*(GetA()-2.0*P-1.0)/4.0)/g1);
    80 
    81   G4double Aj = GetA()*(GetA()+1.0)/4.0/gj;
    82 
    83 
    84   G4double E0 = std::max(0.0,U - A0);
    85   if (E0 == 0.0) return 0.0;
     85  G4double E0 = U - A0;
     86  //G4cout << "E0= " << E0 << G4endl;
     87  if (E0 <= 0.0) { return 0.0; }
    8688
    8789  G4double E1 = (std::max(0.0,GetMaximalKineticEnergy() - eKin - A1));
    8890
    89   G4double Ej = std::max(0.0,eKin + GetBindingEnergy() -Aj);
     91  G4double Aj = A*(A+1)/(4.0*gj);
     92  G4double Ej = std::max(0.0,efinal - Aj);
     93
     94  G4double rj = GetRj(P, aFragment.GetNumberOfCharged());
     95  G4double xs = CrossSection(eKin);
     96
     97  //G4cout << "rj= " << rj << " xs= " << xs << G4endl;
    9098
    9199  // JMQ 10/02/09 reshaping of the formula (unnecessary std::pow elimitated)
     100  /*
     101  G4double r0 = theParameters->Getr0();
    92102  G4double pA = (3.0/4.0) * std::sqrt(std::max(0.0, 2.0/(GetReducedMass()*
    93                 (eKin+GetBindingEnergy()))))/(pi * r0 * r0 *r0* GetRestA())*
     103                (eKin+GetBindingEnergy()))))/(pi * r0 * r0 *r0* GetRestA())*
    94104                eKin*CrossSection(eKin)*millibarn*
    95                 CoalescenceFactor(aFragment.GetA()) * FactorialFactor(N,P)*
    96                 GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged());
     105                CoalescenceFactor(aFragment.GetA_asInt()) * FactorialFactor(N,P)*
     106       GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged());
    97107
    98108  G4double pB = std::pow((g1*E1)/(g0*E0),N-GetA()-1.0)*(g1/g0);
    99  
    100109  G4double pC = std::pow((gj*Ej)/(g0*E0),GetA()-1.0)*(gj/g0)/E0;
    101 
    102   G4double Probability = pA * pB * pC;
    103 
    104   return Probability;
     110  pA *= pB * pC;
     111  */
     112 
     113  G4double pA = fact*eKin*xs*rj
     114    * CoalescenceFactor(aFragment.GetA_asInt()) * FactorialFactor(N,P)
     115    * std::sqrt(2.0/(GetReducedMass()*efinal))
     116    * g4pow->powN(g1*E1/(g0*E0), N-A-1)
     117    * g4pow->powN(gj*Ej/(g0*E0), A-1)*gj*g1/(g0*g0*E0*GetRestA());
     118   
     119  return pA;
    105120}
Note: See TracChangeset for help on using the changeset viewer.