nmrkit is a Python library for nuclear magnetic resonance (NMR) data processing and analysis.
This is an early-stage project under active development. Contributions are welcome to help expand its capabilities!
- Data Import/Export: Support for common NMR formats including TopSpin and Delta
- Basic Processing: Fourier transform, apodization (exponential multiplication), zero filling, phase correction
- Acquisition Planning: Calculate DOSY diffusion experiment timing and gradient settings
- Visualization: Interactive plotting with customizable parameters
- Simple API: Intuitive functions for data processing workflows
- Python >= 3.12
- NumPy
- SciPy
- Matplotlib (optional, for visualization)
pip install nmrkitWith visualization support:
pip install nmrkit[visualization]Use the auto_process function for automated application of common processing steps:
import nmrkit as nk
# Load NMR data
data = nk.read('path/to/data')
# Automatically process the spectrum
data = nk.auto_process(data)
# Save the plot to a PDF file
nk.plot(data, output_path="spectrum.pdf")For more control, use individual processing functions:
import nmrkit as nk
# Load data with explicit format specification
data = nk.read('path/to/data.jdf', format='delta')
# Apply exponential multiplication (apodization) with 1.0 Hz line broadening
data = nk.em(data, lb=1.0)
# Zero fill to 2048 points for improved resolution
data = nk.zf(data, size=2048)
# Perform Fourier transform
data = nk.ft(data)
# Apply phase correction
data = nk.phase(data, ph0=10.0, ph1=25.0)
# Plot the manually processed spectrum
nk.plot(data)Use acquisition helpers to estimate DOSY experiment settings from a diffusion coefficient and the maximum gradient strength of an instrument:
dosy_params = nk.calculate_dosy_settings(
diffusion_coefficient_m2_s=5.8e-10,
max_gradient_t_m=0.535,
target_attenuation=0.05,
)
print(f"Diffusion time (big delta): {dosy_params.diffusion_time_ms:.2f} ms")
print(f"Gradient duration (little delta): {dosy_params.gradient_duration_ms:.4f} ms")
print(f"Achieved residual signal: {dosy_params.achieved_attenuation:.4f}")nmrkit is released under the Apache License 2.0. See the LICENSE file for more information.
The nmrkit project welcomes your expertise and enthusiasm!
If you encounter a bug or have an idea for a new feature, please open an issue on GitHub. When reporting bugs, please include:
- A clear description of the issue
- Steps to reproduce (if applicable)
- Expected vs actual behavior
- Your Python version and operating system
To contribute code to nmrkit:
- Fork and Clone: Fork the repository and clone it locally
- Set up Development Environment:
poetry install
- Create a Branch: Create a new branch for your feature or bug fix
git checkout -b feature/your-feature-name
- Make Changes: Implement your changes following the existing code style
- Run Tests: Ensure all tests pass
poetry run pytest
- Commit: Commit your changes with clear, descriptive messages
- Push and Submit PR: Push to your fork and submit a pull request
- Follow PEP 8 style guidelines
- Add type hints for new functions
- Include docstrings following the existing format
- Add tests for new functionality
- Ensure all tests pass before submitting PR
Small improvements or fixes are always appreciated. Even minor contributions can make a significant difference!
- GitHub Repository: https://github.com/nmrtist/nmrkit