muniverse-emg 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- muniverse_emg-0.1.0/.gitignore +71 -0
- muniverse_emg-0.1.0/LICENSE +28 -0
- muniverse_emg-0.1.0/PKG-INFO +230 -0
- muniverse_emg-0.1.0/bids_metadata/avrillon_et_al_2024.json +103 -0
- muniverse_emg-0.1.0/bids_metadata/caillet_et_al_2023.json +98 -0
- muniverse_emg-0.1.0/bids_metadata/grison_et_al_2025.json +108 -0
- muniverse_emg-0.1.0/bids_metadata/neuromotion.json +55 -0
- muniverse_emg-0.1.0/docker/neuromotion/Dockerfile +57 -0
- muniverse_emg-0.1.0/docker/neuromotion/makefile +25 -0
- muniverse_emg-0.1.0/docker/scd/Dockerfile +39 -0
- muniverse_emg-0.1.0/docker/scd/makefile +25 -0
- muniverse_emg-0.1.0/docs/index.html +404 -0
- muniverse_emg-0.1.0/docs/static/css/index.css +157 -0
- muniverse_emg-0.1.0/docs/static/images/muniverse.png +0 -0
- muniverse_emg-0.1.0/docs/static/js/index.js +8 -0
- muniverse_emg-0.1.0/notebooks/01_LoadDatasets.ipynb +72 -0
- muniverse_emg-0.1.0/notebooks/02_GenerateData.ipynb +271 -0
- muniverse_emg-0.1.0/notebooks/02_PreprocessData.ipynb +669 -0
- muniverse_emg-0.1.0/notebooks/03_DecomposeRecordings.ipynb +126 -0
- muniverse_emg-0.1.0/notebooks/decompose_recordings.ipynb +290 -0
- muniverse_emg-0.1.0/pyproject.toml +110 -0
- muniverse_emg-0.1.0/readme.md +189 -0
- muniverse_emg-0.1.0/scripts/__init__.py +3 -0
- muniverse_emg-0.1.0/scripts/bids_conversion/avrillon2024_to_bids.py +508 -0
- muniverse_emg-0.1.0/scripts/bids_conversion/caillet2023_to_bids.py +403 -0
- muniverse_emg-0.1.0/scripts/bids_conversion/grison2025_to_bids.py +472 -0
- muniverse_emg-0.1.0/scripts/neurips_submission/bookkeeping.py +343 -0
- muniverse_emg-0.1.0/scripts/neurips_submission/decompose_recordings.py +622 -0
- muniverse_emg-0.1.0/scripts/neurips_submission/generate_configs.py +316 -0
- muniverse_emg-0.1.0/scripts/neurips_submission/generate_configs_TA.py +219 -0
- muniverse_emg-0.1.0/scripts/neurips_submission/generate_report_cards.py +177 -0
- muniverse_emg-0.1.0/scripts/regenerate_neuromotion_test.py +665 -0
- muniverse_emg-0.1.0/setup.cfg +4 -0
- muniverse_emg-0.1.0/src/muniverse/__init__.py +13 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/__init__.py +161 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/_run_scd.py +136 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/_run_scd.sh +47 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/ae_decomposer.py +727 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/cbss.py +765 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/core.py +1016 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/decomposition.py +1009 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/post_processing.py +1112 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/pre_processing.py +548 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/tcl_cbss.py +235 -0
- muniverse_emg-0.1.0/src/muniverse/algorithms/upperbound.py +332 -0
- muniverse_emg-0.1.0/src/muniverse/configs/ae.json +66 -0
- muniverse_emg-0.1.0/src/muniverse/configs/cbss.json +70 -0
- muniverse_emg-0.1.0/src/muniverse/configs/hybrid_tibialis.json +64 -0
- muniverse_emg-0.1.0/src/muniverse/configs/neuromotion.json +56 -0
- muniverse_emg-0.1.0/src/muniverse/configs/scd.json +62 -0
- muniverse_emg-0.1.0/src/muniverse/configs/upperbound.json +26 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/__init__.py +180 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/_generate_recording.sh +55 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/_run_neuromotion.py +409 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/load.py +22 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/movement.py +340 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/postprocess.py +71 -0
- muniverse_emg-0.1.0/src/muniverse/datasets/simulate.py +238 -0
- muniverse_emg-0.1.0/src/muniverse/evaluation/__init__.py +3 -0
- muniverse_emg-0.1.0/src/muniverse/evaluation/evaluate.py +684 -0
- muniverse_emg-0.1.0/src/muniverse/evaluation/report_card_routines.py +260 -0
- muniverse_emg-0.1.0/src/muniverse/utils/__init__.py +13 -0
- muniverse_emg-0.1.0/src/muniverse/utils/_otb_io.py +288 -0
- muniverse_emg-0.1.0/src/muniverse/utils/bids_routines.py +1744 -0
- muniverse_emg-0.1.0/src/muniverse/utils/containers.py +164 -0
- muniverse_emg-0.1.0/src/muniverse/utils/logging.py +437 -0
- muniverse_emg-0.1.0/src/muniverse_emg.egg-info/PKG-INFO +230 -0
- muniverse_emg-0.1.0/src/muniverse_emg.egg-info/SOURCES.txt +77 -0
- muniverse_emg-0.1.0/src/muniverse_emg.egg-info/dependency_links.txt +1 -0
- muniverse_emg-0.1.0/src/muniverse_emg.egg-info/requires.txt +21 -0
- muniverse_emg-0.1.0/src/muniverse_emg.egg-info/top_level.txt +1 -0
- muniverse_emg-0.1.0/tests/__init__.py +3 -0
- muniverse_emg-0.1.0/tests/expected_results/simple_ae_prediction.pkl +0 -0
- muniverse_emg-0.1.0/tests/expected_results/simple_cbss_prediction.pkl +0 -0
- muniverse_emg-0.1.0/tests/test_algorithm_core.py +112 -0
- muniverse_emg-0.1.0/tests/test_algorithms.py +22 -0
- muniverse_emg-0.1.0/tests/test_algorithms_simple.py +277 -0
- muniverse_emg-0.1.0/tests/test_datasets.py +156 -0
- muniverse_emg-0.1.0/tests/test_evaluation.py +8 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
**__pycache__/
|
|
3
|
+
**pytest_cache/
|
|
4
|
+
**mypy_cache/
|
|
5
|
+
*.py[cod]
|
|
6
|
+
*$py.class
|
|
7
|
+
*.so
|
|
8
|
+
.Python
|
|
9
|
+
build/
|
|
10
|
+
develop-eggs/
|
|
11
|
+
dist/
|
|
12
|
+
downloads/
|
|
13
|
+
eggs/
|
|
14
|
+
.eggs/
|
|
15
|
+
lib/
|
|
16
|
+
lib64/
|
|
17
|
+
parts/
|
|
18
|
+
sdist/
|
|
19
|
+
var/
|
|
20
|
+
wheels/
|
|
21
|
+
*.egg-info/
|
|
22
|
+
.installed.cfg
|
|
23
|
+
*.egg
|
|
24
|
+
.muniverse/
|
|
25
|
+
.claude/
|
|
26
|
+
|
|
27
|
+
# Virtual Environment
|
|
28
|
+
.env
|
|
29
|
+
.venv
|
|
30
|
+
env/
|
|
31
|
+
venv/
|
|
32
|
+
ENV/
|
|
33
|
+
|
|
34
|
+
# IDE
|
|
35
|
+
.idea/
|
|
36
|
+
.vscode/
|
|
37
|
+
*.swp
|
|
38
|
+
*.swo
|
|
39
|
+
*.code-workspace
|
|
40
|
+
|
|
41
|
+
# Jupyter Notebook
|
|
42
|
+
.ipynb_checkpoints
|
|
43
|
+
|
|
44
|
+
# macOS
|
|
45
|
+
**/.DS_Store
|
|
46
|
+
|
|
47
|
+
# Logs
|
|
48
|
+
*.log
|
|
49
|
+
*.sh.e*
|
|
50
|
+
*.sh.o*
|
|
51
|
+
|
|
52
|
+
# Data folder
|
|
53
|
+
data/
|
|
54
|
+
|
|
55
|
+
# Singularity image files
|
|
56
|
+
*.sif
|
|
57
|
+
|
|
58
|
+
# Data files
|
|
59
|
+
*.hdf5
|
|
60
|
+
*.edf
|
|
61
|
+
*.npy
|
|
62
|
+
*.pkl
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# Results and configs folder
|
|
66
|
+
**/res/
|
|
67
|
+
**/configs/
|
|
68
|
+
**/outputs/
|
|
69
|
+
|
|
70
|
+
# Test coverage <temporarily?>
|
|
71
|
+
.coverage
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
GNU GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 29 June 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2024 MUniverse Contributors
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
================================================================================
|
|
20
|
+
|
|
21
|
+
NOTICE: This project uses NeuroMotion, which is licensed under GNU GPL v3.0.
|
|
22
|
+
As a result, MUniverse is also licensed under GNU GPL v3.0 to comply with
|
|
23
|
+
the copyleft requirements of the GPL license.
|
|
24
|
+
|
|
25
|
+
This project also integrates with Swarm-Contrastive-Decomposition, which is
|
|
26
|
+
licensed under Creative Commons Attribution-NonCommercial 4.0 International
|
|
27
|
+
Public License. Please refer to the respective licenses for usage terms.
|
|
28
|
+
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: muniverse-emg
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A modular framework for simulated and experimental EMG dataset generation, motor unit decomposition algorithm benchmarking, and performance evaluation
|
|
5
|
+
Author: Pranav Mamidanna, Thomas Klotz, Dimitrios Halatsis, Irene Mendez Guerra
|
|
6
|
+
License: GPLv3
|
|
7
|
+
Project-URL: Documentation, https://dfarinagroup.github.io/muniverse/
|
|
8
|
+
Project-URL: Repository, https://github.com/dfarinagroup/muniverse.git
|
|
9
|
+
Keywords: EMG,motor unit idendification,blind source separation,validation,benchmarking
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: numpy
|
|
21
|
+
Requires-Dist: scipy
|
|
22
|
+
Requires-Dist: torch
|
|
23
|
+
Requires-Dist: pandas
|
|
24
|
+
Requires-Dist: scikit-learn
|
|
25
|
+
Requires-Dist: easyDataverse
|
|
26
|
+
Requires-Dist: pyedflib
|
|
27
|
+
Requires-Dist: python-dateutil
|
|
28
|
+
Requires-Dist: bids-validator-deno
|
|
29
|
+
Requires-Dist: pydantic
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
33
|
+
Requires-Dist: black; extra == "dev"
|
|
34
|
+
Requires-Dist: isort; extra == "dev"
|
|
35
|
+
Requires-Dist: mypy; extra == "dev"
|
|
36
|
+
Requires-Dist: jupyter; extra == "dev"
|
|
37
|
+
Requires-Dist: ipykernel; extra == "dev"
|
|
38
|
+
Requires-Dist: matplotlib; extra == "dev"
|
|
39
|
+
Requires-Dist: seaborn; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
# MUniverse: Benchmarking Motor Unit Decomposition Algorithms
|
|
43
|
+
|
|
44
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
45
|
+
[](https://www.python.org/downloads/)
|
|
46
|
+
|
|
47
|
+
MUniverse is a modular framework for **simulated and experimental EMG dataset generation**, **motor unit decomposition algorithm benchmarking**, and **performance evaluation**. It integrates biomechanical simulation (via *NeuroMotion*), generative models (*BioMime*), standardized formats (e.g. BIDS/Croissant), and FAIR data hosting (Harvard Dataverse).
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
<img src="https://github.com/dfarinagroup/muniverse/blob/main/docs/static/images/muniverse.png" alt="MUniverse overview" width="600"/>
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
## Features
|
|
54
|
+
|
|
55
|
+
- 🔬 **Algorithm Benchmarking**: Compare multiple motor unit decomposition algorithms (CBSS, SCD, Upperbound, AE)
|
|
56
|
+
- 📊 **Dataset Generation**: Generate simulated EMG datasets using NeuroMotion and experimental datasets
|
|
57
|
+
- 📁 **FAIR Data**: Access datasets through Harvard Dataverse with BIDS and Croissant format support
|
|
58
|
+
- 🔧 **Containerized Workflows**: Docker and Singularity support for reproducible algorithm execution
|
|
59
|
+
- 📈 **Performance Evaluation**: Comprehensive evaluation metrics and report card generation
|
|
60
|
+
- 📓 **Tutorial Notebooks**: Interactive Jupyter notebooks for dataset loading and algorithm usage
|
|
61
|
+
|
|
62
|
+
## Installation
|
|
63
|
+
|
|
64
|
+
### Requirements
|
|
65
|
+
|
|
66
|
+
- Python 3.11 or higher
|
|
67
|
+
- pip
|
|
68
|
+
|
|
69
|
+
### Package Installation
|
|
70
|
+
|
|
71
|
+
MUniverse is distributed as a Python package. To set up the development environment:
|
|
72
|
+
|
|
73
|
+
1. **Clone the repository:**
|
|
74
|
+
```bash
|
|
75
|
+
git clone https://github.com/dfarinagroup/muniverse.git
|
|
76
|
+
cd muniverse
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
2. **Create and activate a virtual environment:**
|
|
80
|
+
```bash
|
|
81
|
+
python -m venv .venv
|
|
82
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
3. **Install the package:**
|
|
86
|
+
```bash
|
|
87
|
+
# Install core dependencies
|
|
88
|
+
pip install -e .
|
|
89
|
+
|
|
90
|
+
# Install development dependencies (optional)
|
|
91
|
+
pip install -e ".[dev]"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Docker/Singularity Containers
|
|
95
|
+
|
|
96
|
+
For algorithm execution, Docker or Singularity containers are available. See the `docker/` directory for container definitions.
|
|
97
|
+
|
|
98
|
+
## Quick Start
|
|
99
|
+
|
|
100
|
+
### Loading a Dataset
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from muniverse.datasets import load_dataset
|
|
104
|
+
|
|
105
|
+
# Load a dataset from Harvard Dataverse
|
|
106
|
+
dataset = load_dataset("neuromotion-test", output_dir="./data")
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Running Decomposition
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from muniverse.algorithms import decompose_recording
|
|
113
|
+
|
|
114
|
+
# Run decomposition using CBSS algorithm
|
|
115
|
+
results, metadata = decompose_recording(
|
|
116
|
+
data="path/to/emg_data.edf",
|
|
117
|
+
method="cbss"
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# Or use SCD algorithm (requires container)
|
|
121
|
+
results, metadata = decompose_recording(
|
|
122
|
+
data="path/to/emg_data.edf",
|
|
123
|
+
method="scd",
|
|
124
|
+
container="path/to/muniverse_scd.sif",
|
|
125
|
+
engine="singularity"
|
|
126
|
+
)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Available Datasets
|
|
130
|
+
|
|
131
|
+
All datasets are hosted on [Harvard Dataverse](https://dataverse.harvard.edu/dataverse/muniverse-datasets) and follow FAIR principles:
|
|
132
|
+
|
|
133
|
+
- **Caillet et al. 2023** - [DOI: 10.7910/DVN/F9GWIW](https://doi.org/10.7910/DVN/F9GWIW)
|
|
134
|
+
- **Avrillon et al. 2024** - [DOI: 10.7910/DVN/L9OQY7](https://doi.org/10.7910/DVN/L9OQY7)
|
|
135
|
+
- **Grison et al. 2025** - [DOI: 10.7910/DVN/ID1WNQ](https://doi.org/10.7910/DVN/ID1WNQ)
|
|
136
|
+
- **Neuromotion-Train** - [DOI: 10.7910/DVN/2UQHTP](https://doi.org/10.7910/DVN/2UQHTP)
|
|
137
|
+
- **Neuromotion-Test** - [DOI: 10.7910/DVN/QYI336](https://doi.org/10.7910/DVN/QYI336)
|
|
138
|
+
- **Hybrid-Tibialis** - [DOI: 10.7910/DVN/YHTGGA](https://doi.org/10.7910/DVN/YHTGGA)
|
|
139
|
+
|
|
140
|
+
## Supported Algorithms
|
|
141
|
+
|
|
142
|
+
- **CBSS** - Convolutional Blind Source Separation
|
|
143
|
+
- **SCD** - Swarm Contrastive Decomposition ([GitHub](https://github.com/AgneGris/swarm-contrastive-decomposition))
|
|
144
|
+
- **Upperbound** - Upper bound performance estimation
|
|
145
|
+
- **AE** - Autoencoder-based decomposition
|
|
146
|
+
|
|
147
|
+
## Documentation (coming soon 🚧)
|
|
148
|
+
|
|
149
|
+
- 📖 [GitHub Pages Site](https://dfarinagroup.github.io/muniverse/) - Project documentation and overview
|
|
150
|
+
- 📓 [Tutorial Notebooks](notebooks/) - Interactive examples and guides
|
|
151
|
+
- 💻 [Source Code](https://github.com/dfarinagroup/muniverse) - Repository and issue tracking
|
|
152
|
+
- 📊 [Harvard Dataverse](https://dataverse.harvard.edu/dataverse/muniverse-datasets) - Dataset access and metadata
|
|
153
|
+
|
|
154
|
+
## Project Structure
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
muniverse/
|
|
158
|
+
├── src/ # Package source code
|
|
159
|
+
│ └── muniverse/
|
|
160
|
+
│ ├── configs/ # Algorithm and dataset configurations
|
|
161
|
+
│ ├── datasets/ # Dataset loading and simulation utilities
|
|
162
|
+
│ ├── algorithms/ # Decomposition algorithms
|
|
163
|
+
│ ├── evaluation/ # Performance evaluation
|
|
164
|
+
│ └── utils/ # Utility functions
|
|
165
|
+
├── notebooks/ # Tutorial notebooks
|
|
166
|
+
├── scripts/ # Utility scripts
|
|
167
|
+
├── docker/ # Docker container definitions
|
|
168
|
+
├── docs/ # GitHub Pages documentation (Coming soon!)
|
|
169
|
+
├── tests/ # Unit tests
|
|
170
|
+
├── pyproject.toml # Package configuration
|
|
171
|
+
└── README.md
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Contributing
|
|
175
|
+
|
|
176
|
+
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
|
|
177
|
+
|
|
178
|
+
1. Fork the repository
|
|
179
|
+
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
180
|
+
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
181
|
+
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
182
|
+
5. Open a Pull Request
|
|
183
|
+
|
|
184
|
+
## Contributors
|
|
185
|
+
|
|
186
|
+
- [Pranav Mamidanna](https://github.com/pranavm19), [📧](mailto:p.mamidanna22@imperial.ac.uk)
|
|
187
|
+
- [Thomas Klotz](https://github.com/klotz-t), [📧](mailto:thomas.klotz@imsb.uni-stuttgart.de)
|
|
188
|
+
- [Dimitrios Halatsis](https://github.com/dhalatsis)
|
|
189
|
+
- [Irene Mendez Guerra](https://github.com/imendezguerra)
|
|
190
|
+
|
|
191
|
+
## Acknowledgments
|
|
192
|
+
|
|
193
|
+
- **NeuroMotion** - Biomechanical simulation framework ([GitHub](https://github.com/shihan-ma/NeuroMotion))
|
|
194
|
+
- **Swarm-Contrastive-Decomposition** - Decomposition algorithm ([GitHub](https://github.com/AgneGris/swarm-contrastive-decomposition))
|
|
195
|
+
- **Harvard Dataverse** - FAIR data hosting platform
|
|
196
|
+
- **BIDS** - Brain Imaging Data Structure standard
|
|
197
|
+
|
|
198
|
+
## Citation
|
|
199
|
+
|
|
200
|
+
If you use MUniverse in your research, please cite:
|
|
201
|
+
|
|
202
|
+
```bibtex
|
|
203
|
+
@inproceedings{NEURIPS2025_dcce2899,
|
|
204
|
+
author = {Mamidanna, Pranav and Klotz, Thomas and Chalatsis, Dimitrios and Grison, Agnese and Mendez Guerra, Irene and Ma, Shihan and Caillet, Arnault and Avrillon, Simon and Rohl\'{e}n, Robin and Farina, Dario},
|
|
205
|
+
booktitle = {Advances in Neural Information Processing Systems},
|
|
206
|
+
editor = {D. Belgrave and C. Zhang and H. Lin and R. Pascanu and P. Koniusz and M. Ghassemi and N. Chen},
|
|
207
|
+
pages = {},
|
|
208
|
+
publisher = {Curran Associates, Inc.},
|
|
209
|
+
title = {MUniverse: A Simulation and Benchmarking Suite for Motor Unit Decomposition},
|
|
210
|
+
url = {https://proceedings.neurips.cc/paper_files/paper/2025/file/dcce28990bf662c6b916c52cd7e975da-Paper-Datasets_and_Benchmarks_Track.pdf},
|
|
211
|
+
volume = {38},
|
|
212
|
+
year = {2025}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Contact
|
|
217
|
+
|
|
218
|
+
For questions, issues, or contributions, please:
|
|
219
|
+
- Open an issue on [GitHub](https://github.com/dfarinagroup/muniverse/issues)
|
|
220
|
+
- Contact the maintainers via email (see the *Contributors section* for author emails)
|
|
221
|
+
|
|
222
|
+
### License
|
|
223
|
+
|
|
224
|
+
MUniverse is licensed under the **GNU General Public License v3.0** (GPL-3.0).
|
|
225
|
+
|
|
226
|
+
**Important Licensing Notes:**
|
|
227
|
+
- This project uses **NeuroMotion**, which is licensed under GNU GPL v3.0. As a result, MUniverse is also licensed under GNU GPL v3.0 to comply with the copyleft requirements of the GPL license.
|
|
228
|
+
- This project also integrates with **Swarm-Contrastive-Decomposition**, which is licensed under Creative Commons Attribution-NonCommercial 4.0 International Public License.
|
|
229
|
+
|
|
230
|
+
See the [LICENSE](LICENSE) file for full details.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"DatasetDescription": {
|
|
3
|
+
"Name": "MUniverse Avrillon et al 2024",
|
|
4
|
+
"BIDSVersion": "1.11.1",
|
|
5
|
+
"DatasetType": "raw",
|
|
6
|
+
"License": "CC0 BY 4.0",
|
|
7
|
+
"Authors": [
|
|
8
|
+
"Simon Avrillon",
|
|
9
|
+
"Francois Hug",
|
|
10
|
+
"Roger M. Enoka",
|
|
11
|
+
"Arnault H. Caillet",
|
|
12
|
+
"Dario Farina"
|
|
13
|
+
],
|
|
14
|
+
"EthicsApprovals": [
|
|
15
|
+
"Imperial College London (Study 18IC4685)",
|
|
16
|
+
"Comite de Protection des Personnes Ouest III (Study 23.00453.000166)"
|
|
17
|
+
],
|
|
18
|
+
"Funding": [
|
|
19
|
+
"Agence Nationale de la Recherche (ANR-16-IDEX-0007)",
|
|
20
|
+
"Biotechnology and Biological Sciences Research Council (BB/V00896X)",
|
|
21
|
+
"Engineering and Physical Sciences Research Council (EP/T020970)",
|
|
22
|
+
"Agence Nationale de la Recherche (ANR-24-CE17-5805)",
|
|
23
|
+
"European Research Council (#810346)",
|
|
24
|
+
"Future project managed by the French National Research Agency (ANR-15-IDEX-01)",
|
|
25
|
+
"National Multiple Sclerosis Society (RG-2206-39688)"
|
|
26
|
+
],
|
|
27
|
+
"DatasetDOI": "https://doi.org/10.7910/DVN/L9OQY7",
|
|
28
|
+
"ReferencesAndLinks": [
|
|
29
|
+
"Avrillon, S., Hug, F., Enoka, R. M., Caillet, A. H., & Farina, D. (2024). The identification of extensive samples of motor units in human muscles reveals diverse effects of neuromodulatory inputs on the rate coding. eLife, 13, eLife.97085.3.",
|
|
30
|
+
"https://doi.org/10.7554/eLife.97085.3"
|
|
31
|
+
],
|
|
32
|
+
"GeneratedBy": [{
|
|
33
|
+
"Name": "MUniverse",
|
|
34
|
+
"Version": "1.0",
|
|
35
|
+
"CodeURL": "https://github.com/dfarinagroup/muniverse/scripts/",
|
|
36
|
+
"ScriptName": "avrillon2024_to_bids.py",
|
|
37
|
+
"Description": "Semi-automated conversion of the original data into BIDS format"
|
|
38
|
+
}],
|
|
39
|
+
"SourceDatasets": [{
|
|
40
|
+
"URL": "https://doi.org/10.6084/m9.figshare.24640944",
|
|
41
|
+
"Version": "2023-11-27"
|
|
42
|
+
}]
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
"EMGSidecar": {
|
|
46
|
+
"SkinPreparation": "The skin was shaved and cleaned with an abrasive pad and water.",
|
|
47
|
+
"EMGPlacementScheme": "Other",
|
|
48
|
+
"EMGPlacementSchemeDescription": "Four grids were carefully positioned side-to-side with a 4-mm distance between the electrodes at the edges of adjacent grids. The 256 electrodes were centered to the muscle belly (right tibialis anterior or vastus lateralis) and laid within the muscle perimeter identified through palpation. Two bands damped with water were placed around the ankle as ground (R2) and reference (R1) electrodes.",
|
|
49
|
+
"EMGReference": "R1",
|
|
50
|
+
"EMGGround": "R2",
|
|
51
|
+
"SamplingFrequency": 2048,
|
|
52
|
+
"PowerLineFrequency": 50,
|
|
53
|
+
"ElectrodeManufacturer": "OTBioelettronica",
|
|
54
|
+
"ElectrodeManufacturersModelName": "GR04MM1305",
|
|
55
|
+
"ElectrodeMaterial": "gold coated",
|
|
56
|
+
"InterelectrodeDistance": 4,
|
|
57
|
+
"EMGElectrodeCount": 258,
|
|
58
|
+
"EMGChannelCount": 256,
|
|
59
|
+
"MISCChannelCount": 3,
|
|
60
|
+
"Manufacturer": "OTBioelettronica",
|
|
61
|
+
"ManufacturersModelName": "Quattrocento",
|
|
62
|
+
"SoftwareVersions": "OTBioLab+ v.1.5.6.0",
|
|
63
|
+
"Gain": 150,
|
|
64
|
+
"SoftwareFilters": "n/a",
|
|
65
|
+
"HardwareFilters": {
|
|
66
|
+
"HighPassFilter": {
|
|
67
|
+
"CutoffFrequency": 10,
|
|
68
|
+
"Unit": "Hz",
|
|
69
|
+
"Description": "Analog high-pass filter (-3 dB cutoff)"
|
|
70
|
+
},
|
|
71
|
+
"LowPassFilter": {
|
|
72
|
+
"CutoffFrequency": 500,
|
|
73
|
+
"Unit": "Hz",
|
|
74
|
+
"Description": "Analog low-pass filter (-3 dB cutoff)"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"RecordingType": "continuous",
|
|
78
|
+
"TaskName": "isometric",
|
|
79
|
+
"TaskDescription": "Isometric ramp-and-hold contraction",
|
|
80
|
+
"Instructions": "Follow path provided via visual feedback.",
|
|
81
|
+
"InstitutionName": "Imperial College London",
|
|
82
|
+
"InstitutionAddress": "London W12 0BZ, United Kingdom",
|
|
83
|
+
"InstitutionalDepartmentName": "Department of Bioengineering"
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
"CoordSystemSidecar":{
|
|
87
|
+
"grid1": {
|
|
88
|
+
"EMGCoordinateSystem": "Other",
|
|
89
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; all local electrode coordinates (per grid) are mapped on a single global coordinate system.",
|
|
90
|
+
"EMGCoordinateUnits": "mm",
|
|
91
|
+
"AnchorElectrode": "E12 - Grid1"
|
|
92
|
+
},
|
|
93
|
+
"lowerLeg": {
|
|
94
|
+
"EMGCoordinateSystem": "Other",
|
|
95
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; the coordinate system is located at the knee joint",
|
|
96
|
+
"EMGCoordinateUnits": "percent"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"DatasetDescription":{
|
|
3
|
+
"Name": "MUniverse Caillet et al 2023",
|
|
4
|
+
"BIDSVersion": "1.11.1",
|
|
5
|
+
"DatasetType": "raw",
|
|
6
|
+
"License": "CC0 BY 4.0",
|
|
7
|
+
"Authors": [
|
|
8
|
+
"Arnault H. Caillet",
|
|
9
|
+
"Simon Avrillon",
|
|
10
|
+
"Aritra Kundu",
|
|
11
|
+
"Tianyi Yu",
|
|
12
|
+
"Andrew T. M. Phillips",
|
|
13
|
+
"Luca Modenese",
|
|
14
|
+
"Dario Farina"
|
|
15
|
+
],
|
|
16
|
+
"EthicsApprovals": ["The Ethics Committee at Imperial College London reviewed and approved all procedures and protocols (no. 18IC4685)"],
|
|
17
|
+
"Funding": [
|
|
18
|
+
"European Research Council Synergy Grant NaturalBionicS (Contract #810346)",
|
|
19
|
+
"Engineering and Physical Sciences Research Council (EPSRC) Transformative Healthcare",
|
|
20
|
+
"Non-Invasive Single Neuron Electrical Monitoring (NISNEM Technology) Grant EP/T020970",
|
|
21
|
+
"Biotechnology and Biological Sciences Research Council (BBSRC) 'Neural Commands for Fast Movements in the Primate Motor System' Grant NU-003743"
|
|
22
|
+
],
|
|
23
|
+
"DatasetDOI": "https://doi.org/10.7910/DVN/F9GWIW",
|
|
24
|
+
"ReferencesAndLinks": [
|
|
25
|
+
"Caillet, A. H., Avrillon, S., Kundu, A., Yu, T., Phillips, A. T. M., Modenese, L., & Farina, D. (2023). Larger and Denser: An Optimal Design for Surface Grids of EMG Electrodes to Identify Greater and More Representative Samples of Motor Units. eNeuro, 10(9), ENEURO.0064-23.2023.",
|
|
26
|
+
"https://doi.org/10.1523/ENEURO.0064-23.2023"
|
|
27
|
+
],
|
|
28
|
+
"GeneratedBy": [{
|
|
29
|
+
"Name": "MUniverse",
|
|
30
|
+
"Version": "1.0",
|
|
31
|
+
"CodeURL": "https://github.com/dfarinagroup/muniverse/scripts/",
|
|
32
|
+
"ScriptName": "caillet2023_to_bids.py",
|
|
33
|
+
"Description": "Semi-automated conversion of the original data into BIDS format"
|
|
34
|
+
}],
|
|
35
|
+
"SourceDatasets": [{
|
|
36
|
+
"URL": "https://doi.org/10.6084/m9.figshare.22149287",
|
|
37
|
+
"Version": "2023-08-08"
|
|
38
|
+
}]
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
"EMGSidecar":{
|
|
42
|
+
"SkinPreparation": "The skin was shaved, abrased and cleansed with 70 percent ethyl alcohol.",
|
|
43
|
+
"EMGPlacementScheme": "Other",
|
|
44
|
+
"EMGPlacementSchemeDescription": "Four grids were carefully positioned side-to-side with a 4-mm distancebetween the electrodes at the edges of adjacent grids. The 256 electrodes were centered to the muscle belly (right tibialis anterior) and laid within the muscle perimeter identified through palpation. Two bands damped with water were placed around the ankle as ground (R2) and reference (R1) electrodes.",
|
|
45
|
+
"EMGReference": "R1",
|
|
46
|
+
"EMGGround": "R2",
|
|
47
|
+
"SamplingFrequency": 2048,
|
|
48
|
+
"PowerLineFrequency": 50,
|
|
49
|
+
"ElectrodeManufacturer": "OTBioelettronica",
|
|
50
|
+
"ElectrodeManufacturersModelName": "GR04MM1305",
|
|
51
|
+
"ElectrodeMaterial": "gold coated",
|
|
52
|
+
"InterelectrodeDistance": 4,
|
|
53
|
+
"EMGElectrodeCount": 258,
|
|
54
|
+
"EMGChannelCount": 256,
|
|
55
|
+
"MISCChannelCount": 3,
|
|
56
|
+
"Manufacturer": "OTBioelettronica",
|
|
57
|
+
"ManufacturersModelName": "Quattrocento",
|
|
58
|
+
"SoftwareVersions": "OTBioLab+ v.1.5.6.0",
|
|
59
|
+
"Gain": 150,
|
|
60
|
+
"SoftwareFilters": "n/a",
|
|
61
|
+
"HardwareFilters": {
|
|
62
|
+
"HighPassFilter": {
|
|
63
|
+
"CutoffFrequency": 10,
|
|
64
|
+
"Unit": "Hz",
|
|
65
|
+
"Description": "Analog high-pass filter (-3 dB cutoff)"
|
|
66
|
+
},
|
|
67
|
+
"LowPassFilter": {
|
|
68
|
+
"CutoffFrequency": 500,
|
|
69
|
+
"Unit": "Hz",
|
|
70
|
+
"Description": "Analog low-pass filter (-3 dB cutoff)"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"RecordingType": "continuous",
|
|
74
|
+
"TaskName": "Isometric-ankle-dorsiflexion",
|
|
75
|
+
"TaskDescription": "Trapezoidal contractions at 30 percent and 50 percent MVC",
|
|
76
|
+
"Instructions": "Follow the requested isometric torque trajetory, which is provided via real-time visual feedback.",
|
|
77
|
+
"InstitutionName": "Imperial Collage London",
|
|
78
|
+
"InstitutionAddress": "London SW7 2AZ, United Kingdom",
|
|
79
|
+
"InstitutionalDepartmentName": "Department of Bioengineering"
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
"CoordSystemSidecar":{
|
|
83
|
+
"grid1": {
|
|
84
|
+
"EMGCoordinateSystem": "Other",
|
|
85
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; all local electrode coordinates (per grid) are mapped on a single global coordinate system.",
|
|
86
|
+
"EMGCoordinateUnits": "mm",
|
|
87
|
+
"ParentCoordinateSystem": "lowerLeg",
|
|
88
|
+
"AnchorElectrode": "E12 - Grid1",
|
|
89
|
+
"AnchorCoordinates": [25, 0, 0]
|
|
90
|
+
},
|
|
91
|
+
"lowerLeg": {
|
|
92
|
+
"EMGCoordinateSystem": "Other",
|
|
93
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; the coordinate system is located at the knee joint",
|
|
94
|
+
"EMGCoordinateUnits": "percent"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"DatasetDescription": {
|
|
3
|
+
"Name": "MUniverse Griston et al 2025",
|
|
4
|
+
"BIDSVersion": "1.11.1",
|
|
5
|
+
"DatasetType": "raw",
|
|
6
|
+
"License": "CC0 BY 4.0",
|
|
7
|
+
"Authors": [
|
|
8
|
+
"Agnese Grison",
|
|
9
|
+
"Irene Mendez Guerra",
|
|
10
|
+
"Alexander Kenneth Clarke",
|
|
11
|
+
"Silvia Muceli",
|
|
12
|
+
"Jaime Ibanez Pereda",
|
|
13
|
+
"Dario Farina"
|
|
14
|
+
],
|
|
15
|
+
"EthicsApprovals": ["The Ethics Committee at Imperial College London reviewed and approved all procedures and protocols (no. 19IC5640)"],
|
|
16
|
+
"Funding": [
|
|
17
|
+
"UK Research and Innovation (UKRI Centre for Doctoral Training in AI for Healthcare grant number EP/S023283/1)",
|
|
18
|
+
"Huawei Technologies Research & Development (UK) Ltd.",
|
|
19
|
+
"Engineering and Physical Sciences Research Council (EPSRC) Doctoral Prize Fellowship",
|
|
20
|
+
"HybridNeuro (HORIZON-WIDERA-2021-ACCESS-03- 101079392)",
|
|
21
|
+
"ECHOES (ERC Starting Grant 101077693)",
|
|
22
|
+
"Consolidacion Investigadora grant (CNS2022-135366) funded by MCIN/AEI/10.13039/501100011033",
|
|
23
|
+
"NextGenerationEU/PRTR",
|
|
24
|
+
"Non-Invasive Single Neuron Electrical Monitoring (NISNEM Technology) Grant EP/T020970/1)"
|
|
25
|
+
],
|
|
26
|
+
"DatasetDOI": "https://doi.org/10.7910/DVN/ID1WNQ",
|
|
27
|
+
"ReferencesAndLinks": [
|
|
28
|
+
"Grison, A., Mendez Guerra, I., Clarke, A. K., Muceli, S., Ibanez Pereda, J., & Farina, D. (2025). Unlocking the full potential of high-density surface EMG: novel non-invasive high-yield motor unit decomposition Journal of Physiology, 603.8 (2025)",
|
|
29
|
+
"https://doi.org/10.1113/JP287913"
|
|
30
|
+
],
|
|
31
|
+
"GeneratedBy": [{
|
|
32
|
+
"Name": "MUniverse",
|
|
33
|
+
"Version": "1.0",
|
|
34
|
+
"CodeURL": "https://github.com/dfarinagroup/muniverse/scripts/",
|
|
35
|
+
"ScriptName": "grison2025_to_bids.py",
|
|
36
|
+
"Description": "Semi-automated conversion of the original data into BIDS format"
|
|
37
|
+
}]
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
"EMGSidecar": {
|
|
41
|
+
"SkinPreparation": "The skin was shaved, abrased and cleansed with 70 percent ethyl alcohol.",
|
|
42
|
+
"EMGPlacementScheme": "Other",
|
|
43
|
+
"EMGPlacementSchemeDescription": "Two grids were carefully positioned side-to-side with a 4-mm distance between the electrodes at the edges of adjacent grids. The 128 electrodes were centered to the muscle belly (right tibialis anterior) and laid within the muscle perimeter identified through palpation. Two bands damped with water were placed around the ankle as ground (R2) and reference (R1) electrodes.",
|
|
44
|
+
"ElectrodeManufacturer": "OTBioelettronica",
|
|
45
|
+
"ElectrodeManufacturersModelName": "GR04MM1305",
|
|
46
|
+
"ElectrodeMaterial": "gold coated",
|
|
47
|
+
"InterelectrodeDistance": 4,
|
|
48
|
+
"EMGReference": "R1",
|
|
49
|
+
"EMGGround": "R2",
|
|
50
|
+
"EMGElectrodeCount": 130,
|
|
51
|
+
"EMGChannelCount": 128,
|
|
52
|
+
"MISCChannelCount": 3,
|
|
53
|
+
"Manufacturer": "OTBioelettronica",
|
|
54
|
+
"ManufacturersModelName": "Quattrocento",
|
|
55
|
+
"SoftwareVersions": "OTBioLab+ v.1.5.6.0",
|
|
56
|
+
"Gain": 150,
|
|
57
|
+
"SoftwareFilters": "n/a",
|
|
58
|
+
"HardwareFilters": {
|
|
59
|
+
"HighPassFilter": {
|
|
60
|
+
"CutoffFrequency": 10,
|
|
61
|
+
"Unit": "Hz",
|
|
62
|
+
"Description": "Analog high-pass filter (-3 dB cutoff)"
|
|
63
|
+
},
|
|
64
|
+
"LowPassFilter": {
|
|
65
|
+
"CutoffFrequency": 500,
|
|
66
|
+
"Unit": "Hz",
|
|
67
|
+
"Description": "Analog low-pass filter (-3 dB cutoff)"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"RecordingType": "continuous",
|
|
71
|
+
"SamplingFrequency": 10240,
|
|
72
|
+
"PowerLineFrequency": 50,
|
|
73
|
+
"TaskName": "Isometric-ankle-dorsiflexion",
|
|
74
|
+
"TaskDescription": "The participant performed one, two, or three trapezoidal contractions at 10, 15, 20, 25, 30, 35, 40, 50, 60, and 70 percent MVC with 120 s of rest in between, consisting of linear ramps up and down performed at 5 percent per second and a plateau maintained for 20 s up to 30 percent MVC, 15 s for 35 percent and 40 percent MVC, and 10 s from 50 percent to 70 percent MVC. The order of the contractions was randomized.",
|
|
75
|
+
"Instructions": "Follow path provided via visual feedback.",
|
|
76
|
+
"InstitutionName": "Imperial Collage London",
|
|
77
|
+
"InstitutionAddress": "London SW7 2AZ, United Kingdom",
|
|
78
|
+
"InstitutionalDepartmentName": "Department of Bioengineering"
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
"CoordSystemSidecar":{
|
|
82
|
+
"grid1": {
|
|
83
|
+
"EMGCoordinateSystem": "Other",
|
|
84
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; all local electrode coordinates are reported per grid.",
|
|
85
|
+
"EMGCoordinateUnits": "mm",
|
|
86
|
+
"ParentCoordinateSystem": "lowerLeg",
|
|
87
|
+
"AnchorElectrode": "E012",
|
|
88
|
+
"AnchorCoordinates": [25, 0, 0]
|
|
89
|
+
},
|
|
90
|
+
"grid2": {
|
|
91
|
+
"EMGCoordinateSystem": "Other",
|
|
92
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; all local electrode coordinates are reported per grid.",
|
|
93
|
+
"EMGCoordinateUnits": "mm",
|
|
94
|
+
"ParentCoordinateSystem": "lowerLeg",
|
|
95
|
+
"AnchorElectrode": "E116",
|
|
96
|
+
"AnchorCoordinates": [50, 0, 0]
|
|
97
|
+
},
|
|
98
|
+
"lowerLeg": {
|
|
99
|
+
"EMGCoordinateSystem": "Other",
|
|
100
|
+
"EMGCoordinateSystemDescription": "x-axis: proximal -> distal; y-axis: medial -> lateral; the coordinate system is located at the knee joint",
|
|
101
|
+
"EMGCoordinateUnits": "percent"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|