Go to the documentation of this file.00001 #ifndef _TRACKER_LOCALTRAJECTORYERROR_H_
00002 #define _TRACKER_LOCALTRAJECTORYERROR_H_
00003
00004 #include "DataFormats/GeometrySurface/interface/LocalError.h"
00005 #include "DataFormats/Math/interface/AlgebraicROOTObjects.h"
00006
00007 #include <boost/shared_ptr.hpp>
00008
00021 class LocalTrajectoryError {
00022 public:
00023
00024 LocalTrajectoryError(){}
00025 LocalTrajectoryError(InvalidError) {theCovarianceMatrix(0,0)=-99999.e10;}
00026
00027 ~LocalTrajectoryError(){}
00028
00029 bool invalid() const { return theCovarianceMatrix(0,0)<-1.e10;}
00030 bool valid() const { return !invalid();}
00031
00032
00033 bool posDef() const {
00034 return (theCovarianceMatrix(0,0)>=0) && (theCovarianceMatrix(1,1)>=0) &&
00035 (theCovarianceMatrix(2,2)>=0) && (theCovarianceMatrix(3,3)>=0) && (theCovarianceMatrix(4,4)>=0);
00036 }
00037
00038
00043 LocalTrajectoryError(const AlgebraicSymMatrix55& aCovarianceMatrix):
00044 theCovarianceMatrix(aCovarianceMatrix), theWeightMatrixPtr() { }
00045
00052 LocalTrajectoryError( float dx, float dy, float dxdir, float dydir,
00053 float dpinv);
00054
00055
00056
00060 const AlgebraicSymMatrix55 &matrix() const {
00061 return theCovarianceMatrix;
00062 }
00063
00066 const AlgebraicSymMatrix55 &weightMatrix() const;
00067
00068
00072 LocalTrajectoryError & operator *= (double factor) {
00073 theCovarianceMatrix *= factor;
00074 if ((theWeightMatrixPtr.get() != 0) && (factor != 0.0)) { (*theWeightMatrixPtr) /= factor; }
00075 return *this;
00076 }
00077
00082 LocalError positionError() const {
00083 return LocalError( theCovarianceMatrix(3,3),theCovarianceMatrix(3,4),
00084 theCovarianceMatrix(4,4));
00085 }
00086
00087 private:
00088 AlgebraicSymMatrix55 theCovarianceMatrix;
00089 mutable boost::shared_ptr<AlgebraicSymMatrix55> theWeightMatrixPtr;
00090 };
00091
00092 #endif