VFB_connect Quickstart Guide

[2]:
!pip install ../../../

# Import lib and initialise object
from vfb_connect.cross_server_tools import VfbConnect
vc = VfbConnect()
Processing /Users/robbiecourt/GIT/VFB_connect
  Preparing metadata (setup.py) ... done
Requirement already satisfied: requests in /usr/local/anaconda3/lib/python3.10/site-packages (from vfb-connect==1.2.20.dev7+f222e3e.dirty) (2.32.3)
Requirement already satisfied: pandas in /usr/local/anaconda3/lib/python3.10/site-packages (from vfb-connect==1.2.20.dev7+f222e3e.dirty) (2.2.2)
Requirement already satisfied: jsonpath_rw in /usr/local/anaconda3/lib/python3.10/site-packages (from vfb-connect==1.2.20.dev7+f222e3e.dirty) (1.4.0)
Requirement already satisfied: six in /usr/local/anaconda3/lib/python3.10/site-packages (from jsonpath_rw->vfb-connect==1.2.20.dev7+f222e3e.dirty) (1.16.0)
Requirement already satisfied: decorator in /usr/local/anaconda3/lib/python3.10/site-packages (from jsonpath_rw->vfb-connect==1.2.20.dev7+f222e3e.dirty) (5.1.1)
Requirement already satisfied: ply in /usr/local/anaconda3/lib/python3.10/site-packages (from jsonpath_rw->vfb-connect==1.2.20.dev7+f222e3e.dirty) (3.11)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/anaconda3/lib/python3.10/site-packages (from pandas->vfb-connect==1.2.20.dev7+f222e3e.dirty) (2024.1)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/anaconda3/lib/python3.10/site-packages (from pandas->vfb-connect==1.2.20.dev7+f222e3e.dirty) (2.9.0.post0)
Requirement already satisfied: numpy>=1.22.4 in /usr/local/anaconda3/lib/python3.10/site-packages (from pandas->vfb-connect==1.2.20.dev7+f222e3e.dirty) (1.26.4)
Requirement already satisfied: pytz>=2020.1 in /usr/local/anaconda3/lib/python3.10/site-packages (from pandas->vfb-connect==1.2.20.dev7+f222e3e.dirty) (2024.1)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/anaconda3/lib/python3.10/site-packages (from requests->vfb-connect==1.2.20.dev7+f222e3e.dirty) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/anaconda3/lib/python3.10/site-packages (from requests->vfb-connect==1.2.20.dev7+f222e3e.dirty) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/anaconda3/lib/python3.10/site-packages (from requests->vfb-connect==1.2.20.dev7+f222e3e.dirty) (2.2.2)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/anaconda3/lib/python3.10/site-packages (from requests->vfb-connect==1.2.20.dev7+f222e3e.dirty) (2024.7.4)
Building wheels for collected packages: vfb-connect
  Building wheel for vfb-connect (setup.py) ... done
  Created wheel for vfb-connect: filename=vfb_connect-1.2.20.dev7+f222e3e.dirty-py3-none-any.whl size=40736 sha256=563060cdb1f34c8090989511a5969b6d60a7c3e6110e5cbd9480ec1ed2318304
  Stored in directory: /private/var/folders/7j/bv0xtj3s4m9dt5zjj_d4j6080000gn/T/pip-ephem-wheel-cache-iioqb5id/wheels/8a/3f/b7/d8e312c0c9bba1174fc1a5798dba579586f6d21e0116466a00
Successfully built vfb-connect
Installing collected packages: vfb-connect
  Attempting uninstall: vfb-connect
    Found existing installation: vfb-connect 1.2.20.dev7+f222e3e.dirty
    Uninstalling vfb-connect-1.2.20.dev7+f222e3e.dirty:
      Successfully uninstalled vfb-connect-1.2.20.dev7+f222e3e.dirty
Successfully installed vfb-connect-1.2.20.dev7+f222e3e.dirty

VFB connect API overview

The VFB connect API provides programmatic access to the databases underlying Virtual Fly Brain.

At the core of Virtual Fly Brain is a set of curated terms for Drosophila neuro-anatomy organised into a queryable classification, including terms for brain regions, e.g. nodulus and neurons e.g. MBON01. These terms are used to annotate and classify individual brain regions and neurons in images and connectomics data. For example the term MBON01 is used to classify individual neurons from sources including the CATMAID-FAFB and Neuprint-HemiBrain databases. VFB stores both registered 3D images and connectomics data (where available) for all of these neurons.

A single VfbConnect object wraps connections and canned queries against all open VFB databases. It includes methods for retreiving metadata about anatomy, individual brain regions and neurons including IDs for these that can be used for queries against other databases (e.g. CATMAID & neuprint). It provides methods for downloading images and connectomics data. It provides access to sophisticated queries for anatomical classes and individual neurons accoring to their classification & properties.

Locations for methods under a VfbConnect object.

  1. Under vc.neo_query_wrapper are

    1. A set of methods that take lists of IDs as a primary argument and return metadata.

    2. A set of methods for mapping between VFB IDs and external IDs

  2. Directly under vc are:

    1. A set of methods that take the names of classes in VFB e.g. ‘nodulus’ or ‘Kenyon cell’, or simple query expressions using the names of classes and return metadata about the classes.

    2. A set methods for querying connectivity and similarity

  3. Direct access to API queries is provided under the ‘nc’ and ‘oc’ attributes for Neo4J and OWL queries respectively. We will not cover details of how to use these here.

Note: available methods and their documentation are easy to explore in DeepNote. Tab completion and type adhead can be used to help find methods. Float your cursor over a method to see its signature and docstring.

1. vc.neo_query_wrapper methods overview

1.1 vc.neo_query_wrapper TermInfo queries return the results of a VFB Term Information window as JSON, following the VFB_JSON standard, or a summary that can easily be converted into a DataFrame.

[3]:
# A query for full TermInfo.  This probably produces more information than you will need for most purposes.
vc.neo_query_wrapper.get_type_TermInfo(['FBbt_00003686'])[0].keys()
[3]:
dict_keys(['label', 'symbol', 'id', 'tags', 'parents_label', 'parents_id'])
[4]:
# A query for summary info
import pandas as pd

summary = vc.neo_query_wrapper.get_type_TermInfo(['FBbt_00003686'], summary=True)
summary_tab = pd.DataFrame.from_records(summary)
summary_tab
[4]:
label symbol id tags parents_label parents_id
0 KC KC FBbt_00003686 Entity|Anatomy|Cell|Class|Nervous_system|Neuro... anterior ectoderm derivative|mushroom body int... FBbt_00025991|FBbt_00007484
[5]:
# A different method is needed to get info about individual neurons

summary = vc.neo_query_wrapper.get_anatomical_individual_TermInfo(['VFB_jrchjrch'], summary=True)
summary_tab = pd.DataFrame.from_records(summary)
summary_tab

[5]:
label symbol id tags parents_label parents_id data_source accession templates dataset license
0 5-HTPLP01_R 5-HTPLP01_R VFB_jrchjrch Entity|Adult|Anatomy|Cell|Glutamatergic|Indivi... adult glutamatergic neuron|adult serotonergic ... FBbt_00058208|FBbt_00110945 neuprint_JRC_Hemibrain_1point1 1324365879 JRC2018Unisex|JRC_FlyEM_Hemibrain Xu2020NeuronsV1point1 https://creativecommons.org/licenses/by/4.0/le...

1.2 The neo_query_wrapper also includes methods for mapping between IDs from different sources.

[6]:
# Some bodyIDs of HemiBrain neurons from the neuprint DataBase:
bodyIDs = [1068958652, 571424748, 1141631198]
vc.neo_query_wrapper.xref_2_vfb_id(map(str, bodyIDs)) # Note IDs must be strings
[6]:
{'1068958652': [{'db': 'neuronbridge', 'vfb_id': 'VFB_jrch06r9'},
  {'db': 'neuronbridge', 'vfb_id': 'VFB_jrchjwda'},
  {'db': 'neuprint_JRC_Hemibrain_1point0point1', 'vfb_id': 'VFB_jrch06r9'},
  {'db': 'neuprint_JRC_Hemibrain_1point1', 'vfb_id': 'VFB_jrchjwda'}],
 '571424748': [{'db': 'neuronbridge', 'vfb_id': 'VFB_jrch06r6'},
  {'db': 'neuronbridge', 'vfb_id': 'VFB_jrchjwct'},
  {'db': 'neuprint_JRC_Hemibrain_1point0point1', 'vfb_id': 'VFB_jrch06r6'},
  {'db': 'neuprint_JRC_Hemibrain_1point1', 'vfb_id': 'VFB_jrchjwct'}],
 '1141631198': [{'db': 'neuronbridge', 'vfb_id': 'VFB_jrch05uz'},
  {'db': 'neuronbridge', 'vfb_id': 'VFB_jrchjw8r'},
  {'db': 'neuprint_JRC_Hemibrain_1point0point1', 'vfb_id': 'VFB_jrch05uz'},
  {'db': 'neuprint_JRC_Hemibrain_1point1', 'vfb_id': 'VFB_jrchjw8r'}]}
[7]:
# xref queries can be constrained by DB. Results can optionally be reversed

vc.neo_query_wrapper.xref_2_vfb_id(map(str, bodyIDs), db = 'neuprint_JRC_Hemibrain_1point1' , reverse_return=True)
[7]:
{'VFB_jrchjwct': [{'acc': '571424748',
   'db': 'neuprint_JRC_Hemibrain_1point1'}],
 'VFB_jrchjw8r': [{'acc': '1141631198',
   'db': 'neuprint_JRC_Hemibrain_1point1'}],
 'VFB_jrchjwda': [{'acc': '1068958652',
   'db': 'neuprint_JRC_Hemibrain_1point1'}]}

2. vc direct methods overview

2.1 Methods that take the names of classes in VFB e.g. ‘nodulus’ or ‘Kenyon cell’, or simple query expressions using the names of classes and return metadata about the classes or individual neurons

[8]:
KC_types = vc.get_subclasses("Kenyon cell", summary=True)
pd.DataFrame.from_records(KC_types)[0:5]
Running query: FBbt:00003686
Query URL: http://owl.virtualflybrain.org/kbs/vfb/subclasses?object=FBbt%3A00003686&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: 37
[8]:
label symbol id tags parents_label parents_id
0 Kenyon cell of main calyx FBbt_00047926 Entity|Adult|Anatomy|Cell|Cholinergic|Class|Ne... adult Kenyon cell FBbt_00049825
1 KCab-c KCab-c FBbt_00110929 Entity|Adult|Anatomy|Cell|Cholinergic|Class|Ne... alpha/beta surface/core Kenyon cell FBbt_00049838
2 KCg-m KCg-m FBbt_00111061 Entity|Adult|Anatomy|Cell|Cholinergic|Class|Ne... Kenyon cell of main calyx|adult gamma Kenyon cell FBbt_00047926|FBbt_00049828
3 alpha/beta inner-core Kenyon cell FBbt_00049111 Entity|Adult|Anatomy|Cell|Cholinergic|Class|Ne... alpha/beta core Kenyon cell FBbt_00110929
4 gamma Kenyon cell FBbt_00100247 Entity|Anatomy|Cell|Class|Nervous_system|Neuro... Kenyon cell FBbt_00003686

2.2 Methods for querying connectivity

Please see Connectomics Notebook for examples