From b33641c804516c2e89f3b9b1a2e80f28202ba43d Mon Sep 17 00:00:00 2001
From: Dorchies David <david.dorchies@irstea.fr>
Date: Thu, 31 Dec 2020 13:18:10 +0100
Subject: [PATCH] v1.6.3.74 fix: missing RunModel_GR2M and RunModelGR1A in
 Calibration_Michel identification of FUN_TRANSFO

- FUN_TRANSFO is recorded in the CalibOptions object and directly transmitted to Calibration instead of recalculate it

Refs #73
---
 DESCRIPTION            |   4 +-
 NEWS.md                |   2 +-
 R/Calibration_Michel.R | 275 +++++++++++------------------------------
 R/CreateCalibOptions.R |  52 ++++----
 4 files changed, 101 insertions(+), 232 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
index 574df6b6..1e4601b4 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.6.3.73
-Date: 2020-11-24
+Version: 1.6.3.74
+Date: 2020-12-31
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
   person("Olivier", "Delaigue", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7668-8468"), email = "airGR@inrae.fr"),
diff --git a/NEWS.md b/NEWS.md
index e4a9be1f..db1d0aa9 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -4,7 +4,7 @@
 
 
 
-### 1.6.3.73 Release Notes (2020-11-24)
+### 1.6.3.74 Release Notes (2020-12-31)
 
 #### New features
 
diff --git a/R/Calibration_Michel.R b/R/Calibration_Michel.R
index aaad7c8a..cfa85ac6 100644
--- a/R/Calibration_Michel.R
+++ b/R/Calibration_Michel.R
@@ -1,29 +1,34 @@
-Calibration_Michel <- function(InputsModel, 
-                               RunOptions, 
-                               InputsCrit, 
+Calibration_Michel <- function(InputsModel,
+                               RunOptions,
+                               InputsCrit,
                                CalibOptions,
-                               FUN_MOD, 
+                               FUN_MOD,
                                FUN_CRIT,           # deprecated
-                               FUN_TRANSFO = NULL, 
+                               FUN_TRANSFO = NULL,
                                verbose = TRUE) {
-  
-  
+
+
   FUN_MOD  <- match.fun(FUN_MOD)
   if (!missing(FUN_CRIT)) {
     FUN_CRIT <- match.fun(FUN_CRIT)
   }
+
+  # Handling 'FUN_TRANSFO' from direct argument or provided by 'CaliOptions'
   if (!is.null(FUN_TRANSFO)) {
     FUN_TRANSFO <- match.fun(FUN_TRANSFO)
+  } else if(!is.null(CalibOptions$FUN_TRANSFO)) {
+    FUN_TRANSFO <- CalibOptions$FUN_TRANSFO
+  } else {
+    stop("'FUN_TRANSFO' is not provided neither as 'FUN_TRANSFO' argument or in 'CaliOptions' argument")
   }
-  
-  
+
   ##_____Arguments_check_____________________________________________________________________
   if (!inherits(InputsModel, "InputsModel")) {
     stop("'InputsModel' must be of class 'InputsModel'")
-  }  
+  }
   if (!inherits(RunOptions, "RunOptions")) {
     stop("'RunOptions' must be of class 'RunOptions'")
-  }  
+  }
   if (!inherits(InputsCrit, "InputsCrit")) {
     stop("'InputsCrit' must be of class 'InputsCrit'")
   }
@@ -46,151 +51,15 @@ Calibration_Michel <- function(InputsModel,
   }
   if (!inherits(CalibOptions, "CalibOptions")) {
     stop("'CalibOptions' must be of class 'CalibOptions'")
-  }  
+  }
   if (!inherits(CalibOptions, "HBAN")) {
     stop("'CalibOptions' must be of class 'HBAN' if 'Calibration_Michel' is used")
   }
   if (!missing(FUN_CRIT)) {
     warning("argument 'FUN_CRIT' is deprecated. The error criterion function is now automatically get from the 'InputsCrit' object")
-  }  
-  
-  
-  ##_check_FUN_TRANSFO
-  if (is.null(FUN_TRANSFO)) {
-    if (identical(FUN_MOD, RunModel_GR4H) | identical(FUN_MOD, RunModel_CemaNeigeGR4H)) {
-      FUN1 <- TransfoParam_GR4H
-    }
-    if (identical(FUN_MOD, RunModel_GR5H) | identical(FUN_MOD, RunModel_CemaNeigeGR5H)) {
-      FUN1 <- TransfoParam_GR5H
-    }
-    if (identical(FUN_MOD, RunModel_GR4J) | identical(FUN_MOD, RunModel_CemaNeigeGR4J)) {
-      FUN1 <- TransfoParam_GR4J
-    }
-    if (identical(FUN_MOD, RunModel_GR5J) | identical(FUN_MOD, RunModel_CemaNeigeGR5J)) {
-      FUN1 <- TransfoParam_GR5J
-    }
-    if (identical(FUN_MOD, RunModel_GR6J) | identical(FUN_MOD, RunModel_CemaNeigeGR6J)) {
-      FUN1 <- TransfoParam_GR6J
-    }
-    if (identical(FUN_MOD, RunModel_GR2M )) {
-      FUN1 <- TransfoParam_GR2M
-    }
-    if (identical(FUN_MOD, RunModel_GR1A )) {
-      FUN1 <- TransfoParam_GR1A
-    }
-    ##_set_FUN_LAG
-    if (inherits(CalibOptions, "SD")) {
-      FUN_LAG <- TransfoParam_Lag
-    }	
-    if (identical(FUN_MOD, RunModel_CemaNeige    )) {
-      if (inherits(CalibOptions, "hysteresis")) {
-        FUN_TRANSFO <- TransfoParam_CemaNeigeHyst
-      } else {
-        FUN_TRANSFO <- TransfoParam_CemaNeige
-      }
-    }
-    if (identical(FUN_MOD, RunModel_GR4H) | identical(FUN_MOD, RunModel_GR5H) |
-        identical(FUN_MOD, RunModel_GR4J) | identical(FUN_MOD, RunModel_GR5J) | identical(FUN_MOD, RunModel_GR6J)) {
-      if (!inherits(CalibOptions, "SD")) {
-        FUN_TRANSFO <- FUN1
-      } else {
-        FUN_TRANSFO <- function(ParamIn, Direction) {
-          Bool <- is.matrix(ParamIn)
-          if (!Bool) {
-            ParamIn <- rbind(ParamIn)
-          }
-          ParamOut <- NA * ParamIn
-          NParam   <- ncol(ParamIn)
-          ParamOut[, 2:NParam] <- FUN1(ParamIn[, 2:NParam], Direction)
-          ParamOut[, 1       ] <- FUN_LAG(as.matrix(ParamIn[, 1]), Direction)
-          if (!Bool) {
-            ParamOut <- ParamOut[1, ]
-          }
-          return(ParamOut)
-        }
-      }
-    }
-    if (identical(FUN_MOD, RunModel_CemaNeigeGR4H) | identical(FUN_MOD, RunModel_CemaNeigeGR5H) |
-        identical(FUN_MOD, RunModel_CemaNeigeGR4J) | identical(FUN_MOD, RunModel_CemaNeigeGR5J) | identical(FUN_MOD, RunModel_CemaNeigeGR6J)) {
-      if (inherits(CalibOptions, "hysteresis")) {
-        FUN2 <- TransfoParam_CemaNeigeHyst
-      } else {
-        FUN2 <- TransfoParam_CemaNeige
-      }
-      if (inherits(CalibOptions, "hysteresis") & !inherits(CalibOptions, "SD")) {
-        FUN_TRANSFO <- function(ParamIn, Direction) {
-          Bool <- is.matrix(ParamIn)
-          if (!Bool) {
-            ParamIn <- rbind(ParamIn)
-          }
-          ParamOut <- NA * ParamIn
-          NParam   <- ncol(ParamIn)
-          ParamOut[,          1:(NParam-4)] <- FUN1(ParamIn[,          1:(NParam-4)], Direction)
-          ParamOut[, (NParam-3):NParam    ] <- FUN2(ParamIn[, (NParam-3):NParam    ], Direction)
-          if (!Bool) {
-            ParamOut <- ParamOut[1, ]
-          }
-          return(ParamOut)
-        }
-      } 
-      if (!inherits(CalibOptions, "hysteresis") & !inherits(CalibOptions, "SD")) {
-        FUN_TRANSFO <- function(ParamIn, Direction) {
-          Bool <- is.matrix(ParamIn)
-          if (!Bool) {
-            ParamIn <- rbind(ParamIn)
-          }
-          ParamOut <- NA * ParamIn
-          NParam   <- ncol(ParamIn)
-          ParamOut[,          1:(NParam-2)] <- FUN1(ParamIn[,          1:(NParam-2)], Direction)
-          ParamOut[, (NParam-1):NParam    ] <- FUN2(ParamIn[, (NParam-1):NParam    ], Direction)
-          if (!Bool) {
-            ParamOut <- ParamOut[1, ]
-          }
-          return(ParamOut)
-        }
-      }
-      if (inherits(CalibOptions, "hysteresis") & inherits(CalibOptions, "SD")) {
-        FUN_TRANSFO <- function(ParamIn, Direction) {
-          Bool <- is.matrix(ParamIn)
-          if (!Bool) {
-            ParamIn <- rbind(ParamIn)
-          }
-          ParamOut <- NA * ParamIn
-          NParam   <- ncol(ParamIn)
-          ParamOut[,      2:(NParam-4)] <- FUN1(   ParamIn[,      2:(NParam-4)], Direction)
-          ParamOut[, (NParam-3):NParam] <- FUN2(   ParamIn[, (NParam-3):NParam], Direction)
-          ParamOut[, 1                ] <- FUN_LAG(as.matrix(ParamIn[, 1      ]), Direction)
-          if (!Bool) {
-            ParamOut <- ParamOut[1, ]
-          }
-          return(ParamOut)
-        }
-      } 
-      if (!inherits(CalibOptions, "hysteresis") & inherits(CalibOptions, "SD")) {
-        FUN_TRANSFO <- function(ParamIn, Direction) {
-          Bool <- is.matrix(ParamIn)
-          if (!Bool) {
-            ParamIn <- rbind(ParamIn)
-          }
-          ParamOut <- NA * ParamIn
-          NParam   <- ncol(ParamIn)
-          ParamOut[,      2:(NParam-2)] <- FUN1(   ParamIn[,      2:(NParam-2)], Direction)
-          ParamOut[, (NParam-1):NParam] <- FUN2(   ParamIn[, (NParam-1):NParam], Direction)
-          ParamOut[, 1                ] <- FUN_LAG(as.matrix(ParamIn[, 1      ]), Direction)
-          if (!Bool) {
-            ParamOut <- ParamOut[1, ]
-          }
-          return(ParamOut)
-        }
-      }
-      
-    }
-    if (is.null(FUN_TRANSFO)) {
-      stop("'FUN_TRANSFO' was not found (in 'Calibration' function)")
-    }
   }
-  
-  ##_variables_initialisation 
+
+  ##_variables_initialisation
   ParamFinalR <- NULL
   ParamFinalT <- NULL
   CritFinal   <- NULL
@@ -219,20 +88,20 @@ Calibration_Michel <- function(InputsModel,
   CritOptim     <- +1e100
   ##_temporary_change_of_Outputs_Sim
   RunOptions$Outputs_Sim <- RunOptions$Outputs_Cal  ### this reduces the size of the matrix exchange with fortran and therefore speeds the calibration
-  
-  
-  
+
+
+
   ##_____Parameter_Grid_Screening____________________________________________________________
-  
-  
+
+
   ##Definition_of_the_function_creating_all_possible_parameter_sets_from_different_values_for_each_parameter
   ProposeCandidatesGrid <- function(DistribParam) {
     NewCandidates <- expand.grid(lapply(seq_len(ncol(DistribParamR)), function(x) DistribParam[, x]))
     NewCandidates <- unique(NewCandidates) # to avoid duplicates when a parameter is set
     Output <- list(NewCandidates = NewCandidates)
-  }    
-  
-  
+  }
+
+
   ##Creation_of_new_candidates_______________________________________________
   OptimParam <- is.na(CalibOptions$FixedParam)
   if (PrefilteringType == 1) {
@@ -253,7 +122,7 @@ Calibration_Michel <- function(InputsModel,
   } else {
     CandidatesParamR <- cbind(CandidatesParamR)
   }
-  
+
   ##Loop_to_test_the_various_candidates______________________________________
   iNewOptim <- 0
   Ncandidates <- nrow(CandidatesParamR)
@@ -272,12 +141,12 @@ Calibration_Michel <- function(InputsModel,
         if (iNew == round(k / 10 * Ncandidates)) {
           message(" ", 10 * k, "%", appendLF = FALSE)
         }
-      } 
+      }
     }
     ##Model_run
     Param <- CandidatesParamR[iNew, ]
     OutputsModel <- RunModel(InputsModel, RunOptions, Param, FUN_MOD = FUN_MOD)
-    
+
     ##Calibration_criterion_computation
     OutputsCrit <- ErrorCrit(InputsCrit, OutputsModel, verbose = FALSE)
     if (!is.na(OutputsCrit$CritValue)) {
@@ -296,8 +165,8 @@ Calibration_Michel <- function(InputsModel,
   if (verbose & Ncandidates > 1) {
     message(" 100%)\n", appendLF = FALSE)
   }
-  
-  
+
+
   ##End_of_first_step_Parameter_Screening____________________________________
   ParamStartR <- CandidatesParamR[iNewOptim, ]
   if (!is.matrix(ParamStartR)) {
@@ -320,13 +189,13 @@ Calibration_Michel <- function(InputsModel,
   HistParamR[1, ] <- ParamStartR
   HistParamT[1, ] <- ParamStartT
   HistCrit[1, ]   <- CritStart
-  
-  
-  
-  
+
+
+
+
   ##_____Steepest_Descent_Local_Search_______________________________________________________
-  
-  
+
+
   ##Definition_of_the_function_creating_new_parameter_sets_through_a_step_by_step_progression_procedure
   ProposeCandidatesLoc <- function(NewParamOptimT, OldParamOptimT, RangesT, OptimParam, Pace) {
     ##Format_checking
@@ -377,11 +246,11 @@ Calibration_Michel <- function(InputsModel,
     Output$NewCandidatesT <- matrix(VECT, ncol = NParam, byrow = TRUE)
     return(Output)
   }
-  
-  
+
+
   ##Initialisation_of_variables
   if (verbose) {
-    message("Steepest-descent local search in progress") 
+    message("Steepest-descent local search in progress")
   }
   Pace <- 0.64
   PaceDiag <- rep(0, NParam)
@@ -393,18 +262,18 @@ Calibration_Michel <- function(InputsModel,
   RangesT <- FUN_TRANSFO(RangesR, "RT")
   NewParamOptimT <- ParamStartT
   OldParamOptimT <- ParamStartT
-  
-  
+
+
   ##START_LOOP_ITER_________________________________________________________
   for (ITER in 1:(100 * NParam)) {
-    
-    
+
+
     ##Exit_loop_when_Pace_becomes_too_small___________________________________
     if (Pace < 0.01) {
       break
     }
-    
-    
+
+
     ##Creation_of_new_candidates______________________________________________
     CandidatesParamT <- ProposeCandidatesLoc(NewParamOptimT, OldParamOptimT, RangesT, OptimParam, Pace)$NewCandidatesT
     CandidatesParamR <- FUN_TRANSFO(CandidatesParamT, "TR")
@@ -418,8 +287,8 @@ Calibration_Michel <- function(InputsModel,
     } else {
       CandidatesParamR <- cbind(CandidatesParamR)
     }
-    
-    
+
+
     ##Loop_to_test_the_various_candidates_____________________________________
     iNewOptim <- 0
     for (iNew in 1:nrow(CandidatesParamR)) {
@@ -427,7 +296,7 @@ Calibration_Michel <- function(InputsModel,
       Param <- CandidatesParamR[iNew, ]
       OutputsModel <- RunModel(InputsModel, RunOptions, Param, FUN_MOD = FUN_MOD)
       ##Calibration_criterion_computation
-      OutputsCrit <- ErrorCrit(InputsCrit, OutputsModel, verbose = FALSE)      
+      OutputsCrit <- ErrorCrit(InputsCrit, OutputsModel, verbose = FALSE)
       if (!is.na(OutputsCrit$CritValue)) {
         if (OutputsCrit$CritValue * OutputsCrit$Multiplier < CritOptim) {
           CritOptim <- OutputsCrit$CritValue * OutputsCrit$Multiplier
@@ -436,8 +305,8 @@ Calibration_Michel <- function(InputsModel,
       }
     }
     NRuns <- NRuns + nrow(CandidatesParamR)
-    
-    
+
+
     ##When_a_progress_has_been_achieved_______________________________________
     if (iNewOptim != 0) {
       ##We_store_the_optimal_set
@@ -452,7 +321,7 @@ Calibration_Michel <- function(InputsModel,
       ##We_update_PaceDiag
       VectPace <- NewParamOptimT-OldParamOptimT
       for (iC in 1:NParam) {
-        if (OptimParam[iC]) { 
+        if (OptimParam[iC]) {
           PaceDiag[iC] <- CLG * PaceDiag[iC] + (1-CLG) * VectPace[iC]
         }
       }
@@ -461,8 +330,8 @@ Calibration_Michel <- function(InputsModel,
       Pace <- Pace / 2
       Compt <- 0
     }
-    
-    
+
+
     ##Test_of_an_additional_candidate_using_diagonal_progress_________________
     if (ITER > 4 * NParam) {
       NRuns <- NRuns + 1
@@ -498,34 +367,34 @@ Calibration_Michel <- function(InputsModel,
         OldParamOptimT <- NewParamOptimT
         NewParamOptimT <- matrix(CandidatesParamT[iNewOptim, 1:NParam], nrow = 1)
       }
-      
+
     }
-    
-    
+
+
     ##Results_archiving_______________________________________________________
     NewParamOptimR       <- FUN_TRANSFO(NewParamOptimT, "TR")
     HistParamR[ITER+1, ] <- NewParamOptimR
     HistParamT[ITER+1, ] <- NewParamOptimT
     HistCrit[ITER+1, ]   <- CritOptim
     ### if (verbose) { cat(paste("\t     Iter ",formatC(ITER,format="d",width=3), "    Crit ",formatC(CritOptim,format="f",digits=4), "    Pace ",formatC(Pace,format="f",digits=4), "\n",sep=""))}
-    
-    
-    
+
+
+
   } ##END_LOOP_ITER_________________________________________________________
   ITER <- ITER - 1
-  
-  
+
+
   ##Case_when_the_starting_parameter_set_remains_the_best_solution__________
-  if (CritOptim == CritStart & verbose) { 
+  if (CritOptim == CritStart & verbose) {
     message("\t No progress achieved")
   }
-  
+
   ##End_of_Steepest_Descent_Local_Search____________________________________
   ParamFinalR <- NewParamOptimR
   ParamFinalT <- NewParamOptimT
   CritFinal   <- CritOptim
   NIter       <- 1 + ITER
-  if (verbose) { 
+  if (verbose) {
     message(sprintf("\t Calibration completed (%s iterations, %s runs)", NIter, NRuns))
     message("\t     Param = ", paste(sprintf("%8.3f", ParamFinalR), collapse = ", "))
     message(sprintf("\t     Crit. %-12s = %.4f", CritName, CritFinal * Multiplier))
@@ -547,13 +416,13 @@ Calibration_Michel <- function(InputsModel,
   colnames(HistParamT) <- paste0("Param", 1:NParam)
   HistCrit   <- cbind(HistCrit[1:NIter, ])
   ###colnames(HistCrit) <- paste("HistCrit")
-  
+
   BoolCrit_Actual <- InputsCrit$BoolCrit
   BoolCrit_Actual[OutputsCrit$Ind_notcomputed] <- FALSE
   MatBoolCrit <- cbind(InputsCrit$BoolCrit, BoolCrit_Actual)
   colnames(MatBoolCrit) <- c("BoolCrit_Requested", "BoolCrit_Actual")
-  
-  
+
+
   ##_____Output______________________________________________________________________________
   OutputsCalib <- list(ParamFinalR = as.double(ParamFinalR), CritFinal = CritFinal * Multiplier,
                        NIter = NIter, NRuns = NRuns,
@@ -562,7 +431,7 @@ Calibration_Michel <- function(InputsModel,
                        CritName = CritName, CritBestValue = CritBestValue)
   class(OutputsCalib) <- c("OutputsCalib", "HBAN")
   return(OutputsCalib)
-  
-  
-  
+
+
+
 }
diff --git a/R/CreateCalibOptions.R b/R/CreateCalibOptions.R
index 5815beb7..4d0edcc2 100644
--- a/R/CreateCalibOptions.R
+++ b/R/CreateCalibOptions.R
@@ -105,46 +105,46 @@ CreateCalibOptions <- function(FUN_MOD,
     ##_set_FUN1
     if (identical(FUN_MOD, RunModel_GR4H) |
         identical(FUN_MOD, RunModel_CemaNeigeGR4H)) {
-      FUN1 <- TransfoParam_GR4H
+      FUN_GR <- TransfoParam_GR4H
     }
     if (identical(FUN_MOD, RunModel_GR5H) |
         identical(FUN_MOD, RunModel_CemaNeigeGR5H)) {
-      FUN1 <- TransfoParam_GR5H
+      FUN_GR <- TransfoParam_GR5H
     }
     if (identical(FUN_MOD, RunModel_GR4J) |
         identical(FUN_MOD, RunModel_CemaNeigeGR4J)) {
-      FUN1 <- TransfoParam_GR4J
+      FUN_GR <- TransfoParam_GR4J
     }
     if (identical(FUN_MOD, RunModel_GR5J) |
         identical(FUN_MOD, RunModel_CemaNeigeGR5J)) {
-      FUN1 <- TransfoParam_GR5J
+      FUN_GR <- TransfoParam_GR5J
     }
     if (identical(FUN_MOD, RunModel_GR6J) |
         identical(FUN_MOD, RunModel_CemaNeigeGR6J)) {
-      FUN1 <- TransfoParam_GR6J
+      FUN_GR <- TransfoParam_GR6J
     }
     if (identical(FUN_MOD, RunModel_GR2M)) {
-      FUN1 <- TransfoParam_GR2M
+      FUN_GR <- TransfoParam_GR2M
     }
     if (identical(FUN_MOD, RunModel_GR1A)) {
-      FUN1 <- TransfoParam_GR1A
+      FUN_GR <- TransfoParam_GR1A
     }
     if (identical(FUN_MOD, RunModel_CemaNeige)) {
       if (IsHyst) {
-        FUN1 <- TransfoParam_CemaNeigeHyst
+        FUN_GR <- TransfoParam_CemaNeigeHyst
       } else {
-        FUN1 <- TransfoParam_CemaNeige
+        FUN_GR <- TransfoParam_CemaNeige
       }
     }
-    if (is.null(FUN1)) {
-      stop("'FUN1' was not found")
+    if (is.null(FUN_GR)) {
+      stop("'FUN_GR' was not found")
       return(NULL)
     }
     ##_set_FUN2
     if (IsHyst) {
-      FUN2 <- TransfoParam_CemaNeigeHyst
+      FUN_NEIGE <- TransfoParam_CemaNeigeHyst
     } else {
-      FUN2 <- TransfoParam_CemaNeige
+      FUN_NEIGE <- TransfoParam_CemaNeige
     }
     ##_set_FUN_LAG
     if (IsSD) {
@@ -153,7 +153,7 @@ CreateCalibOptions <- function(FUN_MOD,
     ##_set_FUN_TRANSFO
     if (sum(ObjectClass %in% c("GR4H", "GR5H", "GR4J", "GR5J", "GR6J", "GR2M", "GR1A", "CemaNeige")) > 0) {
       if (!IsSD) {
-        FUN_TRANSFO <- FUN1
+        FUN_TRANSFO <- FUN_GR
       } else {
         FUN_TRANSFO <- function(ParamIn, Direction) {
           Bool <- is.matrix(ParamIn)
@@ -162,7 +162,7 @@ CreateCalibOptions <- function(FUN_MOD,
           }
           ParamOut <- NA * ParamIn
           NParam   <- ncol(ParamIn)
-          ParamOut[, 2:NParam] <- FUN1(ParamIn[, 2:NParam], Direction)
+          ParamOut[, 2:NParam] <- FUN_GR(ParamIn[, 2:NParam], Direction)
           ParamOut[, 1       ] <- FUN_LAG(as.matrix(ParamIn[, 1]), Direction)
           if (!Bool) {
             ParamOut <- ParamOut[1, ]
@@ -179,8 +179,8 @@ CreateCalibOptions <- function(FUN_MOD,
           }
           ParamOut <- NA * ParamIn
           NParam   <- ncol(ParamIn)
-          ParamOut[, 1:(NParam - 4)     ] <- FUN1(ParamIn[, 1:(NParam - 4)     ], Direction)
-          ParamOut[, (NParam - 3):NParam] <- FUN2(ParamIn[, (NParam - 3):NParam], Direction)
+          ParamOut[, 1:(NParam - 4)     ] <- FUN_GR(ParamIn[, 1:(NParam - 4)     ], Direction)
+          ParamOut[, (NParam - 3):NParam] <- FUN_NEIGE(ParamIn[, (NParam - 3):NParam], Direction)
           if (!Bool) {
             ParamOut <- ParamOut[1, ]
           }
@@ -196,11 +196,11 @@ CreateCalibOptions <- function(FUN_MOD,
           ParamOut <- NA * ParamIn
           NParam   <- ncol(ParamIn)
           if (NParam <= 3) {
-            ParamOut[, 1:(NParam - 2)] <- FUN1(cbind(ParamIn[, 1:(NParam - 2)]), Direction)
+            ParamOut[, 1:(NParam - 2)] <- FUN_GR(cbind(ParamIn[, 1:(NParam - 2)]), Direction)
           } else {
-            ParamOut[, 1:(NParam - 2)] <- FUN1(      ParamIn[, 1:(NParam - 2)],  Direction)
+            ParamOut[, 1:(NParam - 2)] <- FUN_GR(      ParamIn[, 1:(NParam - 2)],  Direction)
           }
-          ParamOut[, (NParam - 1):NParam] <- FUN2(ParamIn[, (NParam - 1):NParam], Direction)
+          ParamOut[, (NParam - 1):NParam] <- FUN_NEIGE(ParamIn[, (NParam - 1):NParam], Direction)
           if (!Bool) {
             ParamOut <- ParamOut[1, ]
           }
@@ -215,8 +215,8 @@ CreateCalibOptions <- function(FUN_MOD,
           }
           ParamOut <- NA * ParamIn
           NParam   <- ncol(ParamIn)
-          ParamOut[, 2:(NParam - 4)     ] <- FUN1(   ParamIn[, 2:(NParam - 4)     ], Direction)
-          ParamOut[, (NParam - 3):NParam] <- FUN2(   ParamIn[, (NParam - 3):NParam], Direction)
+          ParamOut[, 2:(NParam - 4)     ] <- FUN_GR(   ParamIn[, 2:(NParam - 4)     ], Direction)
+          ParamOut[, (NParam - 3):NParam] <- FUN_NEIGE(   ParamIn[, (NParam - 3):NParam], Direction)
           ParamOut[, 1                  ] <- FUN_LAG(as.matrix(ParamIn[, 1       ]), Direction)
           if (!Bool) {
             ParamOut <- ParamOut[1, ]
@@ -233,11 +233,11 @@ CreateCalibOptions <- function(FUN_MOD,
           ParamOut <- NA * ParamIn
           NParam   <- ncol(ParamIn)
           if (NParam <= 3) {
-            ParamOut[, 2:(NParam - 2)] <- FUN1(cbind(ParamIn[, 2:(NParam - 2)]), Direction)
+            ParamOut[, 2:(NParam - 2)] <- FUN_GR(cbind(ParamIn[, 2:(NParam - 2)]), Direction)
           } else {
-            ParamOut[, 2:(NParam - 2)] <- FUN1(      ParamIn[, 2:(NParam - 2)],  Direction)
+            ParamOut[, 2:(NParam - 2)] <- FUN_GR(      ParamIn[, 2:(NParam - 2)],  Direction)
           }
-          ParamOut[, (NParam - 1):NParam] <- FUN2(   ParamIn[, (NParam - 1):NParam], Direction)
+          ParamOut[, (NParam - 1):NParam] <- FUN_NEIGE(   ParamIn[, (NParam - 1):NParam], Direction)
           ParamOut[, 1                   ] <- FUN_LAG(as.matrix(ParamIn[, 1]), Direction)
           if (!Bool) {
             ParamOut <- ParamOut[1, ]
@@ -472,7 +472,7 @@ CreateCalibOptions <- function(FUN_MOD,
 
 
   ##Create_CalibOptions
-  CalibOptions <- list(FixedParam = FixedParam, SearchRanges = SearchRanges)
+  CalibOptions <- list(FixedParam = FixedParam, SearchRanges = SearchRanges, FUN_TRANSFO = FUN_TRANSFO)
 
   if (!is.null(StartParamList)) {
     CalibOptions <- c(CalibOptions, list(StartParamList = StartParamList))
-- 
GitLab