Changeset 1055 for trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc
- Timestamp:
- May 28, 2009, 4:26:57 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc
r1007 r1055 24 24 // ******************************************************************** 25 25 // 26 //J.M.Quesada (August 08). New source file 27 // 28 // Modif (21 August 2008) by J. M. Quesada for external choice of inverse 29 // cross section option 30 // 31 // JMQ (06 September 2008) Also external choice has been added for: 32 // - superimposed Coulomb barrier (if useSICB=true) 26 // 27 // $Id: G4PreCompoundProton.cc,v 1.4 2009/02/11 18:06:00 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-03-beta-cand-01 $ 29 // 30 // ------------------------------------------------------------------- 31 // 32 // GEANT4 Class file 33 // 34 // 35 // File name: G4PreCompoundProton 36 // 37 // Author: V.Lara 38 // 39 // Modified: 40 // 21.08.2008 J. M. Quesada added external choice of inverse cross section option 41 // 21.08.2008 J. M. Quesada added external choice for superimposed Coulomb barrier 42 // (if useSICB=true) 43 // 33 44 34 45 #include "G4PreCompoundProton.hh" 35 46 36 37 38 39 40 41 47 G4ReactionProduct * G4PreCompoundProton::GetReactionProduct() const 48 { 49 G4ReactionProduct * theReactionProduct = 50 new G4ReactionProduct(G4Proton::ProtonDefinition()); 51 theReactionProduct->SetMomentum(GetMomentum().vect()); 52 theReactionProduct->SetTotalEnergy(GetMomentum().e()); 42 53 #ifdef PRECOMPOUND_TEST 43 54 theReactionProduct->SetCreatorModel("G4PrecompoundModel"); 44 55 #endif 45 return theReactionProduct; 46 } 47 48 49 G4double G4PreCompoundProton::GetRj(const G4int NumberParticles, const G4int NumberCharged) 50 { 51 G4double rj = 0.0; 52 if(NumberParticles > 0) rj = static_cast<G4double>(NumberCharged)/static_cast<G4double>(NumberParticles); 53 return rj; 54 } 55 56 56 return theReactionProduct; 57 } 58 59 G4double G4PreCompoundProton::GetRj(const G4int NumberParticles, const G4int NumberCharged) 60 { 61 G4double rj = 0.0; 62 if(NumberParticles > 0) rj = static_cast<G4double>(NumberCharged)/static_cast<G4double>(NumberParticles); 63 return rj; 64 } 57 65 58 66 //////////////////////////////////////////////////////////////////////////////////// … … 63 71 //OPT=3 Kalbach's parameterization 64 72 // 65 73 G4double G4PreCompoundProton::CrossSection(const G4double K) 66 74 { 67 75 //G4cout<<" In G4PreCompoundProton OPTxs="<<OPTxs<<G4endl; … … 75 83 FragmentA=GetA()+GetRestA(); 76 84 FragmentAthrd=std::pow(FragmentA,0.33333); 77 78 79 85 80 86 if (OPTxs==0) return GetOpt0(K); … … 94 100 G4double G4PreCompoundProton::GetOpt0(const G4double K) 95 101 { 96 const G4double r0 = G4PreCompoundParameters::GetAddress()->Getr0();102 const G4double r0 = G4PreCompoundParameters::GetAddress()->Getr0(); 97 103 // cross section is now given in mb (r0 is in mm) for the sake of consistency 98 104 //with the rest of the options 99 return 1.e+25*pi*(r0*ResidualAthrd)*(r0*ResidualAthrd)*GetAlpha()*(1.+GetBeta()/K);105 return 1.e+25*pi*(r0*ResidualAthrd)*(r0*ResidualAthrd)*GetAlpha()*(1.+GetBeta()/K); 100 106 } 101 107 // 102 108 //------------ 103 109 // 104 105 106 G4double aZ = static_cast<G4double>(GetRestZ());107 108 109 110 111 112 113 114 115 116 117 110 G4double G4PreCompoundProton::GetAlpha() 111 { 112 G4double aZ = static_cast<G4double>(GetRestZ()); 113 G4double C = 0.0; 114 if (aZ >= 70) 115 { 116 C = 0.10; 117 } 118 else 119 { 120 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375; 121 } 122 return 1.0 + C; 123 } 118 124 // 119 125 //------------------- 120 126 // 121 122 127 G4double G4PreCompoundProton::GetBeta() 128 { 123 129 return -GetCoulombBarrier(); 124 } 125 // 126 127 128 130 } 131 // 132 129 133 //********************* OPT=1 : Chatterjee's cross section ************************ 130 134 //(fitting to cross section from Bechetti & Greenles OM potential) … … 132 136 G4double G4PreCompoundProton::GetOpt1(const G4double K) 133 137 { 134 G4double Kc=K; 135 136 // JMQ xsec is set constat above limit of validity 137 if (K>50) Kc=50; 138 139 G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2,xs; 140 G4double p, p0, p1, p2,Ec,delta,q,r,ji; 141 142 p0 = 15.72; 143 p1 = 9.65; 144 p2 = -449.0; 145 landa0 = 0.00437; 146 landa1 = -16.58; 147 mu0 = 244.7; 148 mu1 = 0.503; 149 nu0 = 273.1; 150 nu1 = -182.4; 151 nu2 = -1.872; 152 delta=0.; 153 154 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 155 p = p0 + p1/Ec + p2/(Ec*Ec); 156 landa = landa0*ResidualA + landa1; 157 mu = mu0*std::pow(ResidualA,mu1); 158 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 159 q = landa - nu/(Ec*Ec) - 2*p*Ec; 160 r = mu + 2*nu/Ec + p*(Ec*Ec); 161 162 ji=std::max(Kc,Ec); 163 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 164 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 165 if (xs <0.0) {xs=0.0;} 166 167 return xs; 168 169 } 170 171 138 G4double Kc=K; 139 140 // JMQ xsec is set constat above limit of validity 141 if (K>50) Kc=50; 142 143 G4double landa, landa0, landa1, mu, mu0, mu1,nu, nu0, nu1, nu2,xs; 144 G4double p, p0, p1, p2,Ec,delta,q,r,ji; 145 146 p0 = 15.72; 147 p1 = 9.65; 148 p2 = -449.0; 149 landa0 = 0.00437; 150 landa1 = -16.58; 151 mu0 = 244.7; 152 mu1 = 0.503; 153 nu0 = 273.1; 154 nu1 = -182.4; 155 nu2 = -1.872; 156 delta=0.; 157 158 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 159 p = p0 + p1/Ec + p2/(Ec*Ec); 160 landa = landa0*ResidualA + landa1; 161 mu = mu0*std::pow(ResidualA,mu1); 162 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 163 q = landa - nu/(Ec*Ec) - 2*p*Ec; 164 r = mu + 2*nu/Ec + p*(Ec*Ec); 165 166 ji=std::max(Kc,Ec); 167 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 168 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 169 if (xs <0.0) {xs=0.0;} 170 171 return xs; 172 173 } 172 174 173 175 //************* OPT=2 : Welisch's proton reaction cross section ************************ … … 178 180 G4double rnpro,rnneu,eekin,ekin,ff1,ff2,ff3,r0,fac,fac1,fac2,b0,xine_th(0); 179 181 180 //This is redundant when the Coulomb barrier is overimposed to all cross sections181 //It should be kept when Coulomb barrier only imposed at OPTxs=2182 //This is redundant when the Coulomb barrier is overimposed to all cross sections 183 //It should be kept when Coulomb barrier only imposed at OPTxs=2 182 184 183 185 if(!useSICB && K<=theCoulombBarrier) return xine_th=0.0; … … 316 318 } //end for E>Ec 317 319 318 return sig;} 319 320 320 return sig; 321 } 321 322 322 323 // ************************** end of cross sections *******************************
Note: See TracChangeset
for help on using the changeset viewer.