32#ifndef DATACONVERSIONOP2_H_
33#define DATACONVERSIONOP2_H_
42#include <drain/RegExp.h>
43#include <drain/Type.h>
44#include <drain/TypeUtils.h>
45#include <drain/util/StringMatcherList.h>
47#include <drain/util/SmartMap.h>
48#include <drain/util/TreeOrdered.h>
49#include <drain/util/ValueScaling.h>
50#include <drain/util/VariableMap.h>
52#include <drain/image/Geometry.h>
53#include <drain/image/Image.h>
54#include <drain/image/ImageFrame.h>
58#include "data/ODIMPath.h"
59#include "data/Quantity.h"
60#include "data/QuantityMap.h"
63#include <product/RadarProductOp.h>
90 double undetect=0.0,
double nodata=255.0, std::string
copyGroupSuffix=
"") :
111 void processH5(
const Hi5Tree &src, Hi5Tree &dst)
const;
119 processImage(src.odim, src.data,
this->odim, dst);
154 const std::string & quantity) {
168 const PlainData<src_t> & srcData = srcDataSet.getData(quantity);
169 const EncodingODIM & odimNorm =
getQuantityMap().get(quantity).get();
171 mout.info(
"converting and adding to cache: " , quantityExt ,
" odim: " , odimNorm );
172 PlainData<dst_t> & dstDataNew = normDataSet.getData(quantityExt);
173 dstDataNew.setExcluded();
174 DataConversionOp<M> op;
178 dstDataNew.odim.importMap(srcData.odim);
179 dstDataNew.odim.importMap(odimNorm);
180 dstDataNew.odim.quantity = quantity;
182 op.processImage(srcData.odim, srcData.data, dstDataNew.odim, dstDataNew.data);
183 dstDataNew.odim.quantity = quantityExt;
184 dstDataNew.updateTree2();
185 mout.
debug(
"obtained: " , dstDataNew );
202 mout.debug(
"DataSelector: ", this->dataSelector);
206 this->dataSelector.getPaths(src,
dataPaths);
211 std::set<ODIMPathElem>
parents;
228 mout.special(
"handling: ",
parent,
" -> ", path);
258 mout.debug(
"number of layers (sub groups of DataSet): ",
srcSweep.size());
264 const std::string & quantity = entry.first;
266 if (quantity.empty()){
267 mout.warn(
"empty quantity for data, skipping");
274 mout.debug(
"quantity: ", quantity);
292 mout.info(
"already similar encoding – no need to convert (1)");
296 mout.unimplemented(
"in-place: not implemented");
297 mout.debug(
"in-place");
305 mout.info(
"using tmp data – in-place computation not possible");
310 mout.info(
"already similar encoding – no need to convert (2)");
319 mout.attention(
"srcODIM: ", srcODIM);
320 dstData.odim.quantity = quantity;
321 dstData.odim.updateLenient(srcODIM);
322 dstData.odim.completeEncoding( this->targetEncoding);
358 odim.completeEncoding( this->targetEncoding);
382 mout.warn(
"using temp image + swap");
393 mout.warn(
"same type and geometry, hence only rescaling (in-place)");
448 mout.debug(
"scaling: ", scaling);
451 Limiter::value_t limit = drain::Type::call<Limiter>(
dstOdim.type);
458 if (
static_cast<double>(*
d) !=
dstOdim.nodata){
459 mout.note(
"dstOdim.nodata=",
dstOdim.nodata,
" -> ",
static_cast<double>(*
d));
461 mout.warn(
"type conversion ",
dstOdim.type,
" ~= ", drain::Type::getTypeChar(
dstImage.getType()),
" changed the value");
484 *
d = limit( scaling.
inv(x) );
492 mout.debug3(
"finished.");
Definition CastableIterator.h:57
LogSourc e is the means for a function or any program segment to "connect" to a Log.
Definition Log.h:326
Logger & debug(const TT &... args)
Debug information.
Definition Log.h:676
void updateFromCastableMap(const drain::SmartMap< T2 > &m)
Convenience.
Definition SmartMap.h:289
Utilities related to std::type_info.
Definition Type.h:48
const std::type_info & getType() const
Deprecated! Use cast (above) instead?
Definition Type.h:104
Linear scaling and physical range for image intensities.
Definition ValueScaling.h:63
double inv(double y) const
Inverse scaling: given physically meaningful value y, returns the corresponding code value.
Definition ValueScaling.h:301
Definition Geometry.h:143
Image with static geometry.
Definition ImageFrame.h:62
Class for multi-channel digital images. Supports dynamic typing with base types (char,...
Definition Image.h:183
Class for ensuring that variable of type D remains within limits of type S.
Definition TypeUtils.h:98
Converts HDF5 data to use desired data type, scaling and encoding (ODIM gain, offset,...
Definition DataConversionOp.h:82
virtual void processDataSet(const DataSet< src_t > &srcSweep, DataSet< dst_t > &dstProduct) const
Definition DataConversionOp.h:250
virtual void processH5(const Hi5Tree &src, Hi5Tree &dst) const
Ensures data to be in standard type and scaling. Makes a converted copy if needed.
Definition DataConversionOp.h:197
std::string copyGroupSuffix
Suffix for trailing path element ("/data") for storing the original.
Definition DataConversionOp.h:147
void traverseImageFrame(const ODIM &odimSrc, const drain::image::ImageFrame &src, const ODIM &odimDst, drain::image::ImageFrame &dst) const
Definition DataConversionOp.h:422
void setGeometry(const M &srcODIM, PlainData< dst_t > &dstData) const
Sets automagically the suitable dst parameters.
Definition DataConversionOp.h:135
A map of radar data, indexed by quantity code (DBZH, VRAD, etc).
Definition Data.h:1293
Structure for data storage type, scaling and marker codes. Does not contain quantity.
Definition EncodingODIM.h:70
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:175
std::string type
This is non-standard (not in ODIM), but a practical means of handling storage type of datasets.
Definition EncodingODIM.h:157
DOC: Add class description.
Definition ODIMPath.h:82
static const group_t DATASET
First level group, /dataset + digit .
Definition ODIMPath.h:106
static const group_t ROOT
Definition ODIMPath.h:102
static const group_t DATA
Second level group, /data + digit .
Definition ODIMPath.h:109
ODIM metadata (quantity, gain, offset, undetect, nodata, date, time)
Definition ODIM.h:79
drain::ReferenceMap allowedEncoding
Defines which encoding parameters can be changed by the user from command line.
Definition ProductBase.h:206
Polar and Cartesian products.
Definition RadarProductOp.h:78
M odim
The default data parameters for encoding output (the product).
Definition RadarProductOp.h:101
Definition AltitudeOp.cpp:42
QuantityMap & getQuantityMap()
Definition QuantityMap.cpp:282
Writable data type.
Definition Data.h:117
Read-only data type.
Definition Data.h:107