!pip install vfb- connect -- upgrade
# Import libs and initialise API objects
from vfb_connect.cross_server_tools import VfbConnect
import pandas as pd
vc = VfbConnect()
import pymaid
import navis
navis. set_pbars(jupyter= False )
pymaid. set_pbars(jupyter= False )
# Connect to the VFB CATMAID server hosting the FAFB data
rm = pymaid. connect_catmaid(server= "https://fafb.catmaid.virtualflybrain.org/" , api_token= None , max_threads= 10 )
# Test call to see if connection works
print (f 'Server is running CATMAID version { rm. catmaid_version} ' )
# Many functions return JSON-compatible nested data structures. This function coverts them to DataFrame.
def summary_2_df (summary, sort= None ):
"""Convert summary to DataFrame. Optionally specify a set of columns to sort as a list of strings"""
if sort:
return pd. DataFrame. from_records(summary). sort_values(sort)
else :
return pd. DataFrame. from_records(summary)
WARNING: Could not load OpenGL library.
INFO : Global CATMAID instance set. Caching is ON. (pymaid)
Server is running CATMAID version 2020.02.15-925-gf56795c9c
Mapping
Use case: If I have a single neuron, how can I find other neurons of the same or similar type within or between data sources?
Mapping via common parent type
# lets take some examples from a discovery query on the previous spreadhseet
sayin_tab = pd. DataFrame. from_records(vc. get_instances_by_dataset('Sayin2019' , summary= True ))
sayin_tab
label
symbol
id
tags
parents_label
parents_id
data_source
accession
templates
dataset
license
0
OA-VPM3 (FAFB:1329078)
VFB_001001dr
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
catmaid_fafb
1329078
JRC2018Unisex
Sayin2019
https://creativecommons.org/licenses/by-sa/4.0...
1
OA-VPM4 (FAFB:1191261)
VFB_001001dq
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM4 neuron
FBbt_00110152
catmaid_fafb
1191261
JRC2018Unisex
Sayin2019
https://creativecommons.org/licenses/by-sa/4.0...
oct_VPM3 = summary_2_df(vc. get_instances('octopaminergic VPM3 neuron' , summary= True ))
oct_VPM3
label
symbol
id
tags
parents_label
parents_id
data_source
accession
templates
dataset
license
0
OA-VPM3(NO2/NO3)_R - 329566174
VFB_jrchk10d
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
neuprint_JRC_Hemibrain_1point1
329566174
JRC2018Unisex|JRC_FlyEM_Hemibrain
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
1
OA-VPM3(NO2/NO3)_L - 5813061260
VFB_jrchk10e
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
neuprint_JRC_Hemibrain_1point1
5813061260
JRC_FlyEM_Hemibrain|JRC2018Unisex
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
2
OA-VPM3 (FAFB:1329078)
VFB_001001dr
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
catmaid_fafb
1329078
JRC2018Unisex
Sayin2019
https://creativecommons.org/licenses/by-sa/4.0...
oct_VPM3_images = vc. neo_query_wrapper. get_images(oct_VPM3['id' ], stomp= True , template= 'JRC2018Unisex' , image_folder = 'oct_VPM3b' )
oct_VPM3_images
label
symbol
id
tags
parents_label
parents_id
data_source
accession
templates
dataset
license
filename
0
OA-VPM3 (FAFB:1329078)
VFB_001001dr
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
catmaid_fafb
1329078
JRC2018Unisex
Sayin2019
https://creativecommons.org/licenses/by-sa/4.0...
OA_VPM3__FAFB_1329078_.swc
1
OA-VPM3(NO2/NO3)_L - 5813061260
VFB_jrchk10e
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
neuprint_JRC_Hemibrain_1point1
5813061260
JRC_FlyEM_Hemibrain|JRC2018Unisex
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
OA_VPM3_NO2_NO3__L___5813061260.swc
2
OA-VPM3(NO2/NO3)_R - 329566174
VFB_jrchk10d
Entity|Octopaminergic|Adult|Anatomy|has_image|...
octopaminergic VPM3 neuron
FBbt_00110151
neuprint_JRC_Hemibrain_1point1
329566174
JRC2018Unisex|JRC_FlyEM_Hemibrain
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
OA_VPM3_NO2_NO3__R___329566174.swc
oct_VPM3_images = vc. get_images_by_type('octopaminergic VPM3 neuron' , stomp= True , template= 'JRC2018Unisex' , image_folder = 'oct_VPM3' )
nl = navis. read_swc('./oct_VPM3' )
navis. plot3d(nl)
Running query: FBbt:00110151
Query URL: http://owl.virtualflybrain.org/kbs/vfb/instances?object=FBbt%3A00110151&prefixes=%7B%22FBbt%22%3A+%22http%3A%2F%2Fpurl.obolibrary.org%2Fobo%2FFBbt_%22%2C+%22RO%22%3A+%22http%3A%2F%2Fpurl.obolibrary.org%2Fobo%2FRO_%22%2C+%22BFO%22%3A+%22http%3A%2F%2Fpurl.obolibrary.org%2Fobo%2FBFO_%22%7D&direct=False
Query results: 3
OA_VPM3_NO2_NO3__R___329566174 OA_VPM3__FAFB_1329078_ OA_VPM3_NO2_NO3__L___5813061260
Mapping via NBLAST
VFB supports image based queries that find neurons with similar morphology to a query neuron. We use a matrix of NBLAST scores for this purpose. This currently covers mapping between FAFB & Hemibrain and internal mappings within the hemibrain and FLyCircuit neurons. More mappings will be added soon, as well as support for other similarity mappings.
summary_2_df(vc. neo_query_wrapper. get_anatomical_individual_TermInfo(['VFB_001012ay' ], summary= True ))
label
symbol
id
tags
parents_label
parents_id
data_source
accession
templates
dataset
license
0
EPG-6L#1 (FAFB:676911)
VFB_001012ay
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EB-PB glomerulus 6-Vgall neuron
FBbt_00111421
catmaid_fafb
676911
JRC2018Unisex
Turner_Evans2020
https://creativecommons.org/licenses/by-sa/4.0...
similar_to_EPG6L1 = vc. get_similar_neurons('VFB_001012ay' )
similar_to_EPG6L1
id
NBLAST_score
label
types
source_id
accession_in_source
0
VFB_jrchjtk6
0.525
EPG(PB08)_L6 - 541870397
[EB-PB 1 glomerulus-D/Vgall neuron]
neuprint_JRC_Hemibrain_1point1
541870397
1
VFB_jrchjtk8
0.524
EPG(PB08)_L6 - 912601268
[EB-PB 1 glomerulus-D/Vgall neuron]
neuprint_JRC_Hemibrain_1point1
912601268
2
VFB_jrchjtkb
0.504
EPG(PB08)_L6 - 788794171
[EB-PB 1 glomerulus-D/Vgall neuron]
neuprint_JRC_Hemibrain_1point1
788794171
3
VFB_jrchjtji
0.481
EL(EQ5)_L - 1036753721
[EBw.AMP.s-Dga-s.b neuron]
neuprint_JRC_Hemibrain_1point1
1036753721
EPG6L1_similar_images = vc. neo_query_wrapper. get_images(list (similar_to_EPG6L1['id' ]) + ['VFB_001012ay' ],
template= 'JRC2018Unisex' ,
image_folder= 'EPG6L1' ,
stomp= True ) # Note - stomp allows an existing folder to be over-written
EPG6L1_similar_images
label
symbol
id
tags
parents_label
parents_id
data_source
accession
templates
dataset
license
filename
0
EL(EQ5)_L - 1036753721
VFB_jrchjtji
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EBw.AMP.s-Dga-s.b neuron
FBbt_00049180
neuprint_JRC_Hemibrain_1point1
1036753721
JRC_FlyEM_Hemibrain|JRC2018Unisex
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
EL_EQ5__L___1036753721.swc
1
EPG(PB08)_L6 - 788794171
VFB_jrchjtkb
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EB-PB 1 glomerulus-D/Vgall neuron
FBbt_00047030
neuprint_JRC_Hemibrain_1point1
788794171
JRC_FlyEM_Hemibrain|JRC2018Unisex
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
EPG_PB08__L6___788794171.swc
2
EPG-6L#1 (FAFB:676911)
VFB_001012ay
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EB-PB glomerulus 6-Vgall neuron
FBbt_00111421
catmaid_fafb
676911
JRC2018Unisex
Turner_Evans2020
https://creativecommons.org/licenses/by-sa/4.0...
EPG_6L_1__FAFB_676911_.swc
3
EPG(PB08)_L6 - 912601268
VFB_jrchjtk8
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EB-PB 1 glomerulus-D/Vgall neuron
FBbt_00047030
neuprint_JRC_Hemibrain_1point1
912601268
JRC2018Unisex|JRC_FlyEM_Hemibrain
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
EPG_PB08__L6___912601268.swc
4
EPG(PB08)_L6 - 541870397
VFB_jrchjtk6
Entity|has_image|Adult|Anatomy|has_neuron_conn...
EB-PB 1 glomerulus-D/Vgall neuron
FBbt_00047030
neuprint_JRC_Hemibrain_1point1
541870397
JRC_FlyEM_Hemibrain|JRC2018Unisex
Xu2020NeuronsV1point1
https://creativecommons.org/licenses/by/4.0/le...
EPG_PB08__L6___541870397.swc
list (EPG6L1_similar_images['parents_label' ])
['EBw.AMP.s-Dga-s.b neuron',
'EB-PB 1 glomerulus-D/Vgall neuron',
'EB-PB glomerulus 6-Vgall neuron',
'EB-PB 1 glomerulus-D/Vgall neuron',
'EB-PB 1 glomerulus-D/Vgall neuron']
import trimesh
jrc2018u = trimesh. load_remote('https://github.com/schlegelp/navis-flybrains/raw/main/flybrains/meshes/JRC2018U.ply' )
jrc2018u = navis. Volume(jrc2018u, color= (.9 , .9 , .9 , .1 ), name= 'JRC2018U' )
jrc2018u
<navis.Volume(name=JRC2018U, color=(0.9, 0.9, 0.9, 0.1), vertices.shape=(11943, 3), faces.shape=(24558, 3))>
import matplotlib.pyplot as plt
# nl = navis.read_swc('./EPG6L1')
fig, ax = navis. plot2d([nl, jrc2018u], figsize= (12 , 12 ), method= '3d_complex' )
ax. elev = - 90
ax. azim = - 90
ax. dist = 5
#plt.savefig('EPG6L1.png', transparent=True, dpi=400)
## Generate a link to display these neurons on VFB
print (vc. get_vfb_link(list (similar_to_EPG6L1['id' ]) + ['VFB_001012ay' ], template= 'JRC2018Unisex' ))
https://v2.virtualflybrain.org/org.geppetto.frontend/geppetto?id=VFB_001012ay&i=VFB_00101567,VFB_jrchjtk6,VFB_jrchjtk8,VFB_jrchjtkb,VFB_jrchjtji
Note: to clean up ‘spiky’ neurons with obvious alignment issues you can use the navis function despike