33#include <drain/util/BeanLike.h>
35#ifndef RACK_PRECIPITATION
36#define RACK_PRECIPITATION
45 Precip(
const std::string & name =
"",
const std::string & description =
"") :
drain::BeanLike(name, description) {
94 std::map<std::string,std::string>
presets;
108 double rainRate(
double p)
const = 0;
113 SingleParamPrecip(
const std::string & name =
"",
const std::string & description =
""):
114 Precip(name,description) {
126 double rainRate(
double p1,
double p2)
const = 0;
131 DoubleParamPrecip(
const std::string & name =
"",
const std::string & description =
""):
132 Precip(name,description) {
145 PrecipZ(
const std::string & name=__FUNCTION__,
double a=200.0,
double b=1.6) :
147 parameters.link(
"a", this->a = a);
148 parameters.link(
"b", this->b = b);
154 parameters.
copyStruct(p.getParameters(), p, *
this);
169 double rainRate(
double dbz)
const {
170 return pow(aInv * pow(10.0, dbz*0.10), bInv);
191 presets[
"Marshall-Palmer"] =
"200,1.6";
213 parameters.link(
"a", a);
214 parameters.link(
"b", b);
215 presets[
"Leinonen2012"] =
"21,0.72";
219 parameters.
copyStruct(p.getParameters(), p, *
this);
226 double rainRate(
double kdp)
const {
228 r = a * ::pow(kdp, b);
242 PrecipZZDR(
double a=0.0122,
double b=0.820,
double c=-2.28) :
243 DoubleParamPrecip(__FUNCTION__,
"Precipitation rate from Z and ZDR"), a(a), b(b), c(c) {
244 parameters.link(
"a", this->a);
245 parameters.link(
"b", this->b);
246 parameters.link(
"c", this->c);
252 parameters.
copyStruct(p.getParameters(), p, *
this);
260 double rainRate(
double dbz,
double zdr)
const {
262 r = a * ::pow(dbz, b) * pow(zdr, c);
278 PrecipKDPZDR(
double a=29.7,
double b=0.890,
double c=-0.927) :
279 DoubleParamPrecip(__FUNCTION__,
"Precipitation rate from KDP and ZDR"), a(a), b(b), c(c) {
280 parameters.link(
"a", a);
281 parameters.link(
"b", b);
282 parameters.link(
"c", c);
287 parameters.
copyStruct(p.getParameters(), p, *
this);
292 double rainRate(
double kdp,
double zdr)
const {
294 r = a * ::pow(kdp, b) * ::pow(zdr, c);
Something which has a name, a description and possibly some parameters of varying type.
Definition BeanLike.h:58
void copyStruct(const ReferenceMap &m, const T &src, T &dst, extLinkPolicy policy=RESERVE)
Experimental. Copies references and values of a structure to another.
Definition ReferenceMap.h:415
char separator
Default character used for splitting input and output. See setValues.
Definition SmartMap.h:81
Definition Precipitation.h:121
Definition Precipitation.h:273
Definition Precipitation.h:206
Definition Precipitation.h:238
Definition Precipitation.h:140
virtual void updateBean() const override
Called after setParameters()
Definition Precipitation.h:160
Definition Precipitation.h:186
Definition Precipitation.h:195
Definition Precipitation.h:40
std::map< std::string, std::string > presets
Redefined such that if argument is a preset, reinvoke with its arguments.
Definition Precipitation.h:94
Definition Precipitation.h:103
Definition DataSelector.cpp:44