![]() |
![]() |
#include <MagneticField/ParametrizedEngine/src/OAE85lParametrizedMagneticField.h>
Public Member Functions | |
GlobalVector | inTesla (const GlobalPoint &gp) const |
Field value ad specified global point, in Tesla. | |
GlobalVector | inTeslaUnchecked (const GlobalPoint &gp) const |
Optional implementation that derived classes can implement to provide faster query by skipping the check to isDefined. | |
bool | isDefined (const GlobalPoint &gp) const |
True if the point is within the region where the concrete field. | |
OAE85lParametrizedMagneticField (const edm::ParameterSet ¶meters) | |
Constructor. Parameters taken from a PSet. | |
OAE85lParametrizedMagneticField (float b0_=40.681, float a_=4.6430, float l_=15.284) | |
Constructor. | |
virtual | ~OAE85lParametrizedMagneticField () |
Destructor. | |
Private Member Functions | |
void | ffunkti (float u, float *ff) const |
void | init () |
Private Attributes | |
float | a |
float | ainv |
float | ap2 |
float | b0 |
float | hb0 |
float | hlova |
float | l |
Karimaki's "off-axis expansion" of the TOSCA field version 85l_030919 (4 T) valid in the region r<1.2 m and |z|<3.0 m
Definition at line 19 of file OAE85lParametrizedMagneticField.h.
OAE85lParametrizedMagneticField::OAE85lParametrizedMagneticField | ( | float | b0_ = 40.681 , |
|
float | a_ = 4.6430 , |
|||
float | l_ = 15.284 | |||
) |
OAE85lParametrizedMagneticField::OAE85lParametrizedMagneticField | ( | const edm::ParameterSet & | parameters | ) |
Constructor. Parameters taken from a PSet.
Definition at line 29 of file OAE85lParametrizedMagneticField.cc.
References a, b0, edm::ParameterSet::getParameter(), init(), and l.
00029 { 00030 b0 = parameters.getParameter<double>("b0"); 00031 l = parameters.getParameter<double>("l"); 00032 a = parameters.getParameter<double>("a"); 00033 init(); 00034 }
OAE85lParametrizedMagneticField::~OAE85lParametrizedMagneticField | ( | ) | [virtual] |
void OAE85lParametrizedMagneticField::ffunkti | ( | float | u, | |
float * | ff | |||
) | const [private] |
Definition at line 120 of file OAE85lParametrizedMagneticField.cc.
References a, b, and funct::sqrt().
Referenced by inTeslaUnchecked().
00120 { 00121 // Function and its 3 derivatives 00122 float a,b; 00123 a=1.0/(1.0+u*u); 00124 b=sqrt(a); 00125 ff[0]=u*b; 00126 ff[1]=a*b; 00127 ff[2]=-3.0*u*a*ff[1]; 00128 ff[3]=a*ff[2]*((1.0/u)-4.0*u); 00129 return; 00130 }
Definition at line 36 of file OAE85lParametrizedMagneticField.cc.
References a, ainv, ap2, b0, hb0, hlova, l, and funct::sqrt().
Referenced by OAE85lParametrizedMagneticField().
00036 { 00037 ap2=4.0*a*a/(l*l); 00038 hb0=0.5*b0*sqrt(1.0+ap2); 00039 hlova=1.0/sqrt(ap2); 00040 ainv=2.0*hlova/l; 00041 }
GlobalVector OAE85lParametrizedMagneticField::inTesla | ( | const GlobalPoint & | gp | ) | const [virtual] |
Field value ad specified global point, in Tesla.
Implements MagneticField.
Definition at line 49 of file OAE85lParametrizedMagneticField.cc.
References inTeslaUnchecked(), and isDefined().
00049 { 00050 00051 if (isDefined(gp)) { 00052 return inTeslaUnchecked(gp); 00053 } else { 00054 edm::LogWarning("MagneticField|FieldOutsideValidity") << " Point " << gp << " is outside the validity region of OAE85lParametrizedMagneticField"; 00055 return GlobalVector(); 00056 } 00057 }
GlobalVector OAE85lParametrizedMagneticField::inTeslaUnchecked | ( | const GlobalPoint & | gp | ) | const [virtual] |
Optional implementation that derived classes can implement to provide faster query by skipping the check to isDefined.
Reimplemented from MagneticField.
Definition at line 61 of file OAE85lParametrizedMagneticField.cc.
References ainv, funct::exp(), ffunkti(), hb0, hlova, r, funct::sqrt(), v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and z.
Referenced by inTesla().
00061 { 00062 00063 // Method formerly named "trackerField" 00064 00065 // 00066 // B-field in Tracker volume 00067 // 00068 // In: xyz[3]: coordinates (m) 00069 // Out: bxyz[3]: Bx,By,Bz (kG) 00070 // 00071 // Valid for r<1.2 and |z|<3.0 V.Karimäki 040301 00072 // Updated for CMSSW field 070424 00073 // 00074 00075 // b0=field at centre, l=solenoid length, a=radius (m) (phenomen. parameters) 00076 00077 // FIXME: beware of statics... 00078 // static float ap2=4.0*a*a/(l*l); 00079 // static float hb0=0.5*b0*sqrt(1.0+ap2); 00080 // static float hlova=1.0/sqrt(ap2); 00081 // static float ainv=2.0*hlova/l; 00082 float xyz[3];//, bxyz[3]; 00083 // convert to m (CMSSW) 00084 xyz[0]=0.01*gp.x(); 00085 xyz[1]=0.01*gp.y(); 00086 xyz[2]=0.01*gp.z(); 00087 00088 float r=sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]); 00089 float z=xyz[2]; 00090 float az = fabs(z); 00091 // if (r<1.2&&az<3.0) // NOTE: check omitted, is done already by inTesla (NA) 00092 { 00093 float zainv=z*ainv; 00094 float rinv=(r>0.0) ? 1.0/r : 0.0; 00095 float u=hlova-zainv; 00096 float v=hlova+zainv; 00097 float fu[5],gv[5]; 00098 ffunkti(u,fu); 00099 ffunkti(v,gv); 00100 float rat=r*ainv; 00101 float corrr=0.00894*r*z*(az-2.2221)*(az-2.2221); 00102 float corrz=-0.02996*exp(-0.5*(az-1.9820)*(az-1.9820)/(0.78915*0.78915)); 00103 float br=hb0*0.5*rat*(fu[1]-gv[1]-0.125*(fu[3]-gv[3])*rat*rat)+corrr; 00104 float bz=hb0*(fu[0]+gv[0]-(fu[2]+gv[2])*0.25*rat*rat)+corrz; 00105 //bxyz[0]=br*xyz[0]*rinv; 00106 //bxyz[1]=br*xyz[1]*rinv; 00107 //bxyz[2]=bz; 00109 // bvec.x()=0.1*br*xyz[0]*rinv; 00110 //bvec.y()=0.1*br*xyz[1]*rinv; 00111 //bvec.z()=0.1*bz; 00112 return 0.1*GlobalVector(br*xyz[0]*rinv, br*xyz[1]*rinv, bz); 00113 } 00114 // else { 00115 // cout <<"The point is outside the region r<1.2m && |z|<3.0m"<<endl; 00116 //} 00117 // return GlobalVector(); 00118 }
bool OAE85lParametrizedMagneticField::isDefined | ( | const GlobalPoint & | gp | ) | const [virtual] |
True if the point is within the region where the concrete field.
Reimplemented from MagneticField.
Definition at line 134 of file OAE85lParametrizedMagneticField.cc.
References PV3DBase< T, PVType, FrameType >::perp(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by inTesla().
float OAE85lParametrizedMagneticField::a [private] |
Definition at line 51 of file OAE85lParametrizedMagneticField.h.
Referenced by ffunkti(), init(), and OAE85lParametrizedMagneticField().
float OAE85lParametrizedMagneticField::ainv [private] |
Definition at line 56 of file OAE85lParametrizedMagneticField.h.
Referenced by init(), and inTeslaUnchecked().
float OAE85lParametrizedMagneticField::ap2 [private] |
float OAE85lParametrizedMagneticField::b0 [private] |
Definition at line 49 of file OAE85lParametrizedMagneticField.h.
Referenced by init(), and OAE85lParametrizedMagneticField().
float OAE85lParametrizedMagneticField::hb0 [private] |
Definition at line 54 of file OAE85lParametrizedMagneticField.h.
Referenced by init(), and inTeslaUnchecked().
float OAE85lParametrizedMagneticField::hlova [private] |
Definition at line 55 of file OAE85lParametrizedMagneticField.h.
Referenced by init(), and inTeslaUnchecked().
float OAE85lParametrizedMagneticField::l [private] |
Definition at line 50 of file OAE85lParametrizedMagneticField.h.
Referenced by init(), and OAE85lParametrizedMagneticField().