31#ifndef ODIM_QUANTITY_MAP
32#define ODIM_QUANTITY_MAP
35#include <drain/Type.h>
41#include <drain/util/ReferenceMap.h>
54 typedef std::map<std::string, Quantity> map_t;
66 QuantityMap(
const std::initializer_list<std::pair<std::string, Quantity> > & inits);
81 QuantityMap & operator=(
const std::initializer_list<std::pair<std::string, Quantity> > & inits){
86 void assign(
const std::initializer_list<std::pair<std::string, Quantity> > & inits);
93 bool hasKey(
const std::string & key)
const {
94 return find(key) != end();
115 iterator
retrieve(
const std::string & key);
125 const_iterator
retrieve(
const std::string & key)
const;
127 const Quantity & get(
const std::string & key)
const;
129 Quantity & get(
const std::string & key);
160 const std::string & q = !quantity.empty() ? quantity : dstData.odim.quantity;
164 if (dstData.odim.quantity.empty()){
166 dstData.odim.quantity = q;
169 mout.
warn(
"quantity neither given nor set already" );
174 mout.
warn(
"conf for " , quantity ,
"[" , dstData.odim.type ,
"] not found" );
177 dstData.data.setType(dstData.odim.type);
180 dstData.data.setScaling(dstData.odim.scaling);
183 if ((q ==
"QIND") || (q ==
"PROB")){
186 dstData.data.getScaling().setPhysicalRange(0.0, 1.0);
188 else if (q ==
"CLASS"){
196 if (dstData.data.getName().empty())
197 dstData.data.setName(dstData.odim.quantity);
199 mout.
debug2(
"final scaling for " , dstData.odim.quantity ,
'[' , quantity ,
']' , dstData.data.getScaling() );
208 const Quantity & q = get(odim.quantity);
211 mout.
warn(
"no default type for quantity:" , odim.quantity );
218 std::ostream &
toStream(std::ostream & ostr)
const;
224std::ostream & operator<<(std::ostream & ostr,
const QuantityMap & map){
225 return map.toStream(ostr);
LogSourc e is the means for a function or any program segment to "connect" to a Log.
Definition Log.h:312
Logger & warn(const TT &... args)
Possible error, but execution can continue.
Definition Log.h:430
Logger & debug2(const TT &... args)
Debug information.
Definition Log.h:676
T getTypeMax() const
Returns the maximum value supported by the current storage type.
Definition ImageConf.h:281
void setPhysicalRange(const Range< double > &range, bool rescale=false)
Sets the supported range for physical values and optionally adjusts the scaling for maximal resolutio...
Definition ImageFrame.h:106
Class for multi-channel digital images. Supports dynamic typing with base types (char,...
Definition Image.h:184
Structure for data storage type, scaling and marker codes. Does not contain quantity.
Definition EncodingODIM.h:75
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).
Definition EncodingODIM.h:173
ODIM metadata (quantity, gain, offset, undetect, nodata, date, time)
Definition ODIM.h:79
std::string quantity
dataX/what (obligatory)
Definition ODIM.h:181
Essential class for storing radar data.
Definition Data.h:300
Definition QuantityMap.h:50
bool setQuantityDefaults(PlainData< D > &dstData, const std::string &quantity="", const std::string &values="") const
Definition QuantityMap.h:156
bool setQuantityDefaults(EncodingODIM &dst, const std::string &quantity, const std::string &values="") const
Sets default values of given quantity without assigning the quantity. Optionally overrides with user ...
Definition QuantityMap.cpp:207
bool isNormalized(const M odim) const
Checks if data.
Definition QuantityMap.h:207
QuantityMap()
Default constructor.
Definition QuantityMap.cpp:39
bool hasQuantity(const std::string &key) const
Checks if an exact match or a variant, is found.
Definition QuantityMap.h:102
bool hasKey(const std::string &key) const
Checks if an exact match, without checking variants, is found.
Definition QuantityMap.h:93
std::ostream & toStream(std::ostream &ostr) const
Output.
Definition QuantityMap.cpp:99
iterator retrieve(const std::string &key)
Tries to find a quantity, first by exact match, or then among variants.
Definition QuantityMap.cpp:145
Structure for defining quantity.
Definition Quantity.h:55
const EncodingODIM & get(char typecode='\0') const
Retrieve the scaling for a given storage type.
Definition Quantity.cpp:168
char defaultType
Default storage type.
Definition Quantity.h:76
Definition DataSelector.cpp:44
QuantityMap & getQuantityMap()
Definition QuantityMap.cpp:279