Skip to main content

Modular and extensible neuromuscular simulation framework for generating physiologically grounded motor-unit activity, muscle force, and EMG signals (surface and intramuscular)

Project description

Welcome to MyoGen Logo

The modular and extandable simulation toolkit for neurophysiology

Documentation Python 3.12+ Version

InstallationDocumentationExamplesHow to Cite

Overview

MyoGen is a modular and extensible neuromuscular simulation framework for generating physiologically grounded motor-unit activity, muscle force, and surface EMG signals.

It supports end-to-end modeling of the neuromuscular pathway, from descending neural drive and spinal motor neuron dynamics to muscle activation and bioelectric signal formation at the electrode level. MyoGen is designed for algorithm validation, hypothesis-driven research, and education, providing configurable building blocks that can be independently combined and extended.

Highlights

🧬 Biophysically inspired neuron models — NEURON-based motor neurons with validated calcium dynamics and membrane properties

🎯 Everything is inspectable — Complete access to every motor unit, spike time, fiber location etc. for rigorous algorithm testing

⚡️ Vectorized & parallel — Multi-core CPU processing with NumPy/Numba vectorization for fast computation

🔬 End-to-end simulation — From motor unit recruitment to high-density surface EMG in a single framework

📊 Reproducible science — Deterministic random seeds and standardized Neo Block outputs for exact replication

🧰 Comprehensive toolkit — Surface EMG, intramuscular EMG, force generation, and spinal network modeling

Installation

[!WARNING] Windows users: Install NEURON 8.2.6 before installing MyoGen

uv add MyoGen
# or
pip install MyoGen

NEURON mechanisms compile automatically during installation.


Prerequisites: Python ≥3.12, Linux/Windows/macOS

[!IMPORTANT] System Requirements:

  • Linux/macOS: OpenMPI or MPICH (install via package manager)
  • Windows: NEURON 8.2.6 required (see warning above)
# Install MPI (Linux)
sudo apt-get install libopenmpi-dev  # Ubuntu/Debian
# or
sudo yum install openmpi-devel       # RHEL/CentOS

# Install MPI (macOS)
brew install open-mpi

From Source (for development)

# Clone and install
git clone https://github.com/NsquaredLab/MyoGen.git
cd MyoGen
uv sync

# Activate environment
source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate     # Windows

# Compile NEURON mechanisms (required for editable installs)
uv run poe setup_myogen

[!TIP] Install uv first

Optional Dependencies

GPU acceleration (5-10× speedup for convolutions):

pip install cupy-cuda12x

Quick Start

Generate motor unit action potentials (MUAPs):

from myogen import simulator
import quantities as pq

# 1. Generate recruitment thresholds (100 motor units)
thresholds, _ = simulator.RecruitmentThresholds(
    N=100,
    recruitment_range__ratio=50,
    mode="fuglevand"
)

# 2. Create muscle model with fiber distribution
muscle = simulator.Muscle(
    recruitment_thresholds=thresholds,
    radius_bone__mm=1.0 * pq.mm,
    fiber_density__fibers_per_mm2=400 * pq.mm**-2,
    fat_thickness__mm=10 * pq.mm,
    autorun=True
)

# 3. Set up surface electrode array
electrode_array = simulator.SurfaceElectrodeArray(
    num_rows=5,
    num_cols=5,
    inter_electrode_distances__mm=5 * pq.mm,
    electrode_radius__mm=5 * pq.mm,
    bending_radius__mm=muscle.radius__mm + muscle.skin_thickness__mm + muscle.fat_thickness__mm,
)

# 4. Create surface EMG simulator
surface_emg = simulator.SurfaceEMG(
    muscle_model=muscle,
    electrode_arrays=[electrode_array],
    sampling_frequency__Hz=2048.0,
    MUs_to_simulate=[0, 1, 2, 3, 4]  # First 5 motor units
)

# 5. Simulate MUAPs (parallel processing)
muaps = surface_emg.simulate_muaps(n_jobs=-2)

Access MUAP data:

import numpy as np

# Get MUAP from motor unit 0
muap_signal = muaps.groups[0].segments[0].analogsignals[0]
print(f"MUAP shape: {muap_signal.shape}")  # (time, rows, cols)

# Extract from specific electrode (row 2, col 2)
electrode_muap = muap_signal[:, 2, 2]
peak_amplitude = np.max(np.abs(electrode_muap.magnitude))
print(f"Peak amplitude: {peak_amplitude:.3f} {electrode_muap.units}")

For full EMG simulation with spike trains, see examples

Documentation

📖 Read the full documentation

  • User Guide — Working with simulation outputs
  • API Reference — Complete class documentation
  • Examples — Step-by-step tutorials from recruitment to EMG

How to Cite

If you use MyoGen in your research, please cite:

TBD

Contributing

Contributions welcome! See issues if you want to add a feature or fix a bug.

License

MyoGen is AGPL licensed. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

myogen-0.6.9.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

myogen-0.6.9-cp312-cp312-manylinux_2_17_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

File details

Details for the file myogen-0.6.9.tar.gz.

File metadata

  • Download URL: myogen-0.6.9.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for myogen-0.6.9.tar.gz
Algorithm Hash digest
SHA256 11813be69bf6e350f84a5e14f340e184859f84b57f6dd5b849acc6f9575eaaac
MD5 f5f3065f4372a8f08737d17412fd3df7
BLAKE2b-256 7ce76de0b51a28bd5dd3a957c644a37149aba21baa7a7ee0f946c4c32cf39fad

See more details on using hashes here.

Provenance

The following attestation bundles were made for myogen-0.6.9.tar.gz:

Publisher: build-wheels.yml on NsquaredLab/MyoGen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file myogen-0.6.9-cp312-cp312-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for myogen-0.6.9-cp312-cp312-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 904df6f9db04a91d7d602affb847dd9e09cfa5b8c78be07b4cde90d40be12aee
MD5 3837dc411a34f19b43b42f7da3d614d6
BLAKE2b-256 5fa280ee6d515fe94bc91f15b77669c6c2556f33fd45d21538f811b7a588ce17

See more details on using hashes here.

Provenance

The following attestation bundles were made for myogen-0.6.9-cp312-cp312-manylinux_2_17_x86_64.whl:

Publisher: build-wheels.yml on NsquaredLab/MyoGen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page