Diana
0.8.3
|
00001 00002 #ifndef CAPE_NLP_DATA_H 00003 #define CAPE_NLP_DATA_H 00004 00005 00006 namespace Numeric { 00007 namespace Solvers { 00008 namespace Model { 00009 class ICapeNumericContinuousModel; 00010 } 00011 } 00012 } 00013 00014 namespace Common { 00015 00017 namespace NLPData { 00018 00019 // Forward declaration of interfaces 00020 class CapeMeasuredData; 00021 00025 class CapeMeasuredValue { 00026 public: 00028 CapeMeasuredValue(Common::Types::CapeDouble _measurement = 0.0, Common::Types::CapeDouble _variance = 1.0) 00029 : dblMeasurement(_measurement) { this->setVariance(_variance); } 00030 00032 inline void setMeasurement(Common::Types::CapeDouble _measurement) { dblMeasurement = _measurement; } 00033 00035 inline Common::Types::CapeDouble getMeasurement() const { return dblMeasurement; } 00036 00038 void setVariance(Common::Types::CapeDouble _variance) 00039 throw(Common::Error::ECapeInvalidArgument); 00040 00042 inline Common::Types::CapeDouble getVariance() const { return dblVariance; } 00043 00044 private: 00045 inline static Common::Types::CapeBoolean isVarianceValid(Common::Types::CapeDouble _value) { return (_value > 0); } 00046 00047 Common::Types::CapeDouble dblMeasurement; 00048 Common::Types::CapeDouble dblVariance; 00049 }; 00050 00051 00053 typedef std::vector<CapeMeasuredValue> CapeMeasuredValues; 00054 00058 class CapeMeasuredPoint { 00059 public: 00063 CapeMeasuredPoint(const Common::Types::CapeArrayLong& _indices); 00064 00067 CapeMeasuredPoint(CapeMeasuredData& _ExpDat); 00068 00070 inline void SetTime(Common::Types::CapeDouble _time) { dblTime = _time; } 00071 00073 inline Common::Types::CapeDouble GetTime() const { return dblTime; } 00074 00078 void SetValue(Common::Types::CapeLong _idx, CapeMeasuredValue _value) 00079 throw(Common::Error::ECapeInvalidArgument); 00080 00084 void SetValueByIndex(Common::Types::CapeLong _idx, CapeMeasuredValue _value) 00085 throw(Common::Error::ECapeInvalidArgument); 00086 00089 CapeMeasuredValue GetValue(Common::Types::CapeLong _idx) const 00090 throw(Common::Error::ECapeInvalidArgument); 00091 00094 CapeMeasuredValue GetValueByIndex(Common::Types::CapeLong _idx) const 00095 throw(Common::Error::ECapeInvalidArgument); 00096 private: 00097 const Common::Types::CapeArrayLong* parrIndices; 00098 00099 Common::Types::CapeDouble dblTime; 00100 CapeMeasuredValues arrValues; 00101 }; 00102 00104 typedef std::vector<CapeMeasuredPoint> CapeMeasuredPoints; 00105 00109 class CapeMeasuredData { 00110 public: 00112 CapeMeasuredData() {} 00113 00116 CapeMeasuredData(const Numeric::Solvers::Model::ICapeNumericContinuousModel* _model, const Common::Types::CapeArrayLong& _indices); 00117 00119 const Common::Types::CapeArrayLong& GetVariablesIndices() const; 00120 00122 const CapeMeasuredPoint& GetMeasuredPoint(Common::Types::CapeLong _idx) const 00123 throw (Common::Error::ECapeUnknown); 00124 00126 Common::Types::CapeLong GetMeasuredPointsCount() const; 00127 00129 inline Common::Types::CapeLong GetNumVars() const { return arrStateVarsIndices.size(); } 00130 00135 void AddMeasuredPoint(Common::Types::CapeDouble _time, Common::Types::CapeDouble _variance, const Common::Types::CapeArrayDouble& _values) 00136 throw (Common::Error::ECapeInvalidArgument); 00137 00141 void AddMeasuredPoint(Common::Types::CapeDouble _time, const CapeMeasuredValues& _values) 00142 throw (Common::Error::ECapeInvalidArgument); 00143 00145 void load(const Common::Types::CapeURL& strFileName) 00146 throw (Common::Error::ECapeUnknown); 00147 00148 #ifndef SWIG 00149 00150 friend std::istream& operator>>(std::istream& is, CapeMeasuredData& mdExpDat); 00152 friend std::ostream& operator<<(std::ostream& os, CapeMeasuredData& mdExpDat); 00153 #endif 00154 00155 protected: 00157 void AddMeasuredPoint(const CapeMeasuredPoint& mpValue) 00158 throw (Common::Error::ECapeInvalidArgument); 00159 00160 protected: 00161 Common::Types::CapeArrayLong arrStateVarsIndices; 00162 00163 private: 00164 CapeMeasuredPoints arrMeasuredPoints; 00165 }; 00166 00167 #ifndef SWIG 00168 00169 std::istream& operator>>(std::istream& is, CapeMeasuredData& mdExpDat); 00171 std::ostream& operator<<(std::ostream& os, CapeMeasuredData& mdExpDat); 00172 #endif 00173 } 00174 } 00175 00176 #endif //CAPE_NLP_DATA_H