Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | List of all members
ODIM Class Reference

ODIM metadata (quantity, gain, offset, undetect, nodata, date, time) More...

#include <ODIM.h>

Inheritance diagram for ODIM:
Inheritance graph
[legend]
Collaboration diagram for ODIM:
Collaboration graph
[legend]

Public Types

enum  Version {
  KILOMETRES = 1 , RACK_EXTENSIONS = 8 , ODIM_2_2 = 16 | KILOMETRES , ODIM_2_3 = 32 | KILOMETRES ,
  ODIM_2_4 = 64
}
 
typedef drain::EnumFlagger< drain::MultiFlagger< Version > > VersionFlagger
 
typedef std::set< std::string > nameSet
 
- Public Types inherited from EncodingODIM
enum  ExplicitSetting { NONE =0 , SCALING =1 , RANGE =2 }
 
typedef ODIMPathElem::group_t group_t
 
- Public Types inherited from ReferenceMap
enum  extLinkPolicy { LINK , RESERVE , SKIP , ERROR }
 
typedef std::map< std::string, std::string > unitmap_t
 
- Public Types inherited from SmartMap< Reference >
typedef SmartMap< Referencesmap_t
 
typedef std::map< std::string, Referencemap_t
 
typedef map_t::key_type key_t
 
typedef map_t::mapped_type value_t
 
typedef map_t::value_type entry_t
 
typedef std::list< std::string > keylist_t
 
typedef map_t::iterator iterator
 Needed?
 
typedef map_t::const_iterator const_iterator
 

Public Member Functions

 ODIM (group_t initialize=ODIMPathElem::ALL_LEVELS)
 
 ODIM (const ODIM &odim)
 
 ODIM (const drain::image::Image &image, const std::string &quantity="")
 
 ODIM (drain::image::Image &image, const std::string &quantity="")
 
virtual void setGeometry (size_t cols, size_t rows)
 Sets number of columns (nbins) and number of rows (nrays). Does not change resolution.
 
virtual void setGeometry (const drain::image::AreaGeometry &g)
 
virtual const drain::image::AreaGeometrygetGeometry () const
 
virtual void adjustGeometry (size_t cols, size_t rows)
 Change geometry and adjust spatial resolution respectively.
 
virtual void updateLenient (const ODIM &odim)
 Updates object, quantity, product and time information. More...
 
bool getTime (drain::Time &t) const
 Retrieves the stored time. Returns true if successful. // consider: throws error if fail.
 
bool getStartTime (drain::Time &t) const
 Retrieves the start time. Returns true if successful. // consider: throws error if fail.
 
bool getEndTime (drain::Time &t) const
 Retrieves the end time. Returns true if successful. // consider: throws error if fail.
 
bool setTime (const drain::Time &t)
 Sets date and time . Returns true if successful, throws error if fail.
 
bool setTime (const std::string &s)
 Sets date and time given a string of Returns true if successful, throws error if fail.
 
virtual const drain::image::CoordinatePolicygetCoordinatePolicy () const
 Returns recommended coordinate policy. Redefined in PolarODIM.
 
bool distinguishNodata (const std::string &quantityPrefix="")
 If nodata==undetect, set nodata=maxValue (hoping its not nodata...) More...
 
- Public Member Functions inherited from EncodingODIM
 EncodingODIM (group_t initialize=ODIMPathElem::ALL_LEVELS)
 Default constructor.
 
 EncodingODIM (const EncodingODIM &odim)
 Copy constructor.
 
 EncodingODIM (char type, double scale=1.0, double offset=0.0, double nodata=NAN, double undetect=NAN, const drain::Range< double > &range={0, 0})
 Scale driven encoding for brace inits. RISK: group_t confusion?
 
 EncodingODIM (char type, const drain::Range< double > &range, double scale=0.0, double offset=0.0, double nodata=NAN, double undetect=NAN)
 Range-driven encoding for brace inits.
 
 EncodingODIM (const drain::image::Image &image)
 
 EncodingODIM (drain::image::Image &image)
 
EncodingODIMoperator= (const EncodingODIM &odim)
 
 operator drain::ValueScaling & ()
 
 operator const drain::ValueScaling & () const
 
EncodingODIMsetScaling (double gain, double offset=NAN)
 
EncodingODIMsetScaling (double gain, double offset, double undetect, double nodata)
 
bool isSet () const
 
void setRange (double min, double max)
 
template<class T >
void setTypeDefaults (const T &type, const std::string &values="")
 Sets gain=1, offset=0, undetect=type_min, nodata=type_max. Note: sets type only if unset.
 
void setTypeDefaults ()
 
bool isValue (double x) const
 Returns true for a valid measurement value, false for undetect and nodata marker values.
 
double scaleForward (double x) const
 Converts a quantity from storage scale: y = offset + gain*y .
 
double scaleInverse (double y) const
 Converts a quantity to storage scale: x = (y-offset)/gain .
 
double getMin () const
 Returns the minimum physical value that can be returned using current storage type, gain and offset.
 
double getMax () const
 Returns the minimum physical value that can be returned using current storage type, gain and offset.
 
double operator() (double y) const
 Functor (why inverse?)
 
void clear ()
 Resets the values. More...
 
virtual void updateLenient (const EncodingODIM &odim)
 Todo: keep the function, but move implementation to (future single-exec) register ? More...
 
void grantShortKeys (drain::ReferenceMap &ref)
 Creates a short alias (attrib) for each (group):(attrib). Example: "gain" => "what:gain".
 
void addShortKeys ()
 Creates a short alias (attrib) for each (group):(attrib). Example: "gain" => "what:gain".
 
void copyFrom (const drain::image::Image &data)
 Copies image attributes and type . Experimental. More...
 
- Public Member Functions inherited from ReferenceMap
 ReferenceMap (char separator=',')
 Default constructor. More...
 
 ReferenceMap (const ReferenceMap &rmap)
 Copy constructor copies only the separators; does not copy the items. More...
 
template<class F >
Referencelink (const std::string &key, Range< F > &x, const std::string &unit=std::string())
 
template<class F >
Referencelink (const std::string &key, F &x, const std::string &unit=std::string())
 Associates a map entry with a variable. More...
 
Referencelink (const std::string &key, Reference &x, const std::string &unit=std::string())
 
Referencelink (const std::string &key, void *ptr, const std::type_info &type, size_t count, const std::string &unit=std::string())
 For arrays.
 
Referencelink (const std::string &key, void *ptr, const std::type_info &type, const std::string &unit=std::string())
 Convenience: create a reference to a scalar. For arrays, use the.
 
template<class F >
ReferencereferenceTop (const std::string &key, F &x, const std::string &unit=std::string())
 Associates a map entry with a variable, adding key in the beginning of key list. More...
 
void append (ReferenceMap &rMap, bool replace=true)
 Adopts the references of r. If replace==false, only new entries are appended.
 
void delink (const std::string &key)
 Removes an entry from the map.
 
void reserve (const std::string &key)
 Adds a null entry, expecting the link later. More...
 
template<class T >
void copyStruct (const ReferenceMap &m, const T &src, T &dst, extLinkPolicy policy=RESERVE)
 Experimental. Copies references and values of a structure to another. More...
 
template<class T >
ReferenceMapoperator= (const SmartMap< T > &v)
 Import map, adopting the element types.
 
virtual mapped_type & operator[] (const std::string &key)
 Return element associated with key.
 
virtual const mapped_type & operator[] (const std::string &key) const
 Calling unreferenced key throws an exception.
 
const unitmap_t & getUnitMap () const
 Returns measurement unit information of the actual map entries.
 
- Public Member Functions inherited from SmartMap< Reference >
 SmartMap (char separator='\0', char arraySeparator=':')
 
 SmartMap (const SmartMap &smap)
 
bool hasKey (const std::string &key) const
 
std::string get (const std::string &key, const std::string &defaultValue) const
 Retrieves a value, or default value if value is unset. More...
 
std::string get (const std::string &key, const char *defaultValue) const
 
T2 get (const std::string &key, const T2 &defaultValue) const
 Retrieves a value, if set, else returns the given default value. More...
 
virtual const keylist_t & getKeyList () const
 Derived versions may produce an ordered set of keys.
 
const map_t & getMap () const
 
void exportMap (std::map< std::string, T2 > &m) const
 Copies the contents to another map.
 
void importEntries (const std::string &entries, char assignmentSymbol='=', char separatorSymbol=0)
 Assigns a value to given key; if the entry does not exist, tries to create it with directly with operator[]. More...
 
void importEntries (const std::list< std::string > &entries, char assignmentSymbol='=')
 
void importMap (const std::map< std::string, S > &m)
 Assign values from a map, overriding existing entries. More...
 
void importCastableMap (const drain::SmartMap< T2 > &m)
 Assign values from a map, possibly extending the map. More...
 
void updateFromMap (const std::map< std::string, T2 > &m)
 Assign values from a map. Updates existing entries only. More...
 
void updateFromCastableMap (const drain::SmartMap< T2 > &m)
 Convenience.
 
void setValues (const std::string &entries, char assignmentSymbol='=', char separatorSymbol=0)
 Sets values. If strictness==STRICTLY_CLOSED, throws exception if tries to assign a non-existing entry.
 
void setValues (const char *entries, char assignmentSymbol='=', char separatorSymbol=0)
 
void setValuesSEQ (const S &sequence)
 
void updateValues (const std::string &entries, char assignmentSymbol='=', char separatorSymbol=0)
 Sets applicable values ie. modifies existing entries only. In ordered maps, skips extra entries silently.
 
void getKeys (std::ostream &ostr) const
 
std::string getKeys () const
 Convenience function for std::string output.
 
void getValues (std::ostream &ostr) const
 Dumps the values.
 
std::string getValues () const
 Convenience function for std::string output.
 
std::ostream & toStream (std::ostream &ostr, char equal='=', char startChar='{', char endChar='}', char separatorChar=',') const
 Note: parameters discarded.
 
std::string toStr (char equal='=', char start=0, char end=0, char separator=0) const
 
void dump (std::ostream &ostr=std::cout) const
 Write map as a JSON code. More...
 

Static Public Member Functions

template<group_t G, class T >
static void updateH5AttributeGroups (const T &odim, Hi5Tree &dst)
 Write ODIM metadata to WHAT, WHERE and HOW groups. More...
 
template<group_t G, class T >
static void updateH5AttributeGroups (const T &odim, const Hi5Tree &dst)
 
static bool getTime (drain::Time &t, const std::string &dateStr, const std::string &timeStr)
 Retrieves the stored time. Returns true if successful, throws error if fail.
 
- Static Public Member Functions inherited from EncodingODIM
static bool haveSimilarEncoding (const EncodingODIM &odim1, const EncodingODIM &odim2)
 Checks if data encoding is similar (storage type, gain, offset, undetect and nodata are the same).
 
static void checkType (Hi5Tree &dst)
 Traverses recursively subtrees and checks the types of PolarODIM variables. More...
 

Public Attributes

drain::image::AreaGeometry area
 
drain::Point2D< double > resolution
 Spatial resolution in metres. More...
 
std::string object
 
std::string version
 
std::string date
 Nominal time, in dateformat.
 
std::string time
 Nominal time, in timeformat.
 
std::string source
 
std::string quantity
 dataX/what (obligatory)
 
std::string product
 
std::string prodpar
 
std::string startdate
 
std::string starttime
 
std::string enddate
 
std::string endtime
 
std::vector< double > angles
 
long ACCnum = 0
 
double NI
 
- Public Attributes inherited from EncodingODIM
drain::ValueScalingscaling
 
const drain::ValueScalingscalingConst
 
drain::ValueScaling ownScaling
 
int explicitSettings
 
std::string type
 This is non-standard (not in ODIM), but a practical means of handling storage type of datasets. More...
 
double nodata
 data[n]/what (obligatory)
 
double undetect
 
- Public Attributes inherited from SmartMap< Reference >
char separator
 Default character used for splitting input and output. See setValues.
 
char arraySeparator
 Default separator character for array elements (std::vector's)
 

Static Public Attributes

static VersionFlagger versionFlagger
 
static const nameSet timeKeys = {"what:time", "what:starttime", "what:endtime"}
 
static const nameSet dateKeys = {"what:date", "what:startdate", "what:enddate"}
 
static const nameSet locationKeys = {"where:site", "where:src", "where:lat", "where:lon", "PLC", "NOD", "WMO"}
 
static const std::string dateformat
 Applied 8-digit date format, "%Y%m%d".
 
static const std::string timeformat
 Applied 6-digit date format, "%H%M%S".
 
- Static Public Attributes inherited from EncodingODIM
static const drain::FlagResolver::dict_t settingDict
 
static const ODIMPathElemSeq & attributeGroups
 Copies contents of this to a h5 group. More...
 

Protected Member Functions

void copyTo (const std::list< std::string > &keys, Hi5Tree &dst) const
 
template<class T >
void initFromMap (const std::map< std::string, T > &m)
 
virtual void initFromImage (const drain::image::Image &img)
 
virtual void initFromImage (const drain::image::Image &img, const std::string &quantity)
 

Additional Inherited Members

- Static Protected Member Functions inherited from EncodingODIM
static void checkType (Hi5Tree &dst, EncodingODIM &odim)
 
static const ODIMPathElemSeq & getAttributeGroups ()
 
- Protected Attributes inherited from ReferenceMap
unitmap_t unitMap
 Creating a common segment for. More...
 
- Protected Attributes inherited from SmartMap< Reference >
std::list< std::string > keyList
 Assigns values from std::string of type "value,value2,...valueN". More...
 

Detailed Description

ODIM metadata (quantity, gain, offset, undetect, nodata, date, time)

Within each ODIM class, each variable should have

  1. name
  2. type
  3. group/name
  4. dataset/group/name

The scope for variables is "down to the data array". Ie.

Common interface:

  1. operator[](toStr)
  1. native variables (double, long int, std::string)

Typically used in creating and writing a product. See also: LinearScaling (could be used as base class?)

Member Enumeration Documentation

◆ Version

enum Version
Enumerator
ODIM_2_3 

ODIM v2.2

ODIM_2_4 

ODIM v2.3

Member Function Documentation

◆ distinguishNodata()

bool distinguishNodata ( const std::string &  quantityPrefix = "")

If nodata==undetect, set nodata=maxValue (hoping its not nodata...)

This oddity is needed because some manufactures do not distinguish between undetect and nodata (esp. with VRAD).

Parameters
quantity- set only if quantity starts with this string. So "VRAD" covers "VRADH" and "VRADV", for example.

◆ updateH5AttributeGroups()

static void updateH5AttributeGroups ( const T &  odim,
Hi5Tree &  dst 
)
inlinestatic

Write ODIM metadata to WHAT, WHERE and HOW groups.

Template Parameters
G- group selector (number)
T- ODIM class

Examples of usage:

- ODIM::copyToH5<ODIMPathElem::ROOT>(odim, resources.inputHi5);
- ODIM::copyToH5<ODIMPathElem::DATASET>(odim, resources.inputHi5(dataSetPath));
- ODIM::copyToH5<ODIMPathElem::DATA>(odim, dst);

relevant for data level, eg. /dataset2, data4, and root.

◆ updateLenient()

void updateLenient ( const ODIM odim)
virtual

Updates object, quantity, product and time information.

Fills empty values. Updates time variables.

Member Data Documentation

◆ object

std::string object

/what (obligatory) Data object, for example "PVOL" or "COMP"

◆ resolution

drain::Point2D<double> resolution

Spatial resolution in metres.

rscale for polar data xscale, yscale for Cartesian data?


The documentation for this class was generated from the following files: