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.GaussianProfilewith:sigma: Standard deviation controlling the spreadmax_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
Nonefor 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
Nonefor 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:
- Raises:
TypeError – If
distance_profileis not an instance ofGaussianProfile.ValueError – If required positions are not provided when generating connections.
Notes
The
sigmaparameter controls the spatial extent of connections: larger values create more diffuse connectivity, while smaller values restrict connections to immediate neighborsSetting
max_distancelimits computational cost by preventing consideration of very distant neuron pairs with negligible connection probabilityThe 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
ExponentialExponential distance-dependent connectivity
DistanceDependentGeneral distance-dependent connectivity base class
braintools.init.GaussianProfileGaussian 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 ... )