00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef GRIBCDMREADER_H_
00028 #define GRIBCDMREADER_H_
00029
00030 #include <vector>
00031 #include <map>
00032 #include <set>
00033 #include "boost/shared_ptr.hpp"
00034 #include "fimex/GribFileIndex.h"
00035 #include "fimex/CDMReader.h"
00036 #include "fimex/ReplaceStringObject.h"
00037
00038 namespace MetNoFimex
00039 {
00040
00041
00042 class CDM;
00043 class CDMDimension;
00044 class Data;
00045
00046 class GribCDMReader: public MetNoFimex::CDMReader
00047 {
00048 public:
00049 GribCDMReader(const std::vector<std::string>& fileNames, const std::string& configFile);
00050 virtual ~GribCDMReader();
00051 virtual boost::shared_ptr<Data> getDataSlice(const std::string& varName, size_t unLimDimPos) throw(CDMException);
00052
00053 private:
00054 std::string configFile_;
00055 std::vector<GribFileMessage> indices_;
00056 boost::shared_ptr<XMLDoc> doc_;
00057 std::string xDimName_;
00058 std::string yDimName_;
00059 std::string timeDimName_;
00060
00061 std::vector<boost::posix_time::ptime> times_;
00062
00063 std::map<std::string, std::vector<std::vector<long> > > levels_;
00071 std::map<std::string, boost::shared_ptr<ReplaceStringObject> > templateReplacementAttributes_;
00075 std::map<std::string, std::vector<GribFileMessage> > varName2gribMessages_;
00076
00080 void initSelectParameters(const std::string& select);
00085 xmlNodePtr findVariableXMLNode(const GribFileMessage& msg) const;
00086 void initAddGlobalAttributes();
00088 void initLevels(long edition, const std::map<long, std::set<long> >& levelsOfType, std::map<std::string, CDMDimension>& levelDimsOfType);
00089 std::map<std::string, CDMDimension> initAddLevelDimensions();
00090 void initAddTimeDimension();
00091 void initAddProjection(std::string& projName, std::string& coordinates);
00092 void initAddVariables(const std::string& projName, const std::string& coordinates, const std::map<std::string, CDMDimension>& levelDims);
00093
00094 };
00095
00096
00097 }
00098
00099 #endif