From 3d5ea42b9a9534faf805333a5b9114b83da71ec4 Mon Sep 17 00:00:00 2001
From: unknown <olivier.delaigue@ANPI1430.antony.irstea.priv>
Date: Mon, 31 Oct 2016 18:06:55 +0100
Subject: [PATCH] #4263 ErrorCrit_*() are now fixed when transfo = "sort"

---
 R/ErrorCrit_KGE.R  | 7 ++++++-
 R/ErrorCrit_KGE2.R | 7 ++++++-
 R/ErrorCrit_NSE.R  | 7 ++++++-
 R/ErrorCrit_RMSE.R | 7 ++++++-
 4 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/R/ErrorCrit_KGE.R b/R/ErrorCrit_KGE.R
index 03dafffa..2ac4e97d 100644
--- a/R/ErrorCrit_KGE.R
+++ b/R/ErrorCrit_KGE.R
@@ -29,7 +29,12 @@ ErrorCrit_KGE <- function(InputsCrit,OutputsModel, verbose = TRUE){
   if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
   if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
   if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
-  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  if(InputsCrit$transfo=="sort"){
+	VarSim[is.na(VarObs)] <- NA
+	VarSim <- sort(VarSim, na.last = TRUE)
+	VarObs <- sort(VarObs, na.last = TRUE)
+	InputsCrit$BoolCrit <- sort(InputsCrit$BoolCrit, decreasing = TRUE)
+  }
   ##TS_ignore
   TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
   Ind_TS_ignore <- which(TS_ignore); if(length(Ind_TS_ignore)==0){ Ind_TS_ignore <- NULL; }
diff --git a/R/ErrorCrit_KGE2.R b/R/ErrorCrit_KGE2.R
index 623c9ad0..eca87936 100644
--- a/R/ErrorCrit_KGE2.R
+++ b/R/ErrorCrit_KGE2.R
@@ -29,7 +29,12 @@ ErrorCrit_KGE2 <- function(InputsCrit,OutputsModel, verbose = TRUE){
   if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
   if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
   if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
-  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  if(InputsCrit$transfo=="sort"){
+	VarSim[is.na(VarObs)] <- NA
+	VarSim <- sort(VarSim, na.last = TRUE)
+	VarObs <- sort(VarObs, na.last = TRUE)
+	InputsCrit$BoolCrit <- sort(InputsCrit$BoolCrit, decreasing = TRUE)
+  }
   ##TS_ignore
   TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
   Ind_TS_ignore <- which(TS_ignore); if(length(Ind_TS_ignore)==0){ Ind_TS_ignore <- NULL; }
diff --git a/R/ErrorCrit_NSE.R b/R/ErrorCrit_NSE.R
index 3f50b480..bf719f5b 100644
--- a/R/ErrorCrit_NSE.R
+++ b/R/ErrorCrit_NSE.R
@@ -29,7 +29,12 @@ ErrorCrit_NSE <- function(InputsCrit,OutputsModel, verbose = TRUE){
   if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
   if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
   if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
-  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  if(InputsCrit$transfo=="sort"){
+	VarSim[is.na(VarObs)] <- NA
+	VarSim <- sort(VarSim, na.last = TRUE)
+	VarObs <- sort(VarObs, na.last = TRUE)
+	InputsCrit$BoolCrit <- sort(InputsCrit$BoolCrit, decreasing = TRUE)
+  }
   ##TS_ignore
   TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
   Ind_TS_ignore <- which(TS_ignore); if(length(Ind_TS_ignore)==0){ Ind_TS_ignore <- NULL; }
diff --git a/R/ErrorCrit_RMSE.R b/R/ErrorCrit_RMSE.R
index 25bc5f16..69c3729b 100644
--- a/R/ErrorCrit_RMSE.R
+++ b/R/ErrorCrit_RMSE.R
@@ -30,7 +30,12 @@ ErrorCrit_RMSE <- function(InputsCrit,OutputsModel, verbose = TRUE){
   if(InputsCrit$transfo=="sqrt"){ VarObs <- sqrt(VarObs); VarSim <- sqrt(VarSim); }
   if(InputsCrit$transfo=="log" ){ VarObs <- log(VarObs) ; VarSim <- log(VarSim) ; VarSim[VarSim      < -1E100] <- NA; }
   if(InputsCrit$transfo=="inv" ){ VarObs <- 1/VarObs    ; VarSim <- 1/VarSim    ; VarSim[abs(VarSim) > 1E+100] <- NA; }
-  if(InputsCrit$transfo=="sort"){ VarObs <- sort(VarObs); VarSim <- sort(VarSim); }
+  if(InputsCrit$transfo=="sort"){
+	VarSim[is.na(VarObs)] <- NA
+	VarSim <- sort(VarSim, na.last = TRUE)
+	VarObs <- sort(VarObs, na.last = TRUE)
+	InputsCrit$BoolCrit <- sort(InputsCrit$BoolCrit, decreasing = TRUE)
+  }
   ##TS_ignore
   TS_ignore <- !is.finite(VarObs) | !is.finite(VarSim) | !InputsCrit$BoolCrit ;
   Ind_TS_ignore <- which(TS_ignore); if(length(Ind_TS_ignore)==0){ Ind_TS_ignore <- NULL; }
-- 
GitLab