R/checknii.R

Defines functions ensure_nii

Documented in ensure_nii

#' @name checknii-methods
#' @docType methods 
#' @aliases checknii
#' @description Ensures the output to be a character filename (or vector) from an input
#' image or \code{nifti}, but not gzipped and has \code{.nii} extension
#' 
#' @title Force object to filename with .nii extension
#' @param file character or \code{nifti} object
#' @param ... options passed to \code{\link{checkimg}}
#' @return character filename of image or temporary nii, 
#' with .nii extension
#' 
#' @export
#' @author John Muschelli \email{muschellij2@@gmail.com}
#' @examples 
#' set.seed(5)
#' dims = rep(10, 3)
#' arr = array(rnorm(prod(dims)), dim = dims)
#' arr[,,10] = 0
#' nim = oro.nifti::nifti(arr)
#' rnifti = RNifti::asNifti(nim)
#' timg = tempimg(nim)
#' limg = list(factor(timg), factor(timg))
#' func = checknii
#' func(nim)
#' func(rnifti)
#' func(timg)
#' func(limg)
setGeneric("checknii", function(file, ...) standardGeneric("checknii"))

#' @rdname checknii-methods
#' @aliases checknii,nifti-method
#' @export
setMethod("checknii", "nifti", function(file, ...) { 
  file = checkimg(file, gzipped = FALSE, ...)
  return(file)
})


#' @rdname checknii-methods
#' @aliases checknii,factor-method
#'  
#' @export
setMethod("checknii", "factor", function(file, ...) { 
  file = as.character(file)
  checknii(file = file, ...)
})
  

#' @rdname checknii-methods
#' @aliases checknii,character-method
#' @importFrom R.utils gunzip
#'  
#' @export
setMethod("checknii", "character", function(file, ...) { 
  ### add vector capability
  if (length(file) > 1){
    file = sapply(file, checknii, ...)
    return(file)
  } else {
    file = checkimg(file, gzipped = FALSE, ...)
    if (grepl("[.]gz$", file)){
      file = gunzip(filename = file, 
                    temporary = TRUE, 
                    overwrite = TRUE, 
                    remove = FALSE)
    }
    if (!grepl("[.]nii$", file)) {
      stop("Original file was not .nii or .nii.gz")
    }
  } 
  return(file)
})


#' @rdname checknii-methods
#' @aliases checknii,list-method
#' @export
setMethod("checknii", "list", function(file, ...) { 
  ### add vector capability
  file = sapply(file, checknii, ...)
  return(file)
})

#' @rdname checknii-methods
#' @aliases checknii,ANY-method
#' @export
setMethod("checknii", "ANY", function(file, ...) {
  # workaround because can't get class
  if (inherits(file, "niftiImage")) {
    tfile = tempfile(fileext = ".nii")
    RNifti::writeNifti(image = file, file = tfile, ...)
    return(tfile)    
  } else {
    stop("Not implemented for this type!")
  }
  return(file)
})


#' @rdname checknii-methods
#' @aliases ensure_nii
#' @export
ensure_nii = function(file, ...) { 
  checknii(file = file, ...)
}
neuroconductor-devel-releases/neurobase documentation built on May 6, 2020, 4:25 p.m.