Geant4  10.02.p03
G4KalbachCrossSection Class Reference

#include <G4KalbachCrossSection.hh>

Collaboration diagram for G4KalbachCrossSection:

Static Public Member Functions

static G4double ComputePowerParameter (G4int resA, G4int idx)
 
static G4double ComputeCrossSection (G4double K, G4double resA13, G4double amu1, G4int idx, G4int Z, G4int A, G4int resZ, G4int resA)
 

Detailed Description

Definition at line 77 of file G4KalbachCrossSection.hh.

Member Function Documentation

◆ ComputeCrossSection()

static G4double G4KalbachCrossSection::ComputeCrossSection ( G4double  K,
G4double  resA13,
G4double  amu1,
G4int  idx,
G4int  Z,
G4int  A,
G4int  resZ,
G4int  resA 
)
inlinestatic

Definition at line 86 of file G4KalbachCrossSection.hh.

89  {
90  G4double sig = 0.0;
91  G4double signor = 1.0;
92  G4double lambda, mu, nu;
93  G4double ec = 0.5;
94  if(0 < Z) {
95  //JMQ 13.02.2009 tuning for improving cluster emission ddxs
96  // (spallation benchmark)
97  G4double xx = 1.7;
98  if(1 == A) { xx = 1.5; }
99  ec = 1.44 * Z * resZ / (xx*resA13 + paramK[idx][10]);
100  }
101  G4double ecsq = ec*ec;
102  G4double elab = K * (A + resA) / G4double(resA);
103 
104  if(idx == 0) { // parameterization for neutron
105 
106  if(resA < 40) { signor =0.7 + resA*0.0075; }
107  else if(resA > 210) { signor = 1. + (resA-210)*0.004; }
108  lambda = paramK[idx][3]/resA13 + paramK[idx][4];
109  mu = paramK[idx][5]*resA13 + paramK[idx][6]*resA13*resA13;
110  // JMQ 20.11.2008 very low energy behaviour corrected
111  // (problem for A (apprx.)>60) fix for avoiding
112  // neutron xs going to zero at very low energies
113  nu = std::abs(paramK[idx][7]*resA13*resA + paramK[idx][8]*resA13*resA13
114  + paramK[idx][9]);
115 
116  } else { // parameterization for charged
117  // proton correction
118  if(idx == 1) {
119  if (resA <= 60) { signor = 0.92; }
120  else if (resA < 100) { signor = 0.8 + resA*0.002; }
121  }
122  lambda = paramK[idx][3]*resA + paramK[idx][4];
123  mu = paramK[idx][5]*amu1;
124  nu = amu1* (paramK[idx][7] + paramK[idx][8]*ec + paramK[idx][9]*ecsq);
125  }
126 
127  // threashold cross section
128  if(elab <= ec) {
129  G4double p = paramK[idx][0];
130  if(0 < Z) { p += paramK[idx][1]/ec + paramK[idx][2]/ecsq; }
131  G4double a = -2*p*ec + lambda - nu/ecsq;
132  G4double b = p*ecsq + mu + 2*nu/ec;
133  G4double ecut;
134  G4double det = a*a - 4*p*b;
135  if (det > 0.0) { ecut = (std::sqrt(det) - a)/(p + p); }
136  else { ecut = a/(p + p); }
137 
138  // If ecut>0, sig=0 at elab=ecut
139  if(elab > ecut) {
140  sig = (p*elab*elab + a*elab + b)*signor;
141 
142  // extra proton correction
143  if(1 == idx) {
144  // c and w are for global correction factor for
145  // they are scaled down for light targets where ec is low.
146  G4double cc = std::min(3.15, ec*0.5);
147  G4double signor2 = (ec - elab - cc) *3.15/ (0.7*cc);
148  sig /= (1. + G4Exp(signor2));
149  }
150  }
151 
152  // high energy cross section
153  } else {
154  // etest is the energy above which the rxn cross section is
155  // compared with the geometrical limit and the max taken.
156 
157  // neutron parameters
158  G4double etest = 32.;
159  G4double xnulam = 1.0;
160  // parameters for charged
161  if(0 < Z) {
162  etest = 0.0;
163  xnulam = nu / lambda;
164  if(xnulam > spill) { xnulam= 0.0; }
165  else if (xnulam >= flow) {
166  if(1 == idx) { etest = std::sqrt(xnulam) + 7.; }
167  else { etest = 1.2 *std::sqrt(xnulam); }
168  }
169  }
170  // ** For xnulam.gt.0, sig reaches a maximum at sqrt(xnulam).
171  sig = (lambda*elab + mu + nu/elab)*signor;
172  if (xnulam >= flow && elab >= etest) {
173  G4double geom = std::sqrt(A*K);
174  geom = 1.23*resA13 + paramK[idx][10] + 4.573/geom;
175  geom = 31.416 * geom * geom;
176  sig = std::max(sig, geom);
177  }
178  }
179  sig = std::max(sig, 0.0);
180  return sig;
181  }
Double_t xx
double A(double temperature)
Float_t Z
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
double G4double
Definition: G4Types.hh:76
static const G4double paramK[6][11]
static const G4double spill
static const G4double flow
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputePowerParameter()

static G4double G4KalbachCrossSection::ComputePowerParameter ( G4int  resA,
G4int  idx 
)
inlinestatic

Definition at line 81 of file G4KalbachCrossSection.hh.

82  {
83  return G4Pow::GetInstance()->powZ(resA, paramK[idx][6]);
84  }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:254
static const G4double paramK[6][11]
Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following file: