- EasySpin
- Documentation
- Publications
- Website
- Forum

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`

- Spin system
- Broadenings
- Experimental settings
- Orientation selection
- Powders and crystals
- Simulation options
- Matrix diagonalization and perturbation theory

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]; salt(Sys,Exp);

This simulates and plots the powder ^{1}H 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 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.

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.

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, t_{p}, by 2/t_{p}.

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`

.

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.

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.

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.