41 #include "G4InuclSpecialFunctions.hh" 55 G4InuclSpecialFunctions::randomInuclPowers(
G4double ekin,
63 for (
G4int i=0; i<4; i++) {
65 for (
G4int k=0; k<4; k++) {
67 V += C * theG4Pow->
powN(ekin, k);
71 PR += V * theG4Pow->
powN(S, i);
74 return std::sqrt(S) * (PR + (1-PQ)*(S*S*S*S));
80 return 0.76 + 2.2 / G4cbrt(A);
87 snn = -1174.8 / (e *
e) + 3088.5 / e + 5.3107;
89 snn = 93074.0 / (e *
e) - 11.148 / e + 22.429;
99 spn = -5057.4 / (e *
e) + 9069.2 / e + 6.9466;
101 spn = 239380.0 / (e *
e) + 1802.0 / e + 27.147;
118 return x==0 ? 0. : (x<0?-1.:1.)*
G4Exp(
G4Log(std::fabs(x))/3.);
125 G4double G4InuclSpecialFunctions::inuclRndm() {
132 r1 = r1 > eps ? r1 :
eps;
134 r2 = r2 > eps ? r2 :
eps;
135 r2 = r2 < 1.0 - eps ? r2 : 1.0 -
eps;
137 return sigma * std::sin(
twopi * r1) * std::sqrt(-2.0 *
G4Log(r2));
140 G4double G4InuclSpecialFunctions::randomPHI() {
141 return twopi * inuclRndm();
144 std::pair<G4double, G4double> G4InuclSpecialFunctions::randomCOS_SIN() {
145 G4double CT = 1.0 - 2.0 * inuclRndm();
147 return std::pair<G4double, G4double>(CT, std::sqrt(1.0 - CT*CT));
154 G4double pt = p * std::sqrt(std::fabs(1.0 - ct * ct));
158 if (!pvec_G4MT_TLS_) {
165 if (!momr_G4MT_TLS_) {
171 pvec.
set(pt*std::cos(phi), pt*std::sin(phi), p*ct);
178 G4InuclSpecialFunctions::generateWithRandomAngles(
G4double p,
G4double mass) {
179 std::pair<G4double, G4double> COS_SIN = randomCOS_SIN();
185 if (!pvec_G4MT_TLS_) {
192 if (!momr_G4MT_TLS_) {
198 pvec.
set(pt*std::cos(phi), pt*std::sin(phi), p*COS_SIN.first);
void set(double x, double y, double z)
static G4Pow * GetInstance()
CLHEP::Hep3Vector G4ThreeVector
G4double powN(G4double x, G4int n) const
static const G4double eps
void setVectM(const Hep3Vector &spatial, double mass)
double A(double temperature)
static const double twopi
G4double Z13(G4int Z) const
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double Z23(G4int Z) const
CLHEP::HepLorentzVector G4LorentzVector