Starting a local neuroglancer session with FAFB dataset
This example shows how to start a local neuroglancer session and further add neurons, synapses, neuropil meshes from a public catmaid instance
Import neccesary library modules now
[1]:
import navis
import fafbseg
import pymaid
[2]:
import pandas as pd
import numpy as np
import os
from copy import deepcopy
[3]:
import io
from PIL import Image
[4]:
from pyroglancer.layers import create_nglayer, setlayerproperty
from pyroglancer.localserver import startdataserver, closedataserver
from pyroglancer.ngviewer import openviewer, closeviewer,setviewerstate, get_ngscreenshot
from pyroglancer.ngspaces import create_ngspace
from pyroglancer.createconfig import createconfig
Set configurations to fetch from data from CATMAID
[5]:
publicurl = 'https://fafb.catmaid.virtualflybrain.org/'
[6]:
working_rm = pymaid.CatmaidInstance(publicurl, api_token=None, project_id = 1)
INFO : Global CATMAID instance set. Caching is ON. (pymaid)
INFO - 2021-05-19 22:00:43,902 - client - Global CATMAID instance set. Caching is ON.
Get sample skids and neuropil meshes from CATMAID
[7]:
sample_skids = ['40637','27295','57311','2863104','57323']
[8]:
catmiad_neuronlist=pymaid.get_neurons(sample_skids,remote_instance = working_rm)
Make nrn: 0%| | 0/5 [00:00<?, ?it/s] INFO - 2021-05-19 22:00:44,720 - utils - NumExpr defaulting to 8 threads.
[9]:
vols = pymaid.get_volume(['AL_L', 'AL_R'], color=(255, 0, 0, .2))
[10]:
vols['AL_R'].id = 200
vols['AL_L'].id = 300
vols
[10]:
{'AL_R': <navis.Volume(name=AL_R, id=200, color=(255, 0, 0, 0.2), vertices.shape=(622, 3), faces.shape=(1240, 3))>,
'AL_L': <navis.Volume(name=AL_L, id=300, color=(255, 0, 0, 0.2), vertices.shape=(612, 3), faces.shape=(1228, 3))>}
Start the dataserver to host precomputed data..
[11]:
startdataserver()
Serving data from:
Start a basic neuroglancer local session with all FAFB configurations..
[12]:
configdata = [dict(
ngspace='FAFB',
dimension=dict(x=1, y=1,z=1,units='um'),
voxelsize=dict(x=4,y=4,z=40,units='nm'),
layers=dict(
fafb_v14_clahe=dict(
type='image',
source='precomputed://gs://neuroglancer-fafb-data/fafb_v14/fafb_v14_clahe'),
fafb_surf=dict(
type='surfacemesh',
source='vtk://https://storage.googleapis.com/neuroglancer-fafb-data/elmr-data/FAFB.surf.vtk.gz'
))
)]
/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7
Serving directory at http://127.0.0.1:8000
[13]:
configfileloc = '/Users/sri/.pyroglancer/config_temp.yml'
[14]:
createconfig(configdata, configfileloc)
setting default config file loc
[15]:
layer_kws = {'ngspace': 'FAFB'}
[16]:
create_ngspace(layer_kws)
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Neuroglancer viewer created at: http://127.0.0.1:58817/v/a51569d4574735f355dd0a0f034e16ffafb1eae9/
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: image
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Using layout : xy-3d
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: surfacemesh
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Using layout : xy-3d
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: synapsepred
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Using layout : xy-3d
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: segmentation
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Using layout : xy-3d
Add skids to neuroglancer layers..
[17]:
tmpviewer = create_nglayer(layer_kws = {'type': 'skeletons',
'source': catmiad_neuronlist,
'name':'catmaid_skels',
'color': 'green',
'alpha': 0.5})
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: skeletons
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/40637
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/27295
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/57311
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/2863104
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/57323
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/skeletons/seg_props
Using layout : xy-3d
127.0.0.1 - - [19/May/2021 22:00:46] "GET /precomputed/catmaid_skels/skeletons/info HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:00:46] "GET /precomputed/catmaid_skels/skeletons/seg_props/info HTTP/1.1" 200 -
Add synapses to neuroglancer layers..
[18]:
tmpviewer = create_nglayer(layer_kws = {'type': 'synapses',
'linked_layername': 'catmaid_skels',
'source': catmiad_neuronlist})
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: synapses
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
flushing stuff..
presynapse stuff at: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7 /precomputed/catmaid_skels/presynapses
postsynapse stuff at: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7 /precomputed/catmaid_skels/postsynapses
synapses info path: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses
Adding neuron: 40637
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses/presynapses_cell/40637
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses/postsynapses_cell/40637
Adding neuron: 27295
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses/presynapses_cell/27295
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses/postsynapses_cell/27295
Adding neuron: 57311
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses/presynapses_cell/57311
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses/postsynapses_cell/57311
Adding neuron: 2863104
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses/presynapses_cell/2863104
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses/postsynapses_cell/2863104
Adding neuron: 57323
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/presynapses/presynapses_cell/57323
making: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/catmaid_skels/postsynapses/postsynapses_cell/57323
Using layout : xy-3d
127.0.0.1 - - [19/May/2021 22:01:00] "GET /precomputed/catmaid_skels/presynapses/info HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:00] "GET /precomputed/catmaid_skels/postsynapses/info HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:00] code 404, message File not found
127.0.0.1 - - [19/May/2021 22:01:00] "GET /precomputed/catmaid_skels/presynapses/spatial0/0_0_0 HTTP/1.1" 404 -
127.0.0.1 - - [19/May/2021 22:01:00] code 404, message File not found
127.0.0.1 - - [19/May/2021 22:01:00] "GET /precomputed/catmaid_skels/postsynapses/spatial0/0_0_0 HTTP/1.1" 404 -
Add neuropil meshes to neuroglancer layers..
[19]:
tmpviewer = create_nglayer(layer_kws = {'type': 'volumes','source': [vols['AL_R'],vols['AL_L']],
'name': 'neuropils','color': ['magenta', 'blue'], 'alpha': 0.3})
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: volumes
mesh/200
Seg id is: 200
Full filepath: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/neuropils/mesh/200
mesh/300
Seg id is: 300
Full filepath: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/neuropils/mesh/300
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/neuropils/mesh/segment_properties
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/neuropils/mesh/segment_names
Using layout : xy-3d
127.0.0.1 - - [19/May/2021 22:01:02] "GET /precomputed/neuropils/mesh/info HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:03] "GET /precomputed/neuropils/mesh/segment_properties/info HTTP/1.1" 200 -
Add annotations meshes to neuroglancer layers..
[20]:
temp_pts = pd.DataFrame([[123072, 47001, 3375]],columns=['x','y','z'])
temp_pts = pd.DataFrame([[123072, 47001, 3375], [120000, 17001, 3000]], columns=['x', 'y', 'z'])
temp_pts['description'] = ['center_pt','above_pt']
[21]:
#plot landmarks..
tmpviewer = create_nglayer(layer_kws = {'type': 'points','name': 'landmarks',
"annotationstatetype": 'precomputed',
'source': temp_pts,'color': 'orange'})
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
Layer created: points
config file loc is at: None
using default location at: /Users/sri/.pyroglancer/config_temp.yml
Dimensions are in : FAFB
using default location at: /Users/sri/.pyroglancer/config_temp.yml
using voxel space with scale: [4, 4, 40]
creating: /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/landmarks
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/landmarks/spatial0/0_0_0
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/landmarks/by_id/0
/private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7/precomputed/landmarks/by_id/1
Using layout : xy-3d
127.0.0.1 - - [19/May/2021 22:01:03] "GET /precomputed/landmarks/info HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:04] "GET /precomputed/landmarks/spatial0/0_0_0 HTTP/1.1" 200 -
Set settings of the viewer/segments
[22]:
tmpviewer = setlayerproperty(tmpviewer, property_kws = {'name': 'synapses_buhmann2019','visibility': False})
[23]:
tmpviewer = setlayerproperty(tmpviewer, property_kws = {'name': 'catmaid_skels','segments': sample_skids})
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/skeletons/2863104 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/skeletons/57323 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/skeletons/40637 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/skeletons/57311 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/skeletons/27295 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/2863104 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/40637 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/27295 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/57323 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/57311 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/2863104 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/57311 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/40637 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/27295 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:05] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/57323 HTTP/1.1" 200 -
[24]:
tmpviewer = setlayerproperty(tmpviewer, property_kws = {'name': 'neuropils','segments': [vols['AL_R'].id, vols['AL_L'].id]})
127.0.0.1 - - [19/May/2021 22:01:10] "GET /precomputed/neuropils/mesh/300:0 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:10] "GET /precomputed/neuropils/mesh/200:0 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:10] "GET /precomputed/neuropils/mesh/200 HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2021 22:01:10] "GET /precomputed/neuropils/mesh/300 HTTP/1.1" 200 -
[25]:
tmpviewer = setviewerstate(axis_lines = False, bounding_box = False)
[26]:
#adjust the zoom factor a bit according your settings, screen, viewer state before etc.
tmpviewer = setviewerstate(tmpviewer, axis_lines=False, bounding_box=False, layout='3d', zoom_factor = 208000)
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/landmarks/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/seg_props/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/segment_properties/info HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/57311 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/40637 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/57311 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/57323 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/57323 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/27295 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/27295 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/2863104 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/presynapses/presynapses_cell/2863104 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/postsynapses/postsynapses_cell/40637 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/landmarks/spatial0/0_0_0 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/200:0 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/300:0 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/57311 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/2863104 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/57323 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/40637 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/catmaid_skels/skeletons/27295 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/200 HTTP/1.1" 304 -
127.0.0.1 - - [19/May/2021 22:01:59] "GET /precomputed/neuropils/mesh/300 HTTP/1.1" 304 -
Screenshot of the neuroglancer instance
[27]:
screenshot = get_ngscreenshot(tmpviewer, viewer_size=[1000, 1000])
[28]:
imageStream = io.BytesIO(screenshot.image)
imageFile = Image.open(imageStream)
[29]:
current_folder = globals()['_dh'][0]
[30]:
imagefilepath = os.path.join(current_folder, 'pics/local_neuroglancersession.png')
imagefilepath
[30]:
'/Users/sri/Documents/Python/pyroglancer/docs/source/tutorials/pics/local_neuroglancersession.png'
[31]:
imageFile.save(imagefilepath)

Close the viewer and dataserver
[32]:
closeviewer()
closing already existing ng viewer
[33]:
closedataserver()
Closing server at http://127.0.0.1:8000
Cleaning directory at /private/var/folders/_l/lrfvj_8j3ps0c37ncbr3c8dh0000gn/T/tmp37r6z4p7