CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 {
15 
16 public:
18  class NullMatrix{};
19 
21  GlobalErrorBaseExtended(const NullMatrix &) {}
22 
23 
28  GlobalErrorBaseExtended(T c11, T c21, T c31, T c41, T c51, T c61,
29  T c22, T c32, T c42, T c52, T c62,
30  T c33, T c43, T c53, T c63,
31  T c44, T c54, T c64,
32  T c55, T c65,
33  T c66
34  ) {
35  theCartesianError(0,0)=c11;
36  theCartesianError(1,0)=c21;
37  theCartesianError(2,0)=c31;
38  theCartesianError(3,0)=c41;
39  theCartesianError(4,0)=c51;
40  theCartesianError(5,0)=c61;
41 
42  theCartesianError(1,1)=c22;
43  theCartesianError(2,1)=c32;
44  theCartesianError(3,1)=c42;
45  theCartesianError(4,1)=c52;
46  theCartesianError(5,1)=c62;
47 
48  theCartesianError(2,2)=c33;
49  theCartesianError(3,2)=c43;
50  theCartesianError(4,2)=c53;
51  theCartesianError(5,2)=c63;
52 
53  theCartesianError(3,3)=c44;
54  theCartesianError(4,3)=c54;
55  theCartesianError(5,3)=c64;
56 
57  theCartesianError(4,4)=c55;
58  theCartesianError(5,4)=c65;
59 
60  theCartesianError(5,5)=c66;
61  }
62 
64  theCartesianError(err) { }
65 
67  theCartesianError(0,0)=err[0][0];
68  theCartesianError(1,0)=err[1][0];
69  theCartesianError(2,0)=err[2][0];
70  theCartesianError(3,0)=0;
71  theCartesianError(4,0)=0;
72  theCartesianError(5,0)=0;
73 
74  theCartesianError(1,1)=err[1][1];
75  theCartesianError(2,1)=err[2][1];
76  theCartesianError(3,1)=0;
77  theCartesianError(4,1)=0;
78  theCartesianError(5,1)=0;
79 
80  theCartesianError(2,2)=err[2][2];
81  theCartesianError(3,2)=0;
82  theCartesianError(4,2)=0;
83  theCartesianError(5,2)=0;
84 
85  theCartesianError(3,3)=0;
86  theCartesianError(4,3)=0;
87  theCartesianError(5,3)=0;
88 
89  theCartesianError(4,4)=0;
90  theCartesianError(5,4)=0;
91 
92  theCartesianError(5,5)=0;
93  }
94 
96 
97  T cxx() const {
98  return theCartesianError(0,0);
99  }
100 
101  T cyx() const {
102  return theCartesianError(1,0);
103  }
104 
105  T czx() const {
106  return theCartesianError(2,0);
107  }
108 
109  T cphixx() const {
110  return theCartesianError(3,0);
111  }
112 
113  T cphiyx() const {
114  return theCartesianError(4,0);
115  }
116 
117  T cphizx() const {
118  return theCartesianError(5,0);
119  }
120 
121  T cyy() const {
122  return theCartesianError(1,1);
123  }
124 
125  T czy() const {
126  return theCartesianError(2,1);
127  }
128 
129  T cphixy() const {
130  return theCartesianError(3,1);
131  }
132 
133  T cphiyy() const {
134  return theCartesianError(4,1);
135  }
136 
137  T cphizy() const {
138  return theCartesianError(5,1);
139  }
140 
141  T czz() const {
142  return theCartesianError(2,2);
143  }
144 
145  T cphixz() const {
146  return theCartesianError(3,2);
147  }
148 
149  T cphiyz() const {
150  return theCartesianError(4,2);
151  }
152 
153  T cphizz() const {
154  return theCartesianError(5,2);
155  }
156 
157  T cphixphix() const {
158  return theCartesianError(3,3);
159  }
160 
161  T cphiyphix() const {
162  return theCartesianError(4,3);
163  }
164 
165  T cphizphix() const {
166  return theCartesianError(5,3);
167  }
168 
169  T cphiyphiy() const {
170  return theCartesianError(4,4);
171  }
172 
173  T cphizphiy() const {
174  return theCartesianError(5,4);
175  }
176 
177  T cphizphiz() const {
178  return theCartesianError(5,5);
179  }
180 
185  const AlgebraicSymMatrix66 & matrix() const {
186  return theCartesianError;
187  }
189  return theCartesianError;
190  }
191 
192  //FIXME to be reimplemented
193  T rerr(const GlobalPoint& aPoint) const {
194  T r2 = aPoint.perp2();
195  T x2 = aPoint.x()*aPoint.x();
196  T y2 = aPoint.y()*aPoint.y();
197  T xy = aPoint.x()*aPoint.y();
198  if(r2 != 0)
199  return std::max<T>(0, (1./r2)*(x2*cxx() + 2.*xy*cyx() + y2*cyy()));
200  else
201  return 0.5*(cxx() + cyy());
202  }
203 
204  //FIXME to be reimplemented
205  T phierr(const GlobalPoint& aPoint) const {
206  T r2 = aPoint.perp2();
207  T x2 = aPoint.x()*aPoint.x();
208  T y2 = aPoint.y()*aPoint.y();
209  T xy = aPoint.x()*aPoint.y();
210  if (r2 != 0)
211  return std::max<T>(0, (1./(r2*r2))*(y2*cxx() - 2.*xy*cyx() + x2*cyy()));
212  else
213  return 0;
214  }
215 
218  }
221  }
222 
223 private:
224 
226 
227 };
228 
229 #endif
GlobalErrorBaseExtended operator+(const GlobalErrorBaseExtended &err) const
T rerr(const GlobalPoint &aPoint) const
GlobalErrorBaseExtended operator-(const GlobalErrorBaseExtended &err) const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
T y() const
Definition: PV3DBase.h:63
T perp2() const
Definition: PV3DBase.h:71
AlgebraicSymMatrix66 theCartesianError
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
const AlgebraicSymMatrix66 & matrix_new() const
GlobalErrorBaseExtended(const NullMatrix &)
const AlgebraicSymMatrix66 & matrix() const
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.
GlobalErrorBaseExtended(const AlgebraicSymMatrix33 &err)
long double T
T x() const
Definition: PV3DBase.h:62
T phierr(const GlobalPoint &aPoint) const