MNUtils is a collection of utility functions for working with multi-nuclear MR data from our GE scanners.
Features
- Data loading — read GE raw/reconstructed data via
GEExam/GESeries. - NIfTI/DICOM conversion — convert scanner output to NIfTI.
- Plotting — spectral and slice plotting utilities.
- Spectral fitting — AMARES fitting delegated to
xmris(xmris[fitting], which wraps pyAMARES).
See the documentation for the full basics, data model, plotting, fitting, NIfTI, and MATLAB-bridge guides.
Installation
MNUtils is on PyPI:
uv add mnutils
Optional extras:
uv add "mnutils[bet]" # brain extraction (hd-bet, torch)
uv add "mnutils[2025a]" # MATLAB Engine pinned to MATLAB 2025a
To track the development version instead:
uv add git+https://github.com/bastigw/mnutils.git
2025a pins matlabengine==25.1.*. If your local MATLAB install is a different version, install
the matching matlabengine release yourself instead (see MATLAB Engine
Dependency below) — there's no way to pin one version project-wide
across contributors' machines.
Usage
The main entry point is ExamBase: point it at a GE exam's data folder and it classifies every
series for you — no need to know in advance which folder is an anatomical scan and which is a
spectrum.
from mnutils.GEExam import ExamBase
exam = ExamBase("data/HeVo-11") # prints an overview of every series it found
exam.exam_overview.head() # same overview as a DataFrame
exam.series_dict[6] # the GESeries subclass ExamBase picked for series 6 — nothing loaded yet
Load the series you actually need and analyse it — everything about it (spectrum, header fields, scan time) lives on the returned object:
exam.load_series(6)
mrs = exam[6]
print(mrs.protocol_name, mrs.spec.dims, mrs.spec.shape)
avg = mrs.avg_spec # average over repetitions
load_series also takes a list, and load_all loads everything ExamBase classified. If you
already know a series's type, construct it directly (e.g. MRSSeries(DATA_FOLDER, 6)) and skip
the exam-level overview entirely.
From there, spectral fitting is handled by xmris — MNUtils deliberately doesn't reimplement fitting, it wraps xmris's AMARES implementation (itself built on pyAMARES) so a series's spectrum can go straight into a fit:
uv add "xmris[fitting]"
See the fitting docs for the full workflow, and the
loading data and
GEExam tutorials for more on exams and
series. Need a raw .mat file's path directly instead of a loaded object?
mnutils.utils.file_helpers.get_mat_data_from_series(base_folder, series_id) returns it.
Requirements
- Python 3.12+
MATLAB Engine Dependency
To use MNUtils, you need to install the MATLAB Engine for Python. The version of the MATLAB Engine you require depends on your local MATLAB version. Ensure you install the correct version that matches your MATLAB installation.
You can find the appropriate MATLAB Engine version for your setup here: MATLAB Engine for Python.
To install the MATLAB Engine in your project, use the following command, replacing <version>
with the correct version for your MATLAB:
uv add "matlabengine==<version>"
Development
See CONTRIBUTING.md and the contributor docs for setup,
tests, docs, and lint workflow.
Contributions and Suggestions
I'm very open to suggestions and improvements! If you have ideas or want to share your own utilities, feel free to reach out or submit a pull request.
License
BSD-3-Clause — see LICENSE.
Metadata
Release files for MNutils 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mnutils-1.2.1.tar.gz | 113.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mnutils-1.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 242.2 kB
Release files / mnutils-1.2.1.tar.gz
| Download URL | mnutils-1.2.1.tar.gz |
|---|---|
| Size | 113.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a7c3b79a86dba467c3684ecd4a097652c44e776c705f7f73d6fe1a5408561454
|
|
BLAKE2b-256 checksum How to use checksums |
4c6d5f1f60f70e7314fa914ba4d5a9db1a608a09e679ee934d6ace6b33593653
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mnutils-1.2.1-py3-none-any.whl
| Download URL | mnutils-1.2.1-py3-none-any.whl |
|---|---|
| Size | 128.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5478ac22c9d200e2b3cf40419eea7fab636553983908066e724b12da182788d8
|
|
BLAKE2b-256 checksum How to use checksums |
c4384a83ec58c018b703d02679bc55dc97a6db083ecee183070042883fae69d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|