38#ifndef RACK_PRODUCT_OP
39#define RACK_PRODUCT_OP "ProductOP"
49#include <drain/RegExp.h>
50#include <drain/util/SmartMap.h>
51#include <drain/util/TreeOrdered.h>
54#include "data/DataSelector.h"
56#include "data/ODIMPath.h"
57#include "data/ODIMPathTools.h"
58#include "data/QuantityMap.h"
65#include "ProductBase.h"
77template <
class MS,
class MD>
97 std::cerr <<
'#' << __FUNCTION__ <<
" copy ct " << product.
getName() << this->dataSelector <<
'\n';
117 if (!
odim.quantity.empty())
118 return odim.quantity;
120 return inputQuantity;
151 mout.unimplemented(__FUNCTION__);
183 mout.
debug(
"final dstData: " , dstData );
250template <
class MS,
class MD>
252 const std::string quantity,
const std::string type)
const {
256 if (dstData.odim.quantity.empty())
257 dstData.odim.quantity = quantity;
260 dstData.odim.type = type;
262 const std::string & qty = quantity.empty() ? dstData.odim.quantity : quantity;
265 mout.
warn(
"No quantity in metadata or as argument" );
270 dstData.odim.updateValues(targetEncoding);
272 dstData.odim.updateValues(targetEncoding);
274 dstData.data.setScaling(odim.scaling);
303 // dst.odim.product = odim.product; ?
307template <
class MS,
class MD>
310 ProductBase::applyODIM(dst.odim, this->odim);
311 ProductBase::applyODIM(dst.odim, inputODIM,
true);
312 ProductBase::completeEncoding(dst.odim, this->targetEncoding);
315 dst.data.setScaling(dst.odim.scaling);
321template <
class MS,
class MD>
329 mout.
debug2(
"DataSelector: ", this->dataSelector);
336 mout.debug3(
"collect the applicable paths");
337 ODIMPathList dataPaths;
343 this->dataSelector.getPaths(src, dataPaths);
344 mout.debug3(
"populate the dataset map, paths=" , dataPaths.size() );
346 for (
const ODIMPath & path: dataPaths){
347 mout.debug3(
"add: " , index ,
'\t' , path );
377 mout.
debug2(
"DataSets: " , sweeps.size() );
381 for (
const auto key: {ODIMPathElem::WHAT, ODIMPathElem::WHERE, ODIMPathElem::HOW}){
383 mout.
unimplemented(
"consider and test .data.attributes instead");
392 mout.
note(DRAIN_LOG_VAR(ProductBase::appendResults));
393 if (ProductBase::appendResults.getType() == ODIMPathElem::DATASET){
394 ODIMPathTools::getNextChild(dst, parent);
397 ODIMPathTools::getNextChild(dst[parent], child);
399 mout.
attention(
"storing product in path: " , parent ,
'|' , child );
400 Hi5Tree & dstProduct = dst[parent][child];
405 this->computeSingleProduct(sweeps, dstProductDataset);
408 dst[
"what"].data.attributes[
"object"] = this->odim.object;
409 dstProduct[
"what"].data.attributes[
"product"] = odim.product;
410 dstProduct[
"what"].data.attributes[
"prodpar"] = odim.prodpar;
412 ProductBase::setRackVersion(dstProduct[
"how"].data.attributes);
419template <
class MS,
class MD>
423 mout.debug3(
"start" );
426 mout.
warn(
"no data" );
429 for (
const auto & entry: src) {
430 mout.debug3(
"calling processDataSet for elev=", entry.first,
" #datasets=", entry.second.size());
431 processDataSet(entry.second, dstProduct);
445template <
class MS,
class MD>
451 mout.
debug(
"start" );
455 mout.
debug(
"target quantity: " , odim.quantity );
458 const std::string & quantity = !odim.quantity.empty() ? odim.quantity : srcData.odim.quantity;
460 dstData.odim.quantity = quantity;
469 this->initDst(srcData.odim, dstData);
472 processData(srcData, dstData);
virtual const std::string & getName() const
Return the name of an instance.
Definition BeanLike.h:82
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 & debug(const TT &... args)
Debug information.
Definition Log.h:666
Logger & note(const TT &... args)
For top-level information.
Definition Log.h:489
Logger & attention(const TT &... args)
Possible error, but execution can continue. Special type of Logger::warn().
Definition Log.h:476
Logger & unimplemented(const TT &... args)
Feature to be done. Special type of Logger::note().
Definition Log.h:511
Logger & debug2(const TT &... args)
Debug information.
Definition Log.h:676
A map of radar data, indexed by quantity code (DBZH, VRAD, etc).
Definition Data.h:1215
Data structure consisting of plain data and an optional quality data.
Definition Data.h:1146
ODIM metadata (quantity, gain, offset, undetect, nodata, date, time)
Definition ODIM.h:79
Essential class for storing radar data.
Definition Data.h:300
Base class for radar data processors. Input can be in polar or Cartesian coordinates.
Definition ProductBase.h:82
Definition QuantityMap.h:50
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
Polar and Cartesian products.
Definition RadarProductOp.h:78
void setEncodingNEW(PlainData< dst_t > &dstData, const std::string quantity="", const std::string type="") const
Sets applicable encoding parametes (type, gain, offset, undetect, nodata) for this product.
Definition RadarProductOp.h:251
DstType< MD > dst_t
Type of output, that is, destination.
Definition RadarProductOp.h:86
virtual void processH5(const Hi5Tree &src, Hi5Tree &dst) const
Definition RadarProductOp.h:322
SrcType< MS const > src_t
Type of input, that is, source.
Definition RadarProductOp.h:83
RadarProductOp(const std::string &name, const std::string &description)
Default constructor.
Definition RadarProductOp.h:91
virtual void computeSingleProduct(const DataSetMap< src_t > &srcSweeps, DataSet< dst_t > &dstProduct) const
Traverse the data applicable for this product and create new, processed data (volume or polar product...
Definition RadarProductOp.h:420
virtual void setEncoding(const ODIM &srcODIM, PlainData< dst_t > &dstData) const
Sets applicable encoding parametes (type, gain, offset, undetect, nodata) for this product.
Definition RadarProductOp.h:308
MD odim
The default data parameters for encoding output (the product).
Definition RadarProductOp.h:101
virtual const std::string & getOutputQuantity(const std::string &inputQuantity="") const
Returns the primary output quantity (ODIM what:quantity , like DBZH)
Definition RadarProductOp.h:116
virtual void processDataSet(const DataSet< src_t > &srcSweep, DataSet< DstType< MD > > &dstProduct) const
Process the data of a single sweep and and write the result to given product.
Definition RadarProductOp.h:446
virtual void initDst(const MS &srcODIM, PlainData< dst_t > &dstData) const
initialises dst data by setting suitable ODIM metadata and geometry.
Definition RadarProductOp.h:176
virtual void setGeometry(const MS &srcODIM, PlainData< dst_t > &dstData) const =0
Sets automagically the suitable dst parameters.
Namespace for images and image processing tools.
Definition AccumulationArray.cpp:45
Definition DataSelector.cpp:44
QuantityMap & getQuantityMap()
Definition QuantityMap.cpp:279
Writable data type.
Definition Data.h:120
Read-only data type.
Definition Data.h:110