4 #include "KVRangeYanezMaterial.h"
8 #include "KVNameValueList.h"
75 const double FMT = 0.005;
90 std::vector<elem>
cmpnd{NELMAX};
100 double passage(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
101 double ein,
double t,
double* err);
107 double egassap(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
108 double t,
double eut,
double* err);
112 double thickn(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
113 double ein,
double delen);
118 double rangen(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
126 void rangetab(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
127 double* em,
double* r,
int* n);
129 void dedxtab(
int icorr,
int zp,
int ap,
int iabso,
int zt,
int at,
130 double e,
double* tdedxe,
double* tdedxn);
138 return (
pow(
x, 3) * (3 *
x * (2 *
x - 5) + 10));
144 double dedx(
int icorr,
double e,
int zp,
int ap,
int zt,
int at);
149 double ededx(
double e,
int zp,
int zt);
157 double ndedx(
double e,
int zp,
int ap,
int zt,
int at);
163 double ededxh(
double e,
int zp,
int zt);
172 void mpyers(
double* le,
int zt,
double* f);
181 void gfact(
double* le,
int zt,
double* f);
187 void alion(
int zp,
double* dedxz2);
193 void alref(
double le,
double* lz,
double*
dedx);
200 double s2az(
double e,
int zt);
202 double polint(
double* xa,
double* ya,
int n,
double x,
double* dy)
204 double y,
c[
n],
d[
n];
206 double den, dif, dift, ho, hp,
w;
210 for (i = 0 ; i <
n ; i++) {
211 dift =
fabs(
x - * (xa + i));
216 c[i] =
d[i] = *(ya + i);
220 for (
m = 0 ;
m <
n - 1 ;
m++) {
221 for (i = 0 ; i <
n -
m - 1 ; i++) {
223 hp = *(xa + i +
m + 1) -
x;
232 if (2 * ns <
n -
m - 1)
244 unsigned int locate(
double y[],
int n,
double x)
247 unsigned int jl, jm, ju;
252 while ((ju - jl) > 1) {
254 if ((
y[
n - 1] >
y[1]) && (
x >
y[jm]))
262 void splie2(
double TOTO[],
double x2a[],
double* ya[],
263 int m,
int n,
double* y2a[])
265 double ytmp[
n], y2tmp[
n];
268 for (j = 0 ; j <
m ; j++) {
269 for (i = 0 ; i <
n ; i++) {
270 ytmp[i] = *(ya[i] + j);
273 spline(x2a, ytmp,
n, 1.0e30, 1.0e30, &y2tmp[0]);
274 for (i = 0 ; i <
n ; i++) {
275 *(y2a[i] + j) = y2tmp[i];
281 void splin2(
double x1a[],
double x2a[],
double* ya[],
double* y2a[],
282 int m,
int n,
double x1,
double x2,
double* y)
284 double ytmp[
n], y2tmp[
n], yytmp[
m];
287 for (j = 0 ; j <
m ; j++) {
288 for (i = 0 ; i <
n ; i++) {
289 ytmp[i] = *(ya[i] + j);
290 y2tmp[i] = *(y2a[i] + j);
292 splint(x2a, ytmp, y2tmp,
n,
x2, &yytmp[j]);
294 spline(x1a, yytmp,
m, 1.0e30, 1.0e30, &y2tmp[0]);
298 void spline(
double x[],
double y[],
int n,
double yp1,
double ypn,
double* y2)
302 double p, qn, sig, un, u[200];
309 u[0] = (3.0 / (
x[1] -
x[0])) * ((
y[1] -
y[0]) / (
x[1] -
x[0]) - yp1);
311 for (k = 1 ; k <
n - 1 ; k++) {
312 sig = (
x[k] -
x[k - 1]) / (
x[k + 1] -
x[k - 1]);
313 p = *(
y2 + k - 1) * sig + 2.0;
314 *(
y2 + k) = (sig - 1.0) /
p;
315 u[k] = (6.0 * ((
y[k + 1] -
y[k]) / (
x[k + 1] -
x[k]) -
316 (
y[k] -
y[k - 1]) / (
x[k] -
x[k - 1])) /
317 (
x[k + 1] -
x[k - 1]) - sig * u[k - 1]) /
p;
323 un = (3.0 / (
x[
m] -
x[
m - 1])) *
324 (ypn - (
y[
m] -
y[
m - 1]) / (
x[
m] -
x[
m - 1]));
326 *(
y2 +
m) = (un - qn * u[
m - 1]) / (*(
y2 +
m - 1) * qn + 1.0);
327 for (k =
m - 1 ; k >= 0 ; k--) {
328 *(
y2 + k) *= *(
y2 + k + 1);
333 void splint(
double xa[],
double ya[],
double y2a[],
334 int n,
double x,
double* y)
343 while (khi - klo > 1) {
344 k = (khi + klo) >> 1;
352 h = xa[khi] - xa[klo];
354 printf(
"Bad xa input in splint.\n");
357 a = (xa[khi] -
x) /
h;
358 b = (
x - xa[klo]) /
h;
359 *
y =
a * ya[klo] +
b * ya[khi] +
360 ((
pow(
a, 3) -
a) * y2a[klo] + (
pow(
b, 3) -
b) * y2a[khi]) * (
h *
h) / 6.0;
378 for (i = 0 ; i <
nelem ; i++) {
473 cmpnd[0].w = 0.206 * 60.;
476 cmpnd[1].w = 0.340 * 60.;
479 cmpnd[2].w = 0.454 * 60.;
546 printf(
"No valid absorber data.\n");
556 double ein,
double t,
double* err)
558 double em[NMAX],
r[NMAX];
560 double elin, elut, rin, rut, lerr;
566 if (icorr == 0 && ein / ap > 12.0)
568 if (icorr == 1 && ein / ap <= 2.5)
571 rangetab(icorr, zp, ap, iabso, zt, at, &em[0], &
r[0], &
n);
574 elin =
log10(ein / (
double)ap);
576 if (jj > jjj) jj = jjj;
577 rin =
polint(&em[jj], &
r[jj], 3, elin, &lerr);
585 if (jj > jjj) jj = jjj;
586 elut =
polint(&
r[jj], &em[jj], 3, rut, &lerr);
587 *err =
fabs(
pow(10.0, elut - lerr * 3) -
pow(10.0, elut + lerr * 3)) /
pow(10.0, elut);
588 return pow(10.0, elut) * ap;
597 double t,
double eut,
double* err)
599 double em[NMAX],
r[NMAX];
601 double elut, elin, eaut, rut, rin, lerr;
606 if (eut / (
double)ap != 0.0) {
607 if (icorr == 0 && eut / ap > 12.0)
611 rangetab(icorr, zp, ap, iabso, zt, at, &em[0], &
r[0], &
n);
614 if (eut / (
double)ap != 0.0) {
615 elut =
log10(eut / (
double)ap);
617 if (jj > jjj) jj = jjj;
618 rut =
polint(&em[jj], &
r[jj], 3, elut, &lerr);
625 if (jj > jjj) jj = jjj;
626 elin =
polint(&
r[jj], &em[jj], 3, rin, &lerr);
627 *err =
fabs(
pow(10.0, elin - lerr * 3) -
pow(10.0, elin + lerr * 3)) /
pow(10.0, elin);
628 eaut =
pow(10.0, elin);
630 if (icorr == 0 && eaut > 12.0)
631 printf(
"warning: Hubert-Bimbot-Gauvin correlations should be used in this case.\n");
632 if (icorr == 1 && eaut <= 2.5)
633 printf(
"Warning: Northcliffe-Schilling correlations should be used in this case.\n");
643 double ein,
double delen)
645 double em[NMAX],
r[NMAX];
647 double elin, elut, rin, rut, rerr;
652 if (icorr == 0 && ein / (
double)ap > 12.0)
654 if (icorr == 1 && ein / (
double)ap <= 2.5)
657 rangetab(icorr, zp, ap, iabso, zt, at, &em[0], &
r[0], &
n);
660 elin =
log10(ein / (
double)ap);
662 if (jj > jjj) jj = jjj;
663 rin =
polint(&em[jj], &
r[jj], 3, elin, &rerr);
664 if (ein - delen <= 0.0)
667 elut =
log10((ein - delen) / (
double)ap);
669 if (jj > jjj) jj = jjj;
670 rut =
polint(&em[jj], &
r[jj], 3, elut, &rerr);
682 double em[NMAX],
r[NMAX];
689 if (icorr == 0 && ein / (
double)ap > 12.0)
691 if (icorr == 1 && ein / (
double)ap <= 2.5)
694 rangetab(icorr, zp, ap, iabso, zt, at, &em[0], &
r[0], &
n);
697 elin =
log10(ein / (
double)ap);
699 if (jj > jjj) jj = jjj;
700 return polint(&em[jj], &
r[jj], 3, elin, &rerr);
709 double* em,
double* r,
int* n)
712 -2.0000000000, -1.9030899870, -1.7958800173, -1.6989700043, -1.6020599913,
713 -1.4948500217, -1.3979400087, -1.3010299957, -1.2218487496, -1.1549019600,
714 -1.0969100130, -1.0457574906, -1.0000000000, -0.9030899870, -0.7958800173,
715 -0.6989700043, -0.6020599913, -0.4948500217, -0.3979400087, -0.3010299957,
716 -0.2218487496, -0.1549019600, -0.0969100130, -0.0457574906, 0.0000000000,
717 0.0969100130, 0.2041199827, 0.3010299957, 0.3979400087, 0.5051499783,
718 0.6020599913, 0.6989700043, 0.7781512504, 0.8450980400, 0.9030899870,
719 0.9542425094, 1.0000000000, 1.0413926852, 1.0791812460, 1.1760912591,
720 1.3010299957, 1.3979400087, 1.4771212547, 1.5440680444, 1.6020599913,
721 1.6532125138, 1.6989700043, 1.7781512504, 1.8450980400, 1.9030899870,
722 1.9542425094, 2.0000000000, 2.0413926852, 2.0791812460, 2.1760912591,
723 2.3010299957, 2.3979400087, 2.4771212547, 2.5440680444, 2.6020599913,
724 2.6532125138, 2.6989700043
728 double dedxt[NELMAX][NMAX];
733 double rng, rval, rnow, rold;
739 static int icc[NSAV], ijj[NSAV], iab[NSAV];
740 static int izp[NSAV], iap[NSAV], izt[NSAV], iat[NSAV];
741 static double esav[NSAV][NMAX], rsav[NSAV][NMAX];
746 for (i = 0 ; i < isav ; i++) {
748 if (icorr == icc[i]) jsav++;
749 if (iabso == iab[i]) jsav++;
750 if (zp == izp[i]) jsav++;
751 if (ap == iap[i]) jsav++;
752 if (zt == izt[i]) jsav++;
753 if (at == iat[i]) jsav++;
756 for (j = 0 ; j < k ; j++) {
757 *(em + j) = esav[i][j];
758 *(
r + j) = rsav[i][j];
767 printf(
"WARNING in rangetab: NSAV too small\n");
789 printf(
"No valid range correlation.\n");
799 for (i = 0 ; i <
numel ; i++) {
805 for (j = 1 ; j <= 7000 ; j++) {
806 elg =
FMT * (j - 1200);
809 if (elg <= elog[ntalel]) {
810 dedxt[i][*
n] =
dedx(icorr,
e, zp, ap, zt, at);
816 if (*
n > 3999)
break;
826 for (j = 0 ; j < *
n ; j++) {
831 for (i = 0 ; i <
numel ; i++)
832 dedxnow += dedxt[i][j] *
cmpnd[i].
w;
834 rnow = 1.0 / dedxnow;
835 rval = 0.5 * (rold + rnow) * (etot - eold);
840 esav[isav][j] = *(em + j);
841 rsav[isav][j] = *(
r + j);
851 double e,
double* tdedxe,
double* tdedxn)
853 double dedxn[NELMAX], dedxe[NELMAX];
860 for (i = 0 ; i <
numel ; i++) {
865 dedxn[i] =
ndedx(
e, zp, ap, zt, at) *
pow(zp, 2);
866 dedxe[i] =
ededx(
e, zp, zt) *
pow(zp, 2);
873 else if (icorr == 0) {
874 dedxn[i] =
ndedx(
e, zp, ap, zt, at) *
pow(zp, 2);
875 dedxe[i] =
ededx(
e, zp, zt) *
pow(zp, 2);
877 else if (icorr == 2) {
880 e_int = (
e - 2.5) / 9.5;
881 dedxn[i] = (1. - e_int) *
ndedx(
e, zp, ap, zt, at) *
pow(zp, 2);
882 dedxe[i] = e_int *
ededxh(
e, zp, zt) + (1. - e_int) *
ededx(
e, zp, zt) *
pow(zp, 2);
891 *tdedxn = *tdedxe = 0.0;
893 for (i = 0 ; i <
numel ; i++) {
894 *tdedxn += dedxn[i] *
cmpnd[i].w;
895 *tdedxe += dedxe[i] *
cmpnd[i].w;
906 double range::dedx(
int icorr,
double e,
int zp,
int ap,
int zt,
int at)
908 double dedxn, dedxe, e_int, smoothe;
909 static double emin = 0.1, emax = 2.5;
911 if (icorr == 1 &&
e < 2.5) icorr = 0;
913 if (
e < emin) icorr = 0;
914 else if (
e > emax) icorr = 1;
918 dedxn =
ndedx(
e, zp, ap, zt, at);
920 return (dedxn + dedxe) *
pow(zp, 2);
926 e_int = (
e - emin) / (emax - emin);
928 return (smoothe *
ededxh(
e, zp, zt) +
929 (1. - smoothe) * (
ndedx(
e, zp, ap, zt, at) +
ededx(
e, zp, zt)) *
pow(zp, 2));
943 double elog[42] = {-1.903090, -1.795880, -1.698970, -1.602060, -1.494850,
944 -1.397940, -1.301030, -1.221849, -1.154902, -1.096910,
945 -1.045757, -1.000000, -0.903090, -0.795880, -0.698970,
946 -0.602060, -0.494850, -0.397940, -0.301030, -0.221849,
947 -0.154902, -0.096910, -0.045757, 0.000000, +0.096910,
948 +0.204120, +0.301030, +0.397940, +0.505150, +0.602060,
949 +0.698970, +0.778151, +0.845098, +0.903090, +0.954243,
950 +1.000000, +1.041393, +1.079181, +1.301030, +1.602060,
954 int zgases[11] = {1, 2, 7, 8, 9, 10, 17, 18, 36, 54, 86};
958 static double dedxz2[42];
959 static double ak,
a, ftargl;
960 double b, ftarg, el, err;
964 alion(zp, &dedxz2[0]);
965 ak = (dedxz2[2] - dedxz2[0]) / (elog[2] - elog[0]);
966 a = dedxz2[0] - ak * elog[0];
971 for (i = 0 ; i < 11 ; i++)
972 if (zt == zgases[i]) gas = 1;
976 gfact(&elog[0], zt, &ftargl);
978 for (j = 1 ; j < 42 ; j++) {
979 gfact(&elog[j], zt, &ftarg);
986 mpyers(&elog[0], zt, &ftargl);
988 for (j = 1 ; j < 42 ; j++) {
989 mpyers(&elog[j], zt, &ftarg);
998 b =
a + ak * el + ftargl;
1000 jj =
locate(elog, 42, el);
1001 if (jj > 39) jj = 39;
1002 b =
polint(&elog[jj], &dedxz2[jj], 3, el, &err);
1004 return pow(10.0,
b);
1015 double x,
y, xl, yl;
1018 zexpo =
sqrt(
pow(zp, 2.0 / 3.0) +
pow(zt, 2.0 / 3.0));
1019 x =
sqrt((
e * ap * at / (
double)(ap + at)) / (zp * zt * zexpo));
1023 yl = -6.80959 + xl *
1024 (-6.60315 + xl * (-1.73474 + xl * xl * (0.04937 + xl * 0.00486)));
1028 dedr =
y * zt * ap / (zp * at * (ap + at) * zexpo);
1038 static double b,
c,
d;
1039 static double x1,
x2, x3, x4;
1045 return s2az(
e, zt) * 4.0;
1057 d = 0.51216 + 0.5693 *
exp(-0.002158 * zt);
1058 x2 = 11.109 + 0.1057 *
log(zt);
1059 x3 = 0.5622 - 0.07901 *
log(zt);
1060 x4 = 0.8276 - 0.03059 *
log(zt);
1083 d = 1.164 + 0.2319 *
exp(-0.004302 * zt);
1084 x2 = 8.144 + 0.09876 *
log(zt);
1085 x3 = 0.314 + 0.01072 *
log(zt);
1086 x4 = 0.5218 + 0.02521 *
log(zt);
1094 return s2az(
e, zt) *
pow((xg1 * zp), 2);
1103 double za[12] = {4., 6., 13., 22., 28., 32., 40., 47., 63., 73., 79., 92.};
1105 double ea[38] = {0.0125, .016, .02, .025, .032, .04, .05, .06, .07, .08, .09, .1,
1106 .125, .16, .2, .25, .32, .4, .5, .6, .7, .8, .9, 1., 1.25, 1.6, 2.,
1107 2.5, 3.2, 4., 5., 6., 7., 8., 9.0, 10., 11., 12.0
1110 double fb[38][12] = {
1111 {1.6499, 1.3651, 1., .665, .5395, .4901, .454, .42, .2669, .2284, .21, .1799},
1112 {1.6501, 1.3652, 1., .6651, .54, .4901, .4541, .4201, .2671, .2285, .2099, .1801},
1113 {1.65, 1.365, 1., .6649, .54, .49, .454, .4199, .267, .2285, .2101, .1801},
1114 {1.65, 1.365, 1., .6649, .5401, .49, .4541, .42, .2669, .2286, .2105, .1801},
1115 {1.6482, 1.3662, 1., .6651, .541, .492, .454, .42, .267, .229, .2111, .1811},
1116 {1.6441, 1.3691, 1., .667, .544, .496, .457, .4231, .269, .2316, .2129, .1831},
1117 {1.638, 1.3729, 1., .67, .549, .4999, .461, .427, .271, .2354, .217, .1865},
1118 {1.632, 1.381, 1., .674, .554, .503, .465, .431, .276, .24, .2215, .1905},
1119 {1.625, 1.3901, 1., .678, .56, .508, .47, .436, .28, .245, .227, .195},
1120 {1.6181, 1.4021, 1., .683, .565, .5121, .473, .44, .285, .25, .231, .199},
1121 {1.611, 1.414, 1., .688, .57, .518, .477, .444, .291, .2545, .236, .2035},
1122 {1.6049, 1.427, 1., .693, .576, .522, .48, .449, .296, .259, .24, .207},
1123 {1.59, 1.467, 1., .704, .588, .533, .49, .459, .3075, .269, .2515, .2175},
1124 {1.569, 1.5251, 1., .716, .602, .546, .501, .47, .32, .281, .2635, .23},
1125 {1.548, 1.571, 1., .727, .615, .557, .511, .479, .332, .293, .275, .24},
1126 {1.523, 1.6021, 1., .739, .628, .57, .522, .489, .345, .305, .286, .25},
1127 {1.492, 1.621, 1., .753, .643, .587, .535, .5, .358, .318, .2985, .2625},
1128 {1.462, 1.623, 1., .762, .656, .6, .547, .511, .372, .331, .311, .273},
1129 {1.43, 1.607, 1., .773, .67, .615, .56, .522, .386, .344, .3235, .285},
1130 {1.402, 1.579, 1., .783, .682, .628, .57, .531, .397, .355, .3345, .297},
1131 {1.379, 1.548, 1., .79, .691, .637, .577, .538, .406, .363, .343, .304},
1132 {1.358, 1.514, 1., .797, .699, .647, .585, .545, .414, .372, .351, .312},
1133 {1.342, 1.483, 1., .802, .707, .656, .592, .551, .423, .38, .359, .32},
1134 {1.327, 1.453, 1., .809, .714, .663, .599, .557, .43, .387, .366, .327},
1135 {1.297, 1.389, 1., .82, .73, .68, .613, .569, .447, .403, .381, .341},
1136 {1.266, 1.327, 1., .835, .746, .697, .628, .58, .465, .421, .398, .357},
1137 {1.239, 1.293, 1., .847, .761, .714, .64, .593, .48, .438, .414, .373},
1138 {1.213, 1.271, 1., .859, .777, .73, .653, .606, .498, .453, .43, .39},
1139 {1.189, 1.256, 1., .87, .792, .745, .668, .618, .516, .472, .448, .407},
1140 {1.17, 1.246, 1., .879, .805, .758, .683, .63, .533, .488, .465, .423},
1141 {1.154, 1.237, 1., .886, .816, .77, .694, .642, .55, .502, .481, .439},
1142 {1.144, 1.23, 1., .892, .823, .78, .704, .651, .558, .515, .493, .453},
1143 {1.134, 1.225, 1., .896, .828, .787, .712, .659, .57, .524, .503, .463},
1144 {1.127, 1.22, 1., .9, .833, .792, .72, .665, .578, .533, .512, .472},
1145 {1.123, 1.215, 1., .903, .837, .797, .725, .671, .585, .54, .519, .48},
1146 {1.118, 1.21, 1., .907, .84, .801, .729, .677, .59, .547, .527, .487},
1147 {1.114, 1.207, 1., .91, .844, .805, .733, .683, .596, .554, .535, .493},
1148 {1.111, 1.203, 1., .912, .847, .809, .737, .688, .601, .56, .54, .498}
1152 static double lfb[38][12], y2b[38][12];
1153 static double* pfb[38], *py2b[38];
1154 static double lza[12], lea[38];
1158 for (i = 0 ; i < 38 ; i++) {
1159 lea[i] =
log10(ea[i]);
1160 for (j = 0 ; j < 12 ; j++)
1161 lfb[i][j] =
log10(fb[i][j]);
1163 for (j = 0 ; j < 12 ; j++)
1164 lza[j] =
log10(za[j]);
1165 for (i = 0 ; i < 38 ; i++) {
1166 pfb[i] = &(lfb[i])[0];
1167 py2b[i] = &(y2b[i])[0];
1169 splie2(lza, lea, &pfb[0], 12, 38, &py2b[0]);
1176 splin2(lza, lea, &pfb[0], &py2b[0], 12, 38, zl, *le,
f);
1185 double za[9] = {1., 2., 7., 8., 10., 18., 36., 54., 86.};
1187 double ea[38] = {0.0125, .016, .02, .025, .032, .04, .05, .06, .07, .08, .09, .1,
1188 .125, .16, .2, .25, .32, .4, .5, .6, .7, .8, .9, 1., 1.25, 1.6, 2.,
1189 2.5, 3.2, 4., 5., 6., 7., 8., 9.0, 10., 11., 12.0
1192 double far[38] = {0.584, .5891, .595, .607, .6251, .6461, .671, .6970, .722, .747,
1193 .771, .795, .851, .923, .985, 1.034, 1.0550, 1.051, 1.031, 1.001,
1194 .964, .928, .894, .871, .843, .8350, .842, .862, .885, .9, .909,
1195 .914, .918, .919, .9200, .92, .92, .9200
1198 double fa[38][9] = {
1199 {6.4213, 2.7396, 1.8149, 1.7055, 1.5153, 1., .6132, .4349, .2868},
1200 {6.2480, 2.6351, 1.7709, 1.6654, 1.4804, 1., .6195, .4415, .2931},
1201 {6.0166, 2.4705, 1.7091, 1.6102, 1.4403, 1., .6235, .4536, .3036},
1202 {5.7334, 2.2751, 1.6345, 1.5404, 1.3939, 1., .6393, .4661, .3378},
1203 {5.4557, 2.0702, 1.5344, 1.4608, 1.3343, 1., .6495, .4895, .3408},
1204 {5.1854, 1.8853, 1.4441, 1.3900, 1.2800, 1., .6625, .5078, .3607},
1205 {4.9329, 1.7348, 1.3695, 1.3323, 1.2400, 1., .6736, .5246, .3800},
1206 {4.7917, 1.6397, 1.3299, 1.2854, 1.2152, 1., .6800, .5351, .3931},
1207 {4.6953, 1.5900, 1.3020, 1.2645, 1.1994, 1., .6815, .5415, .4003},
1208 {4.6454, 1.5596, 1.2866, 1.2504, 1.1901, 1., .6855, .5462, .4056},
1209 {4.6042, 1.5446, 1.2775, 1.2451, 1.1854, 1., .6873, .5499, .4072},
1210 {4.6038, 1.5447, 1.2805, 1.2403, 1.1799, 1., .6906, .5497, .4076},
1211 {4.6652, 1.5571, 1.2868, 1.2397, 1.1845, 1., .6886, .5488, .4078},
1212 {4.7995, 1.6002, 1.3131, 1.2654, 1.2004, 1., .6858, .5460, .4052},
1213 {4.9848, 1.6548, 1.3553, 1.3015, 1.2305, 1., .6802, .5401, .3990},
1214 {5.2418, 1.7351, 1.4072, 1.3549, 1.2650, 1., .6760, .5300, .3897},
1215 {5.6304, 1.8379, 1.4948, 1.4265, 1.3052, 1., .6673, .5204, .3801},
1216 {5.9373, 1.9601, 1.5566, 1.4796, 1.3397, 1., .6613, .5148, .3749},
1217 {6.1881, 2.0563, 1.5975, 1.5199, 1.3598, 1., .6595, .5150, .3754},
1218 {6.3436, 2.1279, 1.6104, 1.5305, 1.3676, 1., .6633, .5175, .3786},
1219 {6.3693, 2.1888, 1.6100, 1.5301, 1.3693, 1., .6691, .5207, .3848},
1220 {6.3254, 2.2198, 1.6045, 1.5301, 1.3674, 1., .6767, .5280, .3922},
1221 {6.2639, 2.2326, 1.5995, 1.5246, 1.3557, 1., .6823, .5391, .4005},
1222 {6.1883, 2.2377, 1.5970, 1.5155, 1.3502, 1., .6889, .5488, .4076},
1223 {5.8955, 2.2076, 1.5718, 1.5006, 1.3333, 1., .7022, .5670, .4282},
1224 {5.4133, 2.1198, 1.5306, 1.4635, 1.3102, 1., .7174, .5832, .4515},
1225 {4.9170, 2.0155, 1.4941, 1.4228, 1.2874, 1., .7304, .5998, .4715},
1226 {4.3851, 1.8851, 1.4397, 1.3701, 1.2645, 1., .7424, .6183, .4919},
1227 {3.9549, 1.7571, 1.3933, 1.3299, 1.2350, 1., .7605, .6328, .5073},
1228 {3.6667, 1.6578, 1.3555, 1.3000, 1.2222, 1., .7667, .6456, .5222},
1229 {3.4983, 1.5896, 1.3300, 1.2805, 1.2068, 1., .7778, .6567, .5390},
1230 {3.4027, 1.5471, 1.3151, 1.2648, 1.1980, 1., .7812, .6641, .5471},
1231 {3.3442, 1.5185, 1.3050, 1.2582, 1.1895, 1., .7865, .6710, .5545},
1232 {3.3080, 1.4962, 1.3003, 1.2546, 1.1850, 1., .7867, .6746, .5604},
1233 {3.2717, 1.4870, 1.2946, 1.2500, 1.1826, 1., .7881, .6772, .5652},
1234 {3.2500, 1.4837, 1.2946, 1.2500, 1.1826, 1., .7902, .6793, .5685},
1235 {3.2282, 1.4804, 1.2945, 1.2500, 1.1826, 1., .7924, .6815, .5707},
1236 {3.2066, 1.4772, 1.2946, 1.2500, 1.1826, 1., .7946, .6837, .5728}
1241 static double lfa[38][9], y2a[38][9];
1242 static double* pfa[38], *py2a[38];
1243 static double lza[9], lea[38], lfar[38];
1244 double zl, fgl, fgal, err;
1247 for (i = 0 ; i < 38 ; i++) {
1248 lea[i] =
log10(ea[i]);
1249 lfar[i] =
log10(far[i]);
1250 for (j = 0 ; j < 9 ; j++)
1251 lfa[i][j] =
log10(fa[i][j]);
1253 for (j = 0 ; j < 9 ; j++)
1254 lza[j] =
log10(za[j]);
1255 for (i = 0 ; i < 38 ; i++) {
1256 pfa[i] = &(lfa[i])[0];
1257 py2a[i] = &(y2a[i])[0];
1259 splie2(lza, lea, &pfa[0], 9, 38, &py2a[0]);
1265 splin2(lza, lea, &pfa[0], &py2a[0], 9, 38, zl, *le, &fgl);
1266 jj =
locate(lea, 38, *le);
1267 if (jj > 35) jj = 35;
1268 fgal =
polint(&lea[jj], &lfar[jj], 3, *le, &err);
1278 double elog[42] = {-1.903090, -1.795880, -1.698970, -1.602060, -1.494850,
1279 -1.397940, -1.301030, -1.221849, -1.154902, -1.096910,
1280 -1.045757, -1.000000, -0.903090, -0.795880, -0.698970,
1281 -0.602060, -0.494850, -0.397940, -0.301030, -0.221849,
1282 -0.154902, -0.096910, -0.045757, 0.000000, +0.096910,
1283 +0.204120, +0.301030, +0.397940, +0.505150, +0.602060,
1284 +0.698970, +0.778151, +0.845098, +0.903090, +0.954243,
1285 +1.000000, +1.041393, +1.079181, +1.301030, +1.602060,
1286 +1.845098, +2.000000
1291 double dedx[22], lz[22];
1296 for (j = 0; j < 42 ; j++) {
1298 jj =
locate(lz, 22, zlog);
1299 if (jj > 19) jj = 19;
1300 *(dedxz2 + j) =
polint(&lz[jj], &
dedx[jj], 3, zlog, &err);
1310 double zval[22] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 16.,
1311 20., 25., 32., 40., 50., 61., 79., 100.
1314 double elog[42] = {-1.903090, -1.795880, -1.698970, -1.602060, -1.494850,
1315 -1.397940, -1.301030, -1.221849, -1.154902, -1.096910,
1316 -1.045757, -1.000000, -0.903090, -0.795880, -0.698970,
1317 -0.602060, -0.494850, -0.397940, -0.301030, -0.221849,
1318 -0.154902, -0.096910, -0.045757, 0.000000, +0.096910,
1319 +0.204120, +0.301030, +0.397940, +0.505150, +0.602060,
1320 +0.698970, +0.778151, +0.845098, +0.903090, +0.954243,
1321 +1.000000, +1.041393, +1.079181, +1.301030, +1.602060,
1322 +1.845098, +2.000000
1326 double h[42] = {-0.67572, -0.62160, -0.57349, -0.52143, -0.46980, -0.43063,
1327 -0.39794, -0.37779, -0.36653, -0.35952, -0.35655, -0.35655,
1328 -0.36351, -0.38195, -0.40782, -0.44129, -0.48545, -0.53018,
1329 -0.58004, -0.62709, -0.66555, -0.70115, -0.73049, -0.75945,
1330 -0.82102, -0.88941, -0.95468, -1.02228, -1.10237, -1.17393,
1331 -1.24413, -1.30103, -1.35655, -1.39794, -1.43180, -1.46852,
1332 -1.49485, -1.52288, -1.72584, -1.95861, -2.14874, -2.25181
1336 double he[42] = {-0.87615, -0.82246, -0.77404, -0.72584, -0.67162, -0.62663,
1337 -0.58503, -0.55479, -0.53276, -0.51606, -0.50376, -0.49485,
1338 -0.48247, -0.48050, -0.48845, -0.50585, -0.53387, -0.56623,
1339 -0.60380, -0.64589, -0.68194, -0.71388, -0.74232, -0.76828,
1340 -0.82536, -0.89279, -0.95664, -1.02342, -1.09963, -1.17070,
1341 -1.24222, -1.30103, -1.35164, -1.39523, -1.43474, -1.46852,
1342 -1.49826, -1.53018, -1.70997, -1.94310, -2.13077, -2.23657
1346 double li[42] = {-1.03990, -0.98623, -0.93763, -0.88904, -0.83532, -0.78870,
1347 -0.74473, -0.71145, -0.68566, -0.66577, -0.65018, -0.63827,
1348 -0.61939, -0.60985, -0.61103, -0.61979, -0.63618, -0.65561,
1349 -0.67778, -0.70358, -0.72816, -0.75175, -0.77440, -0.79588,
1350 -0.84568, -0.90658, -0.96658, -1.02996, -1.10360, -1.17249,
1351 -1.24328, -1.30200, -1.35218, -1.39674, -1.43573, -1.47137,
1352 -1.50246, -1.53264, -1.70333, -1.93554, -2.11919, -2.22915
1356 double be[42] = {-1.16630, -1.11280, -1.06424, -1.01604, -0.96232, -0.91498,
1357 -0.86967, -0.83472, -0.80740, -0.78615, -0.76955, -0.75696,
1358 -0.73785, -0.72830, -0.72801, -0.73283, -0.74172, -0.75187,
1359 -0.76321, -0.77875, -0.79385, -0.80879, -0.82373, -0.83863,
1360 -0.87533, -0.92445, -0.97675, -1.03533, -1.10582, -1.17352,
1361 -1.24365, -1.30266, -1.35347, -1.39794, -1.43771, -1.47334,
1362 -1.50515, -1.53480, -1.70115, -1.92812, -2.11919, -2.22915
1366 double b[42] = {-1.26857, -1.21496, -1.16673, -1.11827, -1.06449, -1.01827,
1367 -0.97469, -0.94157, -0.91578, -0.89551, -0.87943, -0.86646,
1368 -0.84430, -0.82786, -0.81976, -0.81667, -0.81793, -0.82206,
1369 -0.82822, -0.83791, -0.84783, -0.85811, -0.86864, -0.87943,
1370 -0.90714, -0.94692, -0.99140, -1.04383, -1.10969, -1.17496,
1371 -1.24413, -1.30277, -1.35379, -1.39881, -1.43890, -1.47470,
1372 -1.50808, -1.53820, -1.69897, -1.92812, -2.11351, -2.22915
1376 double c[42] = {-1.36597, -1.31227, -1.26382, -1.21546, -1.16168, -1.11335,
1377 -1.06803, -1.03230, -1.00327, -0.97939, -0.95960, -0.94310,
1378 -0.91315, -0.88941, -0.87642, -0.86967, -0.86708, -0.86753,
1379 -0.86967, -0.87751, -0.88587, -0.89477, -0.90406, -0.91364,
1380 -0.93825, -0.97356, -1.01323, -1.06048, -1.12094, -1.18192,
1381 -1.24795, -1.30491, -1.35491, -1.39915, -1.43903, -1.47496,
1382 -1.50786, -1.53843, -1.69897, -1.92812, -2.10791, -2.23657
1386 double n[42] = {-1.43468, -1.38099, -1.33264, -1.28417, -1.23065, -1.18207,
1387 -1.13789, -1.10316, -1.07498, -1.05171, -1.03209, -1.01543,
1388 -0.98331, -0.95348, -0.93242, -0.91721, -0.90694, -0.90295,
1389 -0.90309, -0.90873, -0.91546, -0.92289, -0.93091, -0.93930,
1390 -0.96160, -0.99419, -1.03152, -1.07625, -1.13389, -1.19230,
1391 -1.25579, -1.31053, -1.35877, -1.40150, -1.44002, -1.47509,
1392 -1.50693, -1.53638, -1.69897, -1.92812, -2.11351, -2.23657
1396 double o[42] = {-1.51481, -1.46120, -1.41260, -1.36417, -1.31064, -1.26211,
1397 -1.21679, -1.18066, -1.15095, -1.12594, -1.10461, -1.08619,
1398 -1.04977, -1.01456, -0.98855, -0.96859, -0.95321, -0.94441,
1399 -0.93930, -0.94119, -0.94554, -0.95157, -0.95873, -0.96658,
1400 -0.98809, -1.01971, -1.05552, -1.09793, -1.15220, -1.20728,
1401 -1.26761, -1.32032, -1.36701, -1.40876, -1.44672, -1.48149,
1402 -1.51348, -1.54302, -1.70115, -1.92996, -2.11919, -2.23657
1406 double f[42] = {-1.59335, -1.53983, -1.49135, -1.44295, -1.38931, -1.34087,
1407 -1.29243, -1.25489, -1.22382, -1.19744, -1.17473, -1.15490,
1408 -1.11504, -1.07534, -1.04469, -1.02002, -0.99984, -0.98727,
1409 -0.97881, -0.97881, -0.98183, -0.98680, -0.99298, -1.00000,
1410 -1.01946, -1.04827, -1.08092, -1.11968, -1.16939, -1.22033,
1411 -1.27653, -1.32619, -1.37067, -1.41086, -1.44759, -1.48149,
1412 -1.51281, -1.54206, -1.70333, -1.93554, -2.11919, -2.23657
1416 double ne[42] = {-1.667562, -1.614036, -1.565431, -1.516984, -1.463442,
1417 -1.414991, -1.366532, -1.327440, -1.294821, -1.267044,
1418 -1.242984, -1.221849, -1.178814, -1.134837, -1.099851,
1419 -1.070581, -1.045661, -1.029374, -1.017729, -1.016554,
1420 -1.018544, -1.022505, -1.027751, -1.033858, -1.051294,
1421 -1.077638, -1.107905, -1.144118, -1.190912, -1.239050,
1422 -1.292430, -1.339704, -1.382161, -1.420559, -1.455684,
1423 -1.488117, -1.518128, -1.546223, -1.709965, -1.939302,
1424 -2.124939, -2.244125
1428 double na[42] = {-1.721058, -1.667311, -1.618892, -1.570501, -1.516820,
1429 -1.468416, -1.419933, -1.380786, -1.348226, -1.320407,
1430 -1.296389, -1.275318, -1.232446, -1.188746, -1.153929,
1431 -1.124556, -1.098528, -1.080058, -1.065126, -1.059368,
1432 -1.057930, -1.059286, -1.062507, -1.067048, -1.081744,
1433 -1.106069, -1.135107, -1.170563, -1.216675, -1.264098,
1434 -1.316521, -1.362626, -1.403721, -1.440816, -1.474580,
1435 -1.505523, -1.534028, -1.560602, -1.712198, -1.939302,
1436 -2.130768, -2.244125
1440 double mg[42] = {-1.772578, -1.719030, -1.670517, -1.622183, -1.568525,
1441 -1.520073, -1.471637, -1.432043, -1.398770, -1.370336,
1442 -1.345650, -1.324005, -1.280013, -1.235689, -1.201234,
1443 -1.172622, -1.146496, -1.126147, -1.107635, -1.098269,
1444 -1.093830, -1.092708, -1.093905, -1.096722, -1.108137,
1445 -1.129466, -1.156326, -1.189926, -1.234445, -1.280588,
1446 -1.331705, -1.376751, -1.416896, -1.453012, -1.485895,
1447 -1.515997, -1.543782, -1.569643, -1.716699, -1.943095,
1448 -2.130768, -2.244125
1452 double al[42] = {-1.819477, -1.765788, -1.717342, -1.668938, -1.615315,
1453 -1.566832, -1.518362, -1.478769, -1.445056, -1.416178,
1454 -1.391120, -1.368989, -1.324092, -1.279083, -1.244712,
1455 -1.216274, -1.189346, -1.167302, -1.146395, -1.134325,
1456 -1.127585, -1.124494, -1.123946, -1.125247, -1.133765,
1457 -1.152303, -1.177082, -1.208978, -1.251858, -1.296734,
1458 -1.346616, -1.390614, -1.429789, -1.465058, -1.497104,
1459 -1.526405, -1.553485, -1.578552, -1.721246, -1.946922,
1460 -2.130768, -2.251812
1464 double s[42] = {-1.940188, -1.886579, -1.838047, -1.789669, -1.736050,
1465 -1.687585, -1.639158, -1.599556, -1.566068, -1.536375,
1466 -1.510448, -1.487543, -1.440552, -1.393635, -1.358479,
1467 -1.328625, -1.298392, -1.272186, -1.246453, -1.229580,
1468 -1.218301, -1.211042, -1.206734, -1.204636, -1.206133,
1469 -1.217544, -1.236718, -1.263853, -1.302185, -1.343333,
1470 -1.389623, -1.430608, -1.467176, -1.500023, -1.529833,
1471 -1.557043, -1.582165, -1.605329, -1.739929, -1.954677,
1472 -2.142668, -2.251812
1476 double ca[42] = {-2.075979, -2.021819, -1.972854, -1.923997, -1.869827,
1477 -1.820951, -1.771985, -1.732066, -1.698265, -1.668978,
1478 -1.643162, -1.619608, -1.570934, -1.521578, -1.483795,
1479 -1.450506, -1.415782, -1.385129, -1.354774, -1.334630,
1480 -1.320095, -1.309649, -1.302291, -1.297333, -1.292494,
1481 -1.296881, -1.310092, -1.331777, -1.364667, -1.401237,
1482 -1.443065, -1.480402, -1.513818, -1.543900, -1.571217,
1483 -1.596151, -1.619111, -1.640402, -1.761954, -1.968592,
1484 -2.148742, -2.259637
1488 double mn[42] = {-2.225571, -2.170053, -2.119827, -2.069642, -2.014125,
1489 -1.963946, -1.913754, -1.872740, -1.838033, -1.807990,
1490 -1.781528, -1.757816, -1.707638, -1.655498, -1.613580,
1491 -1.575563, -1.535642, -1.500335, -1.465385, -1.442445,
1492 -1.425311, -1.412424, -1.402779, -1.395653, -1.385879,
1493 -1.384429, -1.392159, -1.408383, -1.435381, -1.466787,
1494 -1.503646, -1.537003, -1.567095, -1.594346, -1.619152,
1495 -1.641882, -1.662852, -1.682271, -1.787812, -1.982967,
1496 -2.161151, -2.267606
1500 double ge[42] = {-2.400492, -2.343408, -2.291715, -2.240111, -2.182995,
1501 -2.131319, -2.079657, -2.037496, -2.001785, -1.970886,
1502 -1.943639, -1.919231, -1.867598, -1.810463, -1.763088,
1503 -1.718798, -1.672302, -1.631539, -1.591419, -1.564711,
1504 -1.544545, -1.529158, -1.517344, -1.508296, -1.494333,
1505 -1.487817, -1.490406, -1.500990, -1.521326, -1.546631,
1506 -1.577491, -1.606185, -1.632484, -1.656595, -1.678751,
1507 -1.699203, -1.718177, -1.735865, -1.823909, -2.002177,
1508 -2.187087, -2.283997
1512 double zr[42] = {-2.561853, -2.503243, -2.450231, -2.397194, -2.338601,
1513 -2.285565, -2.232566, -2.189264, -2.152620, -2.120904,
1514 -2.092925, -2.067907, -2.014882, -1.956245, -1.903242,
1515 -1.852826, -1.799560, -1.753563, -1.709214, -1.677858,
1516 -1.654381, -1.636459, -1.622625, -1.611899, -1.594536,
1517 -1.584078, -1.582591, -1.588464, -1.602995, -1.622728,
1518 -1.648011, -1.672309, -1.695106, -1.716345, -1.736142,
1519 -1.754611, -1.771888, -1.788112, -1.861697, -2.026872,
1520 -2.200659, -2.301030
1524 double sn[42] = {-2.721064, -2.660906, -2.606460, -2.552036, -2.491821,
1525 -2.437422, -2.383000, -2.338528, -2.300926, -2.268347,
1526 -2.239608, -2.213930, -2.159492, -2.099283, -2.044871,
1527 -1.990430, -1.930228, -1.878243, -1.830878, -1.794081,
1528 -1.766699, -1.745819, -1.729629, -1.716934, -1.695613,
1529 -1.680761, -1.675002, -1.676195, -1.685072, -1.699405,
1530 -1.719194, -1.739042, -1.758185, -1.776379, -1.793595,
1531 -1.809859, -1.825243, -1.839808, -1.913640, -2.060481,
1532 -2.229148, -2.318759
1536 double pm[42] = {-2.859781, -2.798118, -2.742451, -2.686714, -2.625043,
1537 -2.569315, -2.513602, -2.468054, -2.429555, -2.396193,
1538 -2.366784, -2.340466, -2.284742, -2.223095, -2.167368,
1539 -2.111644, -2.049993, -1.993513, -1.942557, -1.901296,
1540 -1.870337, -1.846490, -1.827754, -1.812816, -1.786842,
1541 -1.766889, -1.756499, -1.752995, -1.756612, -1.766145,
1542 -1.781107, -1.797027, -1.812861, -1.828225, -1.842956,
1543 -1.857026, -1.870441, -1.883229, -1.958607, -2.096910,
1544 -2.259637, -2.337242
1548 double au[42] = {-3.042131, -2.978549, -2.921062, -2.863644, -2.800058,
1549 -2.742599, -2.685136, -2.638190, -2.598525, -2.564142,
1550 -2.533801, -2.506670, -2.449214, -2.385659, -2.328194,
1551 -2.270741, -2.207173, -2.149714, -2.092264, -2.047594,
1552 -2.012868, -1.985183, -1.962713, -1.944210, -1.910215,
1553 -1.881059, -1.862441, -1.851053, -1.846528, -1.849244,
1554 -1.857867, -1.868886, -1.880736, -1.892718, -1.904509,
1555 -1.915963, -1.927015, -1.937638, -2.017729, -2.154902,
1556 -2.288193, -2.361511
1560 double fm[42] = {-3.208520, -3.143211, -3.084231, -3.025212, -2.959912,
1561 -2.900872, -2.841879, -2.793633, -2.752862, -2.717559,
1562 -2.686407, -2.658546, -2.599514, -2.534231, -2.475215,
1563 -2.416189, -2.350899, -2.291885, -2.232866, -2.188767,
1564 -2.152835, -2.122876, -2.097497, -2.075726, -2.033033,
1565 -1.992295, -1.962577, -1.940611, -1.925985, -1.921442,
1566 -1.924464, -1.931844, -1.941035, -1.950879, -1.960828,
1567 -1.970612, -1.980107, -1.989259, -2.070581, -2.193820,
1568 -2.309804, -2.371611
1575 for (j = 0; j < 22 ; j++)
1576 *(lz + j) =
log10(zval[j]);
1578 jj =
locate(elog, 42, le);
1579 if (jj > 39) jj = 39;
1584 *(
dedx++) =
polint(&elog[jj], &
h[jj], 3, le, &err);
1587 *(
dedx++) =
polint(&elog[jj], &he[jj], 3, le, &err);
1590 *(
dedx++) =
polint(&elog[jj], &li[jj], 3, le, &err);
1593 *(
dedx++) =
polint(&elog[jj], &be[jj], 3, le, &err);
1596 *(
dedx++) =
polint(&elog[jj], &
b[jj], 3, le, &err);
1599 *(
dedx++) =
polint(&elog[jj], &
c[jj], 3, le, &err);
1602 *(
dedx++) =
polint(&elog[jj], &
n[jj], 3, le, &err);
1605 *(
dedx++) =
polint(&elog[jj], &o[jj], 3, le, &err);
1608 *(
dedx++) =
polint(&elog[jj], &
f[jj], 3, le, &err);
1611 *(
dedx++) =
polint(&elog[jj], &ne[jj], 3, le, &err);
1614 *(
dedx++) =
polint(&elog[jj], &na[jj], 3, le, &err);
1617 *(
dedx++) =
polint(&elog[jj], &mg[jj], 3, le, &err);
1620 *(
dedx++) =
polint(&elog[jj], &al[jj], 3, le, &err);
1623 *(
dedx++) =
polint(&elog[jj], &s[jj], 3, le, &err);
1626 *(
dedx++) =
polint(&elog[jj], &ca[jj], 3, le, &err);
1629 *(
dedx++) =
polint(&elog[jj], &mn[jj], 3, le, &err);
1632 *(
dedx++) =
polint(&elog[jj], &ge[jj], 3, le, &err);
1635 *(
dedx++) =
polint(&elog[jj], &zr[jj], 3, le, &err);
1638 *(
dedx++) =
polint(&elog[jj], &sn[jj], 3, le, &err);
1641 *(
dedx++) =
polint(&elog[jj], &pm[jj], 3, le, &err);
1644 *(
dedx++) =
polint(&elog[jj], &au[jj], 3, le, &err);
1647 *(
dedx++) =
polint(&elog[jj], &fm[jj], 3, le, &err);
1656 double za[18] = {4.0, 6.0, 13.0, 14.0, 22.0, 26.0, 28.0, 29.0, 32.0, 34.0, 40.0,
1657 47.0, 50.0, 64.0, 73.0, 79.0, 82.0, 92.0
1660 double el[38] = {0.916291, 1.098612, 1.252763, 1.386294, 1.504077, 1.609438,
1661 1.704748, 1.791759, 1.871802, 1.945910, 2.079442, 2.197225,
1662 2.302585, 2.397895, 2.484907, 2.708050, 2.995732, 3.218876,
1663 3.401197, 3.555348, 3.688879, 3.806662, 3.912023, 4.007333,
1664 4.094345, 4.174387, 4.248495, 4.382027, 4.499810, 4.605170,
1665 5.010635, 5.298317, 5.521461, 5.703782, 5.857933, 5.991465,
1669 static double sa2[18][38] = {
1671 2.19060, 2.32662, 2.44357, 2.54625, 2.63806, 2.72038, 2.79565, 2.86470, 2.92901,
1672 2.98826, 3.09555, 3.19114, 3.27677, 3.35455, 3.42575, 3.60822, 3.84436, 4.02575,
1673 4.17501, 4.29953, 4.40693, 4.50104, 4.58488, 4.66015, 4.72819, 4.79060, 4.84820,
1674 4.95048, 5.04019, 5.11892, 5.41429, 5.61371, 5.75009, 5.85432, 5.93698, 6.00455,
1678 2.12549, 2.25929, 2.37462, 2.47575, 2.56623, 2.64754, 2.72190, 2.79035, 2.85337,
1679 2.91231, 3.01849, 3.11283, 3.19785, 3.27479, 3.34529, 3.52676, 3.76038, 3.94119,
1680 4.08936, 4.21313, 4.31999, 4.41372, 4.49699, 4.57174, 4.63976, 4.70168, 4.75890,
1681 4.86103, 4.94978, 5.02829, 5.32210, 5.51089, 5.64575, 5.75009, 5.83275, 5.89980,
1685 2.35942, 2.48561, 2.59461, 2.69082, 2.77700, 2.85467, 2.92574, 2.99124, 3.05177,
1686 3.10834, 3.21078, 3.30158, 3.38360, 3.45777, 3.52591, 3.70095, 3.92841, 4.10440,
1687 4.24925, 4.37010, 4.47392, 4.56547, 4.64677, 4.72002, 4.78639, 4.84724, 4.90290,
1688 5.00267, 5.09008, 5.16685, 5.45439, 5.64292, 5.77635, 5.87814, 5.95900, 6.02606,
1692 2.33666, 2.46187, 2.57047, 2.66607, 2.75161, 2.82895, 2.89951, 2.96472, 3.02516,
1693 3.08129, 3.18327, 3.27346, 3.35527, 3.42883, 3.49661, 3.67202, 3.89837, 4.07454,
1694 4.21821, 4.33897, 4.44241, 4.53378, 4.61522, 4.68828, 4.75454, 4.81527, 4.87109,
1695 4.97081, 5.05812, 5.13492, 5.42275, 5.61783, 5.75324, 5.85519, 5.93603, 6.00152,
1699 2.52604, 2.64649, 2.75161, 2.84387, 2.92667, 3.00175, 3.07046, 3.13385, 3.19236,
1700 3.24740, 3.34671, 3.43501, 3.51409, 3.58723, 3.65351, 3.82470, 4.04698, 4.21991,
1701 4.36027, 4.47854, 4.58194, 4.67184, 4.75222, 4.82426, 4.88952, 4.94942, 5.00490,
1702 5.10316, 5.18946, 5.26537, 5.54999, 5.73837, 5.87013, 5.97166, 6.05122, 6.11703,
1706 2.58296, 2.70008, 2.80222, 2.89273, 2.97348, 3.04703, 3.11452, 3.17666, 3.23399,
1707 3.28809, 3.38582, 3.47216, 3.55086, 3.62216, 3.68788, 3.85730, 4.07601, 4.24750,
1708 4.38805, 4.50533, 4.60667, 4.69592, 4.77537, 4.84692, 4.91204, 4.97154, 5.02600,
1709 5.12394, 5.20939, 5.28491, 5.56816, 5.75324, 5.88351, 5.98449, 6.06404, 6.12958,
1713 2.59931, 2.71394, 2.81383, 2.90270, 2.98232, 3.05442, 3.12073, 3.18206, 3.23844,
1714 3.29145, 3.38803, 3.47377, 3.55173, 3.62216, 3.68688, 3.85493, 4.07307, 4.24227,
1715 4.38203, 4.49856, 4.60018, 4.68910, 4.76828, 4.83931, 4.90425, 4.96328, 5.01804,
1716 5.11558, 5.20028, 5.27557, 5.55709, 5.74071, 5.87102, 5.97166, 6.05122, 6.11590,
1720 2.65962, 2.77379, 2.87307, 2.96133, 3.04073, 3.11227, 3.17845, 3.23972, 3.29616,
1721 3.34884, 3.44515, 3.53102, 3.60822, 3.67794, 3.74334, 3.91077, 4.12738, 4.29769,
1722 4.43543, 4.55400, 4.65384, 4.74271, 4.82177, 4.89285, 4.95721, 5.01653, 5.07078,
1723 5.16817, 5.25334, 5.32826, 5.60961, 5.79425, 5.92474, 6.02399, 6.10351, 6.16820,
1727 2.71018, 2.82304, 2.92155, 3.00932, 3.08785, 3.15943, 3.22515, 3.28542, 3.34175,
1728 3.39397, 3.49003, 3.57466, 3.65158, 3.72140, 3.78649, 3.95285, 4.16853, 4.33897,
1729 4.47634, 4.59275, 4.69373, 4.78221, 4.86103, 4.93194, 4.99636, 5.05537, 5.10977,
1730 5.20665, 5.29134, 5.36660, 5.64717, 5.80914, 5.93982, 6.03961, 6.12044, 6.18505,
1735 2.86558, 2.96278, 3.04913, 3.12641, 3.19724, 3.26231, 3.32216, 3.37773, 3.42960,
1736 3.52421, 3.60914, 3.68489, 3.75502, 3.81899, 3.98459, 4.19971, 4.36812, 4.50533,
1737 4.62283, 4.72283, 4.81097, 4.88986, 4.96042, 5.02486, 5.08401, 5.13790, 5.23534,
1738 5.32005, 5.39483, 5.67520, 5.84305, 5.97264, 6.07268, 6.15281, 6.21837, 6.27118,
1742 2.77780, 2.88822, 2.98479, 3.07046, 3.14714, 3.21763, 3.28208, 3.34104, 3.39621,
1743 3.44750, 3.54132, 3.62497, 3.70095, 3.77009, 3.83275, 3.99676, 4.20976, 4.37605,
1744 4.51442, 4.62793, 4.72819, 4.81558, 4.89352, 4.96363, 5.02753, 5.08603, 5.14003,
1745 5.23628, 5.32056, 5.39483, 5.67374, 5.85956, 5.98847, 6.08798, 6.16582, 6.23099,
1749 2.86734, 2.97446, 3.06884, 3.15239, 3.22766, 3.29616, 3.35886, 3.41733, 3.47135,
1750 3.52167, 3.61377, 3.69590, 3.77009, 3.83854, 3.90084, 4.06139, 4.27228, 4.43543,
1751 4.57077, 4.68313, 4.78161, 4.86783, 4.94485, 5.01389, 5.07678, 5.13450, 5.18767,
1752 5.28244, 5.36553, 5.43873, 5.71383, 5.89797, 6.02502, 6.12385, 6.20219, 6.26590,
1756 2.92667, 3.03240, 3.12527, 3.20769, 3.28208, 3.34955, 3.41201, 3.46974, 3.52337,
1757 3.57288, 3.66419, 3.74651, 3.82013, 3.88733, 3.94895, 4.10895, 4.31811, 4.48141,
1758 4.61522, 4.72847, 4.82644, 4.91238, 4.98900, 5.05812, 5.12101, 5.17876, 5.23159,
1759 5.32620, 5.40925, 5.48284, 5.75718, 5.94077, 6.06835, 6.16701, 6.24507, 6.30892,
1763 3.03812, 3.14018, 3.22956, 3.30907, 3.38140, 3.44672, 3.50739, 3.56313, 3.61563,
1764 3.66419, 3.75289, 3.83275, 3.90455, 3.97124, 4.03137, 4.18827, 4.39369, 4.55448,
1765 4.68638, 4.79815, 4.89485, 4.97986, 5.05537, 5.12394, 5.18588, 5.24288, 5.29532,
1766 5.38934, 5.47089, 5.54358, 5.81583, 6.00051, 6.12958, 6.22719, 6.30481, 6.36834,
1770 3.15063, 3.24612, 3.32981, 3.40521, 3.47377, 3.53702, 3.59448, 3.64870, 3.69893,
1771 3.74545, 3.83160, 3.90828, 3.97790, 4.04270, 4.10137, 4.25416, 4.45524, 4.61295,
1772 4.74271, 4.85235, 4.94766, 5.03135, 5.10605, 5.17345, 5.23487, 5.29134, 5.34279,
1773 5.43586, 5.51710, 5.58867, 5.85781, 6.04066, 6.17299, 6.26986, 6.34671, 6.40850,
1777 3.21016, 3.30294, 3.38508, 3.45856, 3.52591, 3.58723, 3.64391, 3.69590, 3.74545,
1778 3.79091, 3.87521, 3.95154, 4.02017, 4.08341, 4.14144, 4.29182, 4.49006, 4.64573,
1779 4.77389, 4.88257, 4.97660, 5.05969, 5.13365, 5.20028, 5.26150, 5.31699, 5.36820,
1780 5.46025, 5.54103, 5.61234, 5.88082, 6.06189, 6.19358, 6.28987, 6.36543, 6.42842,
1784 3.21763, 3.31113, 3.39323, 3.46734, 3.53530, 3.59630, 3.65351, 3.70603, 3.75609,
1785 3.80205, 3.88733, 3.96332, 4.03137, 4.09535, 4.15250, 4.30451, 4.50329, 4.65963,
1786 4.78819, 4.89720, 4.99157, 5.07477, 5.14904, 5.21582, 5.27656, 5.33239, 5.38388,
1787 5.47625, 5.55644, 5.62821, 5.89615, 6.07811, 6.20962, 6.30481, 6.38155, 6.44402,
1791 3.26035, 3.35455, 3.43812, 3.51325, 3.58092, 3.64391, 3.70095, 3.75395, 3.80429,
1792 3.85022, 3.93478, 4.01184, 4.08044, 4.14459, 4.20304, 4.35363, 4.55234, 4.70859,
1793 4.83679, 4.94555, 5.03942, 5.12227, 5.19666, 5.26343, 5.32415, 5.37953, 5.43071,
1794 5.52271, 5.60349, 5.67447, 5.94172, 6.12044, 6.24507, 6.34102, 6.41611, 6.47923,
1800 static double y2a[18][38];
1801 static double* psa2[18], *py2a[18];
1806 for (i = 0 ; i < 18 ; i++) {
1807 psa2[i] = &(sa2[i])[0];
1808 py2a[i] = &(y2a[i])[0];
1810 splie2(el, za, &psa2[0], 38, 18, &py2a[0]);
1814 splin2(el, za, &psa2[0], &py2a[0], 38, 18, le, zt, &sa2ln);
1826 : range_lib(new
range)
1840 range_lib(new
range)
1907 0., 1.e+03, 0,
"KVRangeYanezMaterial",
"DeltaEFunc");
1911 0., 1.e+03, 0,
"KVRangeYanezMaterial",
"RangeFunc");
1915 0., 1.e+03, 0,
"KVRangeYanezMaterial",
"EResFunc");
1962 if (
E[0] < 1.e-3)
return 0.0;
1985 if (
E[0] < 1.e-3)
return 0.;
2000 for (
int k = 0; k <
fNelem; k++) {
2140 matfile << now.
AsString() << std::endl << std::endl;
2141 if (
IsCompound()) matfile <<
"COMPOUND" << std::endl;
2142 else if (
IsMixture()) matfile <<
"MIXTURE" << std::endl;
2143 else matfile <<
"ELEMENT" << std::endl;
2144 matfile <<
"name=" <<
GetName() << std::endl;
2145 matfile <<
"symbol=" <<
GetSymbol() << std::endl;
2146 matfile <<
"state=";
2147 if (
IsGas()) matfile <<
"gas" << std::endl;
2149 matfile <<
"solid" << std::endl;
2150 matfile <<
"density=" <<
GetDensity() << std::endl;
2153 matfile <<
"nelem=" <<
GetNElem() << std::endl;
2154 TString listname = (
IsCompound() ?
"Compound element %d" :
"Mixture element %d");
2156 for (
int nel = 1; nel <=
GetNElem(); ++nel) {
2161 matfile << std::endl;
2164 matfile << std::endl;
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
char * Form(const char *fmt,...)
virtual const Char_t * GetType() const
Material for use in energy loss & range calculations.
TF1 * fDeltaE
function parameterising energy loss in material
const Char_t * GetSymbol() const
Bool_t IsCompound() const
virtual void Initialize()
Double_t GetDensity() const
TF1 * fEres
function parameterising residual energy after crossing material
TF1 * fRange
function parameterising range of charged particles in material
void Copy(TObject &) const override
KVList * fComposition
composition of compound/mixture
Abstract base class for calculation of range & energy loss of charged particles in matter.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Int_t GetIntValue(const Char_t *name) const
Double_t GetDoubleValue(const Char_t *name) const
Description of properties and kinematics of atomic nuclei.
const Char_t * GetSymbol(Option_t *opt="") const
Description of absorber for the Range dE/dx and range library.
Int_t Ap
Z,A of incident projectile ion.
Double_t thickness
in g/cm**2
Int_t fNelem
number of elements in material
Int_t fTableType
=0 for Northcliffe-Schilling (<12 MeV/u), =1 for Hubert et al (2.5<E/A<500 MeV), =2 for interpolated ...
void PrepareRangeLibVariables(Int_t Z, Int_t A)
TF1 * GetRangeFunction(Int_t Z, Int_t A, Double_t isoAmat=0) override
void Initialize() override
TF1 * GetDeltaEFunction(Double_t e, Int_t Z, Int_t A, Double_t isoAmat=0) override
KVRangeYanezMaterial()
Default constructor.
Int_t iabso
value of iabso argument for function calls
Double_t RangeFunc(Double_t *, Double_t *)
void Copy(TObject &) const override
Double_t GetEIncFromEResOfIon(Int_t Z, Int_t A, Double_t Eres, Double_t e, Double_t isoAmat=0.) override
Double_t EResFunc(Double_t *, Double_t *)
std::unique_ptr< range > range_lib
void MakeFunctionObjects()
Double_t DeltaEFunc(Double_t *, Double_t *)
Double_t error
calculated error in MeV
struct KVRangeYanezMaterial::Elem fAbsorb[10]
list of elements
TF1 * GetEResFunction(Double_t e, Int_t Z, Int_t A, Double_t isoAmat=0) override
void SaveMaterial(std::ofstream &matfile)
TObject * FindObject(const char *name) const override
const char * AsString() const
virtual Double_t GetMinimumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
virtual void SetRange(Double_t xmin, Double_t xmax)
virtual void SetNpx(Int_t npx=100)
const char * GetName() const override
const char * Data() const
std::vector< elem > cmpnd
double polint(double *xa, double *ya, int n, double x, double *dy)
double ededxh(double e, int zp, int zt)
void splie2(double TOTO[], double x2a[], double *ya[], int m, int n, double *y2a[])
std::vector< elem > absorb
void gfact(double *le, int zt, double *f)
double thickn(int icorr, int zp, int ap, int iabso, int zt, int at, double ein, double delen)
void alref(double le, double *lz, double *dedx)
void splint(double xa[], double ya[], double y2a[], int n, double x, double *y)
void def_absorber(int zt, int at, int iabso)
void splin2(double x1a[], double x2a[], double *ya[], double *y2a[], int m, int n, double x1, double x2, double *y)
double rangen(int icorr, int zp, int ap, int iabso, int zt, int at, double ein)
double SMOOTHERSTEP(double x)
double dedx(int icorr, double e, int zp, int ap, int zt, int at)
double egassap(int icorr, int zp, int ap, int iabso, int zt, int at, double t, double eut, double *err)
void alion(int zp, double *dedxz2)
double ededx(double e, int zp, int zt)
void rangetab(int icorr, int zp, int ap, int iabso, int zt, int at, double *em, double *r, int *n)
void mpyers(double *le, int zt, double *f)
void dedxtab(int icorr, int zp, int ap, int iabso, int zt, int at, double e, double *tdedxe, double *tdedxn)
double ndedx(double e, int zp, int ap, int zt, int at)
double passage(int icorr, int zp, int ap, int iabso, int zt, int at, double ein, double t, double *err)
double s2az(double e, int zt)
void spline(double x[], double y[], int n, double yp1, double ypn, double *y2)
unsigned int locate(double y[], int n, double x)
Expr< UnaryOp< Sqrt< T >, SMatrix< T, D, D2, R >, T >, T, D, D2, R > sqrt(const SMatrix< T, D, D2, R > &rhs)
Expr< UnaryOp< Fabs< T >, SMatrix< T, D, D2, R >, T >, T, D, D2, R > fabs(const SMatrix< T, D, D2, R > &rhs)
RVec< PromoteTypes< T0, T1 > > pow(const T0 &x, const RVec< T1 > &v)
RVec< PromoteType< T > > log(const RVec< T > &v)
RVec< PromoteType< T > > log10(const RVec< T > &v)
RVec< PromoteType< T > > exp(const RVec< T > &v)
Double_t Max(Double_t a, Double_t b)