CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TkBfield.cc
Go to the documentation of this file.
1 #include "TkBfield.h"
2 
4 
5 // #include <iostream>
6 // #include <iomanip>
7 #include <cmath>
8 #include<algorithm>
9 
10 using namespace magfieldparam;
11 
12 namespace {
13 
14 
15  BCylParam<float> fpar1{4.90541f,17.8768f,2.02355f,0.0210538f,0.000321885f,2.37511f,0.00326725f,2.07656f,1.71879f}; // 2.0T-2G
16  BCylParam<float> fpar2{4.41982f,15.7732f,3.02621f,0.0197814f,0.000515759f,2.43385f,0.00584258f,2.11333f,1.76079f}; // 3.0T-2G
17  BCylParam<float> fpar3{4.30161f,15.2586f,3.51926f,0.0183494f,0.000606773f,2.45110f,0.00709986f,2.12161f,1.77038f}; // 3.5T-2G
18  BCylParam<float> fpar4{4.24326f,15.0201f,3.81492f,0.0178712f,0.000656527f,2.45818f,0.00778695f,2.12500f,1.77436f}; // 3.8T-2G
19  BCylParam<float> fpar5{4.21136f,14.8824f,4.01683f,0.0175932f,0.000695541f,2.45311f,0.00813447f,2.11688f,1.76076f}; // 4.0T-2G
20  std::string const flds[] = {"2_0T","3_0T","3_5T","3_8T","4_0T"};
21  float flds_f[] = {2.0, 3.0, 3.5, 3.8, 4.0};
22  BCylParam<float> const fpars[]{fpar1,fpar2,fpar3,fpar4,fpar5};
23 
24  BCylParam<float> const & findPar(float fld) {
25  for (int i=0; i<5; ++i){
26  if (fabs(fld-flds_f[i])<0.001) {
27  return fpars[i];
28  }
29  }
30  throw cms::Exception("BadParameters") << "Undefined field value " << fld;
31  }
32 
33 
34  BCylParam<float> const & findPar(std::string fld) {
35  auto f = std::find(flds,flds+5,fld);
36  if (f-flds>4) throw cms::Exception("BadParameters")
37  << "Undefined key - " // abort!\n";
38  <<"Defined keys are: \"2_0T\" \"3_0T\" \"3_5T\" \"3_8T\" and \"4_0T\"\n";
39  return fpars[f-flds];
40 
41  }
42 
43 }
44 
45 TkBfield::TkBfield(float fld) : bcyl(findPar(fld)) {
46 }
47 
48 TkBfield::TkBfield(std::string fld) : bcyl(findPar(fld)) {
49 }
50 
51 
52 
53 void TkBfield::getBrfz(float const * __restrict__ x, float * __restrict__ Brfz) const {
54  float br; float bz;
55  float r2=x[0]*x[0]+x[1]*x[1];
56  bcyl(x[0]*x[0]+x[1]*x[1],x[2], br, bz); Brfz[0]=std::sqrt(r2)*br; Brfz[1]=0; Brfz[2]=bz;
57 }
58 
59 void TkBfield::getBxyz(float const * __restrict__ x, float * __restrict__ Bxyz) const {
60  float br; float bz;
61  float r2=x[0]*x[0]+x[1]*x[1];
62  bcyl(r2, x[2], br,bz);
63  Bxyz[0]=br*x[0];
64  Bxyz[1]=br*x[1];
65  Bxyz[2]=bz;
66 }
67 
void getBxyz(float const *__restrict__ x, float *__restrict__ Bxyz) const
B out in cartesian.
Definition: TkBfield.cc:59
void getBrfz(float const *__restrict__ x, float *__restrict__ Brfz) const
B out in cylindrical.
Definition: TkBfield.cc:53
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
BCycl< float > bcyl
Definition: TkBfield.h:42
T sqrt(T t)
Definition: SSEVec.h:18
double f[11][100]
TkBfield(std::string T)
Definition: TkBfield.cc:48