RBBGCMuso/RBBGCMuso/R/outputMapping.R
2019-01-30 13:43:36 +01:00

59 lines
3.1 KiB
R

#' updateMusoMapping
#'
#' This function updates the Biome-BGCMuSo output code-variable matrix. Within Biome-BGCMuSo the state variables and fluxes are marked by integer numbers. In order to provide meaningful variable names (e.g. 3009 means Gross Primary Production in Biome-BGCMuSo v5) a conversion table is needed which is handled by this function.
#' @author Roland HOLLOS
#' @param output_map_init The output code-variable bindings are described in output_map_init.c file that is part of the Biome-BGCMuSo source code. Using this function the user can read the output_map_init.c file and pass it to RBBGCMuso for further work.
#' @return The output code-variable matrix, and also the function changes the global variable
#' @export
#' @usage updateMusoMapping(output_map_init="output_map_init.c")
updateMusoMapping<-function(output_map_init="output_map_init.c"){
outputRaw<-grep("\\[",readLines(output_map_init,-1),value=TRUE)
codes <- as.vector(lapply(outputRaw, function (x) as.numeric(unlist(strsplit(unlist(strsplit(x,"\\["))[2],"\\]"))[1])))
names <- unlist(lapply(outputRaw, function (x) unlist(strsplit(unlist(strsplit(x,"\\&"))[2],";"))[1]))
mMapping <-cbind(codes,names)
save(mMapping, file="mMap.RData")
return(mMapping)
}
#' musoMapping
#'
#' musoMapping can provide the user the name of a Biome-BGCMuSo output code. Within Biome-BGCMuSo the state variables and fluxes are marked by integer numbers. In order to provide meaningful variable names (e.g. 3009 means Gross Primary Production) a conversion table is needed which is utilized by this function. This function converts variable codes into names musoMappingFind does the opposite.
#' @author Roland HOLLOS
#' @param code the MuSo outputcode
#' @param mapData updateMusomapping generated matrix
#' @return The name of the Biome-BGCMuSo output code (e.g. if code is 3009 this function should return GPP to the user)
#' @export
#' @usage musoMapping(code, mapData=NULL)
musoMapping <- function(code, mapData=NULL){
if(is.null(mapData)){
return(unlist(mMapping[which(mMapping[,1]==code),2])) #mMapping is package-scoped system variable generated by udateMusoMapping
} else {
return(unlist(mapData[which(mapData[,1]==code),2]))
}
}
#' musoMappingFind
#'
#' musoMappingFind can provide us the code of the Biome-BGCMuSo output variable name. Within Biome-BGCMuSo the state variables and fluxes are marked by integer numbers. In order to provide meaningful variable names (e.g. 3009 means Gross Primary Production) a conversion table is needed which is utilized by this function. This function converts variable names into codes. musoMapping does the opposite.
#' @author Roland HOLLOS
#' @param variable If this is null, return the whole mapping table. In other cases search for the variable code
#' @return The code of the specific output variable name
#' @export
#' @usage musoMapping(code, mapData=NULL)
musoMappingFind <- function(variable=NULL){
if(is.null(variable)){
return(mMapping)
} else {
mMapping[grep(variable,mMapping[,2]),]
}
}