R/PATH-main.R

Defines functions leerDatos estimarBiomasa escribirResultados plotBoot estimarIndices

Documented in escribirResultados estimarBiomasa leerDatos

# path package: Pelagic Assessment Tools for Hydroacoustics ---------------

#' Pelagic Assessment Tools for Hydroacoustics
#'
#' Pelagic Assessment Tools for Hydroacoustics
#'
#' \tabular{ll}{ Package: \tab path\cr Type: \tab Package\cr Version: \tab
#' 0.1\cr Date: \tab 2015-02-13\cr License: \tab GPL-2\cr } 
#'
#' @name path-package
#' @aliases path-package path
#' @docType package
#' @references path: Pelagic Assessment Tools for Hydroacoustics (Boletin IMARPE)
#' @keywords hydroacoustics, pelagic resources, assessment
#' @examples
#'
#' method = "simmonds2010"
#' path   = "./crucero_20150203"
#' sd     = TRUE
#' 
#' data    = getData(path) # valida y lee los datos
#' # fusiona las bases de datos usando el metodo x
#' crucero = asignarCalas(data) 
#' biomasa = estimarBiomasa(crucero, method=method, sd=sd, n=1000)
#' 
#' summary(biomasa)
#' print(biomasa)
#' plot(biomasa) 
#' plot(biomasa, what="serie")
#' 
#' #' grabar csv con todas las tablas 
#' imprimirResultados(biomasa, path=".", summary=TRUE, image="png")
#' 
#' indicadores = calcularIndicadores(biomasa)
#' 
#' summary(indicadores)
#' print(indicadores)
#' plot(indicadores) 
#' plot(indicadores, what="serie")
NULL

#' @title Lee las bases de datos de crucero necesarias para la estimacion
#' @description Funcion para leer bases de datos de calas y bitacoras desde un directorio
#' especificado y dado un numero de crucero.
#' @param crucero Numero de crucero del que se desea leer bases.
#' @param directorio Carpeta en donde se encuentran localizados los archivos a ser leidos.
#' @param ... Argumentos extra.
#' @examples
#' leerDatos(acustica, talas, biologia, crucero = 141112)
leerDatos = function(acustica=NULL, biometrico=NULL, biologia=NULL, oceanografia=NULL, 
                     crucero=NULL, directorio = ".",  ...) {
  
  if(is.null(acustica) & is.null(biometrico) & is.null(biologia) & is.null(oceanografia)) {
    message("Nothing to do.")
    return(invisible())
  }
    
  
  file.biometrico    = .checkFile(directorio, biometrico)
  file.logbook       = .checkFile(directorio, acustica)
  file.biologia      = .checkFile(directorio, biologia)
  file.oceanografia  = .checkFile(directorio, oceanografia)

  salida = .getCrucero(acustica = file.logbook, biometrico = file.biometrico, biologia = file.biologia,
                       oceanografia = file.oceanografia, crucero = crucero, directorio = directorio, ...)
  
  # Definir el objeto con clase 'imarpeSurvey'
  class(salida) = "imarpeSurvey"
  
  return(salida)
}

# Estima biomasa
#' @title Lee las bases de datos de crucero necesarias para la estimacion
#' @description Funcion para leer bases de datos de calas y bitacoras desde un directorio
#' especificado y dado un numero de crucero.
#' @param crucero Numero de crucero del que se desea leer bases.
#' @param directorio Carpeta en donde se encuentran localizados los archivos a ser leidos.
#' @param ... Argumentos extra.
#' @examples
#' biomasa = estimarBiomasa(data = crucero)
estimarBiomasa = function(data, method = "simmonds2010", sp = "anchoveta",
                      boot = FALSE, n = 100, verbose = TRUE, lat = NULL, 
                      umbralIndividuos = 150, coverage=2, seed=880820,
                      biometricDateFormat = "%Y-%m-%d", ...) {
  
  set.seed(seed)
  
  specie = getSpeciesInfo(sp) # get species information
  # create baseCalas
  data$baseCalas = .convertirCruceroMF(base = data$baseBiometrico, sp = sp, 
                                     umbralIndividuos = umbralIndividuos)
  data$baseCalas = .getEcoabundancia(data, sp = sp) # add Ecoabundance
  data$baseCalas = .addConditionFactor(data, sp=sp) # add condition factor

  #Filtra según umbral de individuos
  data$baseCalas = .applySampleSizeThreshold(baseCalas = data$baseCalas,
                                             umbralIndividuos=umbralIndividuos)
  
  if(nrow(data$baseCalas) == 0){
    salida = .NA_object
    
    warning("Ninguna cala supera el umbral de individuos.")
  }else{
  
	index = .getIndices(data = data$bitacoraAcustica, stock = "total", dist.costa = 80, lat.max = -3, lat.min = -19, gridsize = 0.25, ...)
  
    data$bitacoraAcustica = .isAllocated(data) # acoustic data close to hauls
    data$bitacoraAcustica = .addPropBySpecie(data=data, sp=sp)
    
    # filter by Latitude
    data$baseCalas = .filterLatitude(data$baseCalas, lat)
    data$bitacoraAcustica = .filterLatitude(data$bitacoraAcustica, lat)
    
    # TO_DO: simplify specie$acustica by using 'nasc'
    data$bitacoraAcustica$nasc = data$bitacoraAcustica[, specie$acustica]
    
    # use biomass estimation method
    salida = switch(tolower(method),
                    simmonds2010 = .calculateBiomass_simmonds2010(data=data, sp=sp, 
                                                                  boot=boot, n=n, verbose=verbose, 
                                                                  coverage=coverage,
                                                                  dateFormat = biometricDateFormat, ...),
                    stop("El metodo indicado de estimacion no existe."))
  }
  
  #index = .getIndices(data = data$bitacoraAcustica, stock = "total", dist.costa = 80, ...)
  
  salida$info = data$info
  salida$info$method = method
  salida$info$sp     = sp
  salida$info$boot   = boot
  salida$info$nboot  = if(isTRUE(boot)) n else 1
  salida$indices = index
  
  class(salida) = "imarpeSurvey.output"
  
  return(salida)
}

# Escribir las salidas
#' @title Escribe los resultados de la estimación de biomasa
#' @description Funcion para escribir los resultados de la estimación de la biomasa
#' en el disco.
#' @param object Objeto de clase 'imarpeSurvey.output' producido por la función \code{estimarBiomasa}.
#' @param dir Carpeta en donde se escribirán ls resultados.
#' @param ... Argumentos extra a ser pasados la función que escribe los resultados.
#' @examples
#' biomasa = estimarBiomasa(data = crucero)
#' escribirResultados(object = biomasa)
escribirResultados = function(object, dir = ".", sp = "anchoveta", ...){

  model = deparse(substitute(object))
  
  dir = file.path(dir, "output")
  if(!file.exists(dir)) dir.create(dir, recursive=TRUE)
  
  writeResults(object, var="biomass", dir=dir)
  writeResults(object, var="abundance", dir=dir)
  png(file=file.path(dir, 
                     .getFileName(object$info, stock="nc", var="biomass", ext="png")),
      width=960, height=480)
  plot(object, sp = sp)
  dev.off()

  save(object, file = file.path(dir, paste0(model, ".RData")))
  
  return(invisible())
}

plotSurveyTracks <- function (object, var, domain, hires, ...) {
  # should this be the main plot method for imarpeSurvey class?
  plot.map(object$bitacoraAcustica, type="l", domain=domain, hires=hires, ...)
  plot.map(object$bitacoraAcustica[object$bitacoraAcustica[, var]>0, ], 
           type="l", col="blue", add=TRUE)
  plot.map(object$baseCalas, col="red", add=TRUE)
  return(invisible())
}

plotBoot = function(object, ...) {
  biomass = object$raw$boot$biomass
  hist(biomass)
  return(invisible())
}

estimarIndices = function(object, dirOutput, stock = "total", dist.costa = 200, writeCsv = TRUE, lat.max = -3, lat.min = -19, gridsize = 0.25, ...){
	
	obj = read.csv(object)
	
	index = .getIndices(data = obj, stock = stock, dist.costa = dist.costa, lat.max = lat.max, lat.min = lat.min, gridsize = gridsize, ...)

	out = round(index, 2)
	
	if(isTRUE(writeCsv)){
	  outputDir <- file.path(dirOutput, "output")
	  dir.create(outputDir, showWarnings = FALSE)
	  
	  write.csv(out, file = file.path(outputDir, "indices.csv"))
	}
	
	return(out)
}
imarpe/path documentation built on May 18, 2019, 4:45 a.m.