Geometric shape connectivity strategies

To reconstruct with great details the connections between 2 neurons, one needs to provide the morphologies of these neurons. However, this data might be lacking or incomplete. Moreover, the reconstruction of a detailed connectivity is computationally expensive as the program have to find all apposition of the neurons arborizations.

To resolve these two issues, neurons’ morphology is here represented by a collection of geometric shapes representing the pre/postsynaptic neurites. The neurites apposition can be probabilistically approximated sampling point clouds from the shapes and checking the shape bounding box (see B1 in Bibliography).

Creating simplified morphologies

The ShapesComposition allows the simplified representation of cell morphologies. This class leverages a list geometric shapes (GeometricShape) to represent sections the cell morphology. Similarly to morphologies, labels should be associated to each of these sections. These labels will be used as reference during connectivity.

For each section of the simplified morphology, the class samples a set of 3D points that belong to it. This cloud of points is used to detect connections between a source and target neuron. The points are uniformly distributed in the GeometricShape, decomposing it into 3D voxels. The program generates as many points as the number of voxels in the volume of the shapes.

Geometric shapes

Pre-defined GeometricShape implemented can be found in the ~bsb.connectivity.geometric package. Each shape has its own set of parameters. We provide here an example of the configuration for a sphere:

from bsb.connectivity.geometric.geometric_shapes import Sphere

Sphere(
  epsilon=0.001,
  type='shape',
  origin=[0.0, 0.0, 0.0],
  radius=1.0,
)
epsilon: 0.001
origin:
- 0.0
- 0.0
- 0.0
radius: 1.0
type: shape
{
    "epsilon": 0.001,
    "type": "shape",
    "origin": [
        0.0,
        0.0,
        0.0
    ],
    "radius": 1.0
}

If needed, a user can define its own geometric shape, creating a new class inheriting from the base virtual class GeometricShape.

ShapesComposition

To instantiate a ShapesComposition, you need to provide a list of shapes together with their labels: a list of lists of strings. shapes and labels should have the same size. For each shape, multiple labels can be provided. You can additionally control the number of points sampled for connectivity with the parameter voxel_size. This parameter corresponds to the side length of one voxel used to decompose the shape collection.

from bsb.connectivity.geometric.geometric_shapes import ShapesComposition

ShapesComposition(
  shapes=[
    {
      'epsilon': 0.001,
      'type': 'shape',
    },
  ],
  labels=[
    {
  ],
  voxel_size=1.0,
)
labels:
- - dendrites
shapes:
- epsilon: 0.001
  type: shape
voxel_size: 1.0
{
    "shapes": [
        {
            "epsilon": 0.001,
            "type": "shape"
        }
    ],
    "labels": [
        [
            "dendrites"
        ]
    ],
    "voxel_size": 1.0
}

Here, we represent the cell as a single sphere for the soma, a cone for the dendrites and a cylinder for the axon:

"my_neuron":
{
    "voxel_size": 25,
    "shapes":
    [
        {
            "type": "sphere",
            "radius": 40.0,
            "center": [0., 0., 0.]},
        {
            "type": "cone",
            "center": [0., 0., 0.],
            "radius": 100.0,
            "apex": [0., 100., 0.]},
        {
            "type": "cylinder",
            "radius": 100.0,
            "top_center": [0., 0., 0.],
            "bottom_center": [0., 0., 10.]
        }
    ],
    "labels":
    [
        ["soma"],
        ["basal_dendrites", "apical_dendrites"],
        ["axon"]
    ],
}

Geometric shape connectivity

The configuration of the geometric shape strategies are similar to the other connectivity strategies (see VoxelIntersection).

The ShapesComposition configuration should be provided with the field shape_compositions in the pre- and/or postsynaptic field (dependant on the strategy chosen).

The parameters morphology_labels here specifies which shapes of the shape_compositions in ShapesComposition must be used (corresponds to values stored in labels).

The affinity parameter controls the probability to form a connection. Three different connectivity strategies based on ShapesComposition are available.

MorphologyToShapeIntersection

The class MorphologyToShapeIntersection creates connections between the points of the morphology of the presynaptic cell and a geometric shape composition representing a postsynaptic cell, checking if the points of the morphology are inside the geometric shapes representing the postsynaptic cells. This connection strategy is suitable when we have a detailed morphology of the presynaptic cell, but not of the postsynaptic cell.

Configuration example:

"stellate_to_purkinje":
{
  "strategy": "bsb.connectivity.MorphologyToShapeIntersection",
  "presynaptic": {
    "cell_types": ["stellate_cell"],
    "morphology_labels": ["axon"],
  },
  "postsynaptic": {
    "cell_types": ["purkinje_cell"],
    "morphology_labels": ["sc_targets"],
    "shape_compositions" : [{
      "voxel_size": 25,
      "shapes": [{"type": "sphere", "radius": 40.0, "center": [0., 0., 0.]}],
      "labels": [["soma", "dendrites", "sc_targets", "axon"]],
    }]
  },
  "affinity": 0.1,
  "pruning_ratio": 0.5
}

ShapeToMorphologyIntersection

The class ShapeToMorphologyIntersection creates connections between the point cloud representing the presynaptic cell the points of the morphology of a postsynaptic cell, checking if the points of the morphology are inside the geometric shapes representing the presynaptic cells. This connection strategy is suitable when we have a detailed morphology of the postsynaptic cell, but not of the presynaptic cell.

Configuration example:

"stellate_to_purkinje":
{
  "strategy": "bsb.connectivity.ShapeToMorphologyIntersection",
  "presynaptic": {
    "cell_types": ["stellate_cell"],
    "morphology_labels": ["axon"],
    "shape_compositions" : [{
      "voxel_size": 25,
      "shapes": [{"type": "sphere", "radius": 40.0, "center": [0., 0., 0.]}],
      "labels": [["soma", "dendrites", "axon"]],
    }]
  },
  "postsynaptic": {
    "cell_types": ["purkinje_cell"],
    "morphology_labels": ["sc_targets"]
  },
  "affinity": 0.1,
  "pruning_ratio": 0.5
}

ShapeToShapeIntersection

The class ShapeToShapeIntersection creates connections between the geometric shape compositions representing the presynaptic and postsynaptic cells. This strategy forms a connections generating a number of points inside the presynaptic probability point cloud and checking if they are inside the geometric shapes representing the postsynaptic cell. One point per voxel is generated. This connection strategy is suitable when we do not have a detailed morphology of neither the presynaptic nor the postsynaptic cell.

Configuration example:

"stellate_to_purkinje":
{
  "strategy": "bsb.connectivity.ShapeToShapeIntersection",
  "presynaptic": {
    "cell_types": ["stellate_cell"],
    "morphology_labels": ["axon"],
    "shape_compositions" : [{
      "voxel_size": 25,
      "shapes": [{"type": "sphere", "radius": 40.0, "center": [0., 0., 0.]}],
      "labels": [["soma", "dendrites", "axon"]],
    }]
  },
  "postsynaptic": {
    "cell_types": ["purkinje_cell"],
    "morphology_labels": ["sc_targets"],
    "shape_compositions" : [{
      "voxel_size": 25,
      "shapes": [{"type": "sphere", "radius": 40.0, "center": [0., 0., 0.]}],
      "labels": [["soma", "dendrites", "sc_targets", "axon"]],
    }]
  },
  "affinity": 0.1,
  "pruning_ratio": 0.7,
}

Bibliography

  • B1: Gandolfi D, Mapelli J, Solinas S, De Schepper R, Geminiani A, Casellato C, D’Angelo E, Migliore M. A realistic morpho-anatomical connection strategy for modelling full-scale point-neuron microcircuits. Sci Rep. 2022 Aug 16;12(1):13864. doi: 10.1038/s41598-022-18024-y. Erratum in: Sci Rep. 2022 Nov 17;12(1):19792. PMID: 35974119; PMCID: PMC9381785.