R/symmetrisel1.R

#' Symmetrise the L1 CNS space
#'
#' @param x a set of 3D coordinates (Nx3 matrix), a neuron, neuronlist, dotprops, hxsurf or mesh3d object.
#' currently point replacement is only supported for neuron and neuronlist objects.
#' @param regdir Path to a tps transformation, generated by the Morpho package.Default symmetrises the larval l1 CNS, scaled in micrometers.
#' @param ... additional arguments passed to: \code{\link{shootflow}} \code{\link{apply.mirror.affine}}
#'
#' @return a set of 3D cordinates (or a neuron/neuronlist object if that was given as input), that has undergone
#' symmetrisation
#' @export
#'
#' @rdname symmetrisel1
symmetrisel1<-function(x, symtrans = readRDS(system.file("extdata/symmetry_transform.rds", package = 'deformetricar')),...) UseMethod("symmetrisel1")

#' @export
#' @rdname symmetrisel1
symmetrisel1.default <- function (x, symtrans = readRDS(system.file("extdata/symmetry_transform.rds", package = 'deformetricar')), ...){
  x = Morpho::applyTransform(x, symtrans)
  x
}

#' @export
#' @rdname symmetrisel1
symmetrisel1.neuron<-function(x, symtrans = readRDS(system.file("extdata/symmetry_transform.rds", package = 'deformetricar')),...) {
  points=xyzmatrix(x)
  morph.points<-symmetrisel1.default(x=points, symtrans = symtrans, ...)
  xyzmatrix(x)<-morph.points
  x
}

#' @export
#' @rdname symmetrisel1
symmetrisel1.neuronlist<-function(x, symtrans = readRDS(system.file("extdata/symmetry_transform.rds", package = 'deformetricar')), ...){
  points=xyzmatrix(x)
  morph.points<-symmetrisel1.default(x=points, symtrans = symtrans, ...)
  count = 1
  for (neuron in 1:length(x)){
    n = count + nrow(xyzmatrix(x[[neuron]])) -1
    xyzmatrix(x[[neuron]]) <- morph.points[count:n,]
    count = count + nrow(xyzmatrix(x[[neuron]]))
  }
  return(x)
}
alexanderbates/deformetricar documentation built on May 11, 2019, 11:26 p.m.