From 65dde66ffc0d69f85f5c944b6280e37b6b92c852 Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Wed, 2 Jul 2025 10:11:47 +0000 Subject: [PATCH] Update src/nmreval/models/temperature.py Add Tanaka model --- src/nmreval/models/temperature.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/nmreval/models/temperature.py b/src/nmreval/models/temperature.py index ff2a12d..3acb3bf 100644 --- a/src/nmreval/models/temperature.py +++ b/src/nmreval/models/temperature.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import numpy as np from ..utils.constants import kB @@ -72,3 +74,25 @@ class Ecoop: ec = e_infty * np.exp(-mu * (x - ta) / e_infty) return tau0 * np.exp((e_infty + ec) / x) + + +class Tanaka: + name = 'Tanaka two-state model' + type = 'Temperature' + equation = r'\tau_0 exp[(E_{a}^{f} + (E_{a}^{s}-E_{a}^{f})[1/(1+exp[(\DeltaE-T \Delta\sigma)/(k_{}B T)])]/(k_{B} T)]' + params = [r'\tau_{0}', 'E_{a}^{f}', 'E_{a}^{s}', r'\DeltaE', r'\Delta\sigma'] + bounds = [(0, None), (0, None), (0, None), (None, 0), (None, 0)] + choices = [('temperature', 'temp_axis', {'T': 'T', '1000 K/T': '1000/T'})] + + @staticmethod + def func(x, tau0: float, ea_f: float, ea_s: float, e_D: float, sigma_D: float, temp_axis: str = 'T'): + + if temp_axis == '1000/T': + x = 1000/x + + kT = kB * x + + exponent = 1 / (1 + np.exp((e_D - x * sigma_D) / kT)) + + return tau0 * np.exp((ea_f + (ea_s - ea_f) * exponent) / kT) + -- 2.39.5