Source code for myogen.simulator.neuron.populations.descending_drive

"""
Descending drive neuron populations for cortical input.

This module contains the population classes for descending drive neurons that
simulate cortical input to spinal motor circuits via Poisson and Gamma processes.
"""

from myogen.simulator.neuron import cells
from myogen.utils.decorators import beartowertype
from myogen.utils.types import Quantity__ms

from .base import _Pool


[docs] @beartowertype class DescendingDrive__Pool(_Pool): """ Container for a population of descending drive neurons. Manages a collection of DD cells that generate spike trains using either Poisson or Gamma point processes for cortical input to spinal circuits. Parameters ---------- n : int Number of descending drive neurons to create. poisson_batch_size : int, optional Batch size for exponential threshold generation algorithm (only used when process_type="poisson"). Higher values improve statistical accuracy but increase computation. Typical values: 16-50. Required if process_type="poisson", ignored if process_type="gamma". timestep__ms : float Time step for simulation (ms). process_type : str, optional Type of point process: "poisson" or "gamma", by default "poisson". - "poisson": Irregular firing (CV=1.0) - "gamma": More regular firing with CV controlled by shape parameter shape : float, optional Shape parameter for Gamma process (only used when process_type="gamma"), by default 3.0. Controls spike regularity: - shape=1: Poisson-like (CV=1.0) - shape=2-5: Typical cortical neuron regularity (CV=0.45-0.71) - Higher values: More regular firing (CV=1/sqrt(shape)) """
[docs] def __init__( self, n: int, poisson_batch_size: int | None = None, timestep__ms: Quantity__ms | None = None, process_type: str = "poisson", shape: float = 3.0, ): if timestep__ms is None: raise ValueError("timestep__ms is required") self.n = n self.timestep__ms = timestep__ms self.process_type = process_type self.shape = shape if process_type.lower() == "gamma": _cells = [ cells.DD_Gamma( timestep__ms=timestep__ms, shape=shape, pool__ID=i, ) for i in range(n) ] elif process_type.lower() == "poisson": if poisson_batch_size is None: raise ValueError("poisson_batch_size is required when process_type='poisson'") self.poisson_batch_size = poisson_batch_size _cells = [cells.DD(N=poisson_batch_size, dt=timestep__ms, pool__ID=i) for i in range(n)] else: raise ValueError( f"Invalid process_type '{process_type}'. Must be 'poisson' or 'gamma'." ) super().__init__(cells=_cells)
@beartowertype class DescendingDrive_Gamma__Pool(_Pool): """ Container for a population of descending drive neurons using Gamma process. Manages a collection of DD_Gamma cells that generate Gamma-distributed spike trains for more regular cortical input to spinal circuits, typical of cortical neuron firing patterns. Note: This class is kept for backward compatibility. Consider using DescendingDrive__Pool with process_type='gamma' instead. Parameters ---------- n : int Number of descending drive neurons to create. timestep__ms : Quantity__ms Time step for simulation as a Quantity with units of milliseconds. shape : float, optional Shape parameter controlling spike regularity, by default 3.0. - shape=1: Poisson-like (irregular) firing - shape=2-5: Typical cortical neuron regularity - Higher values: More regular, clock-like firing """ def __init__( self, n: int, timestep__ms: Quantity__ms, shape: float = 3.0, ): self.n = n self.timestep__ms = timestep__ms self.shape = shape super().__init__( cells=[ cells.DD_Gamma( timestep__ms=timestep__ms, shape=shape, pool__ID=i, ) for i in range(n) ] )