Skip to content

T1, T2 & dynamics#

The relax namespace turns relaxation measurements into rates and molecular dynamics. For a single recovery/decay curve you've already reduced to numbers:

t1 = relax.fit_t1(delays_s, intensities)   # inversion-recovery → T1 (s)
t2 = relax.fit_t2(echo_times_s, areas)     # CPMG decay → T2 (s)
print(f"T1 = {t1:.3f} s")

For a full 2D relaxometry scan, let relax find the peaks and fit each rate:

spec = relax.relaxation_spectrum(scan.signal, scan.spectrum)
for lo, hi in relax.peak_windows(spec, kind="T1"):
    r1 = relax.relaxation_rate(spec, lo, hi, kind="T1")   # R1 = 1/T1 (s⁻¹)
    print(f"window [{lo:.0f}, {hi:.0f}] Hz   R1 = {r1:.3f} /s")

Across a temperature series, recover the rotational correlation time \(\tau_c\) — the average time a molecule takes to reorient — by spectral-density inversion of \(R_1\). \(R_1\) peaks (and \(T_1\) is smallest) when tumbling matches the Larmor frequency, i.e. when \(\omega_0\,\tau_c \approx 0.616\):

omega0 = 2 * 3.14159 * 20e6        # Larmor angular frequency (20 MHz here)
tau_c = relax.correlation_times(omega0, r1_by_temperature, nucleus="1H")

The per-temperature \(R_1\) values typically come from a multi-scan workbench sweep over a temperature series.