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 CDMEXTRACTOR_H_
00025 #define CDMEXTRACTOR_H_
00026
00027 #include <map>
00028 #include <set>
00029 #include <boost/array.hpp>
00030 #include <boost/shared_ptr.hpp>
00031
00032 #include "fimex/CDMReader.h"
00033 #include "fimex/CDMDataType.h"
00034 #include "fimex/TimeUnit.h"
00035 #include "fimex/coordSys/CoordinateAxis.h"
00036
00037 namespace MetNoFimex
00038 {
00039
00040 class CDMExtractor : public MetNoFimex::CDMReader
00041 {
00042 private:
00043 boost::shared_ptr<CDMReader> dataReader;
00044 typedef std::map<std::string, boost::array<size_t, 2> > DimChangeMap;
00045 DimChangeMap dimChanges;
00049 CDMExtractor();
00050
00051 public:
00052 CDMExtractor(boost::shared_ptr<CDMReader> dataReader);
00053 virtual ~CDMExtractor();
00054
00055 virtual boost::shared_ptr<Data> getDataSlice(const std::string& varName, size_t unLimDimPos = 0) throw(CDMException);
00056
00063 virtual void removeVariable(std::string variable);
00074 virtual void selectVariables(std::set<std::string> variables);
00083 virtual void reduceDimension(std::string dimName, size_t start, size_t length) throw(CDMException);
00092 virtual void reduceDimensionStartEnd(std::string dimName, size_t start = 0, long end = 0) throw(CDMException);
00105 virtual void reduceAxes(const std::vector<CoordinateAxis::AxisType>& types, const std::string& aUnits, double startVal, double endVal) throw(CDMException);
00115 virtual void reduceTime(const FimexTime& startTime, const FimexTime& endTime) throw(CDMException);
00116
00131 virtual void reduceVerticalAxis(const std::string& units, double startVal, double endVal) throw(CDMException);
00132
00145 virtual void reduceLatLonBoundingBox(double south, double north, double west, double east) throw(CDMException);
00146
00156 virtual void changeDataType(std::string variable, CDMDataType datatype) throw(CDMException);
00157
00158 };
00159
00160 }
00161
00162 #endif