Skip to content

Repository files navigation

nmrkit

PyPI versionPython 3.12+LicensePoetry

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!

Features

  • 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

Requirements

  • Python >= 3.12
  • NumPy
  • SciPy
  • Matplotlib (optional, for visualization)

Installation

From PyPI (Recommended)

pip install nmrkit

With visualization support:

pip install nmrkit[visualization]

Quick Start

Automatic Processing

Use the auto_process function for automated application of common processing steps:

importnmrkitasnk# Load NMR datadata=nk.read('path/to/data')
# Automatically process the spectrumdata=nk.auto_process(data)
# Save the plot to a PDF filenk.plot(data, output_path="spectrum.pdf")

Manual Processing

For more control, use individual processing functions:

importnmrkitasnk# Load data with explicit format specificationdata=nk.read('path/to/data.jdf', format='delta')
# Apply exponential multiplication (apodization) with 1.0 Hz line broadeningdata=nk.em(data, lb=1.0)
# Zero fill to 2048 points for improved resolutiondata=nk.zf(data, size=2048)
# Perform Fourier transformdata=nk.ft(data)
# Apply phase correctiondata=nk.phase(data, ph0=10.0, ph1=25.0)
# Plot the manually processed spectrumnk.plot(data)

DOSY Acquisition Planning

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}")

License

nmrkit is released under the Apache License 2.0. See the LICENSE file for more information.

Contributing

The nmrkit project welcomes your expertise and enthusiasm!

Reporting Issues

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

Contributing Code

To contribute code to nmrkit:

  1. Fork and Clone: Fork the repository and clone it locally
  2. Set up Development Environment:
    poetry install
  3. Create a Branch: Create a new branch for your feature or bug fix
    git checkout -b feature/your-feature-name
  4. Make Changes: Implement your changes following the existing code style
  5. Run Tests: Ensure all tests pass
    poetry run pytest
  6. Commit: Commit your changes with clear, descriptive messages
  7. Push and Submit PR: Push to your fork and submit a pull request

Development Guidelines

  • 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!

Contact

About

A lightweight Python package for NMR research.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages