!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
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