TMD icon indicating copy to clipboard operation
TMD copied to clipboard

KeyError for a neuron while computing persistence diagram

Open dokato opened this issue 3 years ago • 3 comments

When calling get_persistence_diagram on my neuron ( swc file attached) that looks like this:

Screenshot 2022-11-02 at 17 18 16

I get the following error:

In [18]: perd = tmd.methods.get_persistence_diagram(neuron.neurites[0])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Input In [18], in <cell line: 1>()
----> 1 perd = tmd.methods.get_persistence_diagram(neuron.neurites[0])

File ~/anaconda3/envs/testnavis/lib/python3.9/site-packages/tmd/Topology/methods.py:102, in get_persistence_diagram(tree, feature, **kwargs)
    100 def get_persistence_diagram(tree, feature='radial_distances', **kwargs):
    101     '''Method to extract ph from tree that contains mutlifurcations'''
--> 102     ph, _ = tree_to_property_barcode(
    103         tree,
    104         filtration_function=_filtration_function(feature, **kwargs),
    105         property_class=NoProperty
    106     )
    107     return ph

File ~/anaconda3/envs/testnavis/lib/python3.9/site-packages/tmd/Topology/methods.py:62, in tree_to_property_barcode(tree, filtration_function, property_class)
     59 while len(alives) > 1:
     60     for alive in alives:
---> 62         p = parents[alive]
     63         c = children[p]
     65         if np.alltrue(active[c]):
KeyError: 15

In fact this is a neuron exported from the navis library.

> import navis
> n = navis.example_neurons(1)
> navis.write_swc(n,'nrn.swc')

nrn.swc.zip

dokato avatar Nov 02 '22 17:11 dokato

Hi @dokato,

I'm not sure if that is causing your issue, but I noticed a few things that are unexpected in the file. I assume this structure is a neuron. However the section labels (i.e. the second row of section types) are not what I would expect. For example you have some parts of the tree labeled as soma, most nodes are undefined (0) and some are bifurcations etc. In order to make your file work with the software I suggest you make the types as per the expected swc standard: soma:1, axon:2, basal:3, apical:4. There is no need to label bifurcations, terminations, the software will recognize these automatically. I would propose that you fix this in your file and then you can try again the process. I am checking the connectivity of your nodes in the meantime to see if there are other issues that could be improved.

Best, Lida

lidakanari avatar Nov 04 '22 10:11 lidakanari

Thank you @lidakanari for you reply. As you might have noticed I didn't create this swc file myself, I exported that from the other python library. Do you suggest that there is an issue with the data format of navis exporter then?

dokato avatar Nov 04 '22 11:11 dokato

Hi @dokato, I'm not very familiar with the exporter, but I looked at the example data they provide and they all have the same issue with the section types, for example:

https://github.com/navis-org/navis/blob/master/navis/data/swc/1734350788.swc

So I don't think the issue is the writer, rather the examples are not in the expected format.

Maybe you can download one cell from neuromorpho.org, in which data are more standardized. If you just want an example cell to try things on this might be a good start. Otherwise, you can work on the specific file and fix the section types manually.

lidakanari avatar Nov 04 '22 14:11 lidakanari