Diana  0.8.3
CapeNLPData.hpp
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