Note
Go to the end to download the full example code.
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 unitsradius: Radius of the muscle in mmfiber_density: Fiber density per mm²max_innervation_area_to_total_muscle_area__ratio: Maximum innervation area to total muscle area ratiogrid_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()

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()

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)