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 NETCDF_CDMWRITER_H_
00025 #define NETCDF_CDMWRITER_H_
00026
00027 #include "fimex/CDMWriter.h"
00028 #include "fimex/config.h"
00029 #include <map>
00030 #include <string>
00031 #include NETCDF_CPP_INCLUDE
00032
00033 namespace MetNoFimex
00034 {
00035 class XMLDoc;
00036
00037 class NetCDF_CDMWriter : public CDMWriter
00038 {
00039 typedef std::map<std::string, NcDim*> NcDimMap;
00040 typedef std::map<std::string, NcVar*> NcVarMap;
00041
00042 public:
00043 NetCDF_CDMWriter(const boost::shared_ptr<CDMReader> cdmReader, const std::string& outputFile);
00049 NetCDF_CDMWriter(const boost::shared_ptr<CDMReader> cdmReader, const std::string& outputFile, const std::string& configFile);
00050 virtual ~NetCDF_CDMWriter();
00052 const std::string& getVariableName(const std::string& varName) const;
00054 const std::string& getDimensionName(const std::string& dimName) const;
00056 const std::string& getAttributeName(const std::string& varName, const std::string& attName) const;
00062 const CDMAttribute& getAttribute(const std::string& varName, const std::string& attName) const throw(CDMException);
00063
00064
00065
00066 private:
00067 NcError ncErr;
00068 NcFile ncFile;
00069 void init() throw(CDMException);
00070 void initFillRenameDimension(const std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00071 void initFillRenameVariable(const std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00072 void initFillRenameAttribute(const std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00074 void testVariableExists(const std::string& varName) throw(CDMException);
00075
00076 NcDimMap defineDimensions();
00077 NcVarMap defineVariables(const NcDimMap& dimMap);
00078 void writeAttributes(const NcVarMap& varMap);
00079 void writeData(const NcVarMap& varMap);
00080 double getOldAttribute(const std::string& varName, const std::string& attName, double defaultValue) const;
00081 double getNewAttribute(const std::string& varName, const std::string& attName, double defaultValue) const;
00082 std::map<std::string, std::string> variableNameChanges;
00083 std::map<std::string, CDMDataType> variableTypeChanges;
00084 std::map<std::string, std::string> dimensionNameChanges;
00085 std::map<std::string, std::map<std::string, std::string> > attributeNameChanges;
00086 CDM::StrAttrVecMap attributes;
00087 };
00088
00089 }
00090
00091 #endif