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 );
251template <
class MS,
class MD>
256 if (dstData.odim.quantity.empty()){
257 dstData.odim.quantity = quantity;
266 const std::string & qty = quantity.empty() ? dstData.odim.quantity : quantity;
269 mout.
warn(
"No quantity in metadata or as argument" );
286 dstData.data.setScaling(odim.scaling);
315 // dst.odim.product = odim.product; ?
323template <
class MS,
class MD>
326 ProductBase::applyODIM(dst.odim, this->odim);
327 ProductBase::applyODIM(dst.odim, inputODIM,
true);
328 dst.odim.completeEncoding( this->targetEncoding);
332 mout.
unimplemented<LOG_WARNING>(
"Does not set data storarge type?");
335 dst.data.setScaling(dst.odim.scaling);
341template <
class MS,
class MD>
349 mout.
debug2(
"DataSelector: ", this->dataSelector);
356 mout.debug3(
"collect the applicable paths");
357 ODIMPathList dataPaths;
363 this->dataSelector.getPaths(src, dataPaths);
364 mout.debug3(
"populate the dataset map, paths=" , dataPaths.size() );
366 for (
const ODIMPath & path: dataPaths){
367 mout.debug3(
"add: " , index ,
'\t' , path );
397 mout.
debug2(
"DataSets: " , sweeps.size() );
401 for (
const auto key: {ODIMPathElem::WHAT, ODIMPathElem::WHERE, ODIMPathElem::HOW}){
403 mout.
unimplemented(
"consider and test .data.attributes instead");
412 mout.
note(DRAIN_LOG(ProductBase::appendResults));
413 if (ProductBase::appendResults.getType() == ODIMPathElem::DATASET){
414 ODIMPathTools::getNextChild(dst, parent);
417 ODIMPathTools::getNextChild(dst[parent], child);
419 mout.
attention(
"storing product in path: " , parent ,
'|' , child );
420 Hi5Tree & dstProduct = dst[parent][child];
425 this->computeSingleProduct(sweeps, dstProductDataset);
428 dst[
"what"].data.attributes[
"object"] = this->odim.object;
429 dstProduct[
"what"].data.attributes[
"product"] = odim.product;
430 dstProduct[
"what"].data.attributes[
"prodpar"] = odim.prodpar;
432 ProductBase::setRackVersion(dstProduct[
"how"].data.attributes);
439template <
class MS,
class MD>
443 mout.debug3(
"start" );
446 mout.
warn(
"no data" );
449 for (
const auto & entry: src) {
450 mout.debug3(
"calling processDataSet for elev=", entry.first,
" #datasets=", entry.second.size());
451 processDataSet(entry.second, dstProduct);
465template <
class MS,
class MD>
471 mout.
debug(
"start" );
475 mout.
debug(
"target quantity: " , odim.quantity );
478 const std::string & quantity = !odim.quantity.empty() ? odim.quantity : srcData.odim.quantity;
480 dstData.odim.quantity = quantity;
489 this->initDst(srcData.odim, dstData);
492 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:313
Logger & warn(const TT &... args)
Possible error, but execution can continue.
Definition Log.h:431
Logger & debug(const TT &... args)
Debug information.
Definition Log.h:667
Logger & note(const TT &... args)
For top-level information.
Definition Log.h:490
Logger & attention(const TT &... args)
Possible error, but execution can continue. Special type of Logger::warn().
Definition Log.h:477
Logger & unimplemented(const TT &... args)
Feature to be done. Special type of Logger::note().
Definition Log.h:512
Logger & debug2(const TT &... args)
Debug information.
Definition Log.h:677
A map of radar data, indexed by quantity code (DBZH, VRAD, etc).
Definition Data.h:1264
Data structure consisting of plain data and an optional quality data.
Definition Data.h:1195
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
Registry for regular quantities appearing in weather radar.
Definition QuantityMap.h:67
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
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:342
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
void setEncodingNEW(PlainData< dst_t > &dstData, const std::string &quantity="", const std::string &args="") const
Sets applicable encoding parametes (type, gain, offset, undetect, nodata) for this product.
Definition RadarProductOp.h:252
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:440
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:324
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:466
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