#include <BFit3D.h>
Public Member Functions | |
BFit3D () | |
double | GetBnom () |
double | GetBphi_k (const unsigned k) |
double | GetBr_k (const unsigned k) |
double | GetBz_k (const unsigned k) |
double | GetC (const int k) |
void | GetField (const double r, const double z, const double phi, double &Br, double &Bz, double &Bphi) |
unsigned | GetLen () |
void | PrintBphiPoly (std::ostream &out=std::cout) |
void | PrintBrPoly (std::ostream &out=std::cout) |
void | PrintBzPoly (std::ostream &out=std::cout) |
void | PrintPoly (std::ostream &out=std::cout) |
void | PrintPtnPoly (std::ostream &out=std::cout) |
void | SetField (const double B) |
void | UseSignedRad (const bool flag=true) |
void | UseSpline (const bool flag=true) |
virtual | ~BFit3D () |
Private Member Functions | |
void | SetCoeff_Linear (const double B) |
void | SetCoeff_Spline (const double B) |
Private Attributes | |
double | B_set |
double | C [360] |
HarmBasis3DCyl * | HB |
bool | signed_rad |
bool | use_spline |
Static Private Attributes | |
static const double | B_nom [4] |
static const double | C0 [360][4] |
static const double | C1 [360][5] |
static const double | C2 [360][3] |
magfieldparam::BFit3D::BFit3D | ( | ) | [inline] |
Definition at line 35 of file BFit3D.h.
: use_spline(false), signed_rad(true), B_set(0.), HB(new HarmBasis3DCyl(18)) {}
virtual magfieldparam::BFit3D::~BFit3D | ( | ) | [inline, virtual] |
double magfieldparam::BFit3D::GetBnom | ( | ) | [inline] |
double magfieldparam::BFit3D::GetBphi_k | ( | const unsigned | k | ) | [inline] |
double magfieldparam::BFit3D::GetBr_k | ( | const unsigned | k | ) | [inline] |
double magfieldparam::BFit3D::GetBz_k | ( | const unsigned | k | ) | [inline] |
double magfieldparam::BFit3D::GetC | ( | const int | k | ) | [inline] |
void BFit3D::GetField | ( | const double | r, |
const double | z, | ||
const double | phi, | ||
double & | Br, | ||
double & | Bz, | ||
double & | Bphi | ||
) |
Definition at line 70 of file BFit3D.cc.
References C, magfieldparam::HarmBasis3DCyl::EvalBphi(), magfieldparam::HarmBasis3DCyl::EvalBr(), magfieldparam::HarmBasis3DCyl::EvalBz(), magfieldparam::HarmBasis3DCyl::GetBphi(), magfieldparam::HarmBasis3DCyl::GetBr(), magfieldparam::HarmBasis3DCyl::GetBz(), HB, M_PI, magfieldparam::HarmBasis3DCyl::SetPoint(), and signed_rad.
Referenced by PolyFit3DParametrizedMagneticField::inTeslaUnchecked().
unsigned magfieldparam::BFit3D::GetLen | ( | ) | [inline] |
Definition at line 58 of file BFit3D.h.
References magfieldparam::HarmBasis3DCyl::GetLen(), and HB.
{ return HB->GetLen();} //Ret. the basis length
void magfieldparam::BFit3D::PrintBphiPoly | ( | std::ostream & | out = std::cout | ) | [inline] |
Definition at line 73 of file BFit3D.h.
References HB, dbtoconf::out, and magfieldparam::HarmBasis3DCyl::PrintBphiB().
void magfieldparam::BFit3D::PrintBrPoly | ( | std::ostream & | out = std::cout | ) | [inline] |
Definition at line 71 of file BFit3D.h.
References HB, dbtoconf::out, and magfieldparam::HarmBasis3DCyl::PrintBrB().
void magfieldparam::BFit3D::PrintBzPoly | ( | std::ostream & | out = std::cout | ) | [inline] |
Definition at line 72 of file BFit3D.h.
References HB, dbtoconf::out, and magfieldparam::HarmBasis3DCyl::PrintBzB().
void magfieldparam::BFit3D::PrintPoly | ( | std::ostream & | out = std::cout | ) | [inline] |
Definition at line 74 of file BFit3D.h.
References HB, dbtoconf::out, and magfieldparam::HarmBasis3DCyl::Print().
void magfieldparam::BFit3D::PrintPtnPoly | ( | std::ostream & | out = std::cout | ) | [inline] |
Definition at line 70 of file BFit3D.h.
References HB, dbtoconf::out, and magfieldparam::HarmBasis3DCyl::PrintPtB().
void BFit3D::SetCoeff_Linear | ( | const double | B | ) | [private] |
Definition at line 12 of file BFit3D.cc.
Referenced by SetField().
{ unsigned jj, kk = 1; double w_0, w_1, B_mod = fabs(B); if (B_mod <= B_nom[0]) { w_0 = B / B_nom[0]; for (jj = 0; jj < 360; ++jj) { C[jj] = w_0*C0[jj][0]; } } else if (B_mod >= B_nom[3]) { w_0 = B / B_nom[3]; for (jj = 0; jj < 360; ++jj) { C[jj] = w_0*C0[jj][3]; } } else { while (B_nom[kk] < B_mod) ++kk; //Simple linear search w_1 = (B_mod - B_nom[kk-1])/(B_nom[kk] - B_nom[kk-1]); w_0 = 1.0 - w_1; if (B < 0.) { w_0 = -w_0; w_1 = -w_1; } for (jj = 0; jj < 360; ++jj) { C[jj] = w_0*C0[jj][kk-1] + w_1*C0[jj][kk]; } } }
void BFit3D::SetCoeff_Spline | ( | const double | B | ) | [private] |
Definition at line 41 of file BFit3D.cc.
References B_nom, C, C0, C1, C2, and reco::ParticleMasses::k0.
Referenced by SetField().
{ int jc, k0 = 0, k1 = 1; double dB2, dB = fabs(B); if (dB >= B_nom[3]) { //Linear extrapolation for a large field dB -= B_nom[3]; for (jc = 0; jc < 360; ++jc) C[jc] = C0[jc][3] + C1[jc][4]*dB; } else { if (dB < B_nom[0]) { dB2 = dB*dB / (3.*B_nom[0]); for (jc = 0; jc < 360; ++jc) C[jc] = (C2[jc][0]*dB2 + C1[jc][0])*dB; } else { while (B_nom[k1] < dB) ++k1; //Simple linear search k0 = k1-1; dB2 = (dB -= B_nom[k0]) / (3.*(B_nom[k1] - B_nom[k0])); if (k1 < 3) { //"Regular" interval for (jc = 0; jc < 360; ++jc) C[jc] = (((C2[jc][k1] - C2[jc][k0])*dB2+C2[jc][k0])*dB + C1[jc][k1])*dB + C0[jc][k0]; } else { //The last interval dB2 = (1.- dB2)*dB; for (jc = 0; jc < 360; ++jc) C[jc] = (C2[jc][k0]*dB2 + C1[jc][k1])*dB + C0[jc][k0]; } } } if (B < 0) for (jc = 0; jc < 360; ++jc) C[jc] = -C[jc]; }
void magfieldparam::BFit3D::SetField | ( | const double | B | ) | [inline] |
Definition at line 47 of file BFit3D.h.
References B_set, SetCoeff_Linear(), SetCoeff_Spline(), and use_spline.
Referenced by PolyFit3DParametrizedMagneticField::PolyFit3DParametrizedMagneticField().
{ if (use_spline) SetCoeff_Spline(B); else SetCoeff_Linear(B); B_set = B; }
void magfieldparam::BFit3D::UseSignedRad | ( | const bool | flag = true | ) | [inline] |
void magfieldparam::BFit3D::UseSpline | ( | const bool | flag = true | ) | [inline] |
const double magfieldparam::BFit3D::B_nom [static, private] |
{ 2.02156567013928, 3.51622117206486, 3.81143026675623, 4.01242188708911 }
Definition at line 14 of file BFit3D.h.
Referenced by SetCoeff_Linear(), and SetCoeff_Spline().
double magfieldparam::BFit3D::B_set [private] |
Definition at line 23 of file BFit3D.h.
Referenced by GetBnom(), and SetField().
double magfieldparam::BFit3D::C[360] [private] |
Definition at line 19 of file BFit3D.h.
Referenced by GetC(), GetField(), SetCoeff_Linear(), and SetCoeff_Spline().
const double magfieldparam::BFit3D::C0 [static, private] |
Definition at line 15 of file BFit3D.h.
Referenced by SetCoeff_Linear(), and SetCoeff_Spline().
const double magfieldparam::BFit3D::C1 [static, private] |
Definition at line 16 of file BFit3D.h.
Referenced by SetCoeff_Spline().
const double magfieldparam::BFit3D::C2 [static, private] |
Definition at line 17 of file BFit3D.h.
Referenced by SetCoeff_Spline().
HarmBasis3DCyl* magfieldparam::BFit3D::HB [private] |
Definition at line 25 of file BFit3D.h.
Referenced by GetBphi_k(), GetBr_k(), GetBz_k(), GetField(), GetLen(), PrintBphiPoly(), PrintBrPoly(), PrintBzPoly(), PrintPoly(), PrintPtnPoly(), and ~BFit3D().
bool magfieldparam::BFit3D::signed_rad [private] |
Definition at line 22 of file BFit3D.h.
Referenced by GetField(), and UseSignedRad().
bool magfieldparam::BFit3D::use_spline [private] |
Definition at line 21 of file BFit3D.h.
Referenced by SetField(), and UseSpline().