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.
Files changed (79) hide show
  1. muniverse_emg-0.1.0/.gitignore +71 -0
  2. muniverse_emg-0.1.0/LICENSE +28 -0
  3. muniverse_emg-0.1.0/PKG-INFO +230 -0
  4. muniverse_emg-0.1.0/bids_metadata/avrillon_et_al_2024.json +103 -0
  5. muniverse_emg-0.1.0/bids_metadata/caillet_et_al_2023.json +98 -0
  6. muniverse_emg-0.1.0/bids_metadata/grison_et_al_2025.json +108 -0
  7. muniverse_emg-0.1.0/bids_metadata/neuromotion.json +55 -0
  8. muniverse_emg-0.1.0/docker/neuromotion/Dockerfile +57 -0
  9. muniverse_emg-0.1.0/docker/neuromotion/makefile +25 -0
  10. muniverse_emg-0.1.0/docker/scd/Dockerfile +39 -0
  11. muniverse_emg-0.1.0/docker/scd/makefile +25 -0
  12. muniverse_emg-0.1.0/docs/index.html +404 -0
  13. muniverse_emg-0.1.0/docs/static/css/index.css +157 -0
  14. muniverse_emg-0.1.0/docs/static/images/muniverse.png +0 -0
  15. muniverse_emg-0.1.0/docs/static/js/index.js +8 -0
  16. muniverse_emg-0.1.0/notebooks/01_LoadDatasets.ipynb +72 -0
  17. muniverse_emg-0.1.0/notebooks/02_GenerateData.ipynb +271 -0
  18. muniverse_emg-0.1.0/notebooks/02_PreprocessData.ipynb +669 -0
  19. muniverse_emg-0.1.0/notebooks/03_DecomposeRecordings.ipynb +126 -0
  20. muniverse_emg-0.1.0/notebooks/decompose_recordings.ipynb +290 -0
  21. muniverse_emg-0.1.0/pyproject.toml +110 -0
  22. muniverse_emg-0.1.0/readme.md +189 -0
  23. muniverse_emg-0.1.0/scripts/__init__.py +3 -0
  24. muniverse_emg-0.1.0/scripts/bids_conversion/avrillon2024_to_bids.py +508 -0
  25. muniverse_emg-0.1.0/scripts/bids_conversion/caillet2023_to_bids.py +403 -0
  26. muniverse_emg-0.1.0/scripts/bids_conversion/grison2025_to_bids.py +472 -0
  27. muniverse_emg-0.1.0/scripts/neurips_submission/bookkeeping.py +343 -0
  28. muniverse_emg-0.1.0/scripts/neurips_submission/decompose_recordings.py +622 -0
  29. muniverse_emg-0.1.0/scripts/neurips_submission/generate_configs.py +316 -0
  30. muniverse_emg-0.1.0/scripts/neurips_submission/generate_configs_TA.py +219 -0
  31. muniverse_emg-0.1.0/scripts/neurips_submission/generate_report_cards.py +177 -0
  32. muniverse_emg-0.1.0/scripts/regenerate_neuromotion_test.py +665 -0
  33. muniverse_emg-0.1.0/setup.cfg +4 -0
  34. muniverse_emg-0.1.0/src/muniverse/__init__.py +13 -0
  35. muniverse_emg-0.1.0/src/muniverse/algorithms/__init__.py +161 -0
  36. muniverse_emg-0.1.0/src/muniverse/algorithms/_run_scd.py +136 -0
  37. muniverse_emg-0.1.0/src/muniverse/algorithms/_run_scd.sh +47 -0
  38. muniverse_emg-0.1.0/src/muniverse/algorithms/ae_decomposer.py +727 -0
  39. muniverse_emg-0.1.0/src/muniverse/algorithms/cbss.py +765 -0
  40. muniverse_emg-0.1.0/src/muniverse/algorithms/core.py +1016 -0
  41. muniverse_emg-0.1.0/src/muniverse/algorithms/decomposition.py +1009 -0
  42. muniverse_emg-0.1.0/src/muniverse/algorithms/post_processing.py +1112 -0
  43. muniverse_emg-0.1.0/src/muniverse/algorithms/pre_processing.py +548 -0
  44. muniverse_emg-0.1.0/src/muniverse/algorithms/tcl_cbss.py +235 -0
  45. muniverse_emg-0.1.0/src/muniverse/algorithms/upperbound.py +332 -0
  46. muniverse_emg-0.1.0/src/muniverse/configs/ae.json +66 -0
  47. muniverse_emg-0.1.0/src/muniverse/configs/cbss.json +70 -0
  48. muniverse_emg-0.1.0/src/muniverse/configs/hybrid_tibialis.json +64 -0
  49. muniverse_emg-0.1.0/src/muniverse/configs/neuromotion.json +56 -0
  50. muniverse_emg-0.1.0/src/muniverse/configs/scd.json +62 -0
  51. muniverse_emg-0.1.0/src/muniverse/configs/upperbound.json +26 -0
  52. muniverse_emg-0.1.0/src/muniverse/datasets/__init__.py +180 -0
  53. muniverse_emg-0.1.0/src/muniverse/datasets/_generate_recording.sh +55 -0
  54. muniverse_emg-0.1.0/src/muniverse/datasets/_run_neuromotion.py +409 -0
  55. muniverse_emg-0.1.0/src/muniverse/datasets/load.py +22 -0
  56. muniverse_emg-0.1.0/src/muniverse/datasets/movement.py +340 -0
  57. muniverse_emg-0.1.0/src/muniverse/datasets/postprocess.py +71 -0
  58. muniverse_emg-0.1.0/src/muniverse/datasets/simulate.py +238 -0
  59. muniverse_emg-0.1.0/src/muniverse/evaluation/__init__.py +3 -0
  60. muniverse_emg-0.1.0/src/muniverse/evaluation/evaluate.py +684 -0
  61. muniverse_emg-0.1.0/src/muniverse/evaluation/report_card_routines.py +260 -0
  62. muniverse_emg-0.1.0/src/muniverse/utils/__init__.py +13 -0
  63. muniverse_emg-0.1.0/src/muniverse/utils/_otb_io.py +288 -0
  64. muniverse_emg-0.1.0/src/muniverse/utils/bids_routines.py +1744 -0
  65. muniverse_emg-0.1.0/src/muniverse/utils/containers.py +164 -0
  66. muniverse_emg-0.1.0/src/muniverse/utils/logging.py +437 -0
  67. muniverse_emg-0.1.0/src/muniverse_emg.egg-info/PKG-INFO +230 -0
  68. muniverse_emg-0.1.0/src/muniverse_emg.egg-info/SOURCES.txt +77 -0
  69. muniverse_emg-0.1.0/src/muniverse_emg.egg-info/dependency_links.txt +1 -0
  70. muniverse_emg-0.1.0/src/muniverse_emg.egg-info/requires.txt +21 -0
  71. muniverse_emg-0.1.0/src/muniverse_emg.egg-info/top_level.txt +1 -0
  72. muniverse_emg-0.1.0/tests/__init__.py +3 -0
  73. muniverse_emg-0.1.0/tests/expected_results/simple_ae_prediction.pkl +0 -0
  74. muniverse_emg-0.1.0/tests/expected_results/simple_cbss_prediction.pkl +0 -0
  75. muniverse_emg-0.1.0/tests/test_algorithm_core.py +112 -0
  76. muniverse_emg-0.1.0/tests/test_algorithms.py +22 -0
  77. muniverse_emg-0.1.0/tests/test_algorithms_simple.py +277 -0
  78. muniverse_emg-0.1.0/tests/test_datasets.py +156 -0
  79. 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
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
45
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](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
+