| Title: | Fast C++ Primitives for the 'NeuroAnatomy Toolbox' |
|---|---|
| Description: | Fast functions implemented in C++ via 'Rcpp' to support the 'NeuroAnatomy Toolbox' ('nat') ecosystem. These functions provide large speed-ups for basic manipulation of neuronal skeletons over pure R functions found in the 'nat' package. The expectation is that end users will not use this package directly, but instead the 'nat' package will automatically use routines from this package when it is available to enable large performance gains. |
| Authors: | Gregory Jefferis [aut, cre] (ORCID: <https://orcid.org/0000-0002-0587-9355>) |
| Maintainer: | Gregory Jefferis <[email protected]> |
| License: | GPL (>= 3) |
| Version: | 0.2 |
| Built: | 2026-06-04 06:55:08 UTC |
| Source: | https://github.com/natverse/natcpp |
Convert physical coordinates to 1d indices into image array
c_coords21dindex(xyz, origin, voxdims, dims, clamp = FALSE)c_coords21dindex(xyz, origin, voxdims, dims, clamp = FALSE)
xyz |
Nx3 matrix or data.frame of physical coordinates |
origin |
Numeric: 3d coordinates of the origin |
voxdims |
Numeric: 3 numbers describing the voxel dimensions |
dims |
Integer dimensions of the 3d image array |
clamp |
Logical: whether or not to clamp values within the pixel boundaries of the image. |
Nx3 integer matrix of pixel coordinates
Turn a segment list into an edgelist suitable for constructing an ngraph
c_EdgeListFromSegList(L)c_EdgeListFromSegList(L)
L |
a list containing integer vectors from |
It is up to the caller to generate the seglist.
Note that isolated points will be dropped since they have no edges.
An integer matrix of N rows and 2 columns
## Not run: library(nat) # make a neuron with multiple subtrees n=prune_vertices(Cell07PNs[[1]], 48L) # Must use flatten=T if including all subtrees sl=as.seglist(n, all = TRUE, flatten = TRUE) c_EdgeListFromSegList(sl) ## End(Not run)## Not run: library(nat) # make a neuron with multiple subtrees n=prune_vertices(Cell07PNs[[1]], 48L) # Must use flatten=T if including all subtrees sl=as.seglist(n, all = TRUE, flatten = TRUE) c_EdgeListFromSegList(sl) ## End(Not run)
Convert physical coordinates to pixel coordinates
c_ijkpos(xyz, origin, voxdims, dims, clamp = FALSE)c_ijkpos(xyz, origin, voxdims, dims, clamp = FALSE)
xyz |
Nx3 matrix of physical coordinates |
origin |
Numeric: 3d coordinates of the origin |
voxdims |
Numeric: 3 numbers describing the voxel dimensions |
dims |
Integer dimensions of the 3d image array |
clamp |
Logical: whether or not to clamp values within the pixel boundaries of the image. |
Nx3 integer matrix of pixel coordinates
A simple function to compute the lengths of the elements of an R list
c_listlengths(L)c_listlengths(L)
L |
a list |
This is equivalent to the base::lengths however it it much
faster for long lists (and somewhat slower for short ones).
An integer vector containing the length of each element of L
Convert a matrix into list of row vectors
c_ListofMatrixRows(object)c_ListofMatrixRows(object)
object |
An integer, numeric, character or logical matrix of N rows and M columns |
Typically this will be for 3D coordinates but there are no limits on row length.
a list containing N vectors of length M corresponding to the rows of
object.
## Not run: library(nat) xyz=xyzmatrix(Cell07PNs) mat2list = function(m) { um=unname(m) lapply(1:nrow(um), function(i) um[i,]) } bench::mark(rcpp=c_ListofMatrixRows(xyz), r=mat2list(xyz)) ## End(Not run)## Not run: library(nat) xyz=xyzmatrix(Cell07PNs) mat2list = function(m) { um=unname(m) lapply(1:nrow(um), function(i) um[i,]) } bench::mark(rcpp=c_ListofMatrixRows(xyz), r=mat2list(xyz)) ## End(Not run)
c_seglengths computes the summed segment length equivalent
to nat::seglengths(sumsegment = T)
c_total_cable computes the summed total cable for a
whole neuron. It's intended use is the nat::summary.neuron function.
c_seglengths(sl, x, y, z) c_total_cable(sl, x, y, z)c_seglengths(sl, x, y, z) c_total_cable(sl, x, y, z)
sl |
A |
x, y, z
|
Numeric vectors with 3D coordinate data (which could be columns from a data frame) |
Find 1D index given n-dimensional indices
c_sub2ind(dims, indices)c_sub2ind(dims, indices)
dims |
Integer dimensions of the array (usually 3d) |
indices |
Nx3 integer matrix of pixel coordinates |
numeric vector of linear indices into the array
c_topntail returns an 2xN matrix containing the start and end
of each of the vectors in the input list. Length 0 vectors are ignored, while
length 1 vectors are duplicated
For c_topntail_list, a list of the same length as
L having the same elements when their length is <=2 or
the first and last elements when length>2.
c_topntail(L) c_topntail_list(L)c_topntail(L) c_topntail_list(L)
L |
a list containing integer vectors, typically a |
For c_topntail an integer matrix. For c_topntail_list
a list.