CMS 3D CMS Logo

ParabolicParametrizedMagneticField.h
Go to the documentation of this file.
1 
5 #ifndef MagneticField_ParametrizedEngine_interface_ParabolicParametrizedMagneticField_h
6 #define MagneticField_ParametrizedEngine_interface_ParabolicParametrizedMagneticField_h
7 
9 
10  struct Parameters {
11  // These parameters are the best fit of 3.8T to the OAEParametrizedMagneticField parametrization.
12  // See MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc
13  static constexpr float c1 = 3.8114;
14  static constexpr float b0 = -3.94991e-06;
15  static constexpr float b1 = 7.53701e-06;
16  static constexpr float a = 2.43878e-11;
17  static constexpr float max_radius2 = 13225.f; // tracker radius
18  static constexpr float max_z = 280.f; // tracker z
19  };
20 
21  template <typename Vec3>
22  constexpr float Kr(Vec3 const& vec) {
23  return Parameters::a * (vec(0) * vec(0) + vec(1) * vec(1)) + 1.f;
24  }
25 
26  template <typename Vec3>
27  constexpr float B0Z(Vec3 const& vec) {
28  return Parameters::b0 * vec(2) * vec(2) + Parameters::b1 * vec(2) + Parameters::c1;
29  }
30 
31  template <typename Vec3>
32  constexpr bool isValid(Vec3 const& vec) {
33  return ((vec(0) * vec(0) + vec(1) * vec(1)) < Parameters::max_radius2 && fabs(vec(2)) < Parameters::max_z);
34  }
35 
36  template <typename Vec3>
37  constexpr float magneticFieldAtPoint(Vec3 const& vec) {
38  if (isValid(vec)) {
39  return B0Z(vec) * Kr(vec);
40  } else {
41  return 0;
42  }
43  }
44 
45 } // namespace magneticFieldParabolicPortable
46 
47 #endif
double f[11][100]
constexpr float magneticFieldAtPoint(Vec3 const &vec)
CLHEP::Hep3Vector Vec3