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
00032
00033 class NcFile;
00034 class NcError;
00035 class NcDim;
00036 class NcVar;
00037
00038 namespace MetNoFimex
00039 {
00040
00041 class XMLDoc;
00042
00043 class NetCDF_CDMWriter : public CDMWriter
00044 {
00045 typedef std::map<std::string, NcDim*> NcDimMap;
00046 typedef std::map<std::string, NcVar*> NcVarMap;
00047
00048 public:
00055 NetCDF_CDMWriter(const boost::shared_ptr<CDMReader> cdmReader, const std::string& outputFile, std::string configFile = "", int version = 3);
00056 virtual ~NetCDF_CDMWriter();
00058 const std::string& getVariableName(const std::string& varName) const;
00060 const std::string& getDimensionName(const std::string& dimName) const;
00062 const std::string& getAttributeName(const std::string& varName, const std::string& attName) const;
00068 const CDMAttribute& getAttribute(const std::string& varName, const std::string& attName) const throw(CDMException);
00069
00070
00071
00072 private:
00073 void init() throw(CDMException);
00074 void initFillRenameDimension(std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00075 void initFillRenameVariable(std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00076 void initFillRenameAttribute(std::auto_ptr<XMLDoc>& doc) throw(CDMException);
00078 void testVariableExists(const std::string& varName) throw(CDMException);
00079
00080 NcDimMap defineDimensions();
00081 NcVarMap defineVariables(const NcDimMap& dimMap);
00082 void writeAttributes(const NcVarMap& varMap);
00083 void writeData(const NcVarMap& varMap);
00084 double getOldAttribute(const std::string& varName, const std::string& attName, double defaultValue) const;
00085 double getNewAttribute(const std::string& varName, const std::string& attName, double defaultValue) const;
00086 std::auto_ptr<NcFile> ncFile;
00087 std::auto_ptr<NcError> ncErr;;
00088 std::map<std::string, std::string> variableNameChanges;
00089 std::map<std::string, CDMDataType> variableTypeChanges;
00090 std::map<std::string, unsigned int> variableCompression;
00091 std::map<std::string, std::string> dimensionNameChanges;
00092 std::map<std::string, std::map<std::string, std::string> > attributeNameChanges;
00093 CDM::StrAttrVecMap attributes;
00094 };
00095
00096 }
00097
00098 #endif