CMS 3D CMS Logo

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

#include <SpecialCylindricalMFGrid.h>

Inheritance diagram for SpecialCylindricalMFGrid:
MFGrid3D MFGrid MagneticFieldProvider< float >

Public Member Functions

void dump () const override
 
LocalPoint fromGridFrame (double a, double b, double c) const override
 find grid coordinates for point. For debugging and validation only. More...
 
 SpecialCylindricalMFGrid (binary_ifstream &istr, const GloballyPositioned< float > &vol, int gridType)
 
void toGridFrame (const LocalPoint &p, double &a, double &b, double &c) const override
 find grid coordinates for point. For debugging and validation only. More...
 
LocalVector uncheckedValueInTesla (const LocalPoint &p) const override
 Interpolated field value at given point; does not check for exceptions. More...
 
- Public Member Functions inherited from MFGrid3D
Dimensions dimensions (void) const override
 
Indexes index (const LocalPoint &p) const override
 
 MFGrid3D (const GloballyPositioned< float > &vol)
 
LocalPoint nodePosition (int i, int j, int k) const override
 Position of node in local frame. More...
 
LocalVector nodeValue (int i, int j, int k) const override
 Field value at node. More...
 
LocalVector valueInTesla (const LocalPoint &p) const override
 Interpolated field value at given point. More...
 
- Public Member Functions inherited from MFGrid
const GloballyPositioned< float > & frame () const
 Local reference frame. More...
 
 MFGrid (const GloballyPositioned< float > &vol)
 
 ~MFGrid () override
 
- Public Member Functions inherited from MagneticFieldProvider< float >
virtual LocalVectorType derivativeInTeslaPerMeter (const LocalPointType &p, int N) const
 
virtual int hasDerivatives () const
 
virtual LocalVectorType valueInTesla (const LocalPointType &p) const =0
 
virtual ~MagneticFieldProvider ()
 

Private Member Functions

double startingPoint (double sinPhi) const
 
double stepSize (double sinPhi) const
 

Private Attributes

bool sector1
 
double startConstTerm_
 
double startPhiTerm_
 
double stepConstTerm_
 
double stepPhiTerm_
 

Additional Inherited Members

- Public Types inherited from MFGrid
typedef GloballyPositioned
< float >::GlobalPoint 
GlobalPoint
 
typedef GloballyPositioned
< float >::GlobalVector 
GlobalVector
 
typedef GloballyPositioned
< float >::LocalPoint 
LocalPoint
 
typedef GloballyPositioned
< float >::LocalVector 
LocalVector
 
- Public Types inherited from MagneticFieldProvider< float >
typedef Point3DBase< float,
GlobalTag
GlobalPointType
 
typedef Vector3DBase< float,
GlobalTag
GlobalVectorType
 
typedef Point3DBase< float,
LocalTag
LocalPointType
 
typedef Vector3DBase< float,
LocalTag
LocalVectorType
 
- Protected Types inherited from MFGrid3D
using BVector = Grid3D::BVector
 
using GridType = Grid3D
 
- Protected Member Functions inherited from MFGrid3D
void setGrid (const GridType &grid)
 
- Protected Attributes inherited from MFGrid3D
GridType grid_
 

Detailed Description

Interpolator for cylindrical grids type 5 or 6 (r,phi,z) 1/sin(phi) or 1/cos(phi)

Author
T. Todorov - updated 08 N. Amapane

Definition at line 16 of file SpecialCylindricalMFGrid.h.

Constructor & Destructor Documentation

SpecialCylindricalMFGrid::SpecialCylindricalMFGrid ( binary_ifstream istr,
const GloballyPositioned< float > &  vol,
int  gridType 
)

Constructor. gridType = 5 => 1/sin(phi); i.e. master sector is #4 gridType = 6 => 1/cos(phi); i.e. master sector is #1

Definition at line 9 of file SpecialCylindricalMFGrid.cc.

References gather_cfg::cout, MFGrid::frame(), MFGrid3D::grid_, mps_fire::i, submitDQMOfflineCAF::nLines, sector1, startConstTerm_, startPhiTerm_, stepConstTerm_, stepPhiTerm_, GloballyPositioned< T >::toLocal(), PV3DBase< T, VectorTag, FrameTag >::x(), PV3DBase< T, VectorTag, FrameTag >::y(), and PV3DBase< T, VectorTag, FrameTag >::z().

12  : MFGrid3D(vol) {
13  if (gridType == 5) {
14  sector1 = false;
15  } else if (gridType == 6) {
16  sector1 = true;
17  } else {
18  cout << "ERROR wrong SpecialCylindricalMFGrid type " << gridType << endl;
19  sector1 = false;
20  }
21 
22  int n1, n2, n3;
23  inFile >> n1 >> n2 >> n3;
24 #ifdef DEBUG_GRID
25  cout << "n1 " << n1 << " n2 " << n2 << " n3 " << n3 << endl;
26 #endif
27  double xref, yref, zref;
28  inFile >> xref >> yref >> zref;
29  double stepx, stepy, stepz;
30  inFile >> stepx >> stepy >> stepz;
31 
32  double RParAsFunOfPhi[4]; // R = f(phi) or const. (0,2: const. par. ; 1,3: const./sin(phi));
33  inFile >> RParAsFunOfPhi[0] >> RParAsFunOfPhi[1] >> RParAsFunOfPhi[2] >> RParAsFunOfPhi[3];
34 
35  vector<BVector> fieldValues;
36  float Bx, By, Bz;
37  int nLines = n1 * n2 * n3;
38  fieldValues.reserve(nLines);
39  for (int iLine = 0; iLine < nLines; ++iLine) {
40  inFile >> Bx >> By >> Bz;
41  // This would be fine only if local r.f. has the axes oriented as the global r.f.
42  // For this volume we know that the local and global r.f. have different axis
43  // orientation, so we do not try to be clever.
44  // fieldValues.push_back(BVector(Bx,By,Bz));
45 
46  // Preserve double precision!
48  fieldValues.push_back(BVector(lB.x(), lB.y(), lB.z()));
49  }
50  // check completeness
51  string lastEntry;
52  inFile >> lastEntry;
53  if (lastEntry != "complete") {
54  cout << "ERROR during file reading: file is not complete" << endl;
55  }
56 
57  GlobalPoint grefp(GlobalPoint::Cylindrical(xref, yref, zref));
58 
59 #ifdef DEBUG_GRID
60  LocalPoint lrefp = frame().toLocal(grefp);
61  cout << "Grid reference point in grid system: " << xref << "," << yref << "," << zref << endl;
62  cout << "Grid reference point in global x,y,z: " << grefp << endl;
63  cout << "Grid reference point in local x,y,z: " << lrefp << endl;
64  cout << "steps " << stepx << "," << stepy << "," << stepz << endl;
65  cout << "RParAsFunOfPhi[0...4] = ";
66  for (int i = 0; i < 4; ++i)
67  cout << RParAsFunOfPhi[i] << " ";
68  cout << endl;
69 #endif
70 
71  Grid1D gridX(0, n1 - 1, n1); // offset and step size not constant
72  Grid1D gridY(yref, yref + stepy * (n2 - 1), n2);
73  Grid1D gridZ(grefp.z(), grefp.z() + stepz * (n3 - 1), n3);
74 
75  grid_ = GridType(gridX, gridY, gridZ, fieldValues);
76 
77  stepConstTerm_ = (RParAsFunOfPhi[0] - RParAsFunOfPhi[2]) / (n1 - 1);
78  stepPhiTerm_ = (RParAsFunOfPhi[1] - RParAsFunOfPhi[3]) / (n1 - 1);
79  startConstTerm_ = RParAsFunOfPhi[2];
80  startPhiTerm_ = RParAsFunOfPhi[3];
81 
82  // Activate/deactivate timers
83  // static SimpleConfigurable<bool> timerOn(false,"MFGrid:timing");
84  // (*TimingReport::current()).switchOn("MagneticFieldProvider::valueInTesla(SpecialCylindricalMFGrid)",timerOn);
85 }
MFGrid3D(const GloballyPositioned< float > &vol)
Definition: MFGrid3D.h:19
LocalPoint toLocal(const GlobalPoint &gp) const
GridType grid_
Definition: MFGrid3D.h:59
Definition: Grid1D.h:7
Grid3D GridType
Definition: MFGrid3D.h:56
Grid3D::BVector BVector
Definition: MFGrid3D.h:57
const GloballyPositioned< float > & frame() const
Local reference frame.
Definition: MFGrid.h:60
tuple cout
Definition: gather_cfg.py:144

Member Function Documentation

void SpecialCylindricalMFGrid::dump ( void  ) const
overridevirtual

Reimplemented from MFGrid.

Definition at line 100 of file SpecialCylindricalMFGrid.cc.

100 {}
MFGrid::LocalPoint SpecialCylindricalMFGrid::fromGridFrame ( double  a,
double  b,
double  c 
) const
overridevirtual

find grid coordinates for point. For debugging and validation only.

Implements MFGrid.

Definition at line 102 of file SpecialCylindricalMFGrid.cc.

References funct::cos(), MFGrid::frame(), runTauDisplay::gp, dttmaxenums::R, sector1, funct::sin(), Phase1L1TJetProducer_cfi::sinPhi, startingPoint(), stepSize(), and GloballyPositioned< T >::toLocal().

102  {
103  double sinPhi; // sin or cos depending on wether we are at phi=0 or phi=pi/2
104  if (sector1) {
105  sinPhi = cos(b);
106  } else {
107  sinPhi = sin(b);
108  }
109 
110  double R = a * stepSize(sinPhi) + startingPoint(sinPhi);
111  // "OLD" convention of phi.
112  // GlobalPoint gp( GlobalPoint::Cylindrical(R, Geom::pi() - b, c));
114  return frame().toLocal(gp);
115 }
const edm::EventSetup & c
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double startingPoint(double sinPhi) const
LocalPoint toLocal(const GlobalPoint &gp) const
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double stepSize(double sinPhi) const
double b
Definition: hdecay.h:118
double a
Definition: hdecay.h:119
const GloballyPositioned< float > & frame() const
Local reference frame.
Definition: MFGrid.h:60
double SpecialCylindricalMFGrid::startingPoint ( double  sinPhi) const
inlineprivate
double SpecialCylindricalMFGrid::stepSize ( double  sinPhi) const
inlineprivate
void SpecialCylindricalMFGrid::toGridFrame ( const LocalPoint p,
double &  a,
double &  b,
double &  c 
) const
overridevirtual

find grid coordinates for point. For debugging and validation only.

Implements MFGrid.

Definition at line 117 of file SpecialCylindricalMFGrid.cc.

References funct::cos(), gather_cfg::cout, MFGrid::frame(), runTauDisplay::gp, sector1, funct::sin(), Phase1L1TJetProducer_cfi::sinPhi, startingPoint(), stepSize(), and GloballyPositioned< T >::toGlobal().

Referenced by uncheckedValueInTesla().

117  {
118  GlobalPoint gp = frame().toGlobal(p);
119  double sinPhi; // sin or cos depending on wether we are at phi=0 or phi=pi/2
120  if (sector1) {
121  sinPhi = cos(gp.phi());
122  } else {
123  sinPhi = sin(gp.phi());
124  }
125  a = (gp.perp() - startingPoint(sinPhi)) / stepSize(sinPhi);
126  // FIXME: "OLD" convention of phi.
127  // b = Geom::pi() - gp.phi();
128  b = gp.phi();
129  c = gp.z();
130 
131 #ifdef DEBUG_GRID
132  if (sector1) {
133  cout << "toGridFrame: sinPhi ";
134  } else {
135  cout << "toGridFrame: cosPhi ";
136  }
137  cout << sinPhi << " LocalPoint " << p << " GlobalPoint " << gp << endl
138  << " a " << a << " b " << b << " c " << c << endl;
139 
140 #endif
141 }
const edm::EventSetup & c
T perp() const
Definition: PV3DBase.h:69
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
double startingPoint(double sinPhi) const
T z() const
Definition: PV3DBase.h:61
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
GlobalPoint toGlobal(const LocalPoint &lp) const
double stepSize(double sinPhi) const
double b
Definition: hdecay.h:118
double a
Definition: hdecay.h:119
const GloballyPositioned< float > & frame() const
Local reference frame.
Definition: MFGrid.h:60
tuple cout
Definition: gather_cfg.py:144
MFGrid::LocalVector SpecialCylindricalMFGrid::uncheckedValueInTesla ( const LocalPoint p) const
overridevirtual

Interpolated field value at given point; does not check for exceptions.

Implements MFGrid3D.

Definition at line 87 of file SpecialCylindricalMFGrid.cc.

References a, b, c, MFGrid3D::grid_, LinearGridInterpolator3D::interpolate(), and toGridFrame().

87  {
88  // static TimingReport::Item & timer= (*TimingReport::current())["MagneticFieldProvider::valueInTesla(SpecialCylindricalMFGrid)"];
89  // TimeMe t(timer,false);
90 
92  double a, b, c;
93  toGridFrame(p, a, b, c);
94  // the following holds if B values was not converted to local coords -- see ctor
95  // GlobalVector gv( interpol.interpolate( a, b, c)); // grid in global frame
96  // return frame().toLocal(gv); // must return a local vector
97  return LocalVector(interpol.interpolate(a, b, c));
98 }
const edm::EventSetup & c
void toGridFrame(const LocalPoint &p, double &a, double &b, double &c) const override
find grid coordinates for point. For debugging and validation only.
GridType grid_
Definition: MFGrid3D.h:59
double b
Definition: hdecay.h:118
GloballyPositioned< float >::LocalVector LocalVector
Definition: MFGrid.h:32
double a
Definition: hdecay.h:119

Member Data Documentation

bool SpecialCylindricalMFGrid::sector1
private

Definition at line 41 of file SpecialCylindricalMFGrid.h.

Referenced by fromGridFrame(), SpecialCylindricalMFGrid(), and toGridFrame().

double SpecialCylindricalMFGrid::startConstTerm_
private

Definition at line 36 of file SpecialCylindricalMFGrid.h.

Referenced by SpecialCylindricalMFGrid().

double SpecialCylindricalMFGrid::startPhiTerm_
private

Definition at line 37 of file SpecialCylindricalMFGrid.h.

Referenced by SpecialCylindricalMFGrid().

double SpecialCylindricalMFGrid::stepConstTerm_
private

Definition at line 34 of file SpecialCylindricalMFGrid.h.

Referenced by SpecialCylindricalMFGrid().

double SpecialCylindricalMFGrid::stepPhiTerm_
private

Definition at line 35 of file SpecialCylindricalMFGrid.h.

Referenced by SpecialCylindricalMFGrid().