Changeset 1340 for trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc
- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc
r1337 r1340 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4PreCompoundIon.cc,v 1.1 6 2009/02/10 16:01:37vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 4-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 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 38 38 // Modified: 39 39 // 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 40 42 // 41 43 42 44 #include "G4PreCompoundIon.hh" 43 #include "G4PreCompoundParameters.hh"44 45 45 G4bool G4PreCompoundIon::IsItPossible(const G4Fragment& aFragment) 46 G4PreCompoundIon:: 47 G4PreCompoundIon(const G4ParticleDefinition* part, 48 G4VCoulombBarrier* aCoulombBarrier) 49 : G4PreCompoundFragment(part,aCoulombBarrier) 46 50 { 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); 50 53 } 51 54 55 G4PreCompoundIon::~G4PreCompoundIon() 56 {} 57 52 58 G4double G4PreCompoundIon:: 53 ProbabilityDistributionFunction( constG4double eKin,59 ProbabilityDistributionFunction(G4double eKin, 54 60 const G4Fragment& aFragment) 55 61 { 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; } 59 66 60 67 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; 64 72 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(); 70 75 71 76 //JMQ 06/02/209 This is THE BUG that was killing cluster emission … … 75 80 G4double gj = g1; 76 81 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); 78 84 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; } 86 88 87 89 G4double E1 = (std::max(0.0,GetMaximalKineticEnergy() - eKin - A1)); 88 90 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; 90 98 91 99 // JMQ 10/02/09 reshaping of the formula (unnecessary std::pow elimitated) 100 /* 101 G4double r0 = theParameters->Getr0(); 92 102 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())* 94 104 eKin*CrossSection(eKin)*millibarn* 95 CoalescenceFactor(aFragment.GetA ()) * FactorialFactor(N,P)*96 105 CoalescenceFactor(aFragment.GetA_asInt()) * FactorialFactor(N,P)* 106 GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged()); 97 107 98 108 G4double pB = std::pow((g1*E1)/(g0*E0),N-GetA()-1.0)*(g1/g0); 99 100 109 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; 105 120 }
Note: See TracChangeset
for help on using the changeset viewer.