00001 #pragma ident "$Id: ConstraintSystem.hpp 2939 2011-10-23 19:55:11Z yanweignss $"
00002
00008 #ifndef GPSTK_CONSTRAINTSYSTEM_HPP
00009 #define GPSTK_CONSTRAINTSYSTEM_HPP
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "Variable.hpp"
00034 #include "Vector.hpp"
00035 #include "Matrix.hpp"
00036
00037
00038 namespace gpstk
00039 {
00041 struct constraintHeader
00042 {
00043 double prefit;
00044 double variance;
00045
00046 constraintHeader():prefit(0.0),variance(1e-12){}
00047
00048 constraintHeader(double meas,double var=1e-12)
00049 : prefit(meas),variance(var){}
00050 };
00051
00053 struct Constraint : gnssData<constraintHeader,VariableDataMap>
00054 {
00056 Constraint() {};
00057
00058
00060 Constraint( const constraintHeader& h)
00061 { header = h; }
00062
00063
00065 Constraint( const constraintHeader& h,
00066 const VariableDataMap& b )
00067 {
00068 header = h;
00069 body = b;
00070 }
00071
00073 virtual ~Constraint() {}
00074 };
00075
00077 typedef std::list<Constraint> ConstraintList;
00078
00081 NEW_EXCEPTION_CLASS(InvalidConstraintSystem, gpstk::Exception);
00082
00083 class ConstraintSystem
00084 {
00085 public:
00087 ConstraintSystem(){}
00088
00089
00091 ~ConstraintSystem(){}
00092
00093
00095 virtual ConstraintSystem& addConstraint(const Constraint& constraint)
00096 { constraintList.push_back(constraint); return (*this); }
00097
00098
00100 virtual ConstraintSystem& removeConstraint(const Constraint& constraint);
00101
00102
00104 virtual ConstraintSystem& clearConstraint()
00105 { constraintList.clear(); return (*this); }
00106
00107
00109 virtual ConstraintSystem& setConstraint(const VariableSet& varSet,
00110 const Vector<double>& prefit);
00111
00113 virtual ConstraintSystem& setConstraint(const VariableSet& varSet,
00114 const Vector<double>& prefit,
00115 const Matrix<double>& design);
00116
00118 virtual ConstraintSystem& constraintMatrix(const VariableSet& allVar,
00119 Vector<double>& prefit,
00120 Matrix<double>& design,
00121 Matrix<double>& covariance)
00122 throw(InvalidConstraintSystem);
00123
00124
00126 ConstraintList getCurrentConstraints()
00127 { return constraintList; }
00128
00129
00131 int numberOfConstraints()
00132 { return constraintList.size(); }
00133
00134
00136 bool hasConstraints()
00137 { return (constraintList.size()>0)?true:false; }
00138
00139
00141 virtual ConstraintList getConstraintList() const
00142 { return constraintList; };
00143
00144
00146 virtual ConstraintSystem& setConstraintList(
00147 const ConstraintList& equationList )
00148 { constraintList = equationList; return (*this); };
00149
00150
00152 virtual ConstraintSystem& addConstraintList(
00153 const ConstraintList& equationList);
00154
00155 protected:
00156
00158 ConstraintList constraintList;
00159
00160 };
00161
00162
00163 }
00164
00165 #endif // GPSTK_CONSTRAINTSYSTEM_HPP