connectome-neuprint / neuprint-python

Python client utilties for interacting with the neuPrint connectome analysis service
BSD 3-Clause "New" or "Revised" License
31 stars 15 forks source link

Obtaining the ROI name to which the soma belongs #23

Closed tfardet closed 3 years ago

tfardet commented 3 years ago

Using neuprint or some other method, is it possible to associate a precise ROI (especially a non-primary one) to the soma of each neuron? I found this mention of an h5 file which should enable me to do it for the primary ROIs but, for regions like MB or CX, it would be nice to be able to do this at a more detailed level.

EDIT: actually, using the h5 file and associated script does not seem to work for the positions associated to the somas (at least not with an expected volumic scale of 5 corresponding to the 8nm to 256nm change in scaling)

stuarteberg commented 3 years ago

The ROIs were created to define neuropil compartments, so they explicitly exclude the soma. (Here's a neuroglancer view for illustration.) So the soma positions will not generally reside within any ROI, primary or otherwise.

tfardet commented 3 years ago

Ah, I missed that information, thank you! Let me reformulate my question then: given a parcellation of the connectome into regions such as OL, CX, MB, etc, is there a way to get only neurons that have their soma within CX? Is it also possible to do this on a smaller scale (somas within AB(R) or LA)? Basically I am simply looking for a way to associate each neuron to the label of the region in which its soma is located.

stuarteberg commented 3 years ago

I’m afraid I don’t understand the question. The CX is in the interior of the volume. The soma are all on the outside. There is no neuron whose soma resides within the CX. Likewise for the AB(R) and the LA.

Using the link I posted above, can you find an example neuron that illustrates the sort of thing you’re hoping to programmatically obtain?

tfardet commented 3 years ago

OK, this probably comes from my lack of knowledge regarding the drosophila connectome. Let me explain my goal instead, hopefully that will help: I would like to build a mesoscale representation of this connectome, meaning that I want to group neurons into meaningful populations (what I thought the ROIs were) and look at projections between populations.

In mammalian brains, that would be something like "neurons from GPe are projecting to STN" for instance.

Is this something that can also make sense for drosophila? If so, how would I group neurons (somas) into regions/populations?

stuarteberg commented 3 years ago

how would I group neurons (somas) into regions/populations?

That question does not have a simple or settled answer. It very much depends on how you're attempting to subdivide the populations, and with what granularity. It may not be fruitful to explore this question without more background on drosophila neuroanatomy. (I'm not an expert, either.)

One option you could consider is to look at the cellBodyFiber field for each neuron. Not all neurons in the database have that field set, but it's the first natural grouping to use for those neurons which do have it set.

In [27]: from neuprint import Client, fetch_neurons, NeuronCriteria as NC

In [28]: c = Client('neuprint.janelia.org', 'hemibrain:v1.2')

In [29]: neurons, weights = fetch_neurons(NC(status='Traced'))

In [31]: neurons.eval('not cellBodyFiber.isnull()').sum()
Out[31]: 15653

In [32]: neurons['cellBodyFiber'].nunique()
Out[32]: 192

For further assistance on research questions (rather than code questions), I recommend asking for help on the neuprint mailing list: https://groups.google.com/g/neuprint

tfardet commented 3 years ago

OK, will do that! Thanks a lot for your help, I'll close this issue then.