This user guide explains how to simulate solid-state cw EPR spectra of powders or single crystals using EasySpin. It is assumed that you are familiar with the basic syntax of Matlab, esp. with structures.
It contains the following topics:pepper
Solid-state cw EPR spectra of powders and single crystals are computed by the EasySpin function pepper. It can be called with two or three arguments and returns one, two or three outputs. A few sample calls are
Spec = pepper(Sys,Exp); [Field,Spec] = pepper(Sys,Exp); Spec = pepper(Sys,Exp,Opt); [Field,Spec,Trans] = pepper(Sys,Exp);
Don't forget the ; (semicolon) at the end of the line to suppress output to the screen.
The first argument Sys
tells pepper
all about the
spin system, and the second argument Exp
gives the experimental
parameters. The third, optional, argument Opt
contains settings
concerning the simulation itself.
The outputs Field
and Spec
are the magnetic field and the
spectrum, respectively. The optional output Trans
lists all
transitions that were included in the simulation.
Doing a simulation only requires a few lines of code. A simple example is
Sys = struct('g',[2 2 2.2],'lw',2); Exp = struct('mwFreq',9.5); pepper(Sys,Exp);
This simulates and plots the spectrum of an S=1/2 system with an axial g tensor. Copy and paste the code above to your Matlab command window to see the graph.
The first input argument to pepper
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 tensor.
For a single unpaired electron spin, the field g
(principal values of the g tensor) has to be given.
A simple orthorhombic S=1/2 system (e.g., a low-spin Fe3+) is
Sys = struct('g',[1.8 2 2.1]);
pepper
automatically assumes S=1/2
for the spin quantum number.
For systems with more than one unpaired electron, S
has to be specified:
Sys.S = 1; % for triplet states Sys.S = 5/2; % for high-spin Mn2+ or high-spin Fe3+
Nuclear spins are included by specifying Nucs
(comma-separated
list of nuclei) and A
(array of hyperfine tensor principal values,
in MHz).
Sys = struct('g',[2 2 2],'Nucs','2H','A',[-1 -1 2]*4.2);
If the A tensor is tilted with respect to the molecular frame, the
tilt angles can be provided via the
field Apa
(standing for "A principal
angles")
Sys.Apa = [0 30 0]*pi/180; % [alpha beta gamma] in radians
Similar tilt angle sets can be provided for the g tensor (gpa
)
and the D tensor (Dpa
). The D tensor is specified in the D
field.
Sys.D = [-1 -1 2]*50; % MHz
These are the principal values of the D tensor. If only the scalar D and E values are given, they can be converted as follows:
D = 100; E = 10; % in MHz Sys.D = [-D/3+E, -D/3-E, +2*D/3];
Details about all the spin Hamilton 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.
No cw EPR spectrum is infinitely sharp. Lines are usually broadened due
to several reasons. pepper
provides means to include several
line broadening models in a simulation.
The simplest way to include line broadening is to convolute a stick spectrum
with a (Gaussian or Lorentzian) lineshape after the end of the simulation.
Such a convolution broadening is specified in the spin system field lw
.
Sys.lw = 0.5; % mT
The line width is in mT and refers to FWHM (full width at half height).
By default, pepper
uses a Gaussian profile. A Lorentzian
can be specified in the options structure field LineShape
.
For details about line shapes
and conversion formulas to/from FWHM and peak-to-peak widths, see the
page on line shapes.
Physically, the largest contributions to broadening are due to unresolved hyperfine couplings and to distributions in the various spin Hamiltonian parameters that result from structural variations from one paramagnetic center to the next.
To include effects from unresolved hyperfine couplings, an orientation-dependent
phenomenological broadening can be specified in HStrain
:
Sys.HStrain = [50 50 87]; % [along x, along y, along z], in MHz
Distributions of g and A are given in similar fields:
Sys.gStrain = [0.01 0.02 0.005]; Sys.AStrain = [10 10 30]; % in MHz
The three values in gStrain
are the FWHM parameters of the Gaussian
distributions of the respective g principal values given in Sys.g
.
AStrain
is the same for the A tensor.
Distributions of the D tensor values can be given in DStrain
, where
the first value is the width of the (scalar) D distribution, and the second is
the width for the E distribution.
All these broadening parameters can be combined. However, usually a modelling
of the broadening with the phenomenological HStrain
is absolutely
sufficient.
All experimental settings are given in the second input argument Exp
.
Just as the spin system, Exp
is a structure containing several
fields.
For every simulation, the spectrometer frequency has to
be given in the field mwFreq
in units of GHz (Gigahertz).
Exp.mwFreq = 9.754; % in GHz
There are two ways to specify the magnetic field sweep range.
Exp.CenterSweep = [340 80]; % in mT Exp.Range = [300 380]; % in mT
Either the
center and the sweep width (in mT) are given in Exp.CenterSweep
,
or the lower and upper limit of the sweep range (again in mT) are given in
Exp.Range
.
In many cw EPR spectrometers, the field range is
specified using a center field and a sweep width, so Exp.CenterSweep
is the more natural choice.
Exp.CenterSweep
and Exp.Range
are only optional.
If both are omitted, garlic
automatically
chooses a field range large enough to accomodate the full spectrum.
If both are given, garlic
takes
the values given in Exp.CenterSweep
and ignores those
in Exp.Range
.
By default, pepper
computes a 1024-point spectrum, just as
commerical spectrometers measure by default. However, the number of
points can be changed manually to a different value, e.g.,
Exp.nPoints = 5001;
By default, pepper
computes the first-derivative spectrum. By
changing Exp.Harmonic
, the absorption or the second-derivative
spectrum can be requested.
Exp.Harmonic = 0; % absorption spectrum Exp.Harmonic = 1; % first derivative Exp.Harmonic = 2; % second derivative
For more advanced spectral simulations, pepper
offers more
configuration possibilities in the experimental parameter structure Exp
.
Most cw EPR resonators operate in perpendicular mode, i.e., the oscillating
magnetic field component of the microwave in the resonator is perpendicular to the
static field. Some resonators can operate in parallel mode, where the
microwave field is parallel to the static one. pepper
can simulate the
resulting spectra:
Exp.Detection = 'parallel'; % parallel detection
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, pepper
will include the relevant polarization
factors resulting from a thermal equilibrium population of the energy levels.
If not specified otherwise, pepper
computes powder spectra. But
it is as well straightforward to simulate spectra for single crystals. The
orientation of the single crystal(s) can be provided in the
experiment structure field Exp.Orientations
. This field should
contain the tilt angles between molecular 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
column.
For a single paramagnetic center with its molecular frame aligned with the laboratory frame, the setting is
Exp.Orientations = [0;0;0];
In many crystals, there are several sites with identical paramagnetic centers differing only in their orientation relative to the crystal lattice. For such a case, several columns of tilt angle triplets can be specified.
Exp.Orientations(:,1) = [0;0;0]; Exp.Orientations(:,2) = [0;pi/4;0];
or, equivalently,
Exp.Orientations = [0 0 0;0 pi/4 0].';
In this case, pepper
returns the sum of the two resulting spectra.
To obtain the two spectra separately, Opt.Output
has to be set to
'separate'
(see below).
If Exp.Orientations
set to []
(an empty array),
pepper
simulates the powder spectrum.
The third input argument to pepper
contains simulation options.
All of them have reasonable default values, but sometimes it might be necessary
to change one of them. In the following the most important ones are presented.
If you want pepper
to print information about the simulation to
the command window during the computation, use
Options = struct('Verbosity',1);
'Verbosity'
specifies the logging level. 0 (the default)
suppresses all output, 1 is normal logging, and 2 prints more information,
relevant only for debugging.
Another useful option is nKnots
, which determines how many
orientations pepper
will include in the simulation of a powder
spectrum. If this value is too low, the spectrum shape contains ripples.
nKnots
is the number of orientations between the z axis and
the x axis (between theta = 0 and theta = 90 degrees).
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 the field nSpline
. nSpline = 4
means that pepper
interpolates additional 4 spectra between two
adjacent orientations evaluated.
Options.nSpline = 10; % massive interpolation Options.nSpline = 0 ; % switches interpolation off
The option Output
can be used to determine the form in which
pepper
returns the spectral data.
Options.Output = 'separate'; % single crystal: orientations separately % powders: transitions separately Options.Output = 'summed'; % returns the sum over all orientations and transitions
There are more option fields available. For details, see the documentation page on pepper.
Simulations of spectra from systems with more than one nucleus can be very time-consuming. To accelerate such computations, nuclei with small hyperfine couplings can be treated by first-order perturbation theory.
E.g., in the simulation of the Cu porphyrin system
Sys = struct('S',1/2,'g',[2 2 2.2]); Sys = nucspinadd(Sys,'63Cu',[50 50 500]); A = [20 20 30]; Sys = nucspinadd(Sys,'14N',A); Sys = nucspinadd(Sys,'14N',A); Sys = nucspinadd(Sys,'14N',A); Sys = nucspinadd(Sys,'14N',A); Sys.lw = 0.6;
large 648x648 matrices are involved, and the simulation needs several hours. Using the perturbational treatment of the 4 nitrogens, the matrix size can be reduced to 8x8, and the simulation completes within a couple of seconds.
To enable the perturbational treatment of super-hyperfine (SHF) nuclei,
set the field Perturb
in the options structure to 1
Exp = struct('mwFreq',9.5,'Range',[270 360]); Opt = struct('nKnots',31); Opt.Perturb = 1; [x,y] = pepper(Sys,Exp,Opt);
pepper
will automatically determine those nuclei where first-order
perturbation theory can be applied without introducing noticeable errors in the
simulated spectrum.
If you want to compare the perturbational treatment to the full treatment,
set Perturb
to 0
and Threshold
to 0
.
Opt.Perturb = 0; Opt.Threshold = 0; % important!
The second line tells pepper
to include all possible transitions in
the simulation. This is important, since due to many anticrossings between nuclear
sublevels the usual transition pre-selection will miss transitions, possibly
leading to distorted spectra.
pepper
can handle both thermal equilibrium and non-equilibrium
populations. Both are specified in the field Temperature
of the
experimental settings structure.
For thermal equilibrium, just give the temperature in Kelvin:
Exp.Temperature = 77; % 77K, boiling point of liquid nitrogen
For non-equilibirum populations, Temperature
must be a
vector. If the spin systems contains N electron states, then
this vector must contain N elements, each specifying the population
of one of the electron states at zero field, sorted according to
their energy from lowest to highest.
E.g., an organic triplet with S=1 and I=1 has 3 electron states, each further split into three sublevels by the coupling to the nuclear spin. The population vector in this case should contain three elements:
Exp.Temperature = [0.6 0.8 1.1]; % highest state is most populated
This specifies that all the sublevels of the lowest zero-field electron states
have a population of 0.6, etc. The sublevels of the highest-energy zero-field
electron state have a population of 1.1. The populations don't have to be normalized,
pepper
takes care about that.
To compute the state populations for a non-zero field state,
pepper
decomposes it into a linear combination of zero-field
states and combines the zero-field populations using the resulting linear
combination coefficients.
A simple example of a non-equilibrium triplet system is
Sys = struct('S',1,'g',[2 2 2],'D',[-1 -1 2]*100,'lw',0.2); Exp = struct('mwFreq',9.5,'Range',[320 360],'Harmonic',0); Exp.Temperature = [0.5 0.6 0.9]; [x,y] = pepper(Sys,Exp); plot(x,y);