00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef CDMREADER_H_
00025 #define CDMREADER_H_
00026
00027 #include <boost/shared_ptr.hpp>
00028 #include "fimex/CDMException.h"
00029 #include "fimex/SliceBuilder.h"
00030
00031 namespace MetNoFimex
00032 {
00033
00034 class Data;
00035 class CDM;
00036 class CDMVariable;
00037
00048 class CDMReader
00049 {
00050 public:
00051 CDMReader();
00052 virtual ~CDMReader() {}
00053
00057 virtual const CDM& getCDM() const;
00071 virtual boost::shared_ptr<Data> getDataSlice(const std::string& varName, size_t unLimDimPos) throw(CDMException) = 0;
00072
00081 virtual boost::shared_ptr<Data> getDataSlice(const std::string& varName, const SliceBuilder& sb) throw(CDMException);
00082
00092 virtual boost::shared_ptr<Data> getData(const std::string& varName) throw(CDMException);
00093
00105 virtual boost::shared_ptr<Data> getScaledDataSlice(const std::string& varName, size_t unLimDimPos) throw(CDMException);
00118 virtual boost::shared_ptr<Data> getScaledDataSliceInUnit(const std::string& varName, const std::string& unit, size_t unLimDimPos) throw(CDMException);
00119
00126 virtual boost::shared_ptr<Data> getScaledDataSlice(const std::string& varName, const SliceBuilder& sb) throw(CDMException);
00134 virtual boost::shared_ptr<Data> getScaledDataSliceInUnit(const std::string& varName, const std::string& unit, const SliceBuilder& sb) throw(CDMException);
00135
00146 virtual boost::shared_ptr<Data> getScaledData(const std::string& varName) throw(CDMException);
00158 virtual boost::shared_ptr<Data> getScaledDataInUnit(const std::string& varName, const std::string& unit) throw(CDMException);
00159
00160 protected:
00161 boost::shared_ptr<CDM> cdm_;
00168 virtual boost::shared_ptr<Data> getDataSliceFromMemory(const CDMVariable& variable, size_t unLimDimPos = 0) throw(CDMException);
00169 private:
00170 boost::shared_ptr<Data> scaleDataOf(const std::string& varName, boost::shared_ptr<Data> data, double unitScale = 1., double unitOffset = 0.) throw(CDMException);
00171 boost::shared_ptr<Data> scaleDataToUnitOf(const std::string& varName, boost::shared_ptr<Data> data, const std::string& unit)throw(CDMException);
00172 void getScaleAndOffsetOf(const std::string& varName, double& scale, double& offset);
00173 };
00174
00175 }
00176
00177 #endif