CMS 3D CMS Logo

OAE85lParametrizedMagneticField Class Reference

Magnetic Field engine wrapper for V. More...

#include <MagneticField/ParametrizedEngine/src/OAE85lParametrizedMagneticField.h>

Inheritance diagram for OAE85lParametrizedMagneticField:

MagneticField

List of all members.

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 &parameters)
 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


Detailed Description

Magnetic Field engine wrapper for V.

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

Date
2008/05/06 12:09:19
Revision
1.3
Author:
N. Amapane - CERN

Definition at line 19 of file OAE85lParametrizedMagneticField.h.


Constructor & Destructor Documentation

OAE85lParametrizedMagneticField::OAE85lParametrizedMagneticField ( float  b0_ = 40.681,
float  a_ = 4.6430,
float  l_ = 15.284 
)

Constructor.

The optional parameters are: b0=field at centre, l=solenoid length, a=radius (m)

Definition at line 18 of file OAE85lParametrizedMagneticField.cc.

References init().

00021   : b0(b0_),
00022     l(l_),
00023     a(a_)    
00024 {
00025   init();
00026 }

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]

Destructor.

Definition at line 45 of file OAE85lParametrizedMagneticField.cc.

00045 {}


Member Function Documentation

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 }

void OAE85lParametrizedMagneticField::init ( void   )  [private]

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().

00134                                                                       {
00135   return (gp.perp()<120. && fabs(gp.z())<300.);
00136 }


Member Data Documentation

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]

Definition at line 53 of file OAE85lParametrizedMagneticField.h.

Referenced by init().

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().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:29:07 2009 for CMSSW by  doxygen 1.5.4