CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes | Friends
VolumeBasedMagneticField Class Reference

#include <VolumeBasedMagneticField.h>

Inheritance diagram for VolumeBasedMagneticField:
MagneticField

Public Member Functions

MagneticFieldclone () const override
 Returns a shallow copy. More...
 
const MagVolumefindVolume (const GlobalPoint &gp) const
 
GlobalVector inTesla (const GlobalPoint &g) const override
 Field value ad specified global point, in Tesla. More...
 
GlobalVector inTeslaUnchecked (const GlobalPoint &g) const override
 
bool isDefined (const GlobalPoint &gp) const override
 True if the point is within the region where the concrete field. More...
 
bool isZSymmetric () const
 
 VolumeBasedMagneticField (int geomVersion, const std::vector< MagBLayer * > &theBLayers, const std::vector< MagESector * > &theESectors, const std::vector< MagVolume6Faces * > &theBVolumes, const std::vector< MagVolume6Faces * > &theEVolumes, float rMax, float zMax, const MagneticField *param=0, bool isParamFieldOwned=false)
 
 VolumeBasedMagneticField (const VolumeBasedMagneticField &vbf)
 Copy constructor implement a shallow copy (ie no ownership of actual engines) More...
 
 ~VolumeBasedMagneticField () override
 
- Public Member Functions inherited from MagneticField
GlobalVector inInverseGeV (const GlobalPoint &gp) const
 Field value ad specified global point, in 1/Gev. More...
 
GlobalVector inKGauss (const GlobalPoint &gp) const
 Field value ad specified global point, in KGauss. More...
 
 MagneticField ()
 
 MagneticField (const MagneticField &orig)
 
int nominalValue () const
 The nominal field value for this map in kGauss. More...
 
virtual ~MagneticField ()
 

Private Attributes

const MagGeometryfield
 
bool magGeomOwned
 
float maxR
 
float maxZ
 
const MagneticFieldparamField
 
bool paramFieldOwned
 

Friends

class testMagGeometryAnalyzer
 
class testMagneticField
 

Detailed Description

Field engine providing interpolation within the full CMS region.

Author
N. Amapane - CERN

Definition at line 18 of file VolumeBasedMagneticField.h.

Constructor & Destructor Documentation

VolumeBasedMagneticField::VolumeBasedMagneticField ( int  geomVersion,
const std::vector< MagBLayer * > &  theBLayers,
const std::vector< MagESector * > &  theESectors,
const std::vector< MagVolume6Faces * > &  theBVolumes,
const std::vector< MagVolume6Faces * > &  theEVolumes,
float  rMax,
float  zMax,
const MagneticField param = 0,
bool  isParamFieldOwned = false 
)

Definition at line 4 of file VolumeBasedMagneticField.cc.

Referenced by clone().

13  : field(new MagGeometry(geomVersion, theBLayers, theESectors, theBVolumes, theEVolumes)),
14  maxR(rMax),
15  maxZ(zMax),
16  paramField(param),
17  magGeomOwned(true),
18  paramFieldOwned(isParamFieldOwned) {}
const MagneticField * paramField
VolumeBasedMagneticField::~VolumeBasedMagneticField ( )
override

Definition at line 33 of file VolumeBasedMagneticField.cc.

References field, magGeomOwned, paramField, and paramFieldOwned.

33  {
34  if (magGeomOwned)
35  delete field;
36  if (paramFieldOwned)
37  delete paramField;
38 }
const MagneticField * paramField
VolumeBasedMagneticField::VolumeBasedMagneticField ( const VolumeBasedMagneticField vbf)

Copy constructor implement a shallow copy (ie no ownership of actual engines)

Definition at line 20 of file VolumeBasedMagneticField.cc.

22  field(vbf.field),
23  maxR(vbf.maxR),
24  maxZ(vbf.maxZ),
26  magGeomOwned(false),
27  paramFieldOwned(false) {
28  // std::cout << "VolumeBasedMagneticField::clone() (shallow copy)" << std::endl;
29 }
const MagneticField * paramField

Member Function Documentation

MagneticField * VolumeBasedMagneticField::clone ( void  ) const
overridevirtual

Returns a shallow copy.

Reimplemented from MagneticField.

Definition at line 31 of file VolumeBasedMagneticField.cc.

References VolumeBasedMagneticField().

31 { return new VolumeBasedMagneticField(*this); }
VolumeBasedMagneticField(int geomVersion, const std::vector< MagBLayer * > &theBLayers, const std::vector< MagESector * > &theESectors, const std::vector< MagVolume6Faces * > &theBVolumes, const std::vector< MagVolume6Faces * > &theEVolumes, float rMax, float zMax, const MagneticField *param=0, bool isParamFieldOwned=false)
const MagVolume * VolumeBasedMagneticField::findVolume ( const GlobalPoint gp) const

Definition at line 59 of file VolumeBasedMagneticField.cc.

References field, and MagGeometry::findVolume().

Referenced by SteppingHelixPropagator::getNextState(), and SteppingHelixPropagator::loadState().

59 { return field->findVolume(gp); }
MagVolume const * findVolume(const GlobalPoint &gp, double tolerance=0.) const
Find a volume.
Definition: MagGeometry.cc:150
GlobalVector VolumeBasedMagneticField::inTesla ( const GlobalPoint gp) const
overridevirtual

Field value ad specified global point, in Tesla.

Implements MagneticField.

Definition at line 40 of file VolumeBasedMagneticField.cc.

References field, MagGeometry::fieldInTesla(), MagneticField::inTeslaUnchecked(), MagneticField::isDefined(), isDefined(), and paramField.

Referenced by IsolatedPixelTrackCandidateProducer::beginRun(), and IsolatedPixelTrackCandidateL1TProducer::beginRun().

40  {
41  // If parametrization of the inner region is available, use it.
42  if (paramField && paramField->isDefined(gp))
43  return paramField->inTeslaUnchecked(gp);
44 
45  // If point is outside magfield map, return 0 field (not an error)
46  if (!isDefined(gp))
47  return GlobalVector();
48 
49  return field->fieldInTesla(gp);
50 }
virtual GlobalVector inTeslaUnchecked(const GlobalPoint &gp) const
Definition: MagneticField.h:44
virtual bool isDefined(const GlobalPoint &) const
True if the point is within the region where the concrete field.
Definition: MagneticField.h:40
bool isDefined(const GlobalPoint &gp) const override
True if the point is within the region where the concrete field.
const MagneticField * paramField
GlobalVector fieldInTesla(const GlobalPoint &gp) const
Return field vector at the specified global point.
Definition: MagGeometry.cc:89
Global3DVector GlobalVector
Definition: GlobalVector.h:10
GlobalVector VolumeBasedMagneticField::inTeslaUnchecked ( const GlobalPoint gp) const
overridevirtual

Optional implementation that derived classes can implement to provide faster query by skipping the check to isDefined.

Reimplemented from MagneticField.

Definition at line 52 of file VolumeBasedMagneticField.cc.

References field, MagGeometry::fieldInTesla(), MagneticField::inTeslaUnchecked(), MagneticField::isDefined(), and paramField.

52  {
53  //same as above, but do not check range
54  if (paramField && paramField->isDefined(gp))
55  return paramField->inTeslaUnchecked(gp);
56  return field->fieldInTesla(gp);
57 }
virtual GlobalVector inTeslaUnchecked(const GlobalPoint &gp) const
Definition: MagneticField.h:44
virtual bool isDefined(const GlobalPoint &) const
True if the point is within the region where the concrete field.
Definition: MagneticField.h:40
const MagneticField * paramField
GlobalVector fieldInTesla(const GlobalPoint &gp) const
Return field vector at the specified global point.
Definition: MagGeometry.cc:89
bool VolumeBasedMagneticField::isDefined ( const GlobalPoint ) const
overridevirtual

True if the point is within the region where the concrete field.

Reimplemented from MagneticField.

Definition at line 61 of file VolumeBasedMagneticField.cc.

References maxR, maxZ, PV3DBase< T, PVType, FrameType >::perp(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by inTesla().

61  {
62  return (fabs(gp.z()) < maxZ && gp.perp() < maxR);
63 }
bool VolumeBasedMagneticField::isZSymmetric ( ) const

Definition at line 65 of file VolumeBasedMagneticField.cc.

References field, and MagGeometry::isZSymmetric().

65 { return field->isZSymmetric(); }
bool isZSymmetric() const
Definition: MagGeometry.h:50

Friends And Related Function Documentation

friend class testMagGeometryAnalyzer
friend

Definition at line 21 of file VolumeBasedMagneticField.h.

friend class testMagneticField
friend

Definition at line 20 of file VolumeBasedMagneticField.h.

Member Data Documentation

const MagGeometry* VolumeBasedMagneticField::field
private
bool VolumeBasedMagneticField::magGeomOwned
private

Definition at line 57 of file VolumeBasedMagneticField.h.

Referenced by ~VolumeBasedMagneticField().

float VolumeBasedMagneticField::maxR
private

Definition at line 54 of file VolumeBasedMagneticField.h.

Referenced by isDefined().

float VolumeBasedMagneticField::maxZ
private

Definition at line 55 of file VolumeBasedMagneticField.h.

Referenced by isDefined().

const MagneticField* VolumeBasedMagneticField::paramField
private

Definition at line 56 of file VolumeBasedMagneticField.h.

Referenced by inTesla(), inTeslaUnchecked(), and ~VolumeBasedMagneticField().

bool VolumeBasedMagneticField::paramFieldOwned
private

Definition at line 58 of file VolumeBasedMagneticField.h.

Referenced by ~VolumeBasedMagneticField().