ILTpy is a python library for performing regularized inversion of one-dimensional or multi-dimensional data without non-negativity constraint. Primary applications include magnetic resonance (NMR, EPR), and electrochemical impedance spectroscopy (distribution of relaxation times; DRT).
ILTpy (/ɪltˈpaɪ/) is a python library for performing regularized inversion of one-dimensional or multi-dimensional data without non-negativity constraint. Contributions to respective distributions with both positive and negative sign are determined. Primary applications include magnetic resonance (NMR, EPR), and electrochemical impedance spectroscopy (distribution of relaxation times; DRT). Algorithmic details and parametrization are described in : J. Granwehr, P.J. Roberts, J. Chem. Theory Comput. 8, 34733482 (2012)
Visit ILTpy's documentation.
Try ILTpy in your web browser or jump to quick start.
python -m pip install ilt-py-lib
python -m pip install --index-url https://apps.fz-juelich.de/iltpy/packages --extra-index-url https://pypi.org/simple ilt-py-lib
setup.py
file along with other folders.python -m pip install .
More information on using ILTpy can be found here.
A workflow using ILTpy and synthetic exponential decay data wth noise is shown below.
First, we generate some synthetic data for analysis :
# --- Simulate synthetic data ---
import numpy as np
def kww(t, taus, betas, amps):
"""Kohlrausch–Williams–Watts function"""
return sum(a * np.exp(-(t / tau) ** b) for tau, b, a in zip(taus, betas, amps))
# Time vector (input sampling points)
t_syn = np.linspace(0, 1024,1024)
# Simulate data with two components at 10 and 100 with different amplitudes
data_syn = kww(t_syn, taus=[10,100], betas=[1, 1], amps=[1, 0.5])
# Add noise to the simulated data
noise_level = 0.01
data_syn = data_syn + np.random.randn(t_syn.size)*noise_level
# scale data so that noise variance is 1 before analysis using ILTpy
data_syn = data_syn/noise_level
# --- ILTpy workflow ---
# assuming data_syn and t_syn are numpy arrays with the data and the sampling vector.
# Import ILTpy
import iltpy as ilt
# Load the data into iltpy using iltload
synILT = ilt.iltload(data=data_syn, t=t_syn)
# Specify parameters and initialize inversion
tau = np.logspace(-1, 4, 100) # output sampling points
synILT.init(tau=tau, kernel=ilt.Exponential())
# Perform inversion
synILT.invert()
Starting iterations ...
100%|██████████| 100/100 [00:00<00:00, 423.44it/s]
Done.
## Reporting
# Save the results
synILT.report(filepath='syn_data_ILT.txt')
# Plot the results
from iltpy.output.plotting import iltplot
iltplot(synILT)
Copyright (c) 2025 Davis Thomas Daniel, Josef Granwehr and other contributors.
ILTpy is licensed under the GNU Lesser General Public License v3.0.
See the LICENSE file for details.
If you use ILTpy in your work, please cite it (using the appropriate version):
@software{iltpy,
author = {Davis Thomas Daniel and Christian Bartsch and Franz Philipp Bereck and Simone Köcher and Christoph Scheurer and Josef Granwehr},
title = {ILTpy},
year = {2025},
version = {1.0.0},
url = {https://apps.fz-juelich.de/iltpy/},
doi = {10.1021/ct3001393}
}