Mentions légales du service

Skip to content
Snippets Groups Projects
glial_cmp.py 3.56 KiB
Newer Older
DEBREUVE Eric's avatar
DEBREUVE Eric committed
# Copyright CNRS/Inria/UNS
# Contributor(s): Eric Debreuve (since 2019)
#
# eric.debreuve@cnrs.fr
#
# This software is governed by the CeCILL  license under French law and
# abiding by the rules of distribution of free software.  You can  use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info".
#
# As a counterpart to the access to the source code and  rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty  and the software's author,  the holder of the
# economic rights,  and the successive licensors  have only  limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading,  using,  modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean  that it is complicated to manipulate,  and  that  also
# therefore means  that it is reserved for developers  and  experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and,  more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.

DEBREUVE Eric's avatar
DEBREUVE Eric committed
from __future__ import annotations

from type import array_t, np_array_picker_h, py_array_picker_h, site_path_h

from typing import Dict, List, Optional, Tuple
DEBREUVE Eric's avatar
DEBREUVE Eric committed

import numpy as np_


class glial_cmp_t:
DEBREUVE Eric's avatar
DEBREUVE Eric committed
    #
    # extensions: connected downstream (i.e. going away from the soma)
DEBREUVE Eric's avatar
DEBREUVE Eric committed
    #
    __slots__ = ("uid", "sites", "connection_path", "extensions", "img_shape")

    def __init__(self):
        #
        self.uid = None  # type: Optional[int]
        self.sites = None  # type: Optional[np_array_picker_h]
        self.connection_path = None  # type: Optional[Dict[int, py_array_picker_h]]
        self.extensions = None  # type: Optional[List[glial_cmp_t]]
        self.img_shape = None  # type: Optional[Tuple[int, ...]]
DEBREUVE Eric's avatar
DEBREUVE Eric committed

    def InitializeFromMap(self, bmp: array_t, uid: int) -> None:
DEBREUVE Eric's avatar
DEBREUVE Eric committed
        #
        self.uid = uid
        # sites: might contain voxels that could be removed w/o breaking connectivity
DEBREUVE Eric's avatar
DEBREUVE Eric committed
        self.connection_path = {}
        self.extensions = []
        self.img_shape = bmp.shape

    @property
    def has_extensions(self) -> bool:
        #
        return self.extensions.__len__() > 0
DEBREUVE Eric's avatar
DEBREUVE Eric committed

    def ExtendWith(
        self, extension: glial_cmp_t, through: site_path_h, costs: array_t
    ) -> None:
        #
        connection_path = tuple(zip(*through[1:-1]))
        if connection_path.__len__() == 0:
            connection_path = None
        extension_path = extension.sites

        self.connection_path[extension.uid] = connection_path
        self.extensions.append(extension)

DEBREUVE Eric's avatar
DEBREUVE Eric committed
        extension.BackReferenceSoma(self)

        # TODO: Ideally, these paths should be dilated + put this outside
DEBREUVE Eric's avatar
DEBREUVE Eric committed
        # but in ext-ext connections, there must not be dilation around the current ext
        # (current ext plays the role of a soma in soma-ext step)
        if connection_path is not None:
            costs[connection_path] = np_.inf
        costs[extension_path] = np_.inf

    def BackReferenceSoma(self, glial_cmp: glial_cmp_t) -> None:
DEBREUVE Eric's avatar
DEBREUVE Eric committed
        #
        raise NotImplementedError