- Timestamp:
- Jun 18, 2010, 11:42:07 AM (14 years ago)
- Location:
- trunk/source/processes/hadronic/models/de_excitation/gem_evaporation
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4EvaporationGEMFactory.hh
r1228 r1315 25 25 // 26 26 // 27 // $Id: G4EvaporationGEMFactory.hh,v 1. 7 2009/09/15 12:54:16 vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3$27 // $Id: G4EvaporationGEMFactory.hh,v 1.8 2010/04/27 11:43:16 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 41 41 { 42 42 public: 43 G4EvaporationGEMFactory() {}44 virtual ~G4EvaporationGEMFactory() {}43 G4EvaporationGEMFactory(); 44 virtual ~G4EvaporationGEMFactory(); 45 45 46 46 private: 47 G4EvaporationGEMFactory(const G4EvaporationGEMFactory & ) : G4VEvaporationFactory() {}47 G4EvaporationGEMFactory(const G4EvaporationGEMFactory & ); 48 48 const G4EvaporationGEMFactory & operator=(const G4EvaporationGEMFactory & val); 49 49 G4bool operator==(const G4EvaporationGEMFactory & val) const; -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMProbability.hh
r819 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4GEMProbability.hh,v 1.4 2010/05/19 10:21:16 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 // 29 //--------------------------------------------------------------------- 30 // 31 // Geant4 header G4GEMProbability 26 32 // 27 33 // … … 29 35 // by V. Lara (Sept 2001) 30 36 // 31 32 37 // 18.05.2010 V.Ivanchenko trying to speedup the most slow method 38 // by usage of G4Pow, integer Z and A; moved constructor, 39 // destructor and virtual functions to source 40 // 33 41 34 42 #ifndef G4GEMProbability_h … … 42 50 #include "G4PairingCorrection.hh" 43 51 52 class G4Pow; 53 44 54 class G4GEMProbability : public G4VEmissionProbability 45 55 { 46 56 public: 47 // Only available constructor 48 G4GEMProbability(const G4int anA, const G4int aZ, const G4double aSpin) : 49 theA(anA), theZ(aZ), Spin(aSpin), theCoulombBarrierPtr(0), 50 ExcitationEnergies(0), ExcitationSpins(0), ExcitationLifetimes(0), Normalization(1.0) 51 { 52 theEvapLDPptr = new G4EvaporationLevelDensityParameter; 53 } 57 58 // Default constructor - should not be used 59 G4GEMProbability(); 60 61 // Only available constructor 62 G4GEMProbability(const G4int anA, const G4int aZ, const G4double aSpin); 54 63 55 ~G4GEMProbability() 56 { 57 if (theEvapLDPptr != 0) delete theEvapLDPptr; 58 } 64 virtual ~G4GEMProbability(); 59 65 66 inline G4int GetZ_asInt(void) const { return theZ; } 67 68 inline G4int GetA_asInt(void) const { return theA;} 69 70 inline G4double GetZ(void) const { return theZ; } 71 72 inline G4double GetA(void) const { return theA;} 60 73 61 62 G4double GetZ(void) const { return theZ; } 63 64 G4double GetA(void) const { return theA;} 74 inline G4double GetSpin(void) const { return Spin; } 65 75 66 G4double GetSpin(void) const { return Spin; } 76 inline G4double GetNormalization(void) const { return Normalization; } 77 78 inline void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy) 79 { 80 theCoulombBarrierPtr = aCoulombBarrierStrategy; 81 } 67 82 68 G4double GetNormalization(void) const { return Normalization; } 83 inline G4double GetCoulombBarrier(const G4Fragment& fragment) const 84 { 85 G4double res = 0.0; 86 if (theCoulombBarrierPtr) 87 { 88 G4int Acomp = fragment.GetA_asInt(); 89 G4int Zcomp = fragment.GetZ_asInt(); 90 res = theCoulombBarrierPtr->GetCoulombBarrier(Acomp-theA, Zcomp-theZ, 91 fragment.GetExcitationEnergy()-fPairCorr->GetPairingCorrection(Acomp,Zcomp)); 92 } 93 return res; 94 } 69 95 70 void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy) 71 { 72 theCoulombBarrierPtr = aCoulombBarrierStrategy; 73 } 74 75 G4double GetCoulombBarrier(const G4Fragment& fragment) const 76 { 77 if (theCoulombBarrierPtr) 78 { 79 G4int Acompound = static_cast<G4int>(fragment.GetA()); 80 G4int Zcompound = static_cast<G4int>(fragment.GetZ()); 81 return theCoulombBarrierPtr->GetCoulombBarrier(Acompound-theA, Zcompound-theZ, 82 fragment.GetExcitationEnergy()- 83 G4PairingCorrection::GetInstance()-> 84 GetPairingCorrection(Acompound,Zcompound)); 85 } 86 else 87 { 88 return 0.0; 89 } 90 } 91 92 93 virtual G4double CalcAlphaParam(const G4Fragment & ) const {return 1.0;} 94 virtual G4double CalcBetaParam(const G4Fragment & ) const {return 1.0;} 96 virtual G4double CalcAlphaParam(const G4Fragment & ) const; 97 virtual G4double CalcBetaParam(const G4Fragment & ) const; 95 98 96 99 protected: 97 100 98 99 100 101 101 inline void SetExcitationEnergiesPtr(std::vector<G4double> * anExcitationEnergiesPtr) 102 { 103 ExcitationEnergies = anExcitationEnergiesPtr; 104 } 102 105 103 104 105 106 106 inline void SetExcitationSpinsPtr(std::vector<G4double> * anExcitationSpinsPtr) 107 { 108 ExcitationSpins = anExcitationSpinsPtr; 109 } 107 110 108 109 110 111 111 inline void SetExcitationLifetimesPtr(std::vector<G4double> * anExcitationLifetimesPtr) 112 { 113 ExcitationLifetimes = anExcitationLifetimesPtr; 114 } 112 115 113 114 115 116 116 inline void SetCoulombBarrierStrategy(G4VCoulombBarrier * aCoulombBarrier) 117 { 118 theCoulombBarrierPtr = aCoulombBarrier; 119 } 117 120 118 119 // Default constructor120 G4GEMProbability() {}121 121 private: 122 // Copy constructor 123 G4GEMProbability(const G4GEMProbability &right); 122 123 // Copy constructor 124 G4GEMProbability(const G4GEMProbability &right); 124 125 125 126 127 126 const G4GEMProbability & operator=(const G4GEMProbability &right); 127 G4bool operator==(const G4GEMProbability &right) const; 128 G4bool operator!=(const G4GEMProbability &right) const; 128 129 129 130 public: 130 G4double EmissionProbability(const G4Fragment & fragment, const G4double anEnergy); 131 132 G4double EmissionProbability(const G4Fragment & fragment, const G4double anEnergy); 131 133 132 134 private: 133 135 134 G4double CalcProbability(const G4Fragment & fragment, const G4double MaximalKineticEnergy, 135 const G4double V); 136 virtual G4double CCoeficient(const G4double ) const {return 0.0;}; 136 G4double CalcProbability(const G4Fragment & fragment, const G4double MaximalKineticEnergy, 137 const G4double V); 137 138 139 virtual G4double CCoeficient(const G4double ) const; 140 141 inline G4double I0(const G4double t); 142 inline G4double I1(const G4double t, const G4double tx); 143 inline G4double I2(const G4double s, const G4double sx); 144 G4double I3(const G4double s, const G4double sx); 138 145 139 G4double I0(const G4double t);140 G4double I1(const G4double t, const G4double tx); 141 G4double I2(const G4double s, const G4double sx);142 G4double I3(const G4double s, const G4double sx);146 // Data Members 147 148 G4Pow* fG4pow; 149 G4PairingCorrection* fPairCorr; 143 150 144 // Data Members 151 G4VLevelDensityParameter * theEvapLDPptr; 152 153 G4int theA; 154 G4int theZ; 145 155 146 G4VLevelDensityParameter * theEvapLDPptr; 147 148 G4int theA; 149 G4int theZ; 156 // Spin is fragment spin 157 G4double Spin; 158 159 // Coulomb Barrier 160 const G4VCoulombBarrier * theCoulombBarrierPtr; 161 162 // Resonances Energy 163 std::vector<G4double> * ExcitationEnergies; 150 164 151 // Spin is fragment spin152 G4double Spin;165 // Resonances Spin 166 std::vector<G4double> * ExcitationSpins; 153 167 154 // Coulomb Barrier155 const G4VCoulombBarrier * theCoulombBarrierPtr;168 // Resonances half lifetime 169 std::vector<G4double> * ExcitationLifetimes; 156 170 157 158 // Resonances Energy 159 std::vector<G4double> * ExcitationEnergies; 160 161 // Resonances Spin 162 std::vector<G4double> * ExcitationSpins; 163 164 // Resonances half lifetime 165 std::vector<G4double> * ExcitationLifetimes; 166 167 168 // Normalization 169 G4double Normalization; 171 // Normalization 172 G4double Normalization; 170 173 171 174 }; 172 175 176 inline G4double G4GEMProbability::I0(const G4double t) 177 { 178 return std::exp(t) - 1.0; 179 } 180 181 inline G4double G4GEMProbability::I1(const G4double t, const G4double tx) 182 { 183 return (t - tx + 1.0)*std::exp(tx) - t - 1.0; 184 } 185 186 187 inline G4double G4GEMProbability::I2(const G4double s, const G4double sx) 188 { 189 G4double S = 1.0/std::sqrt(s); 190 G4double Sx = 1.0/std::sqrt(sx); 191 192 G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) ); 193 G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*std::exp(sx-s); 194 195 return p1-p2; 196 } 197 173 198 174 199 #endif -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4EvaporationGEMFactory.cc
r1228 r1315 25 25 // 26 26 // 27 // $Id: G4EvaporationGEMFactory.cc,v 1. 9 2009/09/15 12:54:16 vnivanch Exp $28 // GEANT4 tag $Name: geant4-09-0 3$27 // $Id: G4EvaporationGEMFactory.cc,v 1.10 2010/04/27 11:43:16 vnivanch Exp $ 28 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 29 29 // 30 30 // Hadronic Process: Nuclear De-excitations … … 103 103 #include "G4PhotonEvaporation.hh" 104 104 105 const G4EvaporationGEMFactory & 106 G4EvaporationGEMFactory::operator=(const G4EvaporationGEMFactory & ) 107 { 108 throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationGEMFactory::operator= meant to not be accessable."); 109 return *this; 110 } 111 112 G4bool 113 G4EvaporationGEMFactory::operator==(const G4EvaporationGEMFactory & ) const 114 { 115 throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationGEMFactory::operator== meant to not be accessable."); 116 return false; 117 } 118 119 G4bool 120 G4EvaporationGEMFactory::operator!=(const G4EvaporationGEMFactory & ) const 121 { 122 throw G4HadronicException(__FILE__, __LINE__, "G4EvaporationGEMFactory::operator!= meant to not be accessable."); 123 return true; 124 } 105 G4EvaporationGEMFactory::G4EvaporationGEMFactory() 106 {} 107 108 G4EvaporationGEMFactory::~G4EvaporationGEMFactory() 109 {} 125 110 126 111 std::vector<G4VEvaporationChannel*> * G4EvaporationGEMFactory::CreateChannel() … … 129 114 new std::vector<G4VEvaporationChannel*>; 130 115 theChannel->reserve(68); 116 117 theChannel->push_back( new G4PhotonEvaporation() ); // Photon Channel 118 theChannel->push_back( new G4CompetitiveFission() ); // Fission Channel 131 119 132 120 theChannel->push_back( new G4NeutronGEMChannel() ); // n … … 197 185 theChannel->push_back( new G4Mg28GEMChannel() ); // Mg28 198 186 199 theChannel->push_back( new G4CompetitiveFission() ); // Fission Channel200 theChannel->push_back( new G4PhotonEvaporation() ); // Photon Channel201 202 187 return theChannel; 203 188 } -
trunk/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbability.cc
r1196 r1315 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4GEMProbability.cc,v 1.13 2010/05/19 10:21:16 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-beta-cand-01 $ 28 // 29 //--------------------------------------------------------------------- 30 // 31 // Geant4 class G4GEMProbability 32 // 33 // 34 // Hadronic Process: Nuclear De-excitations 35 // by V. Lara (Sept 2001) 26 36 // 27 37 // … … 35 45 // -InitialLeveldensity calculated according to the right conditions of the 36 46 // initial excited nucleus. 47 // J. M. Quesada 19/04/2010 fix in emission probability calculation. 48 // V.Ivanchenko 20/04/2010 added usage of G4Pow and use more safe computation 49 // V.Ivanchenko 18/05/2010 trying to speedup the most slow method 50 // by usage of G4Pow, integer Z and A; moved constructor, 51 // destructor and virtual functions to source 37 52 38 53 #include "G4GEMProbability.hh" 39 54 #include "G4PairingCorrection.hh" 40 41 42 43 G4GEMProbability::G4GEMProbability(const G4GEMProbability &) : G4VEmissionProbability() 44 { 45 throw G4HadronicException(__FILE__, __LINE__, "G4GEMProbability::copy_constructor meant to not be accessable"); 46 } 47 48 49 50 51 const G4GEMProbability & G4GEMProbability:: 52 operator=(const G4GEMProbability &) 53 { 54 throw G4HadronicException(__FILE__, __LINE__, "G4GEMProbability::operator= meant to not be accessable"); 55 return *this; 56 } 57 58 59 G4bool G4GEMProbability::operator==(const G4GEMProbability &) const 60 { 61 return false; 62 } 63 64 G4bool G4GEMProbability::operator!=(const G4GEMProbability &) const 65 { 66 return true; 55 #include "G4Pow.hh" 56 #include "G4IonTable.hh" 57 58 G4GEMProbability:: G4GEMProbability() : 59 theA(0), theZ(0), Spin(0.0), theCoulombBarrierPtr(0), 60 ExcitationEnergies(0), ExcitationSpins(0), ExcitationLifetimes(0), Normalization(1.0) 61 { 62 theEvapLDPptr = new G4EvaporationLevelDensityParameter; 63 fG4pow = G4Pow::GetInstance(); 64 fPairCorr = G4PairingCorrection::GetInstance(); 65 } 66 67 G4GEMProbability:: G4GEMProbability(const G4int anA, const G4int aZ, const G4double aSpin) : 68 theA(anA), theZ(aZ), Spin(aSpin), theCoulombBarrierPtr(0), 69 ExcitationEnergies(0), ExcitationSpins(0), ExcitationLifetimes(0), Normalization(1.0) 70 { 71 theEvapLDPptr = new G4EvaporationLevelDensityParameter; 72 fG4pow = G4Pow::GetInstance(); 73 fPairCorr = G4PairingCorrection::GetInstance(); 74 } 75 76 G4GEMProbability::~G4GEMProbability() 77 { 78 delete theEvapLDPptr; 79 } 80 81 G4double G4GEMProbability::CalcAlphaParam(const G4Fragment & ) const 82 { 83 return 1.0; 84 } 85 86 G4double G4GEMProbability::CalcBetaParam(const G4Fragment & ) const 87 { 88 return 1.0; 89 } 90 91 G4double G4GEMProbability::CCoeficient(const G4double ) const 92 { 93 return 0.0; 67 94 } 68 95 … … 80 107 if (ExcitationEnergies && ExcitationSpins && ExcitationLifetimes) { 81 108 G4double SavedSpin = Spin; 82 for ( unsigned int i = 0; i < ExcitationEnergies->size(); i++) {109 for (size_t i = 0; i < ExcitationEnergies->size(); ++i) { 83 110 Spin = ExcitationSpins->operator[](i); 84 111 // substract excitation energies … … 86 113 if (Tmax > 0.0) { 87 114 G4double width = CalcProbability(fragment,Tmax,CoulombBarrier); 115 //JMQ April 2010 added condition to prevent reported crash 88 116 // update probability 89 if (hbar_Planck*std::log(2.0)/width < ExcitationLifetimes->operator[](i)) { 117 if (width > 0. && 118 hbar_Planck*fG4pow->logZ(2) < width*ExcitationLifetimes->operator[](i)) { 90 119 EmissionProbability += width; 91 120 } … … 98 127 return EmissionProbability; 99 128 } 129 130 131 G4double G4GEMProbability::CalcProbability(const G4Fragment & fragment, 132 const G4double MaximalKineticEnergy, 133 const G4double V) 134 135 // Calculate integrated probability (width) for evaporation channel 136 { 137 G4int A = fragment.GetA_asInt(); 138 G4int Z = fragment.GetZ_asInt(); 139 140 G4int ResidualA = A - theA; 141 G4int ResidualZ = Z - theZ; 142 G4double U = fragment.GetExcitationEnergy(); 143 144 G4double NuclearMass = fragment.ComputeGroundStateMass(theZ, theA); 145 146 G4double Alpha = CalcAlphaParam(fragment); 147 G4double Beta = CalcBetaParam(fragment); 148 149 150 // ***RESIDUAL*** 151 //JMQ (September 2009) the following quantities refer to the RESIDUAL: 152 153 G4double delta0 = fPairCorr->GetPairingCorrection(ResidualA, ResidualZ); 154 155 G4double a = theEvapLDPptr->LevelDensityParameter(ResidualA, 156 ResidualZ,MaximalKineticEnergy+V-delta0); 157 G4double Ux = (2.5 + 150.0/G4double(ResidualA))*MeV; 158 G4double Ex = Ux + delta0; 159 G4double T = 1.0/(std::sqrt(a/Ux) - 1.5/Ux); 160 //JMQ fixed bug in units 161 G4double E0 = Ex - T*(std::log(T/MeV) - std::log(a*MeV)/4.0 - 1.25*std::log(Ux/MeV) + 2.0*std::sqrt(a*Ux)); 162 // ***end RESIDUAL *** 163 164 // ***PARENT*** 165 //JMQ (September 2009) the following quantities refer to the PARENT: 166 167 G4double deltaCN=fPairCorr->GetPairingCorrection(A, Z); 168 G4double aCN = theEvapLDPptr->LevelDensityParameter(A, Z, U-deltaCN); 169 G4double UxCN = (2.5 + 150.0/G4double(A))*MeV; 170 G4double ExCN = UxCN + deltaCN; 171 G4double TCN = 1.0/(std::sqrt(aCN/UxCN) - 1.5/UxCN); 172 //JMQ fixed bug in units 173 G4double E0CN = ExCN - TCN*(std::log(TCN/MeV) - std::log(aCN*MeV)/4.0 - 1.25*std::log(UxCN/MeV) + 2.0*std::sqrt(aCN*UxCN)); 174 // ***end PARENT*** 175 176 G4double Width; 177 G4double InitialLevelDensity; 178 G4double t = MaximalKineticEnergy/T; 179 if ( MaximalKineticEnergy < Ex ) { 180 //JMQ 190709 bug in I1 fixed (T was missing) 181 Width = (I1(t,t)*T + (Beta+V)*I0(t))/std::exp(E0/T); 182 //JMQ 160909 fix: InitialLevelDensity has been taken away 183 //(different conditions for initial CN..) 184 } else { 185 186 //VI minor speedup 187 G4double expE0T = std::exp(E0/T); 188 const G4double sqrt2 = std::sqrt(2.0); 189 190 G4double tx = Ex/T; 191 G4double s = 2.0*std::sqrt(a*(MaximalKineticEnergy-delta0)); 192 G4double sx = 2.0*std::sqrt(a*(Ex-delta0)); 193 Width = I1(t,tx)*T/expE0T + I3(s,sx)*std::exp(s)/(sqrt2*a); 194 // For charged particles (Beta+V) = 0 beacuse Beta = -V 195 if (theZ == 0) { 196 Width += (Beta+V)*(I0(tx)/expE0T + 2.0*sqrt2*I2(s,sx)*std::exp(s)); 197 } 198 } 199 200 //JMQ 14/07/2009 BIG BUG : NuclearMass is in MeV => hbarc instead of hbar_planck must be used 201 // G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbar_Planck*hbar_Planck); 202 G4double g = (2.0*Spin+1.0)*NuclearMass/(pi2* hbarc*hbarc); 203 204 //JMQ 190709 fix on Rb and geometrical cross sections according to Furihata's paper 205 // (JAERI-Data/Code 2001-105, p6) 206 // G4double RN = 0.0; 207 G4double Rb = 0.0; 208 if (theA > 4) 209 { 210 // G4double R1 = std::pow(ResidualA,1.0/3.0); 211 // G4double R2 = std::pow(G4double(theA),1.0/3.0); 212 G4double Ad = fG4pow->Z13(ResidualA); 213 G4double Aj = fG4pow->Z13(theA); 214 // RN = 1.12*(R1 + R2) - 0.86*((R1+R2)/(R1*R2)); 215 Rb = 1.12*(Aj + Ad) - 0.86*((Aj+Ad)/(Aj*Ad))+2.85; 216 Rb *= fermi; 217 } 218 else if (theA>1) 219 { 220 G4double Ad = fG4pow->Z13(ResidualA); 221 G4double Aj = fG4pow->Z13(theA); 222 Rb=1.5*(Aj+Ad)*fermi; 223 } 224 else 225 { 226 G4double Ad = fG4pow->Z13(ResidualA); 227 Rb = 1.5*Ad*fermi; 228 } 229 // G4double GeometricalXS = pi*RN*RN*std::pow(ResidualA,2./3.); 230 G4double GeometricalXS = pi*Rb*Rb; 231 //end of JMQ fix on Rb by 190709 232 233 234 235 //JMQ 160909 fix: initial level density must be calculated according to the 236 // conditions at the initial compound nucleus 237 // (it has been removed from previous "if" for the residual) 238 239 if ( U < ExCN ) 240 { 241 InitialLevelDensity = (pi/12.0)*std::exp((U-E0CN)/TCN)/TCN; 242 } 243 else 244 { 245 // InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*(U-deltaCN)))/std::pow(aCN*std::pow(U-deltaCN,5.0),1.0/4.0); 246 //VI speedup 247 G4double x = U-deltaCN; 248 G4double x2 = x*x; 249 G4double x3 = x2*x; 250 InitialLevelDensity = (pi/12.0)*std::exp(2*std::sqrt(aCN*x))/std::sqrt(std::sqrt(aCN*x2*x3)); 251 } 252 // 253 254 255 //JMQ 190709 BUG : pi instead of sqrt(pi) must be here according to Furihata's report: 256 // Width *= std::sqrt(pi)*g*GeometricalXS*Alpha/(12.0*InitialLevelDensity); 257 Width *= pi*g*GeometricalXS*Alpha/(12.0*InitialLevelDensity); 258 259 260 return Width; 261 } 262 263 /* 100 264 101 265 G4double G4GEMProbability::CalcProbability(const G4Fragment & fragment, … … 219 383 return Width; 220 384 } 221 222 223 224 225 G4double G4GEMProbability::I0(const G4double t) 226 { 227 G4double result = (std::exp(t) - 1.0); 228 return result; 229 } 230 231 G4double G4GEMProbability::I1(const G4double t, const G4double tx) 232 { 233 G4double result = t - tx + 1.0; 234 result *= std::exp(tx); 235 result -= (t + 1.0); 236 return result; 237 } 238 239 240 G4double G4GEMProbability::I2(const G4double s, const G4double sx) 241 { 242 G4double S = 1.0/std::sqrt(s); 243 G4double Sx = 1.0/std::sqrt(sx); 244 245 G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) ); 246 G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*std::exp(sx-s); 247 248 return p1-p2; 249 } 385 */ 250 386 251 387 G4double G4GEMProbability::I3(const G4double s, const G4double sx)
Note: See TracChangeset
for help on using the changeset viewer.