Read meshes from chunked graph (graphene) server via CloudVolume
Source:R/cloudvolume-reticulate.R
read_cloudvolume_meshes.Rdsave_cloudvolume_meshes saves meshes to disk.
read_cloudvolume_meshes uses
save_cloudvolume_meshes internally to save meshes to disk and then
reads them into memory as a neuronlist.
Arguments
- segments
The segment ids to fetch (probably as a character vector)
- savedir
Optional path to a directory in which obj format files will be stored. If not specified, a temporary directory will be created and removed at the end of the call.
- OmitFailures
Whether to omit neurons for which
FUNgives an error. The default value (NA) will result in nlapply stopping with an error message the moment there is an error. For other values, see details.- Force
whether to overwrite a downloaded mesh of the same name
- format
whether to save meshes in Wavefront obj or Stanford poly format. obj is the default but ply is a simpler and more compact format.
- ...
Additional arguments passed to
save_cloudvolume_meshesand then eventually to the Python CloudVolume constructor (see https://github.com/seung-lab/cloud-volume for details.- cloudvolume.url
Optional url from which to fetch meshes normally specified by the
fafbseg.cloudvolume.urloption.
Value
A rgl::shapelist3d list containing one or more mesh3d
objects named by the segment id.
Details
You may to use this to fetch meshes from https://flywire.ai
among other sources. You may need to select your preferred remote data
source using choose_segmentation (see examples). Under the
hood, it uses the
CloudVolume serverless
Python client for reading data in
Neuroglancer compatible
formats. You will therefore need to have a working python3 install of
CloudVolume.
Please install the Python CloudVolume module as described at:
https://github.com/seung-lab/cloud-volume#setup. You must ensure that
you are using python3 (implicitly or explicitly) as mesh fetching from
graphene servers depends on this. This should normally work: pip3
install cloud-volume. If you have already installed CloudVolume but it is
not found, then I recommend editing your Renviron file to set
an environment variable pointing to the correct Python. You can do this
with usethis::edit_r_environ() and then setting e.g.
RETICULATE_PYTHON="/usr/local/bin/python3".
You will normally need to set up some kind of authentication in order to
fetch data. For flywire, we recommend the function
flywire_set_token. For other data sources or more details,
see https://github.com/seung-lab/cloud-volume#chunkedgraph-secretjson
for how to get a token and where to save it. You can either save a json
snippet to ~/.cloudvolume/secrets/cave-secret.json or set an
environment variable (CHUNKEDGRAPH_SECRET="XXXX".
Finally you will also need to set an option pointing to your server. This
is most conveniently achieved using e.g.
choose_segmentation('flywire31'), which is now the default, but for
sources without built-in support, you can also specify a full source URL,
which might look something like
options(fafbseg.cloudvolume.url='graphene://https://xxx.dynamicannotationframework.com/segmentation/xxx/xxx')
You can easily add this to your startup Rprofile with
usethis::edit_r_profile().
See also
choose_segmentation. See simple_python
for installation of the necessary Python packages.
Examples
if (FALSE) { # \dontrun{
kcmesh=save_cloudvolume_meshes("720575940623755722", savedir=".")
kc=read.neurons(kcmesh)
} # }
if (FALSE) { # \dontrun{
# The very first time you access FlyWire data you need to get/store a token
flywire_set_token()
# Each R session, you should choose the default segmentation you want
choose_segmentation('flywire31')
pmn1.flywire=read_cloudvolume_meshes("720575940623979522")
pmn1.fafb=read.neuron.catmaid(5321581)
# Read and plot sample KCs from a FlyWire (short) URL
u="https://ngl.flywire.ai/?json_url=https://globalv1.flywire-daf.com/nglstate/6230669436911616"
kcs=read_cloudvolume_meshes(u)
kcs
plot3d(kcs)
nclear3d()
plot3d(pmn1.fafb, col='red', lwd=2, WithNodes = F)
wire3d(pmn1.flywire)
# you can select specific locations like so
library(elmr)
# CATMAID URL
open_fafb(pmn1.flywire[[1]], open=F)
# CATMAID coords to paste into PIN location box
cat(xyzmatrix(catmaid::catmaid_parse_url(open_fafb(pmn1.flywire[[1]], open=F))), sep=',')
# Neuroglancer coords (raw pixels not nm)
open_fafb_ngl(pmn1.flywire[[1]], open=F, coords.only = T)
} # }