CreateCalibOptions.R 10.25 KiB
CreateCalibOptions <- function(FUN_MOD,
                               FUN_CALIB = Calibration_Michel,
                               FUN_TRANSFO = NULL,
                               IsHyst = FALSE,
                               IsSD = FALSE,
                               FUN_SD = RunModel_Lag,
                               FixedParam = NULL,
                               SearchRanges = NULL,
                               StartParamList = NULL,
                               StartParamDistrib = NULL) {
  ObjectClass <- NULL
  FUN_MOD     <- match.fun(FUN_MOD)
  FUN_CALIB   <- match.fun(FUN_CALIB)
  if (!is.null(FUN_TRANSFO)) {
    FUN_TRANSFO <- match.fun(FUN_TRANSFO)
  if (!is.logical(IsHyst) | length(IsHyst) != 1L) {
    stop("'IsHyst' must be a logical of length 1")
  if (!is.logical(IsSD) | length(IsSD) != 1L) {
    stop("'IsSD' must be a logical of length 1")
  ## check FUN_MOD
  if (!isTRUE(IsSD)) {
    FUN_SD <- NULL
  FeatFUN_MOD <- .GetFeatModel(FUN_MOD = FUN_MOD, FUN_SD = FUN_SD)
  FeatFUN_MOD$IsHyst <- IsHyst
  FeatFUN_MOD$IsSD <- IsSD
  ObjectClass <- FeatFUN_MOD$Class
  if (identical(FUN_MOD, RunModel_Lag) && IsSD) {
      stop("RunModel_Lag should not be used with 'isSD=TRUE'")
  if (IsHyst) {
    ObjectClass <- c(ObjectClass, "hysteresis")
  if (IsSD) {
    ObjectClass <- c(ObjectClass, "SD")
  ## check FUN_CALIB
  BOOL <- FALSE
  if (identical(FUN_CALIB, Calibration_Michel)) {
    ObjectClass <- c(ObjectClass, "HBAN")
    BOOL <- TRUE
  if (!BOOL) {
    stop("incorrect 'FUN_CALIB' for use in 'CreateCalibOptions'")
    return(NULL)
  ## check FUN_TRANSFO
  if (is.null(FUN_TRANSFO)) {
    FUN_TRANSFO <- .FunTransfo(FeatFUN_MOD, FUN_SD)
  ## NParam
  NParam <- FeatFUN_MOD$NbParam
  if (IsHyst) {
    NParam <- NParam + 2
  if (IsSD) {
    NParam <- NParam + FeatFUN_MOD$NParamSD