Chemical Shift Referencing

NMRTools provides comprehensive chemical shift referencing capabilities, including:

  • Direct referencing of individual dimensions
  • Indirect referencing of heteronuclear dimensions using IUPAC Xi ratios
  • Temperature-dependent water referencing for aqueous samples

Basic Referencing

To reference a spectrum, specify the dimension and the old and new chemical shift values:

using NMRTools

# Load a spectrum
spec = loadnmr("hsqc.ft2")

# Reference the 1H dimension
spec = reference(spec, H1, -0.12 => 0)

# Or use dimension types
spec = reference(spec, F1Dim, -0.12 => 0)

# Or use dimension indices
spec = reference(spec, 1, -0.12 => 0)

Indirect Referencing

By default, when you reference one dimension, NMRTools will automatically apply indirect referencing to all other frequency dimensions using IUPAC Xi ratios. This ensures consistent referencing across all dimensions based on a single reference point.

# Reference 1H - 15N dimension will be automatically referenced too
spec = reference(spec, H1, -0.12 => 0)

# Disable indirect referencing if needed
spec = reference(spec, H1, -0.12 => 0; indirect=false)

The Xi ratios used depend on whether the solvent is aqueous (DSS-based) or organic (TMS-based):

NucleusDSS (aqueous)TMS (organic)
¹H1.01.0
²H0.1535060880.153506088
¹³C0.2514495300.25145020
¹⁵N0.1013291180.10136767
¹⁹F0.9408669820.94094011
³¹P0.4048073560.40480742

NMRTools automatically detects aqueous solvents from the spectrum metadata, or you can specify explicitly:

# Force DSS (aqueous) Xi ratios
spec = reference(spec, H1, -0.12 => 0; aqueous=true)

# Force TMS (organic) Xi ratios
spec = reference(spec, H1, -0.12 => 0; aqueous=false)

Multi-Dimension Referencing

Reference multiple dimensions at once:

# Reference both 1H and 15N dimensions
spec = reference(spec, [H1, N15], [-0.12 => 0, 120.0 => 118.5])

# Or using dimension types
spec = reference(spec, [F1Dim, F2Dim], [-0.12 => 0, 120.0 => 118.5])

Water Referencing

For aqueous samples, NMRTools can automatically reference to water based on the sample temperature:

# Reference to water (temperature from metadata)
spec = reference(spec)

# Specify temperature manually (in Kelvin)
spec = reference(spec; temperature=298.15)

The water chemical shift is calculated using the empirical formula:

δ(H₂O) = 7.83 − T / 96.9

where T is the temperature in Kelvin. Bruker spectrometers typically set the water reference to 4.7 ppm when locking, so the correction is applied relative to this default.