R/calcValidSelfsuff.R

Defines functions calcValidSelfsuff

Documented in calcValidSelfsuff

#' @title calcValidSelfsuff
#' @description Validates self-sufficiency ration
#'
#' @param datasource Options of the source of data:  \code{FAO}. 
#' @param detail Default is \code{TRU}. If \code{FALSE}, the subcategories of groups are not reported (e.g. "soybean" within "oilcrops")
#'
#' @return List of magpie objects with results on country level, weight on country level, unit and description.
#' @author Benjamin Leon Bodirsky, Mishko Stevanovic
#' @examples
#' 
#' \dontrun{ 
#' calcOutput("ValidSelfsuff")
#' }
#' 

#' @importFrom magpiesets reporthelper

calcValidSelfsuff<-function(datasource="FAO", detail=TRUE){
  
  if(datasource=="FAO"){
    k_trade <- findset("k_trade") 
    mb2 <- collapseNames(calcOutput("FAOmassbalance",aggregate = F)[,,k_trade][,,"dm"])
    
    # self sufficiency
    tmp1 <- collapseNames(mb2[,,c("production")])
    tmp2 <- collapseNames(mb2[,,"domestic_supply"])
    tmp1 <- reporthelper(x=tmp1,dim = 3.1,level_zero_name = "Trade|Self-sufficiency",detail = detail)
    tmp2 <- reporthelper(x=tmp2,dim = 3.1,level_zero_name = "Trade|Self-sufficiency",detail = detail)
    out <- tmp1/tmp2  
    # NaN comes from both production and domestic supply being zero. By convention, we set it to 1. 
    # infinite values come from zero domestic supply and positive production. By convention, it's set to 99999.
    out[is.na(out)] <- 1 
    out[is.infinite(out)] <- 99999 
  } else stop("No data exist for the given datasource!")
  
  out <- add_dimension(out, dim=3.1, add="scenario", nm="historical")
  out <- add_dimension(out, dim=3.2, add="model", nm=datasource)
  names(dimnames(out))[3] <- "scenario.model.variable"
  getNames(out) <- paste0(getNames(out)," (1)")
  getNames(tmp2) <- paste0(getNames(tmp2)," (1)")
  return(list(x=out,
              weight=tmp2+10^-10,
              min=0,
              max=99999,
              unit="1",
              description="Agricultural trade Selfsufficiency")
         )
}
pik-piam/mrvalidation documentation built on Sept. 13, 2024, 1:38 a.m.