Muscle Model#

The spike trains alone are not enough to create EMG signals.

To create EMG signals, we need to create a muscle model that will distribute the motor units and fibers within the muscle volume.

Import Libraries#

from pathlib import Path

import joblib
import matplotlib.pyplot as plt
import numpy as np
import quantities as pq

from myogen import simulator
from myogen.utils.plotting.muscle import plot_innervation_areas_2d, plot_mf_centers

plt.style.use("fivethirtyeight")

Define Parameters#

The muscle model is created using the Muscle object.

The Muscle object takes the following parameters:

  • recruitment_thresholds: Recruitment thresholds of the motor units

  • radius: Radius of the muscle in mm

  • fiber_density: Fiber density per mm²

  • max_innervation_area_to_total_muscle_area__ratio: Maximum innervation area to total muscle area ratio

  • grid_resolution: Spatial resolution for muscle discretization

Since the recruitment thresholds are already generated, we can load them from the previous example using joblib.

# Load recruitment thresholds
save_path = Path("./results")

recruitment_thresholds = joblib.load(save_path / "thresholds.pkl")

# Define muscle parameters
muscle_radius = 4.9 * pq.mm  # Muscle radius in mm
mean_fiber_length = 32 * pq.mm  # Mean fiber length in mm
fiber_length_variation = 3 * pq.mm  # Fiber length variation in mm
fiber_density = 400 * pq.mm**-2  # Fiber density in fibers per mm²

# Define simulation parameters
max_innervation_ratio = 1 / 4  # Maximum motor unit territory size
grid_resolution = 256  # Spatial resolution for muscle discretization

Create Muscle Model#

Note

Depending on the parameters, the simulation can take a few minutes to run.

To avoid running the simulation every time, we can save the muscle model using joblib.

# Create muscle model
muscle = simulator.Muscle(
    recruitment_thresholds=recruitment_thresholds,
    radius_bone__mm=1.0 * pq.mm,  # Non-zero bone radius required for proper MUAP amplitudes
    fiber_density__fibers_per_mm2=fiber_density,
    fat_thickness__mm=10 * pq.mm,
    autorun=True,
)

# Save muscle model for future use
joblib.dump(muscle, save_path / "muscle_model.pkl")

# Display muscle statistics
total_fibers = sum(muscle.resulting_number_of_innervated_fibers)

print("Muscle model statistics:")
print(f"\tTotal muscle fibers: {total_fibers}")
print(f"\tMean fibers per MU: {total_fibers / len(recruitment_thresholds):.1f}")
print(f"\tMuscle cross-sectional area: {np.pi * muscle_radius**2:.1f}")
Removed 1247 fibers inside bone radius (r < 1.000 mm)

Calculating out-of-circle coefficients:   0%|          | 0/100 [00:00<?, ?MU/s]
Calculating out-of-circle coefficients:   1%|          | 1/100 [00:04<07:34,  4.59s/MU]
Calculating out-of-circle coefficients:   2%|▏         | 2/100 [00:08<06:24,  3.92s/MU]
Calculating out-of-circle coefficients:   5%|▌         | 5/100 [00:13<03:51,  2.44s/MU]
Calculating out-of-circle coefficients:   8%|▊         | 8/100 [00:15<02:17,  1.50s/MU]
Calculating out-of-circle coefficients:   9%|▉         | 9/100 [00:18<02:44,  1.81s/MU]
Calculating out-of-circle coefficients:  10%|█         | 10/100 [00:20<02:48,  1.87s/MU]
Calculating out-of-circle coefficients:  12%|█▏        | 12/100 [00:22<02:18,  1.58s/MU]
Calculating out-of-circle coefficients:  14%|█▍        | 14/100 [00:26<02:24,  1.68s/MU]
Calculating out-of-circle coefficients:  16%|█▌        | 16/100 [00:27<01:53,  1.36s/MU]
Calculating out-of-circle coefficients:  17%|█▋        | 17/100 [00:30<02:09,  1.56s/MU]
Calculating out-of-circle coefficients:  18%|█▊        | 18/100 [00:34<02:47,  2.04s/MU]
Calculating out-of-circle coefficients:  21%|██        | 21/100 [00:37<02:04,  1.57s/MU]
Calculating out-of-circle coefficients:  23%|██▎       | 23/100 [00:41<02:09,  1.69s/MU]
Calculating out-of-circle coefficients:  25%|██▌       | 25/100 [00:41<01:36,  1.29s/MU]
Calculating out-of-circle coefficients:  26%|██▌       | 26/100 [00:42<01:20,  1.09s/MU]
Calculating out-of-circle coefficients:  27%|██▋       | 27/100 [00:46<02:05,  1.72s/MU]
Calculating out-of-circle coefficients:  28%|██▊       | 28/100 [00:46<01:40,  1.40s/MU]
Calculating out-of-circle coefficients:  30%|███       | 30/100 [00:46<01:01,  1.14MU/s]
Calculating out-of-circle coefficients:  31%|███       | 31/100 [00:50<01:51,  1.62s/MU]
Calculating out-of-circle coefficients:  32%|███▏      | 32/100 [00:51<01:32,  1.36s/MU]
Calculating out-of-circle coefficients:  34%|███▍      | 34/100 [00:51<00:56,  1.16MU/s]
Calculating out-of-circle coefficients:  35%|███▌      | 35/100 [00:56<01:52,  1.74s/MU]
Calculating out-of-circle coefficients:  36%|███▌      | 36/100 [00:57<01:43,  1.62s/MU]
Calculating out-of-circle coefficients:  39%|███▉      | 39/100 [01:02<01:39,  1.63s/MU]
Calculating out-of-circle coefficients:  41%|████      | 41/100 [01:03<01:15,  1.28s/MU]
Calculating out-of-circle coefficients:  43%|████▎     | 43/100 [01:09<01:37,  1.72s/MU]
Calculating out-of-circle coefficients:  47%|████▋     | 47/100 [01:11<01:04,  1.22s/MU]
Calculating out-of-circle coefficients:  49%|████▉     | 49/100 [01:12<00:52,  1.04s/MU]
Calculating out-of-circle coefficients:  50%|█████     | 50/100 [01:13<00:50,  1.01s/MU]
Calculating out-of-circle coefficients:  51%|█████     | 51/100 [01:14<00:49,  1.01s/MU]
Calculating out-of-circle coefficients:  52%|█████▏    | 52/100 [01:16<00:56,  1.18s/MU]
Calculating out-of-circle coefficients:  54%|█████▍    | 54/100 [01:17<00:42,  1.09MU/s]
Calculating out-of-circle coefficients:  56%|█████▌    | 56/100 [01:21<00:55,  1.26s/MU]
Calculating out-of-circle coefficients:  59%|█████▉    | 59/100 [01:21<00:30,  1.33MU/s]
Calculating out-of-circle coefficients:  60%|██████    | 60/100 [01:24<00:44,  1.12s/MU]
Calculating out-of-circle coefficients:  61%|██████    | 61/100 [01:24<00:38,  1.02MU/s]
Calculating out-of-circle coefficients:  64%|██████▍   | 64/100 [01:27<00:32,  1.11MU/s]
Calculating out-of-circle coefficients:  67%|██████▋   | 67/100 [01:27<00:19,  1.72MU/s]
Calculating out-of-circle coefficients:  68%|██████▊   | 68/100 [01:30<00:30,  1.05MU/s]
Calculating out-of-circle coefficients:  69%|██████▉   | 69/100 [01:31<00:27,  1.13MU/s]
Calculating out-of-circle coefficients:  72%|███████▏  | 72/100 [01:33<00:23,  1.20MU/s]
Calculating out-of-circle coefficients:  74%|███████▍  | 74/100 [01:34<00:18,  1.43MU/s]
Calculating out-of-circle coefficients:  76%|███████▌  | 76/100 [01:34<00:12,  1.96MU/s]
Calculating out-of-circle coefficients:  77%|███████▋  | 77/100 [01:36<00:19,  1.15MU/s]
Calculating out-of-circle coefficients:  81%|████████  | 81/100 [01:38<00:11,  1.61MU/s]
Calculating out-of-circle coefficients:  82%|████████▏ | 82/100 [01:39<00:11,  1.56MU/s]
Calculating out-of-circle coefficients:  85%|████████▌ | 85/100 [01:40<00:08,  1.85MU/s]
Calculating out-of-circle coefficients:  87%|████████▋ | 87/100 [01:40<00:06,  2.17MU/s]
Calculating out-of-circle coefficients:  89%|████████▉ | 89/100 [01:42<00:05,  1.89MU/s]
Calculating out-of-circle coefficients:  91%|█████████ | 91/100 [01:43<00:04,  1.86MU/s]
Calculating out-of-circle coefficients:  93%|█████████▎| 93/100 [01:43<00:02,  2.49MU/s]
Calculating out-of-circle coefficients:  94%|█████████▍| 94/100 [01:43<00:02,  2.66MU/s]
Calculating out-of-circle coefficients:  95%|█████████▌| 95/100 [01:45<00:03,  1.35MU/s]
Calculating out-of-circle coefficients:  99%|█████████▉| 99/100 [01:46<00:00,  2.63MU/s]
Calculating out-of-circle coefficients: 100%|██████████| 100/100 [01:46<00:00,  2.73MU/s]
Calculating out-of-circle coefficients: 100%|██████████| 100/100 [01:46<00:00,  1.06s/MU]

Assigning muscle fibers to motor neurons:   0%|          | 0/58755 [00:00<?, ?MF/s]
Assigning muscle fibers to motor neurons:   0%|          | 211/58755 [00:00<00:27, 2105.43MF/s]
Assigning muscle fibers to motor neurons:   1%|          | 422/58755 [00:00<00:27, 2106.53MF/s]
Assigning muscle fibers to motor neurons:   1%|          | 633/58755 [00:00<00:27, 2107.77MF/s]
Assigning muscle fibers to motor neurons:   1%|▏         | 844/58755 [00:00<00:27, 2103.75MF/s]
Assigning muscle fibers to motor neurons:   2%|▏         | 1055/58755 [00:00<00:27, 2088.11MF/s]
Assigning muscle fibers to motor neurons:   2%|▏         | 1264/58755 [00:00<00:27, 2065.09MF/s]
Assigning muscle fibers to motor neurons:   3%|▎         | 1471/58755 [00:00<00:27, 2049.88MF/s]
Assigning muscle fibers to motor neurons:   3%|▎         | 1677/58755 [00:00<00:27, 2044.32MF/s]
Assigning muscle fibers to motor neurons:   3%|▎         | 1888/58755 [00:00<00:27, 2062.74MF/s]
Assigning muscle fibers to motor neurons:   4%|▎         | 2100/58755 [00:01<00:27, 2078.81MF/s]
Assigning muscle fibers to motor neurons:   4%|▍         | 2310/58755 [00:01<00:27, 2084.41MF/s]
Assigning muscle fibers to motor neurons:   4%|▍         | 2521/58755 [00:01<00:26, 2091.11MF/s]
Assigning muscle fibers to motor neurons:   5%|▍         | 2733/58755 [00:01<00:26, 2097.98MF/s]
Assigning muscle fibers to motor neurons:   5%|▌         | 2944/58755 [00:01<00:26, 2100.88MF/s]
Assigning muscle fibers to motor neurons:   5%|▌         | 3155/58755 [00:01<00:26, 2102.42MF/s]
Assigning muscle fibers to motor neurons:   6%|▌         | 3366/58755 [00:01<00:26, 2104.56MF/s]
Assigning muscle fibers to motor neurons:   6%|▌         | 3577/58755 [00:01<00:26, 2104.42MF/s]
Assigning muscle fibers to motor neurons:   6%|▋         | 3788/58755 [00:01<00:26, 2105.17MF/s]
Assigning muscle fibers to motor neurons:   7%|▋         | 4000/58755 [00:01<00:25, 2106.68MF/s]
Assigning muscle fibers to motor neurons:   7%|▋         | 4212/58755 [00:02<00:25, 2108.03MF/s]
Assigning muscle fibers to motor neurons:   8%|▊         | 4423/58755 [00:02<00:25, 2100.49MF/s]
Assigning muscle fibers to motor neurons:   8%|▊         | 4635/58755 [00:02<00:25, 2103.65MF/s]
Assigning muscle fibers to motor neurons:   8%|▊         | 4846/58755 [00:02<00:25, 2104.29MF/s]
Assigning muscle fibers to motor neurons:   9%|▊         | 5057/58755 [00:02<00:25, 2105.75MF/s]
Assigning muscle fibers to motor neurons:   9%|▉         | 5268/58755 [00:02<00:25, 2106.27MF/s]
Assigning muscle fibers to motor neurons:   9%|▉         | 5479/58755 [00:02<00:25, 2107.17MF/s]
Assigning muscle fibers to motor neurons:  10%|▉         | 5690/58755 [00:02<00:25, 2107.36MF/s]
Assigning muscle fibers to motor neurons:  10%|█         | 5902/58755 [00:02<00:25, 2108.92MF/s]
Assigning muscle fibers to motor neurons:  10%|█         | 6113/58755 [00:02<00:24, 2107.51MF/s]
Assigning muscle fibers to motor neurons:  11%|█         | 6325/58755 [00:03<00:24, 2108.74MF/s]
Assigning muscle fibers to motor neurons:  11%|█         | 6536/58755 [00:03<00:24, 2108.02MF/s]
Assigning muscle fibers to motor neurons:  11%|█▏        | 6748/58755 [00:03<00:24, 2108.85MF/s]
Assigning muscle fibers to motor neurons:  12%|█▏        | 6960/58755 [00:03<00:24, 2110.23MF/s]
Assigning muscle fibers to motor neurons:  12%|█▏        | 7172/58755 [00:03<00:24, 2111.19MF/s]
Assigning muscle fibers to motor neurons:  13%|█▎        | 7384/58755 [00:03<00:24, 2110.78MF/s]
Assigning muscle fibers to motor neurons:  13%|█▎        | 7596/58755 [00:03<00:24, 2095.48MF/s]
Assigning muscle fibers to motor neurons:  13%|█▎        | 7808/58755 [00:03<00:24, 2099.90MF/s]
Assigning muscle fibers to motor neurons:  14%|█▎        | 8020/58755 [00:03<00:24, 2105.58MF/s]
Assigning muscle fibers to motor neurons:  14%|█▍        | 8232/58755 [00:03<00:23, 2108.75MF/s]
Assigning muscle fibers to motor neurons:  14%|█▍        | 8443/58755 [00:04<00:23, 2108.77MF/s]
Assigning muscle fibers to motor neurons:  15%|█▍        | 8654/58755 [00:04<00:23, 2105.29MF/s]
Assigning muscle fibers to motor neurons:  15%|█▌        | 8866/58755 [00:04<00:23, 2106.98MF/s]
Assigning muscle fibers to motor neurons:  15%|█▌        | 9078/58755 [00:04<00:23, 2108.65MF/s]
Assigning muscle fibers to motor neurons:  16%|█▌        | 9289/58755 [00:04<00:23, 2105.87MF/s]
Assigning muscle fibers to motor neurons:  16%|█▌        | 9500/58755 [00:04<00:23, 2106.11MF/s]
Assigning muscle fibers to motor neurons:  17%|█▋        | 9711/58755 [00:04<00:23, 2095.55MF/s]
Assigning muscle fibers to motor neurons:  17%|█▋        | 9923/58755 [00:04<00:23, 2101.15MF/s]
Assigning muscle fibers to motor neurons:  17%|█▋        | 10135/58755 [00:04<00:23, 2103.88MF/s]
Assigning muscle fibers to motor neurons:  18%|█▊        | 10346/58755 [00:04<00:22, 2105.08MF/s]
Assigning muscle fibers to motor neurons:  18%|█▊        | 10557/58755 [00:05<00:22, 2104.44MF/s]
Assigning muscle fibers to motor neurons:  18%|█▊        | 10768/58755 [00:05<00:22, 2099.56MF/s]
Assigning muscle fibers to motor neurons:  19%|█▊        | 10979/58755 [00:05<00:22, 2100.68MF/s]
Assigning muscle fibers to motor neurons:  19%|█▉        | 11190/58755 [00:05<00:22, 2102.51MF/s]
Assigning muscle fibers to motor neurons:  19%|█▉        | 11401/58755 [00:05<00:22, 2104.36MF/s]
Assigning muscle fibers to motor neurons:  20%|█▉        | 11612/58755 [00:05<00:22, 2104.52MF/s]
Assigning muscle fibers to motor neurons:  20%|██        | 11823/58755 [00:05<00:22, 2103.44MF/s]
Assigning muscle fibers to motor neurons:  20%|██        | 12034/58755 [00:05<00:22, 2104.93MF/s]
Assigning muscle fibers to motor neurons:  21%|██        | 12246/58755 [00:05<00:22, 2107.34MF/s]
Assigning muscle fibers to motor neurons:  21%|██        | 12457/58755 [00:05<00:22, 2086.99MF/s]
Assigning muscle fibers to motor neurons:  22%|██▏       | 12668/58755 [00:06<00:22, 2091.72MF/s]
Assigning muscle fibers to motor neurons:  22%|██▏       | 12878/58755 [00:06<00:21, 2093.21MF/s]
Assigning muscle fibers to motor neurons:  22%|██▏       | 13089/58755 [00:06<00:21, 2096.14MF/s]
Assigning muscle fibers to motor neurons:  23%|██▎       | 13300/58755 [00:06<00:21, 2100.19MF/s]
Assigning muscle fibers to motor neurons:  23%|██▎       | 13511/58755 [00:06<00:21, 2100.07MF/s]
Assigning muscle fibers to motor neurons:  23%|██▎       | 13722/58755 [00:06<00:21, 2102.61MF/s]
Assigning muscle fibers to motor neurons:  24%|██▎       | 13933/58755 [00:06<00:21, 2104.02MF/s]
Assigning muscle fibers to motor neurons:  24%|██▍       | 14144/58755 [00:06<00:21, 2102.62MF/s]
Assigning muscle fibers to motor neurons:  24%|██▍       | 14355/58755 [00:06<00:21, 2102.63MF/s]
Assigning muscle fibers to motor neurons:  25%|██▍       | 14566/58755 [00:06<00:21, 2103.85MF/s]
Assigning muscle fibers to motor neurons:  25%|██▌       | 14777/58755 [00:07<00:20, 2104.49MF/s]
Assigning muscle fibers to motor neurons:  26%|██▌       | 14988/58755 [00:07<00:20, 2101.46MF/s]
Assigning muscle fibers to motor neurons:  26%|██▌       | 15199/58755 [00:07<00:20, 2101.83MF/s]
Assigning muscle fibers to motor neurons:  26%|██▌       | 15411/58755 [00:07<00:20, 2104.40MF/s]
Assigning muscle fibers to motor neurons:  27%|██▋       | 15622/58755 [00:07<00:20, 2102.56MF/s]
Assigning muscle fibers to motor neurons:  27%|██▋       | 15833/58755 [00:07<00:20, 2104.42MF/s]
Assigning muscle fibers to motor neurons:  27%|██▋       | 16044/58755 [00:07<00:20, 2105.12MF/s]
Assigning muscle fibers to motor neurons:  28%|██▊       | 16255/58755 [00:07<00:20, 2104.71MF/s]
Assigning muscle fibers to motor neurons:  28%|██▊       | 16466/58755 [00:07<00:20, 2105.53MF/s]
Assigning muscle fibers to motor neurons:  28%|██▊       | 16678/58755 [00:07<00:19, 2106.94MF/s]
Assigning muscle fibers to motor neurons:  29%|██▊       | 16889/58755 [00:08<00:19, 2107.19MF/s]
Assigning muscle fibers to motor neurons:  29%|██▉       | 17100/58755 [00:08<00:19, 2105.01MF/s]
Assigning muscle fibers to motor neurons:  29%|██▉       | 17311/58755 [00:08<00:19, 2105.59MF/s]
Assigning muscle fibers to motor neurons:  30%|██▉       | 17522/58755 [00:08<00:19, 2104.90MF/s]
Assigning muscle fibers to motor neurons:  30%|███       | 17733/58755 [00:08<00:19, 2104.62MF/s]
Assigning muscle fibers to motor neurons:  31%|███       | 17944/58755 [00:08<00:19, 2105.72MF/s]
Assigning muscle fibers to motor neurons:  31%|███       | 18155/58755 [00:08<00:19, 2106.08MF/s]
Assigning muscle fibers to motor neurons:  31%|███▏      | 18367/58755 [00:08<00:19, 2107.58MF/s]
Assigning muscle fibers to motor neurons:  32%|███▏      | 18578/58755 [00:08<00:19, 2106.81MF/s]
Assigning muscle fibers to motor neurons:  32%|███▏      | 18790/58755 [00:08<00:18, 2108.85MF/s]
Assigning muscle fibers to motor neurons:  32%|███▏      | 19001/58755 [00:09<00:18, 2107.80MF/s]
Assigning muscle fibers to motor neurons:  33%|███▎      | 19212/58755 [00:09<00:18, 2107.00MF/s]
Assigning muscle fibers to motor neurons:  33%|███▎      | 19423/58755 [00:09<00:18, 2105.50MF/s]
Assigning muscle fibers to motor neurons:  33%|███▎      | 19634/58755 [00:09<00:18, 2106.36MF/s]
Assigning muscle fibers to motor neurons:  34%|███▍      | 19845/58755 [00:09<00:18, 2104.61MF/s]
Assigning muscle fibers to motor neurons:  34%|███▍      | 20057/58755 [00:09<00:18, 2106.76MF/s]
Assigning muscle fibers to motor neurons:  34%|███▍      | 20268/58755 [00:09<00:18, 2105.46MF/s]
Assigning muscle fibers to motor neurons:  35%|███▍      | 20479/58755 [00:09<00:18, 2105.49MF/s]
Assigning muscle fibers to motor neurons:  35%|███▌      | 20690/58755 [00:09<00:18, 2105.20MF/s]
Assigning muscle fibers to motor neurons:  36%|███▌      | 20901/58755 [00:09<00:17, 2103.98MF/s]
Assigning muscle fibers to motor neurons:  36%|███▌      | 21112/58755 [00:10<00:17, 2105.55MF/s]
Assigning muscle fibers to motor neurons:  36%|███▋      | 21323/58755 [00:10<00:17, 2102.89MF/s]
Assigning muscle fibers to motor neurons:  37%|███▋      | 21534/58755 [00:10<00:17, 2102.94MF/s]
Assigning muscle fibers to motor neurons:  37%|███▋      | 21745/58755 [00:10<00:17, 2104.43MF/s]
Assigning muscle fibers to motor neurons:  37%|███▋      | 21956/58755 [00:10<00:17, 2104.05MF/s]
Assigning muscle fibers to motor neurons:  38%|███▊      | 22167/58755 [00:10<00:17, 2101.55MF/s]
Assigning muscle fibers to motor neurons:  38%|███▊      | 22379/58755 [00:10<00:17, 2104.48MF/s]
Assigning muscle fibers to motor neurons:  38%|███▊      | 22590/58755 [00:10<00:17, 2104.14MF/s]
Assigning muscle fibers to motor neurons:  39%|███▉      | 22801/58755 [00:10<00:17, 2089.62MF/s]
Assigning muscle fibers to motor neurons:  39%|███▉      | 23010/58755 [00:10<00:17, 2067.79MF/s]
Assigning muscle fibers to motor neurons:  40%|███▉      | 23217/58755 [00:11<00:17, 2059.94MF/s]
Assigning muscle fibers to motor neurons:  40%|███▉      | 23428/58755 [00:11<00:17, 2072.85MF/s]
Assigning muscle fibers to motor neurons:  40%|████      | 23639/58755 [00:11<00:16, 2082.95MF/s]
Assigning muscle fibers to motor neurons:  41%|████      | 23850/58755 [00:11<00:16, 2090.07MF/s]
Assigning muscle fibers to motor neurons:  41%|████      | 24062/58755 [00:11<00:16, 2096.68MF/s]
Assigning muscle fibers to motor neurons:  41%|████▏     | 24273/58755 [00:11<00:16, 2100.56MF/s]
Assigning muscle fibers to motor neurons:  42%|████▏     | 24485/58755 [00:11<00:16, 2104.09MF/s]
Assigning muscle fibers to motor neurons:  42%|████▏     | 24696/58755 [00:11<00:16, 2105.60MF/s]
Assigning muscle fibers to motor neurons:  42%|████▏     | 24907/58755 [00:11<00:16, 2103.90MF/s]
Assigning muscle fibers to motor neurons:  43%|████▎     | 25118/58755 [00:11<00:16, 2092.05MF/s]
Assigning muscle fibers to motor neurons:  43%|████▎     | 25329/58755 [00:12<00:15, 2096.38MF/s]
Assigning muscle fibers to motor neurons:  43%|████▎     | 25539/58755 [00:12<00:15, 2093.20MF/s]
Assigning muscle fibers to motor neurons:  44%|████▍     | 25750/58755 [00:12<00:15, 2097.65MF/s]
Assigning muscle fibers to motor neurons:  44%|████▍     | 25961/58755 [00:12<00:15, 2100.32MF/s]
Assigning muscle fibers to motor neurons:  45%|████▍     | 26172/58755 [00:12<00:15, 2103.00MF/s]
Assigning muscle fibers to motor neurons:  45%|████▍     | 26384/58755 [00:12<00:15, 2105.68MF/s]
Assigning muscle fibers to motor neurons:  45%|████▌     | 26595/58755 [00:12<00:15, 2106.94MF/s]
Assigning muscle fibers to motor neurons:  46%|████▌     | 26806/58755 [00:12<00:15, 2107.60MF/s]
Assigning muscle fibers to motor neurons:  46%|████▌     | 27018/58755 [00:12<00:15, 2108.63MF/s]
Assigning muscle fibers to motor neurons:  46%|████▋     | 27229/58755 [00:12<00:14, 2108.30MF/s]
Assigning muscle fibers to motor neurons:  47%|████▋     | 27441/58755 [00:13<00:14, 2110.18MF/s]
Assigning muscle fibers to motor neurons:  47%|████▋     | 27653/58755 [00:13<00:14, 2102.86MF/s]
Assigning muscle fibers to motor neurons:  47%|████▋     | 27865/58755 [00:13<00:14, 2105.44MF/s]
Assigning muscle fibers to motor neurons:  48%|████▊     | 28077/58755 [00:13<00:14, 2108.17MF/s]
Assigning muscle fibers to motor neurons:  48%|████▊     | 28288/58755 [00:13<00:14, 2108.69MF/s]
Assigning muscle fibers to motor neurons:  49%|████▊     | 28499/58755 [00:13<00:14, 2104.84MF/s]
Assigning muscle fibers to motor neurons:  49%|████▉     | 28710/58755 [00:13<00:14, 2089.48MF/s]
Assigning muscle fibers to motor neurons:  49%|████▉     | 28921/58755 [00:13<00:14, 2093.70MF/s]
Assigning muscle fibers to motor neurons:  50%|████▉     | 29132/58755 [00:13<00:14, 2096.85MF/s]
Assigning muscle fibers to motor neurons:  50%|████▉     | 29343/58755 [00:13<00:14, 2099.12MF/s]
Assigning muscle fibers to motor neurons:  50%|█████     | 29555/58755 [00:14<00:13, 2102.81MF/s]
Assigning muscle fibers to motor neurons:  51%|█████     | 29766/58755 [00:14<00:13, 2097.76MF/s]
Assigning muscle fibers to motor neurons:  51%|█████     | 29977/58755 [00:14<00:13, 2100.71MF/s]
Assigning muscle fibers to motor neurons:  51%|█████▏    | 30188/58755 [00:14<00:13, 2100.97MF/s]
Assigning muscle fibers to motor neurons:  52%|█████▏    | 30399/58755 [00:14<00:13, 2102.61MF/s]
Assigning muscle fibers to motor neurons:  52%|█████▏    | 30610/58755 [00:14<00:13, 2104.78MF/s]
Assigning muscle fibers to motor neurons:  52%|█████▏    | 30822/58755 [00:14<00:13, 2107.07MF/s]
Assigning muscle fibers to motor neurons:  53%|█████▎    | 31034/58755 [00:14<00:13, 2109.41MF/s]
Assigning muscle fibers to motor neurons:  53%|█████▎    | 31245/58755 [00:14<00:13, 2108.10MF/s]
Assigning muscle fibers to motor neurons:  54%|█████▎    | 31456/58755 [00:14<00:12, 2108.63MF/s]
Assigning muscle fibers to motor neurons:  54%|█████▍    | 31667/58755 [00:15<00:12, 2107.86MF/s]
Assigning muscle fibers to motor neurons:  54%|█████▍    | 31878/58755 [00:15<00:12, 2106.20MF/s]
Assigning muscle fibers to motor neurons:  55%|█████▍    | 32090/58755 [00:15<00:12, 2108.24MF/s]
Assigning muscle fibers to motor neurons:  55%|█████▍    | 32302/58755 [00:15<00:12, 2109.25MF/s]
Assigning muscle fibers to motor neurons:  55%|█████▌    | 32513/58755 [00:15<00:12, 2108.28MF/s]
Assigning muscle fibers to motor neurons:  56%|█████▌    | 32724/58755 [00:15<00:12, 2105.74MF/s]
Assigning muscle fibers to motor neurons:  56%|█████▌    | 32935/58755 [00:15<00:12, 2106.44MF/s]
Assigning muscle fibers to motor neurons:  56%|█████▋    | 33146/58755 [00:15<00:12, 2104.87MF/s]
Assigning muscle fibers to motor neurons:  57%|█████▋    | 33357/58755 [00:15<00:12, 2105.45MF/s]
Assigning muscle fibers to motor neurons:  57%|█████▋    | 33568/58755 [00:15<00:11, 2104.77MF/s]
Assigning muscle fibers to motor neurons:  57%|█████▋    | 33780/58755 [00:16<00:11, 2107.45MF/s]
Assigning muscle fibers to motor neurons:  58%|█████▊    | 33991/58755 [00:16<00:11, 2098.58MF/s]
Assigning muscle fibers to motor neurons:  58%|█████▊    | 34202/58755 [00:16<00:11, 2101.35MF/s]
Assigning muscle fibers to motor neurons:  59%|█████▊    | 34413/58755 [00:16<00:11, 2101.67MF/s]
Assigning muscle fibers to motor neurons:  59%|█████▉    | 34624/58755 [00:16<00:11, 2102.22MF/s]
Assigning muscle fibers to motor neurons:  59%|█████▉    | 34835/58755 [00:16<00:11, 2102.49MF/s]
Assigning muscle fibers to motor neurons:  60%|█████▉    | 35046/58755 [00:16<00:11, 2102.04MF/s]
Assigning muscle fibers to motor neurons:  60%|██████    | 35257/58755 [00:16<00:11, 2103.74MF/s]
Assigning muscle fibers to motor neurons:  60%|██████    | 35468/58755 [00:16<00:11, 2101.77MF/s]
Assigning muscle fibers to motor neurons:  61%|██████    | 35679/58755 [00:16<00:10, 2103.06MF/s]
Assigning muscle fibers to motor neurons:  61%|██████    | 35890/58755 [00:17<00:10, 2104.72MF/s]
Assigning muscle fibers to motor neurons:  61%|██████▏   | 36101/58755 [00:17<00:10, 2104.19MF/s]
Assigning muscle fibers to motor neurons:  62%|██████▏   | 36312/58755 [00:17<00:10, 2104.95MF/s]
Assigning muscle fibers to motor neurons:  62%|██████▏   | 36523/58755 [00:17<00:10, 2103.40MF/s]
Assigning muscle fibers to motor neurons:  63%|██████▎   | 36734/58755 [00:17<00:10, 2104.41MF/s]
Assigning muscle fibers to motor neurons:  63%|██████▎   | 36945/58755 [00:17<00:10, 2104.86MF/s]
Assigning muscle fibers to motor neurons:  63%|██████▎   | 37156/58755 [00:17<00:10, 2104.45MF/s]
Assigning muscle fibers to motor neurons:  64%|██████▎   | 37367/58755 [00:17<00:10, 2102.25MF/s]
Assigning muscle fibers to motor neurons:  64%|██████▍   | 37578/58755 [00:17<00:10, 2101.91MF/s]
Assigning muscle fibers to motor neurons:  64%|██████▍   | 37789/58755 [00:17<00:09, 2097.88MF/s]
Assigning muscle fibers to motor neurons:  65%|██████▍   | 38000/58755 [00:18<00:09, 2101.25MF/s]
Assigning muscle fibers to motor neurons:  65%|██████▌   | 38211/58755 [00:18<00:09, 2100.44MF/s]
Assigning muscle fibers to motor neurons:  65%|██████▌   | 38422/58755 [00:18<00:09, 2102.49MF/s]
Assigning muscle fibers to motor neurons:  66%|██████▌   | 38633/58755 [00:18<00:09, 2102.63MF/s]
Assigning muscle fibers to motor neurons:  66%|██████▌   | 38845/58755 [00:18<00:09, 2106.94MF/s]
Assigning muscle fibers to motor neurons:  66%|██████▋   | 39056/58755 [00:18<00:09, 2106.89MF/s]
Assigning muscle fibers to motor neurons:  67%|██████▋   | 39267/58755 [00:18<00:09, 2106.56MF/s]
Assigning muscle fibers to motor neurons:  67%|██████▋   | 39479/58755 [00:18<00:09, 2109.49MF/s]
Assigning muscle fibers to motor neurons:  68%|██████▊   | 39691/58755 [00:18<00:09, 2110.23MF/s]
Assigning muscle fibers to motor neurons:  68%|██████▊   | 39903/58755 [00:18<00:08, 2109.00MF/s]
Assigning muscle fibers to motor neurons:  68%|██████▊   | 40115/58755 [00:19<00:08, 2110.66MF/s]
Assigning muscle fibers to motor neurons:  69%|██████▊   | 40327/58755 [00:19<00:08, 2108.64MF/s]
Assigning muscle fibers to motor neurons:  69%|██████▉   | 40538/58755 [00:19<00:08, 2108.92MF/s]
Assigning muscle fibers to motor neurons:  69%|██████▉   | 40749/58755 [00:19<00:08, 2108.15MF/s]
Assigning muscle fibers to motor neurons:  70%|██████▉   | 40960/58755 [00:19<00:08, 2108.64MF/s]
Assigning muscle fibers to motor neurons:  70%|███████   | 41171/58755 [00:19<00:08, 2106.41MF/s]
Assigning muscle fibers to motor neurons:  70%|███████   | 41382/58755 [00:19<00:08, 2107.29MF/s]
Assigning muscle fibers to motor neurons:  71%|███████   | 41594/58755 [00:19<00:08, 2108.98MF/s]
Assigning muscle fibers to motor neurons:  71%|███████   | 41805/58755 [00:19<00:08, 2108.16MF/s]
Assigning muscle fibers to motor neurons:  72%|███████▏  | 42016/58755 [00:19<00:07, 2107.92MF/s]
Assigning muscle fibers to motor neurons:  72%|███████▏  | 42228/58755 [00:20<00:07, 2109.59MF/s]
Assigning muscle fibers to motor neurons:  72%|███████▏  | 42439/58755 [00:20<00:07, 2107.04MF/s]
Assigning muscle fibers to motor neurons:  73%|███████▎  | 42651/58755 [00:20<00:07, 2107.92MF/s]
Assigning muscle fibers to motor neurons:  73%|███████▎  | 42862/58755 [00:20<00:07, 2107.96MF/s]
Assigning muscle fibers to motor neurons:  73%|███████▎  | 43074/58755 [00:20<00:07, 2109.20MF/s]
Assigning muscle fibers to motor neurons:  74%|███████▎  | 43286/58755 [00:20<00:07, 2109.53MF/s]
Assigning muscle fibers to motor neurons:  74%|███████▍  | 43497/58755 [00:20<00:07, 1997.16MF/s]
Assigning muscle fibers to motor neurons:  74%|███████▍  | 43698/58755 [00:20<00:07, 1999.27MF/s]
Assigning muscle fibers to motor neurons:  75%|███████▍  | 43899/58755 [00:20<00:07, 1971.52MF/s]
Assigning muscle fibers to motor neurons:  75%|███████▌  | 44111/58755 [00:21<00:07, 2013.76MF/s]
Assigning muscle fibers to motor neurons:  75%|███████▌  | 44315/58755 [00:21<00:07, 2019.62MF/s]
Assigning muscle fibers to motor neurons:  76%|███████▌  | 44522/58755 [00:21<00:07, 2032.29MF/s]
Assigning muscle fibers to motor neurons:  76%|███████▌  | 44730/58755 [00:21<00:06, 2045.96MF/s]
Assigning muscle fibers to motor neurons:  76%|███████▋  | 44939/58755 [00:21<00:06, 2058.57MF/s]
Assigning muscle fibers to motor neurons:  77%|███████▋  | 45148/58755 [00:21<00:06, 2067.37MF/s]
Assigning muscle fibers to motor neurons:  77%|███████▋  | 45356/58755 [00:21<00:06, 2069.30MF/s]
Assigning muscle fibers to motor neurons:  78%|███████▊  | 45565/58755 [00:21<00:06, 2074.68MF/s]
Assigning muscle fibers to motor neurons:  78%|███████▊  | 45774/58755 [00:21<00:06, 2079.00MF/s]
Assigning muscle fibers to motor neurons:  78%|███████▊  | 45983/58755 [00:21<00:06, 2080.01MF/s]
Assigning muscle fibers to motor neurons:  79%|███████▊  | 46195/58755 [00:22<00:06, 2090.30MF/s]
Assigning muscle fibers to motor neurons:  79%|███████▉  | 46406/58755 [00:22<00:05, 2095.66MF/s]
Assigning muscle fibers to motor neurons:  79%|███████▉  | 46616/58755 [00:22<00:05, 2096.61MF/s]
Assigning muscle fibers to motor neurons:  80%|███████▉  | 46828/58755 [00:22<00:05, 2100.70MF/s]
Assigning muscle fibers to motor neurons:  80%|████████  | 47040/58755 [00:22<00:05, 2103.95MF/s]
Assigning muscle fibers to motor neurons:  80%|████████  | 47251/58755 [00:22<00:05, 2103.91MF/s]
Assigning muscle fibers to motor neurons:  81%|████████  | 47462/58755 [00:22<00:05, 2105.49MF/s]
Assigning muscle fibers to motor neurons:  81%|████████  | 47673/58755 [00:22<00:05, 2106.81MF/s]
Assigning muscle fibers to motor neurons:  81%|████████▏ | 47885/58755 [00:22<00:05, 2108.72MF/s]
Assigning muscle fibers to motor neurons:  82%|████████▏ | 48096/58755 [00:22<00:05, 2108.36MF/s]
Assigning muscle fibers to motor neurons:  82%|████████▏ | 48308/58755 [00:23<00:04, 2109.93MF/s]
Assigning muscle fibers to motor neurons:  83%|████████▎ | 48520/58755 [00:23<00:04, 2111.04MF/s]
Assigning muscle fibers to motor neurons:  83%|████████▎ | 48732/58755 [00:23<00:04, 2101.68MF/s]
Assigning muscle fibers to motor neurons:  83%|████████▎ | 48943/58755 [00:23<00:04, 2102.64MF/s]
Assigning muscle fibers to motor neurons:  84%|████████▎ | 49155/58755 [00:23<00:04, 2105.03MF/s]
Assigning muscle fibers to motor neurons:  84%|████████▍ | 49366/58755 [00:23<00:04, 2105.94MF/s]
Assigning muscle fibers to motor neurons:  84%|████████▍ | 49577/58755 [00:23<00:04, 2090.39MF/s]
Assigning muscle fibers to motor neurons:  85%|████████▍ | 49788/58755 [00:23<00:04, 2094.99MF/s]
Assigning muscle fibers to motor neurons:  85%|████████▌ | 49999/58755 [00:23<00:04, 2097.57MF/s]
Assigning muscle fibers to motor neurons:  85%|████████▌ | 50211/58755 [00:23<00:04, 2101.32MF/s]
Assigning muscle fibers to motor neurons:  86%|████████▌ | 50422/58755 [00:24<00:03, 2095.87MF/s]
Assigning muscle fibers to motor neurons:  86%|████████▌ | 50632/58755 [00:24<00:03, 2090.96MF/s]
Assigning muscle fibers to motor neurons:  87%|████████▋ | 50843/58755 [00:24<00:03, 2095.38MF/s]
Assigning muscle fibers to motor neurons:  87%|████████▋ | 51053/58755 [00:24<00:03, 2096.24MF/s]
Assigning muscle fibers to motor neurons:  87%|████████▋ | 51265/58755 [00:24<00:03, 2100.83MF/s]
Assigning muscle fibers to motor neurons:  88%|████████▊ | 51477/58755 [00:24<00:03, 2103.86MF/s]
Assigning muscle fibers to motor neurons:  88%|████████▊ | 51689/58755 [00:24<00:03, 2106.32MF/s]
Assigning muscle fibers to motor neurons:  88%|████████▊ | 51901/58755 [00:24<00:03, 2107.74MF/s]
Assigning muscle fibers to motor neurons:  89%|████████▊ | 52113/58755 [00:24<00:03, 2109.95MF/s]
Assigning muscle fibers to motor neurons:  89%|████████▉ | 52325/58755 [00:24<00:03, 2111.15MF/s]
Assigning muscle fibers to motor neurons:  89%|████████▉ | 52537/58755 [00:25<00:02, 2111.78MF/s]
Assigning muscle fibers to motor neurons:  90%|████████▉ | 52749/58755 [00:25<00:02, 2110.77MF/s]
Assigning muscle fibers to motor neurons:  90%|█████████ | 52961/58755 [00:25<00:02, 2110.25MF/s]
Assigning muscle fibers to motor neurons:  91%|█████████ | 53174/58755 [00:25<00:02, 2113.30MF/s]
Assigning muscle fibers to motor neurons:  91%|█████████ | 53386/58755 [00:25<00:02, 2114.30MF/s]
Assigning muscle fibers to motor neurons:  91%|█████████ | 53598/58755 [00:25<00:02, 2112.24MF/s]
Assigning muscle fibers to motor neurons:  92%|█████████▏| 53810/58755 [00:25<00:02, 2109.57MF/s]
Assigning muscle fibers to motor neurons:  92%|█████████▏| 54021/58755 [00:25<00:02, 2108.67MF/s]
Assigning muscle fibers to motor neurons:  92%|█████████▏| 54233/58755 [00:25<00:02, 2110.01MF/s]
Assigning muscle fibers to motor neurons:  93%|█████████▎| 54445/58755 [00:25<00:02, 2109.50MF/s]
Assigning muscle fibers to motor neurons:  93%|█████████▎| 54656/58755 [00:26<00:01, 2109.16MF/s]
Assigning muscle fibers to motor neurons:  93%|█████████▎| 54867/58755 [00:26<00:01, 2109.31MF/s]
Assigning muscle fibers to motor neurons:  94%|█████████▎| 55078/58755 [00:26<00:01, 2108.84MF/s]
Assigning muscle fibers to motor neurons:  94%|█████████▍| 55290/58755 [00:26<00:01, 2110.24MF/s]
Assigning muscle fibers to motor neurons:  94%|█████████▍| 55502/58755 [00:26<00:01, 2108.58MF/s]
Assigning muscle fibers to motor neurons:  95%|█████████▍| 55713/58755 [00:26<00:01, 2105.54MF/s]
Assigning muscle fibers to motor neurons:  95%|█████████▌| 55924/58755 [00:26<00:01, 2103.83MF/s]
Assigning muscle fibers to motor neurons:  96%|█████████▌| 56135/58755 [00:26<00:01, 2104.25MF/s]
Assigning muscle fibers to motor neurons:  96%|█████████▌| 56346/58755 [00:26<00:01, 2104.22MF/s]
Assigning muscle fibers to motor neurons:  96%|█████████▋| 56557/58755 [00:26<00:01, 2102.06MF/s]
Assigning muscle fibers to motor neurons:  97%|█████████▋| 56768/58755 [00:27<00:00, 2100.66MF/s]
Assigning muscle fibers to motor neurons:  97%|█████████▋| 56979/58755 [00:27<00:00, 2094.01MF/s]
Assigning muscle fibers to motor neurons:  97%|█████████▋| 57190/58755 [00:27<00:00, 2096.11MF/s]
Assigning muscle fibers to motor neurons:  98%|█████████▊| 57401/58755 [00:27<00:00, 2098.57MF/s]
Assigning muscle fibers to motor neurons:  98%|█████████▊| 57612/58755 [00:27<00:00, 2099.33MF/s]
Assigning muscle fibers to motor neurons:  98%|█████████▊| 57823/58755 [00:27<00:00, 2101.18MF/s]
Assigning muscle fibers to motor neurons:  99%|█████████▉| 58034/58755 [00:27<00:00, 2103.58MF/s]
Assigning muscle fibers to motor neurons:  99%|█████████▉| 58245/58755 [00:27<00:00, 2101.58MF/s]
Assigning muscle fibers to motor neurons:  99%|█████████▉| 58457/58755 [00:27<00:00, 2105.62MF/s]
Assigning muscle fibers to motor neurons: 100%|█████████▉| 58669/58755 [00:27<00:00, 2108.10MF/s]
Assigning muscle fibers to motor neurons: 100%|██████████| 58755/58755 [00:27<00:00, 2099.68MF/s]
Assignment completed. 58755 muscle fibers assigned.
Muscle model statistics:
        Total muscle fibers: 58755
        Mean fibers per MU: 587.5
        Muscle cross-sectional area: 75.4 mm**2

Visualize Muscle Fiber Centers#

The fiber centers are the centers of the fibers that are innervated by the motor units.

Note

The fiber centers have been precalculated from a Voronoi tessellation of the muscle volume. Then depending on the fiber density, the fiber centers are distributed within the muscle volume.

plt.figure(figsize=(6, 6))

plot_mf_centers(muscle, ax=plt.gca())
plt.xlabel("X Position (mm)")
plt.ylabel("Y Position (mm)")
plt.axis("equal")
plt.grid(False)

plt.tight_layout()
plt.show()
Muscle fibers' center points

Visualize Motor Unit Innervation Areas#

Display the spatial organization of motor units and their innervation areas.

Note

The innervation areas are the areas where the motor units are innervated. They are calculated using the recruitment thresholds and the fiber density.

plt.figure(figsize=(6, 6))

plot_innervation_areas_2d(muscle, ax=plt.gca())
plt.xlabel("X Position (mm)")
plt.ylabel("Y Position (mm)")
plt.axis("equal")
plt.grid(False)

plt.tight_layout()
plt.show()
Motor neuron innervation areas
Plotting innervation areas:   0%|          | 0/100 [00:00<?, ?MU/s]
Plotting innervation areas:  48%|████▊     | 48/100 [00:00<00:00, 479.62MU/s]
Plotting innervation areas:  99%|█████████▉| 99/100 [00:00<00:00, 495.20MU/s]
Plotting innervation areas: 100%|██████████| 100/100 [00:00<00:00, 492.47MU/s]

Total running time of the script: (2 minutes 17.100 seconds)

Gallery generated by Sphinx-Gallery