Gaussian

Contents

Gaussian#

class braintools.conn.Gaussian(distance_profile, weight=None, delay=None, **kwargs)#

Gaussian distance-dependent connectivity for spatially organized neural networks.

This specialized connectivity class implements connections where the probability of connection follows a Gaussian (normal) distribution as a function of distance between neurons. This pattern is commonly observed in cortical networks where neurons preferentially connect to nearby neighbors with decreasing probability at larger distances.

The connection probability follows:

\[P(d) = \exp\left(-\frac{d^2}{2\sigma^2}\right) \quad \text{for } d \leq d_{\text{max}}\]

where:

  • \(d\) is the distance between neurons

  • \(\sigma\) is the spread parameter (standard deviation)

  • \(d_{\text{max}}\) is the maximum connection distance

Parameters:
  • distance_profile (GaussianProfile) –

    A Gaussian distance profile that defines the spatial connection probability. Must be an instance of braintools.init.GaussianProfile with:

    • sigma: Standard deviation controlling the spread

    • max_distance: Maximum distance for connections (optional)

    • normalize: Whether to normalize to unit maximum (optional)

  • weight (Initialization | float | int | ndarray | Array | Quantity | None) –

    Initializer for synaptic weights. Supports:

    • Constant values (e.g., 1.5 * u.nS)

    • Stochastic initializers (e.g., Normal, Uniform, LogNormal)

    • Distance-dependent initializers

    • None for unweighted connections

  • delay (Initialization | float | int | ndarray | Array | Quantity | None) –

    Initializer for synaptic transmission delays. Supports:

    • Constant values (e.g., 1.0 * u.ms)

    • Stochastic initializers

    • Distance-dependent delays

    • None for connections without explicit delays

  • **kwargs

    Additional arguments passed to DistanceDependent, including:

    • seed: Random seed for reproducible connection generation

Returns:

Connection result containing indices, weights, delays, and metadata about the Gaussian connectivity pattern.

Return type:

ConnectionResult

Raises:
  • TypeError – If distance_profile is not an instance of GaussianProfile.

  • ValueError – If required positions are not provided when generating connections.

Notes

  • The sigma parameter controls the spatial extent of connections: larger values create more diffuse connectivity, while smaller values restrict connections to immediate neighbors

  • Setting max_distance limits computational cost by preventing consideration of very distant neuron pairs with negligible connection probability

  • The Gaussian profile is appropriate for modeling local cortical connectivity and spatial receptive fields

  • Connection generation is stochastic; the same configuration will produce different results without fixing the random seed

See also

Exponential

Exponential distance-dependent connectivity

DistanceDependent

General distance-dependent connectivity base class

braintools.init.GaussianProfile

Gaussian distance profile implementation

Examples

Simple Gaussian connectivity in a 2D population:

>>> import brainunit as u
>>> import numpy as np
>>> from braintools.conn import Gaussian
>>> from braintools.init import GaussianProfile, Constant
>>>
>>> # Create 2D positions
>>> positions = np.random.uniform(0, 1000, (400, 2)) * u.um
>>>
>>> # Gaussian connectivity with sigma=100um
>>> conn = Gaussian(
...     distance_profile=GaussianProfile(
...         sigma=100 * u.um,
...         max_distance=300 * u.um
...     ),
...     weight=Constant(1.0 * u.nS),
...     delay=Constant(1.0 * u.ms)
... )
>>>
>>> result = conn(
...     pre_size=400,
...     post_size=400,
...     pre_positions=positions,
...     post_positions=positions
... )

Local connectivity with narrow Gaussian:

>>> # Narrow Gaussian for highly local connections
>>> local_conn = Gaussian(
...     distance_profile=GaussianProfile(
...         sigma=50 * u.um,  # Narrow spread
...         max_distance=150 * u.um
...     ),
...     weight=Constant(2.0 * u.nS)
... )

Broad connectivity with distance-dependent weights:

>>> from braintools.init import DistanceModulated as DDWeight, Normal
>>>
>>> broad_conn = Gaussian(
...     distance_profile=GaussianProfile(
...         sigma=200 * u.um,  # Broader spread
...         max_distance=600 * u.um
...     ),
...     weight=DDWeight(lambda d: (3.0 * u.nS) * np.exp(-d/(100*u.um)))
... )

Modeling cortical column connectivity:

>>> # Model local connectivity within a cortical column
>>> # Positions in 3D (x, y for horizontal, z for layer depth)
>>> column_positions = np.random.randn(500, 3) * np.array([50, 50, 200]) * u.um
>>>
>>> # Anisotropic connectivity using custom Gaussian profile
>>> column_conn = Gaussian(
...     distance_profile=GaussianProfile(
...         sigma=75 * u.um,
...         max_distance=250 * u.um
...     ),
...     weight=Normal(mean=1.5*u.nS, std=0.3*u.nS),
...     seed=42
... )
>>>
>>> result = column_conn(
...     pre_size=500,
...     post_size=500,
...     pre_positions=column_positions,
...     post_positions=column_positions
... )