CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
sim::Field Class Reference

#include <Field.h>

Inheritance diagram for sim::Field:

Public Member Functions

 Field (const MagneticField *f, double d)
 
G4Mag_UsualEqRhs * fieldEquation ()
 
void fieldEquation (G4Mag_UsualEqRhs *e)
 
virtual void GetFieldValue (const double p[3], double b[3]) const
 
virtual ~Field ()
 

Private Attributes

const MagneticFieldtheCMSMagneticField
 
double theDelta
 
G4Mag_UsualEqRhs * theFieldEquation
 

Detailed Description

Definition at line 10 of file Field.h.

Constructor & Destructor Documentation

Field::Field ( const MagneticField f,
double  d 
)

Definition at line 17 of file Field.cc.

18  : G4MagneticField(), theCMSMagneticField(f),theDelta(d)
19 {
20 }
const MagneticField * theCMSMagneticField
Definition: Field.h:19
double theDelta
Definition: Field.h:21
Field::~Field ( )
virtual

Definition at line 22 of file Field.cc.

22 {}

Member Function Documentation

G4Mag_UsualEqRhs * Field::fieldEquation ( )

Definition at line 15 of file Field.cc.

References theFieldEquation.

15 { return theFieldEquation; }
G4Mag_UsualEqRhs * theFieldEquation
Definition: Field.h:20
void Field::fieldEquation ( G4Mag_UsualEqRhs *  e)

Definition at line 67 of file Field.cc.

References alignCSCRings::e, and theFieldEquation.

67 { theFieldEquation = e; }
G4Mag_UsualEqRhs * theFieldEquation
Definition: Field.h:20
void Field::GetFieldValue ( const double  p[3],
double  b[3] 
) const
virtual

Definition at line 24 of file Field.cc.

References b, g, MagneticField::inTesla(), edm::detail::isnan(), theCMSMagneticField, theDelta, v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

25 {
26 
27  //
28  // this is another trick to check on a NaN, maybe it's even CPU-faster...
29  // but ler's stick to system function isnan(...) for now
30  //
31  // if ( !(xyz[0]==xyz[0]) || !(xyz[1]==xyz[1]) || !(xyz[2]==xyz[2]) )
32  if ( std::isnan(xyz[0]+xyz[1]+xyz[2]) != 0 )
33  {
34  throw SimG4Exception( "SimG4CoreMagneticField: Corrupted Event - NaN detected (position)" ) ;
35  }
36 
37  static float oldx[3] = {1.0e12,1.0e12,1.0e12};
38  static double b[3];
39 
40  if (theDelta>0. &&
41  fabs(oldx[0]-xyz[0])<theDelta &&
42  fabs(oldx[1]-xyz[1])<theDelta &&
43  fabs(oldx[2]-xyz[2])<theDelta)
44  {
45  // old b good enough
46  bfield[0] = b[0];
47  bfield[1] = b[1];
48  bfield[2] = b[2];
49  return;
50  }
51 
52  const GlobalPoint g(xyz[0]/cm,xyz[1]/cm,xyz[2]/cm);
54  b[0] = v.x()*tesla;
55  b[1] = v.y()*tesla;
56  b[2] = v.z()*tesla;
57 
58  oldx[0] = xyz[0];
59  oldx[1] = xyz[1];
60  oldx[2] = xyz[2];
61 
62  bfield[0] = b[0];
63  bfield[1] = b[1];
64  bfield[2] = b[2];
65 }
const MagneticField * theCMSMagneticField
Definition: Field.h:19
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
T y() const
Definition: PV3DBase.h:62
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
bool isnan(float x)
Definition: math.h:13
T z() const
Definition: PV3DBase.h:63
double b
Definition: hdecay.h:120
double theDelta
Definition: Field.h:21
T x() const
Definition: PV3DBase.h:61
mathSSE::Vec4< T > v

Member Data Documentation

const MagneticField* sim::Field::theCMSMagneticField
private

Definition at line 19 of file Field.h.

Referenced by GetFieldValue().

double sim::Field::theDelta
private

Definition at line 21 of file Field.h.

Referenced by GetFieldValue().

G4Mag_UsualEqRhs* sim::Field::theFieldEquation
private

Definition at line 20 of file Field.h.

Referenced by fieldEquation().