EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GblPoint.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GblPoint.h
1 /*
2  * GblPoint.h
3  *
4  * Created on: Aug 18, 2011
5  * Author: kleinwrt
6  */
7 
30 #ifndef GBLPOINT_H_
31 #define GBLPOINT_H_
32 
33 #include<iostream>
34 #include<vector>
35 #include<math.h>
36 #include <stdexcept>
37 #include "TVectorD.h"
38 #include "TMatrixD.h"
39 #include "TMatrixDSym.h"
40 #include "TMatrixDSymEigen.h"
41 
42 #include "Math/SMatrix.h"
43 #include "Math/SVector.h"
44 typedef ROOT::Math::SMatrix<double, 2> SMatrix22;
45 typedef ROOT::Math::SMatrix<double, 2, 3> SMatrix23;
46 typedef ROOT::Math::SMatrix<double, 2, 5> SMatrix25;
47 typedef ROOT::Math::SMatrix<double, 2, 7> SMatrix27;
48 typedef ROOT::Math::SMatrix<double, 3, 2> SMatrix32;
49 typedef ROOT::Math::SMatrix<double, 3> SMatrix33;
50 typedef ROOT::Math::SMatrix<double, 5> SMatrix55;
51 typedef ROOT::Math::SVector<double, 2> SVector2;
52 typedef ROOT::Math::SVector<double, 5> SVector5;
53 
54 namespace gbl {
55 
57 
68 class GblPoint {
69 public:
70  GblPoint(const TMatrixD &aJacobian);
71  GblPoint(const SMatrix55 &aJacobian);
72  virtual ~GblPoint();
73  void addMeasurement(const TMatrixD &aProjection, const TVectorD &aResiduals,
74  const TVectorD &aPrecision, double minPrecision = 0.);
75  void addMeasurement(const TMatrixD &aProjection, const TVectorD &aResiduals,
76  const TMatrixDSym &aPrecision, double minPrecision = 0.);
77  void addMeasurement(const TVectorD &aResiduals, const TVectorD &aPrecision,
78  double minPrecision = 0.);
79  void addMeasurement(const TVectorD &aResiduals,
80  const TMatrixDSym &aPrecision, double minPrecision = 0.);
81  unsigned int hasMeasurement() const;
82  void getMeasurement(SMatrix55 &aProjection, SVector5 &aResiduals,
83  SVector5 &aPrecision) const;
84  void getMeasTransformation(TMatrixD &aTransformation) const;
85  void addScatterer(const TVectorD &aResiduals, const TVectorD &aPrecision);
86  void addScatterer(const TVectorD &aResiduals,
87  const TMatrixDSym &aPrecision);
88  bool hasScatterer() const;
89  void getScatterer(SMatrix22 &aTransformation, SVector2 &aResiduals,
90  SVector2 &aPrecision) const;
91  void getScatTransformation(TMatrixD &aTransformation) const;
92  void addLocals(const TMatrixD &aDerivatives);
93  unsigned int getNumLocals() const;
94  const TMatrixD& getLocalDerivatives() const;
95  void addGlobals(const std::vector<int> &aLabels,
96  const TMatrixD &aDerivatives);
97  unsigned int getNumGlobals() const;
98  std::vector<int> getGlobalLabels() const;
99  const TMatrixD& getGlobalDerivatives() const;
100  void setLabel(unsigned int aLabel);
101  unsigned int getLabel() const;
102  void setOffset(int anOffset);
103  int getOffset() const;
104  const SMatrix55& getP2pJacobian() const;
105  void addPrevJacobian(const SMatrix55 &aJac);
106  void addNextJacobian(const SMatrix55 &aJac);
107  void getDerivatives(int aDirection, SMatrix22 &matW, SMatrix22 &matWJ,
108  SVector2 &vecWd) const;
109  void printPoint(unsigned int level = 0) const;
110 
111 private:
112  unsigned int theLabel;
113  int theOffset;
117  unsigned int measDim;
121  bool transFlag;
123  bool scatFlag;
127  TMatrixD localDerivatives;
128  std::vector<int> globalLabels;
129  TMatrixD globalDerivatives;
130 };
131 }
132 #endif /* GBLPOINT_H_ */