Simulating ENDOR spectra

This user guide explains how to simulate solid-state ENDOR spectra of powders, frozen solutions or single crystals using EasySpin's ENDOR simulation function salt. You should be familiar with the simulation solid-state cw EPR spectra using pepper (see the corresponding user guide).

This user guide contains the following sections:

Invoking the simulation function salt

Solid-state ENDOR spectra are computed by the EasySpin function salt. It can be called with two or three parameters. For example,

salt(Sys,Exp);                       % plots the spectrum
[frq,spec] = salt(Sys,Exp);          % returns the frequency axis and the spectrum
[frq,spec] = salt(Sys,Exp,Opt);      % provide additional simulation options in Opt

The first argument Sys tells salt all about the spin system, and the second argument Exp gives the experimental parameters. The third, optional, argument Opt contains settings for the simulation algorithm.

The outputs frq and spec are arrays containing the frequency values (in MHz) and the spectrum, respectively. If no output is requested, salt plots the spectrum.

Setting up a simulation and running it takes only a few lines of code. A simple example is

Sys.g = 2;
Sys.Nucs = '1H';
Sys.A = [-1 2]*3+1;
Sys.lwEndor = 0.1;
Exp.Field = 350.1;
Exp.Range = [0 30];

This simulates and plots the powder 1H ENDOR spectrum of a system with an unpaired electron and a proton. Copy and paste the code above to your MATLAB command window to see the graph.

The spin system

The first input argument to salt is a structure specifying the spin system. It contains fields for the electron spin(s), the nuclear spins, and the various interaction matrices like g and hyperfine tensors.

The fields in this structure are the same as used for cw EPR simulations with pepper. See the tutorial for pepper for an introduction. Details about all the spin Hamiltonian parameters can be found on the spin Hamiltonian reference page. It is also possible to include several electron spins. Refer to the page about spin system structures for details.


The broadening for the ENDOR spectrum should be given in Sys.lwEndor. It contains the convolutional Gaussian and Lorentzian broadenings (FWHM, full width at half maximum) for the ENDOR spectrum.

Sys.lwEndor = 0.1;        % Gaussian broadening with FWHM of 0.1 MHz
Sys.lwEndor = [0 0.2];    % Lorentzian broadening with FWHM of 0.2 MHz
Sys.lwEndor = [0.1 0.2];  % both broadenings simultaneously

EasySpin supports are series of different EPR line broadening models. The only one supported in an ENDOR simulation is HStrain: it co-determines the effective excitation width, together with Exp.ExciteWidth. Strain broadenings (gStrain, AStrain and DStrain) as well as convolutional broadenings of the EPR spectrum (lw and lwpp) are ignored.

Basic experimental settings

All experimental settings are given in the second input argument Exp, a structure with several fields very similar to those for pepper.

The most important parameter for an ENDOR simulation is the magnetic field. It is given in Exp.Field, in the usual units of mT (millitesla):

Exp.Field = 350;    % ENDOR at a field of 350 mT

The spectrometer frequency is given in the field mwFreq in units of GHz (gigahertz). It is only necessary to supply it when the excitation bandwidth is limited, that is, when Exp.ExciteWidth is set.

Exp.mwFreq = 9.612;     % in GHz

The radiofrequency range, in MHz, is taken from either Range or CenterSweep (which are used by pepper for the magnetic field range). Of course, only one of the two can be used in a given simulation. If you omit both of them, EasySpin automatically determines a suitable frequency range.

Exp.Range = [40 60];          % rf sweep range [start end], in MHz
Exp.CenterSweep = [50 10];    % the same range, given as [center sweep], in MHz

By default, salt computes a 1024-point spectrum. However, the number of points can be changed manually to a different value, e.g.,

Exp.nPoints = 5001;

If not told otherwise, salt computes the absorption spectrum. By changing Exp.Harmonic, the first-harmonic (first-derivative) or the second-harmonic (second derivative) of it can be requested.

Exp.Harmonic = 0; % absorption spectrum (default)
Exp.Harmonic = 1; % first harmonic
Exp.Harmonic = 2; % second harmonic

The polarizing effects of low sample temperatures can also be included in the simulation by specifying the temperature:

Exp.Temperature = 4.2; % temperature in kelvin

With this setting, salt will include the relevant polarization factors resulting from a thermal equilibrium population of the energy levels. However, there are only very few situations where temperature effects are visible in ENDOR spectra.

There is one more experimental parameter for an ENDOR simulation: the excitation width, given in Exp.ExciteWidth. It determines the orientational selectivity of the ENDOR experiment. It is so important that we dedicate the next section to it.

Orientation selection

In an ENDOR experiment of a disordered system, not all paramagnetic centers are excited. Only those that resonate at the given magnetic field and microwave frequency can give an ENDOR signal. Spins that are slightly off-resonant contribute less, and spins far off-resonant cannot give an ENDOR signal at all. If the EPR resonance frequency is orientation dependent, this means that only electron spins with certain orientations are excited - hence the term "orientation selection". The range of frequencies over which electron spins are excited is called the "excitation window". It is centered around the microwave frequency.

The bandwidth of excitation, i.e. the width of the excitation window, is determined by the Q factor of the resonator (cw ENDOR) or the length of the first pulse (pulse ENDOR). The window is assumed to be Gaussian and its width (FWHM) is given in Exp.ExciteWidth, in units of MHz. Values between 50 and 250 MHz are common. The smaller this value, the stronger the orientation selection, and the sharper the resulting ENDOR spectrum. For pulse ENDOR, the excitation bandwidth can be estimated from the length of the first pulse, tp, by 2/tp.

Exp.ExciteWidth = 100;   % MHz

If Exp.ExciteWidth is not given, it is assumed infinite, that is, all the spins are excited. This is rather unrealistic, but often useful when exploring ENDOR spectra resulting from different sets of hyperfine and quadrupole parameters. In this case, no micrwave frequency needs to be given.

To compute the total effective excitation width for the ENDOR experiment, EasySpin combines the width given in Exp.ExciteWidth with the width given in Sys.HStrain, which represents the EPR broadening. The larger HStrain, the larger the total excitation bandwidth.

Sys.HStrain = [1 1 1]*200;
Exp.ExciteWidth = 50;    % total excitation width in MHz: sqrt(200^2+50^2) = 206
Exp.ExciteWidth = 100;   % total excitation width in MHz: sqrt(200^2+100^2) = 224

As you can see, the total excitation width is rather insensitive to ExciteWidth, if ExciteWidth is much smaller than HStrain.

Powders and crystals

If not specified otherwise, salt computes a powder spectrum. But it is as well straightforward to simulate spectra for a single crystal. The orientation (or orientations if more than one) of the single crystal can be provided in the experiment structure field Exp.CrystalOrientation. This field should contain the tilt angles between crystal and laboratory frame (right-handed coordinate system with z along the static field and x along the microwave magnetic field), one set of three angles per row.

For a crystal with its molecular frame aligned with the laboratory frame, the setting is

Exp.CrystalOrientation = [0 0 0];

If you need more than one crystal at the same time, then just specify more than one orientation.

Exp.CrystalOrientation = [0 0 0; 0 pi/4 0];

In many crystals, there are several symmetry-related sites with identical paramagnetic centers differing only in their orientation in the crystal. You can tell salt about this by providing the crystal symmetry in the field Exp.CrystalSymmetry, e.g.

Exp.CrystalSymmetry = 'P21/m'; % space group symbol
Exp.CrystalSymmetry = 11;      % space group number (between 1 and 230)
Exp.CrystalSymmetry = 'C2h';   % point group, Schönflies notation
Exp.CrystalSymmetry = '2/m';   % point group, Hermann-Mauguin notation

With the crystal symmetry given, salt not only computes the spectrum for the orientation given in Exp.CrystalOrientation, but also for all symmetry-related sites.

Simulation options

The third input argument to salt contains simulation options. All of them have reasonable default values, but occasionally it might be necessary to change one of them.

If you want salt to print information about the simulation to the command window during the computation, use

Options.Verbosity = 1;

'Verbosity' specifies the amount of information displayed. 0 (the default) suppresses all output, 1 is normal, and 2 prints very detailed information.

Another useful option is nKnots, which determines how many orientations salt will include in the simulation of a powder spectrum. If this value is too low, the spectral line shape contains artifacts in the form of ripples. nKnots is the number of orientations between the z axis and the x axis (between θ = 0 and θ = 90 degrees). It determines the resolution of the orientational grid used in the simulation.

Options.nKnots = 31; % corresponds to 3-degree increments

The higher nKnots, the finer the orientational grid. The default value of 19 (5-degree increments) is appropriate for most systems. A value larger than 181 (0.5-degree increments) is rarely needed.

After having computed the spectrum for a number of orientations specified by nKnots, the simulation function interpolates these spectra for additional orientations before summing up all spectra. This interpolative refinement can be configured with a second number in nKnots. nKnots = [19 4] means that pepper interpolates additional 4 spectra between two adjacent orientations evaluated.

Options.nKnots = [19 10];  % massive interpolation
Options.nKnots = [19 0];   % no interpolation

The option Output can be used to determine the form in which salt returns the spectral data.

% single crystal: orientations separately
% powders: transitions separately
Options.Output = 'separate';

% sum over all orientations and transitions
Options.Output = 'summed';

There are more option fields available. For details, see the reference page on salt.

Matrix diagonalization and perturbation theory

By default, EasySpin uses matrix diagonalization for computing ENDOR spectra. Even though this is by far the most accurate way, it is also the slowest. This can be felt painfully when simulating ENDOR spectra of spin systems with a lot of nuclei. EasySpin offers several speed-up options to trade a little accuracy for a lot in performance gain.

One way to speed up an ENDOR simulation is to switch to first- or second-order perturbation theory.

Options.Method = 'perturb1';   % first-order perturbation theory
Options.Method = 'perturb2';   % second-order perturbation theory
Options.Method = 'matrix';     % matrix diagonalization

If you have a couple of protons in an 1H ENDOR spectrum, first-order perturbation theory is orders of magnitude faster than matrix diagonalization. Under most circumstances, the errors introduced are minimal. Second-order perturbation theory should be used if the hyperfine couplings are larger than about 2% of the microwave frequency (about 200 MHz for a microwave frequency of 10 GHz). Perturbation theory does not work for all spin systems: it is limited to S=1/2.

If you want to stick with matrix diagonalization, there is another way to speed up simulations that is useful when there is strong orientation selection, and only nuclei with small hyperfine couplings are observed in the ENDOR spectrum. salt can be told to pre-compute the orientation selection instead of computing it on the fly, using

Options.OriPreSelect = 1; % use orientation pre-selection

This tells EasySpin to classify nuclei into whether they contribute to orientation selection (N1) or not (N2), then pre-compute orientation selection data only for those in group N1. Any orientation that is not noticeably excited is then skipped in the subsequent ENDOR simulation. This pre-selection is only available with matrix diagonalization and advantageous only if there are several nuclei that do not contribute to orientational selectivity. Use it only if perturbation theory is really not an option.