CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
magfieldparam::BFit3D Class Reference

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

◆ BFit3D()

magfieldparam::BFit3D::BFit3D ( )
inline

Definition at line 32 of file BFit3D.h.

32 : use_spline(false), signed_rad(true), B_set(0.), HB(new HarmBasis3DCyl(18)) {}
HarmBasis3DCyl * HB
Definition: BFit3D.h:23

◆ ~BFit3D()

virtual magfieldparam::BFit3D::~BFit3D ( )
inlinevirtual

Definition at line 34 of file BFit3D.h.

References HB.

34 { delete HB; }
HarmBasis3DCyl * HB
Definition: BFit3D.h:23

Member Function Documentation

◆ GetBnom()

double magfieldparam::BFit3D::GetBnom ( )
inline

Definition at line 57 of file BFit3D.h.

References B_set.

57 { return B_set; } //Ret. nominal field

◆ GetBphi_k()

double magfieldparam::BFit3D::GetBphi_k ( const unsigned  k)
inline

Definition at line 64 of file BFit3D.h.

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

64 { return HB->GetBphi_k(k); }
HarmBasis3DCyl * HB
Definition: BFit3D.h:23
double GetBphi_k(const unsigned k)

◆ GetBr_k()

double magfieldparam::BFit3D::GetBr_k ( const unsigned  k)
inline

Definition at line 62 of file BFit3D.h.

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

62 { return HB->GetBr_k(k); }
double GetBr_k(const unsigned k)
HarmBasis3DCyl * HB
Definition: BFit3D.h:23

◆ GetBz_k()

double magfieldparam::BFit3D::GetBz_k ( const unsigned  k)
inline

Definition at line 63 of file BFit3D.h.

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

63 { return HB->GetBz_k(k); }
double GetBz_k(const unsigned k)
HarmBasis3DCyl * HB
Definition: BFit3D.h:23

◆ GetC()

double magfieldparam::BFit3D::GetC ( const int  k)
inline

Definition at line 58 of file BFit3D.h.

References C, and isotrackApplyRegressor::k.

58 { return C[k]; } //Ret. k-th expansion coefficient
double C[360]
Definition: BFit3D.h:17

◆ GetField()

void BFit3D::GetField ( const double  r,
const double  z,
const double  phi,
double &  Br,
double &  Bz,
double &  Bphi 
)

Definition at line 77 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.

77  {
78  //Return field components in Br, Bz, Bphi. SetField must be called before use.
79  //
80  if (signed_rad || (r >= 0.))
81  HB->SetPoint(r, z, phi);
82  else
83  HB->SetPoint(-r, z, phi + M_PI);
84  HB->EvalBr();
85  HB->EvalBz();
86  HB->EvalBphi();
87  Br = HB->GetBr(C);
88  Bz = HB->GetBz(C);
89  Bphi = HB->GetBphi(C);
90 }
double GetBphi(double *coeff)
double GetBr(double *coeff)
HarmBasis3DCyl * HB
Definition: BFit3D.h:23
#define M_PI
Definition: BFit3D.cc:3
double C[360]
Definition: BFit3D.h:17
void SetPoint(const double r, const double z, const double phi)
double GetBz(double *coeff)

◆ GetLen()

unsigned magfieldparam::BFit3D::GetLen ( )
inline

Definition at line 56 of file BFit3D.h.

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

56 { return HB->GetLen(); } //Ret. the basis length
HarmBasis3DCyl * HB
Definition: BFit3D.h:23

◆ PrintBphiPoly()

void magfieldparam::BFit3D::PrintBphiPoly ( std::ostream &  out = std::cout)
inline

◆ PrintBrPoly()

void magfieldparam::BFit3D::PrintBrPoly ( std::ostream &  out = std::cout)
inline

◆ PrintBzPoly()

void magfieldparam::BFit3D::PrintBzPoly ( std::ostream &  out = std::cout)
inline

◆ PrintPoly()

void magfieldparam::BFit3D::PrintPoly ( std::ostream &  out = std::cout)
inline

Definition at line 72 of file BFit3D.h.

References HB, MillePedeFileConverter_cfg::out, and magfieldparam::HarmBasis3DCyl::Print().

72 { HB->Print(out); }
HarmBasis3DCyl * HB
Definition: BFit3D.h:23
void Print(harm_poly_arr &B, std::ostream &out=std::cout)

◆ PrintPtnPoly()

void magfieldparam::BFit3D::PrintPtnPoly ( std::ostream &  out = std::cout)
inline

◆ SetCoeff_Linear()

void BFit3D::SetCoeff_Linear ( const double  B)
private

Definition at line 11 of file BFit3D.cc.

References B, B_nom, C, C0, findQualityFiles::jj, GetRecoTauVFromDQM_MC_cff::kk, and suppress.

Referenced by SetField().

11  {
12  unsigned jj;
13  double w_0, w_1, B_mod = fabs(B);
14  if (B_mod <= B_nom[0]) {
15  w_0 = B / B_nom[0];
16  for (jj = 0; jj < 360; ++jj) {
17  C[jj] = w_0 * C0[jj][0];
18  }
19  } else if (B_mod >= B_nom[3]) {
20  w_0 = B / B_nom[3];
21  for (jj = 0; jj < 360; ++jj) {
22  C[jj] = w_0 * C0[jj][3];
23  }
24  } else {
25  unsigned kk = 1;
26  [[clang::suppress]]
27  while (B_nom[kk] < B_mod)
28  ++kk; //Simple linear search
29  w_1 = (B_mod - B_nom[kk - 1]) / (B_nom[kk] - B_nom[kk - 1]);
30  w_0 = 1.0 - w_1;
31  if (B < 0.) {
32  w_0 = -w_0;
33  w_1 = -w_1;
34  }
35  for (jj = 0; jj < 360; ++jj) {
36  C[jj] = w_0 * C0[jj][kk - 1] + w_1 * C0[jj][kk];
37  }
38  }
39 }
Definition: APVGainStruct.h:7
static const double B_nom[4]
Definition: BFit3D.h:12
static const double C0[360][4]
Definition: BFit3D.h:13
double C[360]
Definition: BFit3D.h:17

◆ SetCoeff_Spline()

void BFit3D::SetCoeff_Spline ( const double  B)
private

Definition at line 42 of file BFit3D.cc.

References B, B_nom, C, C0, C1, C2, reco::ParticleMasses::k0, and suppress.

Referenced by SetField().

42  {
43  int jc;
44  double dB2, dB = fabs(B);
45  if (dB >= B_nom[3]) { //Linear extrapolation for a large field
46  dB -= B_nom[3];
47  for (jc = 0; jc < 360; ++jc)
48  C[jc] = C0[jc][3] + C1[jc][4] * dB;
49  } else {
50  if (dB < B_nom[0]) {
51  dB2 = dB * dB / (3. * B_nom[0]);
52  for (jc = 0; jc < 360; ++jc)
53  C[jc] = (C2[jc][0] * dB2 + C1[jc][0]) * dB;
54  } else {
55  int k1 = 1;
56  [[clang::suppress]]
57  while (B_nom[k1] < dB)
58  ++k1; //Simple linear search
59  int k0 = k1 - 1;
60  dB2 = (dB -= B_nom[k0]) / (3. * (B_nom[k1] - B_nom[k0]));
61  if (k1 < 3) { //"Regular" interval
62  for (jc = 0; jc < 360; ++jc)
63  C[jc] = (((C2[jc][k1] - C2[jc][k0]) * dB2 + C2[jc][k0]) * dB + C1[jc][k1]) * dB + C0[jc][k0];
64  } else { //The last interval
65  dB2 = (1. - dB2) * dB;
66  for (jc = 0; jc < 360; ++jc)
67  C[jc] = (C2[jc][k0] * dB2 + C1[jc][k1]) * dB + C0[jc][k0];
68  }
69  }
70  }
71  if (B < 0)
72  for (jc = 0; jc < 360; ++jc)
73  C[jc] = -C[jc];
74 }
Definition: APVGainStruct.h:7
static const double B_nom[4]
Definition: BFit3D.h:12
static const double C0[360][4]
Definition: BFit3D.h:13
static const double C1[360][5]
Definition: BFit3D.h:14
double C[360]
Definition: BFit3D.h:17
static const double C2[360][3]
Definition: BFit3D.h:15

◆ SetField()

void magfieldparam::BFit3D::SetField ( const double  B)
inline

Definition at line 43 of file BFit3D.h.

References B, B_set, SetCoeff_Linear(), SetCoeff_Spline(), and use_spline.

43  {
44  if (use_spline)
46  else
48  B_set = B;
49  }
Definition: APVGainStruct.h:7
void SetCoeff_Linear(const double B)
Definition: BFit3D.cc:11
void SetCoeff_Spline(const double B)
Definition: BFit3D.cc:42

◆ UseSignedRad()

void magfieldparam::BFit3D::UseSignedRad ( const bool  flag = true)
inline

Definition at line 40 of file BFit3D.h.

References RemoveAddSevLevel::flag, and signed_rad.

◆ UseSpline()

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

Definition at line 37 of file BFit3D.h.

References RemoveAddSevLevel::flag, and use_spline.

Member Data Documentation

◆ B_nom

const double magfieldparam::BFit3D::B_nom
staticprivate
Initial value:
= {2.02156567013928,
3.51622117206486,
3.81143026675623,
4.01242188708911}

Definition at line 12 of file BFit3D.h.

Referenced by SetCoeff_Linear(), and SetCoeff_Spline().

◆ B_set

double magfieldparam::BFit3D::B_set
private

Definition at line 21 of file BFit3D.h.

Referenced by GetBnom(), and SetField().

◆ C

double magfieldparam::BFit3D::C[360]
private

Definition at line 17 of file BFit3D.h.

Referenced by GetC(), GetField(), SetCoeff_Linear(), and SetCoeff_Spline().

◆ C0

const double magfieldparam::BFit3D::C0
staticprivate

Definition at line 13 of file BFit3D.h.

Referenced by SetCoeff_Linear(), and SetCoeff_Spline().

◆ C1

const double magfieldparam::BFit3D::C1
staticprivate

Definition at line 14 of file BFit3D.h.

Referenced by SetCoeff_Spline().

◆ C2

const double magfieldparam::BFit3D::C2
staticprivate

Definition at line 15 of file BFit3D.h.

Referenced by SetCoeff_Spline().

◆ HB

HarmBasis3DCyl* magfieldparam::BFit3D::HB
private

◆ signed_rad

bool magfieldparam::BFit3D::signed_rad
private

Definition at line 20 of file BFit3D.h.

Referenced by GetField(), and UseSignedRad().

◆ use_spline

bool magfieldparam::BFit3D::use_spline
private

Definition at line 19 of file BFit3D.h.

Referenced by SetField(), and UseSpline().