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.