CMS 3D CMS Logo

GlobalErrorBaseExtended.h
Go to the documentation of this file.
1 #ifndef GlobalErrorExtendedType_H
2 #define GlobalErrorExtendedType_H
3 
7 //
8 // Exceptions
9 //
11 
12 template <class T, class ErrorWeightType>
14 public:
16  class NullMatrix {};
17 
19  GlobalErrorBaseExtended(const NullMatrix&) {}
20 
26  T c21,
27  T c31,
28  T c41,
29  T c51,
30  T c61,
31  T c22,
32  T c32,
33  T c42,
34  T c52,
35  T c62,
36  T c33,
37  T c43,
38  T c53,
39  T c63,
40  T c44,
41  T c54,
42  T c64,
43  T c55,
44  T c65,
45  T c66) {
46  theCartesianError(0, 0) = c11;
47  theCartesianError(1, 0) = c21;
48  theCartesianError(2, 0) = c31;
49  theCartesianError(3, 0) = c41;
50  theCartesianError(4, 0) = c51;
51  theCartesianError(5, 0) = c61;
52 
53  theCartesianError(1, 1) = c22;
54  theCartesianError(2, 1) = c32;
55  theCartesianError(3, 1) = c42;
56  theCartesianError(4, 1) = c52;
57  theCartesianError(5, 1) = c62;
58 
59  theCartesianError(2, 2) = c33;
60  theCartesianError(3, 2) = c43;
61  theCartesianError(4, 2) = c53;
62  theCartesianError(5, 2) = c63;
63 
64  theCartesianError(3, 3) = c44;
65  theCartesianError(4, 3) = c54;
66  theCartesianError(5, 3) = c64;
67 
68  theCartesianError(4, 4) = c55;
69  theCartesianError(5, 4) = c65;
70 
71  theCartesianError(5, 5) = c66;
72  }
73 
75 
77  theCartesianError(0, 0) = err[0][0];
78  theCartesianError(1, 0) = err[1][0];
79  theCartesianError(2, 0) = err[2][0];
80  theCartesianError(3, 0) = 0;
81  theCartesianError(4, 0) = 0;
82  theCartesianError(5, 0) = 0;
83 
84  theCartesianError(1, 1) = err[1][1];
85  theCartesianError(2, 1) = err[2][1];
86  theCartesianError(3, 1) = 0;
87  theCartesianError(4, 1) = 0;
88  theCartesianError(5, 1) = 0;
89 
90  theCartesianError(2, 2) = err[2][2];
91  theCartesianError(3, 2) = 0;
92  theCartesianError(4, 2) = 0;
93  theCartesianError(5, 2) = 0;
94 
95  theCartesianError(3, 3) = 0;
96  theCartesianError(4, 3) = 0;
97  theCartesianError(5, 3) = 0;
98 
99  theCartesianError(4, 4) = 0;
100  theCartesianError(5, 4) = 0;
101 
102  theCartesianError(5, 5) = 0;
103  }
104 
106 
107  T cxx() const { return theCartesianError(0, 0); }
108 
109  T cyx() const { return theCartesianError(1, 0); }
110 
111  T czx() const { return theCartesianError(2, 0); }
112 
113  T cphixx() const { return theCartesianError(3, 0); }
114 
115  T cphiyx() const { return theCartesianError(4, 0); }
116 
117  T cphizx() const { return theCartesianError(5, 0); }
118 
119  T cyy() const { return theCartesianError(1, 1); }
120 
121  T czy() const { return theCartesianError(2, 1); }
122 
123  T cphixy() const { return theCartesianError(3, 1); }
124 
125  T cphiyy() const { return theCartesianError(4, 1); }
126 
127  T cphizy() const { return theCartesianError(5, 1); }
128 
129  T czz() const { return theCartesianError(2, 2); }
130 
131  T cphixz() const { return theCartesianError(3, 2); }
132 
133  T cphiyz() const { return theCartesianError(4, 2); }
134 
135  T cphizz() const { return theCartesianError(5, 2); }
136 
137  T cphixphix() const { return theCartesianError(3, 3); }
138 
139  T cphiyphix() const { return theCartesianError(4, 3); }
140 
141  T cphizphix() const { return theCartesianError(5, 3); }
142 
143  T cphiyphiy() const { return theCartesianError(4, 4); }
144 
145  T cphizphiy() const { return theCartesianError(5, 4); }
146 
147  T cphizphiz() const { return theCartesianError(5, 5); }
148 
153  const AlgebraicSymMatrix66& matrix() const { return theCartesianError; }
155 
156  //FIXME to be reimplemented
157  T rerr(const GlobalPoint& aPoint) const {
158  T r2 = aPoint.perp2();
159  T x2 = aPoint.x() * aPoint.x();
160  T y2 = aPoint.y() * aPoint.y();
161  T xy = aPoint.x() * aPoint.y();
162  if (r2 != 0)
163  return std::max<T>(0, (1. / r2) * (x2 * cxx() + 2. * xy * cyx() + y2 * cyy()));
164  else
165  return 0.5 * (cxx() + cyy());
166  }
167 
168  //FIXME to be reimplemented
169  T phierr(const GlobalPoint& aPoint) const {
170  T r2 = aPoint.perp2();
171  T x2 = aPoint.x() * aPoint.x();
172  T y2 = aPoint.y() * aPoint.y();
173  T xy = aPoint.x() * aPoint.y();
174  if (r2 != 0)
175  return std::max<T>(0, (1. / (r2 * r2)) * (y2 * cxx() - 2. * xy * cyx() + x2 * cyy()));
176  else
177  return 0;
178  }
179 
181  return GlobalErrorBaseExtended(theCartesianError + err.theCartesianError);
182  }
184  return GlobalErrorBaseExtended(theCartesianError - err.theCartesianError);
185  }
186 
187 private:
189 };
190 
191 #endif
const AlgebraicSymMatrix66 & matrix() const
GlobalErrorBaseExtended operator+(const GlobalErrorBaseExtended &err) const
AlgebraicSymMatrix66 theCartesianError
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
GlobalErrorBaseExtended(const NullMatrix &)
const AlgebraicSymMatrix66 & matrix_new() const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
GlobalErrorBaseExtended(const AlgebraicSymMatrix66 &err)
GlobalErrorBaseExtended(T c11, T c21, T c31, T c41, T c51, T c61, T c22, T c32, T c42, T c52, T c62, T c33, T c43, T c53, T c63, T c44, T c54, T c64, T c55, T c65, T c66)
Tag to request a null error matrix.
T perp2() const
Definition: PV3DBase.h:68
GlobalErrorBaseExtended(const AlgebraicSymMatrix33 &err)
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
T phierr(const GlobalPoint &aPoint) const
long double T
GlobalErrorBaseExtended operator-(const GlobalErrorBaseExtended &err) const
T rerr(const GlobalPoint &aPoint) const