Dy(III) complex: the point-dipole approximation#
This tutorial works through the main SimpNMR workflows on a dysprosium(III) complex, using the point-dipole approximation for the hyperfine coupling.
For a lanthanide such as Dy(III), the unpaired electrons occupy core-like 4f
orbitals that are well shielded from the ligands. The electron–nucleus
hyperfine interaction is then dominated by the through-space dipolar coupling,
which depends only on the position of each nucleus relative to the paramagnetic
centre. SimpNMR computes this directly from the molecular geometry
(hyperfine: method: pdip) — no quantum-chemistry hyperfine calculation is
required. (For transition-metal complexes, where covalent delocalisation makes
the Fermi-contact term important, hyperfine tensors are instead read from a DFT
calculation; see Fe(II) complex: DFT-calculated hyperfine tensors.)
The tutorial covers three workflows on the same complex:
Prerequisites#
Install simpnmr by following the Installation guide
(which covers pip as well as the double-click Windows and macOS apps), then
check it is available:
simpnmr --version
Command line or the desktop app#
Every workflow below can be run either from the terminal (the simpnmr
command) or from the desktop GUI. Each step shows both — pick whichever tab
you prefer.
The GUI presents the same options as a form and can open and save the very
run.yml files shown in this tutorial. To use it, install the optional GUI
dependencies and launch it:
pip install "simpnmr[gui]"
simpnmr-gui
The window has a toolbar (New, Open YAML…, Save YAML, Save As…,
▶ Run, ■ Stop); a scrollable form on the left whose sections mirror the
run.yml blocks (Hyperfine, Nuclei, Diamagnetic, Susceptibility, …) with a
Workflow selector at the top (Predict / Fit susceptibility); and a
3D structure viewer with a live log panel on the right. The general pattern is
always the same: Open YAML… → choose your run.yml (the form fills in) →
set the Workflow mode → click ▶ Run; output streams in the log panel and
files are written to the project folder.
The complex and its input files#
Create a working directory with the data/ sub-folders that will hold the
input files:
mkdir dy-tutorial
cd dy-tutorial
mkdir -p data/hfc data/labels data/dia
The workflows below share three input files: the molecular structure, the chemical-label map, and the diamagnetic reference shifts. The magnetic susceptibility is not supplied as a file here — in the first workflow it is generated from a crystal-field parameter, and in the last it is fitted. Create each file with a plain-text editor, copying the contents exactly (use the copy button in the top-right of each block).
The molecular structure — an XYZ file: the first line is the atom count, the second is a comment (blank here), and each remaining line is an element symbol followed by its Cartesian coordinates in Å:
data/hfc/structure.xyz (67 atoms)
67
Dy1 0.006857 -0.008695 0.057882
O1 -0.302027 -1.830532 -1.419955
O2 -1.421572 1.175692 -1.42229
O3 1.749501 0.631576 -1.405317
O4 0.37101 -3.709201 -2.441562
O5 -3.395665 1.573815 -2.408402
O6 3.066362 2.152547 -2.393889
N1 1.677607 -0.008754 2.131025
N2 -0.843693 -1.449175 2.132149
N3 -0.838461 1.453493 2.129045
N4 1.889226 -1.691301 0.016201
N5 -2.403829 -0.782665 0.017119
N6 0.512716 2.467123 0.016552
C1 1.388674 -1.051509 3.155166
C2 -1.602271 -0.679189 3.15723
C3 0.210929 1.728028 3.150359
C4 0.349952 -2.080411 2.724242
C5 -1.978465 0.732834 2.724694
C6 1.622671 1.340697 2.723084
C7 3.0129 -0.237982 1.554704
C8 -1.711124 -2.487906 1.551347
C9 -1.311353 2.719107 1.546985
C10 3.011522 -1.487697 0.712959
C11 -2.792311 -1.855265 0.713582
C12 -0.228617 3.340474 0.704336
C13 4.100166 -2.353457 0.609131
C14 -4.090623 -2.355398 0.61663
C15 -0.022604 4.715666 0.596268
C16 4.010931 -3.439383 -0.259915
C17 -4.988202 -1.724653 -0.243025
C18 0.96996 5.17746 -0.265821
C19 2.850395 -3.62226 -1.00971
C20 -4.564452 -0.626242 -0.988737
C21 1.717669 4.260169 -1.001965
C22 1.811887 -2.712726 -0.84068
C23 -3.252412 -0.193021 -0.829114
C24 1.446994 2.906539 -0.83121
C25 0.522848 -2.779727 -1.642952
C26 -2.662272 0.95673 -1.629424
C27 2.164454 1.821142 -1.618161
H1 2.31528 -1.587822 3.415912
H2 -2.527794 -1.216233 3.419855
H3 0.214285 2.80021 3.404525
H4 1.063935 -0.55658 4.07935
H5 -1.01028 -0.642445 4.080704
H6 -0.055828 1.205465 4.078062
H7 0.077557 -2.691814 3.604836
H8 -2.371831 1.275332 3.604759
H9 2.284755 1.410156 3.606479
H10 0.769145 -2.762295 1.972916
H11 -2.778561 0.706362 1.973668
H12 2.007054 2.044642 1.973765
H13 3.789806 -0.294535 2.336465
H14 3.253224 0.612921 0.896256
H15 -2.149835 -3.135409 2.329992
H16 -1.094164 -3.119474 0.891154
H17 -1.65281 3.423591 2.32501
H18 -2.169392 2.495622 0.892255
H19 4.99888 -2.172676 1.199166
H20 4.845914 -4.134774 -0.355802
H21 2.73878 -4.443619 -1.716171
H22 -4.385361 -3.224578 1.204937
H23 -6.011081 -2.092533 -0.334059
H24 -5.222768 -0.110891 -1.686717
H25 -0.633023 5.40561 1.179275
H26 1.155636 6.247781 -0.365238
H27 2.493193 4.572044 -1.700048
The chemical-label map — assigns each hydrogen atom to a chemical group so that symmetry-equivalent nuclei are averaged together:
data/labels/chemical_labels.csv (27 atoms)
atom_label,chem_label,
H1,ceq,
H2,ceq,
H3,ceq,
H4,cax,
H5,cax,
H6,cax,
H7,ceqp,
H8,ceqp,
H9,ceqp,
H10,caxp,
H11,caxp,
H12,caxp,
H13,aeq,
H14,aax,
H15,aeq,
H16,aax,
H17,aeq,
H18,aax,
H19,py3,
H20,py4,
H21,py5,
H22,py3,
H23,py4,
H24,py5,
H25,py3,
H26,py4,
H27,py5,
The diamagnetic reference shifts — measured on an isostructural diamagnetic analogue, one value per chemical group (ppm):
chem_label,shift,
ceq,2.87,
cax,3.67,
ceqp,2.66,
caxp,2.27,
aax,4.15,
aeq,4.08,
py3,8.09,
py4,8.19,
py5,7.75,
1. Predicting the paramagnetic shifts#
The standard prediction workflow computes paramagnetic 1H shifts from
the structure and a susceptibility tensor. Here the susceptibility is not read
from a file but generated from a single crystal-field parameter, the
second-rank axial Stevens parameter B²₀ (set to −100 cm⁻¹), using Bleaney theory.
Create the configuration file run.yml next to the data/ folder:
project:
name: dy_prediction
hyperfine:
method: pdip
file: data/hfc/structure.xyz
paramagnetic_centre: Dy1
spin: 2.5
orbit: 5
total_momentum_J: 7.5
nuclei:
include: H
diamagnetic:
method: csv
file: data/dia/diamagnetic_shifts.csv
chem_labels:
file: data/labels/chemical_labels.csv
susceptibility:
method: bleaney
bleaney:
B20: -100.0
B22: 0.0
alpha: 0.0
beta: 0.0
gamma: 0.0
temperatures: 302.15
The blocks have the following roles:
projectNames the run. All outputs are written to a directory with this name (here,
dy_prediction/). Choose something descriptive for your own system.hyperfinemethod: pdipcomputes point-dipole hyperfine tensors directly from the structure. The paramagnetic centre is given as an atom label,Dy1, which is resolved to its coordinates fromstructure.xyz(you could instead give explicit[x, y, z]coordinates). The Dy(III) quantum numbers are those of the free-ion 6H15/2 ground term:spin= 5/2,orbit= 5, andtotal_momentum_J= 15/2.nucleiSelects which nuclei to predict — here all 1H nuclei.
diamagneticSupplies the diamagnetic reference shifts added to the paramagnetic contributions.
chem_labelsMaps individual atom labels to chemical groups so equivalent nuclei are averaged.
susceptibilitymethod: bleaneybuilds the susceptibility tensor from the second-rank crystal-field parameters using Bleaney theory, instead of reading it from a file. B²₀ (here −100 cm⁻¹) is the crystal-field parameter in front of the axial second-rank Stevens operator, B²₂ the rhombic parameter, and α/β/γ the orientation of the crystal-field frame; the isotropic Landé gJ is derived from the Dy(III) quantum numbers above. These crystal-field parameters can be estimated, for example, from the emission spectrum of an isostructural Eu(III) complex.temperaturesgives the temperature(s) at which shifts are evaluated.
Note
The YAML input is strict: unknown keys are rejected. See Input YAML Files for the full reference of configuration blocks.
Run the prediction:
From inside dy-tutorial/:
simpnmr predict run.yml
simpnmr logs each step and finishes with Job finished
successfully.
Useful command-line options
simpnmr --hide predict run.yml # save figures without displaying them
simpnmr --dry-run predict run.yml # validate the input file, then exit
simpnmr --verbose predict run.yml # enable debug logging
Launch the app:
simpnmr-gui.Click Open YAML… and select the
run.ymlyou created — the form fills in from it.In the Workflow box at the top, make sure Predict is selected.
Click ▶ Run. Each step is logged in the panel on the right, ending with
Job finished successfully; the loaded structure is shown in the 3D viewer.
All results are written to the dy_prediction/ directory:
dy_prediction/
├── peak_data_302.15_K.csv # per-group averaged shift components
├── hyperfines_and_shifts_302.15_K.csv # per-atom hyperfines and shift terms
├── susceptibility_tensor.csv # susceptibility tensor used
├── shift_vs_intensity_302.15_K.csv # simulated spectrum data
├── pcs_isosurf_302.15_K.cube # PCS isosurface (cube file)
├── pred_spectrum_302.15_K.pdf # predicted spectrum
├── pred_shift_spread_302.15_K.pdf # shift spread per chemical group
├── pred_mean_components_302.15_K.pdf # shift decomposition per group
├── structure.xyz # structure with atom labels
└── chemcraft_structure.xyz # structure for ChemCraft
Because there is no relaxation block, no relaxation model is applied: there
are no R1/linewidth relaxation-decomposition plots, and the predicted
peaks are given a small cosmetic display width (a fixed fraction of the shift
range) purely so the spectrum is drawable. Add a relaxation block
(workflow 2) to compute physical linewidths and relaxation rates.
The two most useful files are peak_data_302.15_K.csv (one row per chemical
group, with the total shift and its diamagnetic / pseudocontact / Fermi-contact
decomposition, plus the cosmetic linewidth_avg_auto display width; physical
linewidths and R1/R2 rates appear only with a relaxation
block, as in workflow 2) and
hyperfines_and_shifts_302.15_K.csv (one row per nucleus, before averaging).
The run also writes pcs_isosurf_302.15_K.cube — an isosurface of the
pseudocontact-shift field that can be opened in molecular-visualisation software
to display the field around the complex. For a full description of every output
file, see Output files.
The predicted spectrum gives a quick visual check of the result:
pred_spectrum_302.15_K.pdf — the predicted 1H spectrum. Each
chemical group appears at its averaged paramagnetic shift, spanning roughly
+130 to −140 ppm. Because no relaxation model is set, the peaks carry the
cosmetic display width described above.#
2. Adding a relaxation model#
Prediction can be extended with a relaxation model to produce predicted
linewidths and R1/R2 rates alongside the shifts — computed
entirely from theory, with no experimental data required. It uses the same
shared input files as workflow 1; you add only a relaxation block, giving the
electronic and rotational correlation times together with the field and
temperature the rates apply to:
project:
name: dy_prediction_relaxation
hyperfine:
method: pdip
file: data/hfc/structure.xyz
paramagnetic_centre: Dy1
spin: 2.5
orbit: 5
total_momentum_J: 7.5
nuclei:
include: H
diamagnetic:
method: csv
file: data/dia/diamagnetic_shifts.csv
chem_labels:
file: data/labels/chemical_labels.csv
susceptibility:
method: bleaney
bleaney:
B20: -100.0
B22: 0.0
alpha: 0.0
beta: 0.0
gamma: 0.0
temperatures: 302.15
relaxation:
model: sbm curie
temperature: 302.15
magnetic_field_tesla: 4.7
T1e: 0.2e-12
T2e: 0.2e-12
tR: 140.0e-12
The relaxation block adds the transverse (linewidth) and longitudinal
(R1) rates and their SBM-dipolar / contact / Curie decomposition,
including the pred_r1_decomposition and pred_linewidth_decomposition
plots that were absent in workflow 1.
Alternative: estimate τ_R from the solvent instead of fixing it
The rotational correlation time tR is often not known in advance. Rather
than fixing it, you can have it estimated from the molecular shape and the
solvent viscosity at the given temperature. Replace the tR line with a
tau_r_method and a tau_r_solvent:
relaxation:
model: sbm curie
temperature: 302.15
magnetic_field_tesla: 4.7
tau_r_method: ellipsoid # or 'beadshell'
tau_r_solvent: methanol # from the built-in solvent database
T1e: 0.2e-12
T2e: 0.2e-12
tau_r_method selects the hydrodynamic model (ellipsoid — a Perrin
ellipsoid fit to the molecular shape — or the finer beadshell model), and
tau_r_solvent looks up the solvent viscosity (methanol, CDCl3,
D2O, DMSO, CD2Cl2, …). To use a viscosity that is not in the
database,
give tau_r_eta (Pa·s) instead of tau_r_solvent. The estimated τ_R is
printed to the log and recorded in the peak_data header.
Then run:
simpnmr predict run.yml
Launch simpnmr-gui, Open YAML… this run.yml, keep the
Workflow on Predict, and click ▶ Run. The relaxation block
is picked up automatically, so the run also produces the linewidth and
relaxation-rate outputs.
With the relaxation model the predicted peaks now carry physical linewidths:
pred_spectrum_302.15_K.pdf with the relaxation model. Compare with
workflow 1: the peaks farthest from the diamagnetic region (aax at
+130 ppm, cax at −140 ppm) are strongly broadened and shortened by
Curie/R2 relaxation, while the peaks near the centre stay sharp —
the position-dependent linewidths the cosmetic display width could not show.#
3. Assignment of experimental peaks and fitting of the magnetic susceptibility#
The inverse of a prediction: rather than computing shifts, we start from a measured 1H spectrum, assign its paramagnetic peaks to chemical groups, and fit the susceptibility tensor that best reproduces them.
The starting point is the measured spectrum:
The measured 1H spectrum of the complex (raw_spectrum.csv),
recorded at 302.15 K (29 °C) and 200 MHz (1H, 4.7 T) in methanol.
Sharp peaks near 0 ppm are the diamagnetic region; the well-resolved peaks
spread to high and low frequency are the paramagnetically shifted protons
that the fit assigns and reproduces.#
Download the spectrum and save it as data/para/raw_spectrum.csv:
The spectrum is then deconvoluted — in MestReNova or similar NMR software — into a sum of Lorentzian lineshapes. Each Lorentzian yields a chemical shift, a linewidth, and an integral (area). In addition, the longitudinal relaxation rate R1 can be measured separately (for example by an inversion–recovery experiment) and included.
These per-peak values make up the experiment.csv — one row per assigned
signal, here recorded at 302.15 K and 4.7 T for 1H:
assignment |
shift (ppm) |
width (Hz) |
area |
R1 (Hz) |
|---|---|---|---|---|
|
82.89 |
587.31 |
4108.48 |
— |
|
24.14 |
97.24 |
5139.3 |
126 |
|
23.91 |
102.86 |
3914.16 |
126 |
|
21.6 |
74.05 |
4609 |
59 |
|
6.73 |
221.6 |
6320.07 |
425 |
|
0.56 |
587.4 |
4984.95 |
— |
|
-42.36 |
182.53 |
4452.48 |
400 |
|
-49.12 |
224.78 |
4826.13 |
430 |
|
-97.33 |
252.06 |
4772.37 |
528 |
where each column is:
assignment — the chemical-group label the peak belongs to (matching the
chem_labelsmap).shift (ppm) — the measured chemical shift.
width (Hz) — the peak linewidth (full width at half maximum).
area — the integrated peak area.
R1 (Hz) — the longitudinal relaxation rate (optional; leave the field empty for any peak whose R1 was not measured, as for
aaxandcaxphere).
Create this as data/para/experiment.csv (run mkdir -p data/para first).
The file is plain CSV, with the temperature, field and isotope given as comment
lines at the top:
data/para/experiment.csv (copy this to the file)
#temperature 302.15,,,,
#magnetic_field 4.7,,,,
#isotope 1H,,,,
assignment,shift (ppm),width (Hz),area (),r1 (Hz)
aax,82.89,587.31,4108.48,
py5,24.14,97.24,5139.3,126
py3,23.91,102.86,3914.16,126
py4,21.6,74.05,4609,59
aeq,6.73,221.6,6320.07,425
caxp,0.56,587.4,4984.95,
ceqp,-42.36,182.53,4452.48,400
ceq,-49.12,224.78,4826.13,430
cax,-97.33,252.06,4772.37,528
The fit replaces the susceptibility block with an assignment block
(which resolves ambiguous peak assignments) and a susc_fit block (which
defines the fitted tensor model), and adds an experiment block pointing at
the measured data. It reuses the same structure.xyz,
chemical_labels.csv and diamagnetic_shifts.csv as workflows 1 and 2.
project:
name: dy_susceptibility_fit
hyperfine:
method: pdip
file: data/hfc/structure.xyz
paramagnetic_centre: Dy1
spin: 2.5
orbit: 5
total_momentum_J: 7.5
nuclei:
include: H
assignment:
method: permute
groups:
- [py3, py4, py5]
- [ceq, ceqp]
diamagnetic:
method: csv
file: data/dia/diamagnetic_shifts.csv
experiment:
files: data/para/experiment.csv
spectrum_files: data/para/raw_spectrum.csv
exp_reference: 21.6
chem_labels:
file: data/labels/chemical_labels.csv
susc_fit:
type: isoaxrh
variables:
iso: [fix, 0.00]
ax: [fit, 0.001]
rh_over_ax: [fix, 0.00]
alpha: [fix, 0.0]
beta: [fix, 0.0]
gamma: [fix, 0.0]
average_shifts: 'all'
The assignment block lists groups of signals whose labelling is ambiguous:
the permutation search fits every assignment within each group and keeps the
one with the lowest RMSE between the experimental and calculated shifts. Here it
tests the three closely spaced pyridine protons py3/py4/py5 (24.14,
23.91 and 21.6 ppm) and the ceq/ceqp pair (−42.36 and −49.12 ppm),
whose ordering is not obvious from the spectrum alone. Well-separated signals
need not be listed — their assignment is unambiguous.
Run the fit:
simpnmr fit_susc run.yml
Launch simpnmr-gui, Open YAML… this run.yml, then in the
Workflow box switch to Fit susceptibility (this reveals the
Assignment and fit-option sections). Click ▶ Run to fit the
tensor; the fitted shifts and susceptibility appear in the
dy_susceptibility_fit/ folder.
The fit reports the result as a correlation of experimental against calculated shifts, together with the fitted susceptibility and its equivalent crystal-field parameter:
shifts_302.15_K.pdf — experimental against calculated 1H shifts.
The fitted axiality Δχax·T = −0.28(1) corresponds to a Bleaney
parameter B²₀ = −70(2) cm⁻¹ (compare the −100 cm⁻¹ used to generate the
susceptibility in workflow 1) — confirming that this isoaxrh fit is the
Bleaney fit expressed as susceptibility components. R²adj = 0.994,
RMSE = 3.7 ppm.#
It also overlays the spectrum reconstructed from the fit on the measured one:
pred_and_exp_spectrum_302.15_K.pdf — the spectrum reconstructed from the
fitted shifts (top, coloured by chemical group) above the measured spectrum
(bottom; experiment in black, fit in red), on a broken axis so every
paramagnetic peak is visible.#
Next steps#
See Fe(II) complex: DFT-calculated hyperfine tensors for the transition-metal workflow, where hyperfine tensors come from a DFT calculation instead of the point-dipole model.
Read Workflows for an overview of all workflows.
Consult Input YAML Files when adapting
run.ymlto your own system.