library(stockassessment)
load("run/model.RData")
#LO<-leaveout(fit)



LO<-list()
# Change in 2024 due to problem of convergence leading to the code stopping
# for(rmf in 5:9){
#   data <- reduce(fit$data, fleet=rmf, conf=fit$conf)
#   data$sumKey <- data$sumKey[-rmf,]
#   conf <- attr(data, "conf")
#   par <- defpar(data,conf)
#   pl<-fit$pl
#   newinit<-lapply(names(par), function(nam)if(length(par[nam])==length(pl[nam]))pl[[nam]] else par[[nam]] )
#   names(newinit)<-names(par)
#   newinit$sigmaObsParUS<-par$sigmaObsParUS
#   newinit$logFpar<-pl$logFpar[sort(unique(fit$conf$keyLogFpar[-rmf,])+1)[-1]]
#   newinit$logSdLogObs<-pl$logSdLogObs[sort(unique(as.vector(fit$conf$keyVarObs[-rmf,]))+1)[-1]]
#   LO[[length(LO)+1]] <- sam.fit(data, conf, newinit, map=fit$obj$env$map, newtonstep=0)
# }
for(rmf in 5:9){
  data <- reduce(fit$data, fleet=rmf, conf=fit$conf)
  data$sumKey <- data$sumKey[-rmf,]
  conf <- attr(data, "conf")
  par <- defpar(data,conf)
  par$itrans_rho <- c(5,1,1)
  par$logFpar[]<-0
  mymap <- list( itrans_rho = factor(c(NA,0,1)))
  LO[[length(LO)+1]] <- sam.fit(data, conf, par, map=mymap, newtonstep=0)
}
names(LO)<-paste0("w.o. ",attr(fit$data, "fleetNames")[5:9])
attr(LO, "fit") <- fit
class(LO)<-"samset"

# 2023, other way if non convergence when remove HERAS:
# From 2025 only for non converged LO
nonConv <- which(unlist(lapply(LO, function(x) x$opt$convergence!=0)))+4
if(length(nonConv)>0){
  LO2<-list()
  for(f in nonConv){
    idx<-fit$conf$keyVarObs[f,]
    idx<-sort(unique(idx[idx>=0]+1))
    
    ii<-1:length(fit$pl$logSdLogObs)
    ii[idx]<-NA
    mm<-factor(ii)
    
    
    mymap <- list( itrans_rho = factor(c(NA,0,1)),logSdLogObs=mm )
    par2<-fit$pl
    ## in 2025:
    mymap <- list( itrans_rho = factor(c(NA,0,1)),logSdLogObs=mm, logSdLogN=factor(c(0,NA)))
    ##
    par2$logSdLogObs[idx]<- log(10)
    par2$missing<-NULL
    attr(par2, "what")<-NULL
    
    thisfit<-sam.fit(fit$data,fit$conf,par2,map=mymap, newtonstep=0)
    LO2[[length(LO2)+1]]<-thisfit
  }
  names(LO2)<-paste0("w.o. ",attr(fit$data, "fleetNames")[nonConv])
  attr(LO2, "fit") <- fit
  class(LO2)<-"samset"
  
  save(LO, LO2, file="run/leaveout.RData")
} else {
  save(LO, file="run/leaveout.RData")
}

