@@ -22,11 +22,11 @@ |
import ngmf.util.cosu.luca.of.NS; |
import ngmf.util.cosu.luca.of.RMSE; |
import ngmf.util.cosu.luca.of.TRMSE; |
+import ngmf.util.cosu.luca.of.NS2LOG; |
import oms.utils.Utils; |
import oms.utils.Utils.PBIAS; |
-import oms.utils.Utils.NSLOG; |
import oms.utils.Utils.NSLOG1P; |
-import oms.utils.Utils.NS2LOGOP; |
+import oms.utils.Utils.NSLOG2; |
import oms3.ObjectiveFunction; |
|
/** |
@@ -59,9 +59,9 @@ |
static { |
OF.put("kge", new KGE()); |
OF.put("ns", new NS()); |
- OF.put("nslog", new NSLOG()); |
+ OF.put("nslog", new NS2LOG()); |
OF.put("nslog1p", new NSLOG1P()); |
- OF.put("nslogop", new NS2LOGOP()); |
+ OF.put("nslog2", new NSLOG2()); |
OF.put("rmse", new RMSE()); |
OF.put("trmse", new TRMSE()); |
OF.put("pbias", new PBIAS()); |
@@ -69,89 +69,6 @@ |
/** |
* |
*/ |
- public static class NSLOG implements ObjectiveFunction { |
- |
- @Override |
- public double calculate(double[] obs, double[] sim, double missing) { |
- int pre_size = sim.length; |
- int val_size = obs.length; |
- int steps = 0; |
- double sum_log_pd = 0; |
- double sum_log_vd = 0; |
- |
- /** |
- * checking if both data arrays have the same number of elements |
- */ |
- if (pre_size != val_size) { |
- return missing; |
- } else { |
- steps = pre_size; |
- } |
- |
- /** |
- * calculating logarithmic values of both data sets. Sets 0 if data |
- * is 0 |
- */ |
- double[] log_preData = new double[pre_size]; |
- double[] log_valData = new double[val_size]; |
- |
- for (int i = 0; i < steps; i++) { |
- if (sim[i] >= 0 && obs[i] >= 0) { |
- |
- if (sim[i] == 0) { |
- log_preData[i] = 0; |
- } else { |
- log_preData[i] = Math.log(sim[i]); |
- } |
- |
- if (obs[i] == 0) { |
- log_valData[i] = 0; |
- } else { |
- log_valData[i] = Math.log(obs[i]); |
- } |
- } |
- } |
- |
- /** |
- * summing up both data sets |
- */ |
- for (int i = 0; i < log_valData.length; i++) { |
- sum_log_pd += log_preData[i]; |
- sum_log_vd += log_valData[i]; |
- } |
- |
- /** |
- * calculating mean values for both data sets |
- */ |
- double mean_log_pd = sum_log_pd / log_valData.length; |
- double mean_log_vd = sum_log_vd / log_valData.length; |
- |
- /** |
- * calculating mean pow deviations |
- */ |
- double pd_log_vd = 0; |
- double vd_log_mean = 0; |
- for (int i = 0; i < log_valData.length; i++) { |
- pd_log_vd = pd_log_vd + (Math.pow(Math.abs(log_valData[i] - log_preData[i]), 2)); |
- vd_log_mean = vd_log_mean + (Math.pow(Math.abs(log_valData[i] - mean_log_vd), 2)); |
- } |
- |
- /** |
- * calculating efficiency after Nash & Sutcliffe (1970) |
- */ |
- double log_efficiency = 1 - (pd_log_vd / vd_log_mean); |
- return log_efficiency; |
- } |
- |
- @Override |
- public boolean positiveDirection() { |
- return true; |
- } |
- } |
- |
- /** |
- * |
- */ |
public static class NSLOG1P implements ObjectiveFunction { |
|
@Override |
@@ -214,7 +131,7 @@ |
/** |
* |
*/ |
- public static class NS2LOGOP implements ObjectiveFunction { |
+ public static class NSLOG2 implements ObjectiveFunction { |
|
@Override |
public double calculate(double m[], double s[], double missing) { |
@@ -237,7 +154,11 @@ |
var += Math.pow(Math.abs(Math.log(m[i]) - avg), pow); |
} |
} |
- return 1.0 - (rsme / var); |
+ double result = 1.0 - (rsme / var); |
+ if (Double.isNaN(result)) { |
+ result = 0; |
+ } |
+ return result; |
} |
|
@Override |