CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes

magfieldparam::BFit3D Class Reference

#include <BFit3D.h>

List of all members.

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]
HarmBasis3DCylHB
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]

Detailed Description

Definition at line 9 of file BFit3D.h.


Constructor & Destructor Documentation

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]

Definition at line 38 of file BFit3D.h.

References HB.

{ delete HB;}

Member Function Documentation

double magfieldparam::BFit3D::GetBnom ( ) [inline]

Definition at line 59 of file BFit3D.h.

References B_set.

{ return B_set;}         //Ret. nominal field
double magfieldparam::BFit3D::GetBphi_k ( const unsigned  k) [inline]

Definition at line 66 of file BFit3D.h.

References magfieldparam::HarmBasis3DCyl::GetBphi_k(), and HB.

{ return HB->GetBphi_k(k);}
double magfieldparam::BFit3D::GetBr_k ( const unsigned  k) [inline]

Definition at line 64 of file BFit3D.h.

References magfieldparam::HarmBasis3DCyl::GetBr_k(), and HB.

{ return HB->GetBr_k  (k);}
double magfieldparam::BFit3D::GetBz_k ( const unsigned  k) [inline]

Definition at line 65 of file BFit3D.h.

References magfieldparam::HarmBasis3DCyl::GetBz_k(), and HB.

{ return HB->GetBz_k  (k);}
double magfieldparam::BFit3D::GetC ( const int  k) [inline]

Definition at line 60 of file BFit3D.h.

References C, and gen::k.

{ return C[k];}  //Ret. k-th expansion coefficient
void BFit3D::GetField ( const double  r,
const double  z,
const double  phi,
double &  Br,
double &  Bz,
double &  Bphi 
)
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().

{ HB->PrintBphiB(out);}
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().

{ HB->PrintBrB  (out);}
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().

{ HB->PrintBzB  (out);}
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().

{ HB->Print     (out);}
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().

{ HB->PrintPtB  (out);}
void BFit3D::SetCoeff_Linear ( const double  B) [private]

Definition at line 12 of file BFit3D.cc.

References B_nom, C, and C0.

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]
void magfieldparam::BFit3D::UseSignedRad ( const bool  flag = true) [inline]

Definition at line 44 of file BFit3D.h.

References signed_rad.

void magfieldparam::BFit3D::UseSpline ( const bool  flag = true) [inline]

Definition at line 41 of file BFit3D.h.

References use_spline.


Member Data Documentation

const double magfieldparam::BFit3D::B_nom [static, private]
Initial value:
 
   {  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().

Definition at line 22 of file BFit3D.h.

Referenced by GetField(), and UseSignedRad().

Definition at line 21 of file BFit3D.h.

Referenced by SetField(), and UseSpline().