Commit 84f82367 authored by Thibault Hallouin's avatar Thibault Hallouin
Browse files

propagate templates to determinist Evaluator class

Showing with 31 additions and 19 deletions
+31 -19
...@@ -12,12 +12,13 @@ namespace evalhyd ...@@ -12,12 +12,13 @@ namespace evalhyd
{ {
namespace determinist namespace determinist
{ {
template <class D2, class B2>
class Evaluator class Evaluator
{ {
private: private:
// members for input data // members for input data
const xt::xtensor<double, 2>& q_obs; const D2& q_obs;
const xt::xtensor<double, 2>& q_prd; const D2& q_prd;
xt::xtensor<bool, 3> t_msk; xt::xtensor<bool, 3> t_msk;
const std::vector<xt::xkeep_slice<int>>& b_exp; const std::vector<xt::xkeep_slice<int>>& b_exp;
...@@ -43,9 +44,9 @@ namespace evalhyd ...@@ -43,9 +44,9 @@ namespace evalhyd
public: public:
// constructor method // constructor method
Evaluator(const xt::xtensor<double, 2>& obs, Evaluator(const D2& obs,
const xt::xtensor<double, 2>& prd, const D2& prd,
const xt::xtensor<bool, 2>& msk, const B2& msk,
const std::vector<xt::xkeep_slice<int>>& exp) : const std::vector<xt::xkeep_slice<int>>& exp) :
q_obs{obs}, q_prd{prd}, b_exp{exp} q_obs{obs}, q_prd{prd}, b_exp{exp}
{ {
...@@ -111,7 +112,8 @@ namespace evalhyd ...@@ -111,7 +112,8 @@ namespace evalhyd
// \assign mean_obs: // \assign mean_obs:
// Mean observed streamflow. // Mean observed streamflow.
// shape: (subsets, samples, series, 1) // shape: (subsets, samples, series, 1)
void Evaluator::calc_mean_obs() template <class D2, class B2>
void Evaluator<D2, B2>::calc_mean_obs()
{ {
mean_obs = xt::zeros<double>(mean_dims); mean_obs = xt::zeros<double>(mean_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -137,7 +139,8 @@ namespace evalhyd ...@@ -137,7 +139,8 @@ namespace evalhyd
// \assign mean_prd: // \assign mean_prd:
// Mean predicted streamflow. // Mean predicted streamflow.
// shape: (subsets, samples, series, 1) // shape: (subsets, samples, series, 1)
void Evaluator::calc_mean_prd() template <class D2, class B2>
void Evaluator<D2, B2>::calc_mean_prd()
{ {
mean_prd = xt::zeros<double>(mean_dims); mean_prd = xt::zeros<double>(mean_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -166,8 +169,8 @@ namespace evalhyd ...@@ -166,8 +169,8 @@ namespace evalhyd
// \assign quad_err: // \assign quad_err:
// Quadratic errors between observations and predictions. // Quadratic errors between observations and predictions.
// shape: (series, time) // shape: (series, time)
template <class D2, class B2>
void Evaluator::calc_quad_err() void Evaluator<D2, B2>::calc_quad_err()
{ {
quad_err = xt::square(q_obs - q_prd); quad_err = xt::square(q_obs - q_prd);
} }
...@@ -183,7 +186,8 @@ namespace evalhyd ...@@ -183,7 +186,8 @@ namespace evalhyd
// \assign quad_obs: // \assign quad_obs:
// Quadratic errors between observations and mean observation. // Quadratic errors between observations and mean observation.
// shape: (subsets, samples, series, time) // shape: (subsets, samples, series, time)
void Evaluator::calc_quad_obs() template <class D2, class B2>
void Evaluator<D2, B2>::calc_quad_obs()
{ {
quad_obs = xt::zeros<double>(inter_dims); quad_obs = xt::zeros<double>(inter_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -210,7 +214,8 @@ namespace evalhyd ...@@ -210,7 +214,8 @@ namespace evalhyd
// \assign quad_prd: // \assign quad_prd:
// Quadratic errors between predictions and mean prediction. // Quadratic errors between predictions and mean prediction.
// shape: (subsets, samples, series, time) // shape: (subsets, samples, series, time)
void Evaluator::calc_quad_prd() template <class D2, class B2>
void Evaluator<D2, B2>::calc_quad_prd()
{ {
quad_prd = xt::zeros<double>(inter_dims); quad_prd = xt::zeros<double>(inter_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -249,7 +254,8 @@ namespace evalhyd ...@@ -249,7 +254,8 @@ namespace evalhyd
// \assign r_pearson: // \assign r_pearson:
// Pearson correlation coefficients. // Pearson correlation coefficients.
// shape: (subsets, samples, series) // shape: (subsets, samples, series)
void Evaluator::calc_r_pearson() template <class D2, class B2>
void Evaluator<D2, B2>::calc_r_pearson()
{ {
// calculate error in timing and dynamics $r_{pearson}$ // calculate error in timing and dynamics $r_{pearson}$
// (Pearson's correlation coefficient) // (Pearson's correlation coefficient)
...@@ -298,7 +304,8 @@ namespace evalhyd ...@@ -298,7 +304,8 @@ namespace evalhyd
// \assign alpha: // \assign alpha:
// Alphas, ratios of standard deviations. // Alphas, ratios of standard deviations.
// shape: (subsets, samples, series) // shape: (subsets, samples, series)
void Evaluator::calc_alpha() template <class D2, class B2>
void Evaluator<D2, B2>::calc_alpha()
{ {
// calculate error in spread of flow $alpha$ // calculate error in spread of flow $alpha$
alpha = xt::zeros<double>(inner_dims); alpha = xt::zeros<double>(inner_dims);
...@@ -330,7 +337,8 @@ namespace evalhyd ...@@ -330,7 +337,8 @@ namespace evalhyd
// \assign bias: // \assign bias:
// Biases. // Biases.
// shape: (subsets, samples, series) // shape: (subsets, samples, series)
void Evaluator::calc_bias() template <class D2, class B2>
void Evaluator<D2, B2>::calc_bias()
{ {
// calculate $bias$ // calculate $bias$
bias = xt::zeros<double>(inner_dims); bias = xt::zeros<double>(inner_dims);
...@@ -358,7 +366,8 @@ namespace evalhyd ...@@ -358,7 +366,8 @@ namespace evalhyd
// \assign RMSE: // \assign RMSE:
// Root-mean-square errors. // Root-mean-square errors.
// shape: (series, subsets, samples) // shape: (series, subsets, samples)
void Evaluator::calc_RMSE() template <class D2, class B2>
void Evaluator<D2, B2>::calc_RMSE()
{ {
// compute RMSE // compute RMSE
RMSE = xt::zeros<double>(final_dims); RMSE = xt::zeros<double>(final_dims);
...@@ -386,7 +395,8 @@ namespace evalhyd ...@@ -386,7 +395,8 @@ namespace evalhyd
// \assign NSE: // \assign NSE:
// Nash-Sutcliffe efficiencies. // Nash-Sutcliffe efficiencies.
// shape: (series, subsets, samples) // shape: (series, subsets, samples)
void Evaluator::calc_NSE() template <class D2, class B2>
void Evaluator<D2, B2>::calc_NSE()
{ {
NSE = xt::zeros<double>(final_dims); NSE = xt::zeros<double>(final_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -424,7 +434,8 @@ namespace evalhyd ...@@ -424,7 +434,8 @@ namespace evalhyd
// \assign KGE: // \assign KGE:
// Kling-Gupta efficiencies. // Kling-Gupta efficiencies.
// shape: (series, subsets, samples) // shape: (series, subsets, samples)
void Evaluator::calc_KGE() template <class D2, class B2>
void Evaluator<D2, B2>::calc_KGE()
{ {
KGE = xt::zeros<double>(final_dims); KGE = xt::zeros<double>(final_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
...@@ -459,7 +470,8 @@ namespace evalhyd ...@@ -459,7 +470,8 @@ namespace evalhyd
// \assign KGEPRIME: // \assign KGEPRIME:
// Modified Kling-Gupta efficiencies. // Modified Kling-Gupta efficiencies.
// shape: (series, subsets, samples) // shape: (series, subsets, samples)
void Evaluator::calc_KGEPRIME() template <class D2, class B2>
void Evaluator<D2, B2>::calc_KGEPRIME()
{ {
KGEPRIME = xt::zeros<double>(final_dims); KGEPRIME = xt::zeros<double>(final_dims);
for (int m = 0; m < n_msk; m++) { for (int m = 0; m < n_msk; m++) {
......
...@@ -310,7 +310,7 @@ namespace evalhyd ...@@ -310,7 +310,7 @@ namespace evalhyd
} }
// instantiate determinist evaluator // instantiate determinist evaluator
eh::determinist::Evaluator evaluator(obs, prd, msk, exp); eh::determinist::Evaluator<D2, B2> evaluator(obs, prd, msk, exp);
// declare maps for memoisation purposes // declare maps for memoisation purposes
std::unordered_map<std::string, std::vector<std::string>> elt; std::unordered_map<std::string, std::vector<std::string>> elt;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment