3 #define M_PI 3.1415926535897932385
8 using namespace magfieldparam;
13 double w_0, w_1, B_mod = fabs(B);
14 if (B_mod <=
B_nom[0]) {
16 for (jj = 0; jj < 360; ++
jj) {
19 }
else if (B_mod >=
B_nom[3]) {
21 for (jj = 0; jj < 360; ++
jj) {
25 while (
B_nom[kk] < B_mod)
33 for (jj = 0; jj < 360; ++
jj) {
41 int jc,
k0 = 0, k1 = 1;
42 double dB2, dB = fabs(B);
45 for (jc = 0; jc < 360; ++jc)
46 C[jc] =
C0[jc][3] +
C1[jc][4] * dB;
49 dB2 = dB * dB / (3. *
B_nom[0]);
50 for (jc = 0; jc < 360; ++jc)
51 C[jc] = (
C2[jc][0] * dB2 +
C1[jc][0]) * dB;
53 while (
B_nom[k1] < dB)
58 for (jc = 0; jc < 360; ++jc)
59 C[jc] = (((
C2[jc][k1] -
C2[jc][k0]) * dB2 +
C2[jc][
k0]) * dB +
C1[jc][k1]) * dB +
C0[jc][
k0];
61 dB2 = (1. - dB2) * dB;
62 for (jc = 0; jc < 360; ++jc)
63 C[jc] = (
C2[jc][k0] * dB2 +
C1[jc][k1]) * dB +
C0[jc][
k0];
68 for (jc = 0; jc < 360; ++jc)
73 void BFit3D::GetField(
const double r,
const double z,
const double phi,
double &Br,
double &Bz,
double &Bphi) {
double GetBphi(double *coeff)
double GetBr(double *coeff)
static const double B_nom[4]
void GetField(const double r, const double z, const double phi, double &Br, double &Bz, double &Bphi)
static const double C0[360][4]
void SetCoeff_Linear(const double B)
static const double C1[360][5]
void SetPoint(const double r, const double z, const double phi)
void SetCoeff_Spline(const double B)
static const double C2[360][3]
double GetBz(double *coeff)