The central concept for spectral simulations with EasySpin is the spin system. It collects all information about the spins in the sample and how they are coupled. In EasySpin, a spin system is represented by a MATLAB structure (the spin system structure) that contains a series of fields holding this information.
The spin system structure contains all information about the spin system and its spin Hamiltonian. Its fields specify spin quantum numbers, interaction parameters, matrices and tensors, relative orientation angles for these matrices and tensors as well as details about broadenings.
The
spin Hamiltonian is set up in frequency units (MHz, not angular frequencies), so all the energy parameters of the Hamiltonian have to
be given in MHz as well. Hence, for example, the field A
represents in fact the diagonal of the hyperfine coupling tensor divided by the Planck constant, A/h, and not of A. Remember that all angles are in radians, not in degrees.
Spin system structures are used by many EasySpin functions, among them the simulation functions chili (slow-motion EPR), garlic (isotropic EPR), pepper (solid-state EPR), salt (ENDOR) saffron (pulse EPR), and curry (magnetometry).
Before we give a full list of possible fields, here are a couple of examples of spin system definitions. There are two equivalent ways.
Sys.S = 1/2; Sys.g = [1.9 2.0 2.1]; Sys.lw = 0.7; % mT
Sys = struct('S',1/2,'g',[1.9 2.0 2.1],'lw',0.7);
Nuclei can be added to a spin system either using a set of fields (Nucs
, A
) or using the function nucspinadd.
Sys.S = 1/2; Sys.g = [2 2.1 2.2]; Sys.Nucs = '63Cu'; Sys.A = [50 50 460]; % MHzIt is more convenient to use nucspinadd:
Sys = struct('S',1/2,'g',[2 2.1 2.2]); Sys = nucspinadd(Sys,'63Cu',[50 50 460]);
A high-spin Mn2+ system with zero-field splitting is
Sys = struct('S',5/2,'g',2,'Nucs','55Mn'); Sys.A = -240; % MHz Sys.D = 120; % MHz
The following groups of parameters can be specified in the spin system structure:
All interaction matrices and tensors can have arbitrary orientations with respect to a molecule-fixed frame of reference (the so-called molecular frame).
Below we list and describe all possible spin system structure fields containing spin Hamiltonian parameters.
The two fields S
and Nucs
are used to specify the electron and nuclear spins constituting the spin system. Both are optional. If S
is not given, S=1/2
is assumed. If Nucs
is not specified, Nucs=''
is used.
S
Sys.S = 1/2; % one electron spin with S=1/2 Sys.S = 5/2; % an S=5/2 electron spin Sys.S = [1/2, 1/2]; % two S=1/2 electron spins Sys.S = [1, 1, 1/2]; % two S=1 electron spins and one S=1/2 electron spin
If S
is not specified, it is automatically set to 1/2.
Nucs
Sys.Nucs = '1H'; % one hydrogen Sys.Nucs = '63Cu'; % a 63Cu nucleus Sys.Nucs = '59Co,14N,14N'; % a 59Co and two 14N nuclei
If there are no nuclear spins in the system, don't specify this field or set it to ''
(an empty character array). Nuclei can be added and removed one at a time using nucspinadd and nucspinrmv.
If not a single isotope, but a natural-abundance mixture of isotopes is needed, just omit the mass number. You can also freely mix single isotopes and natural-abundance mixtures in one spin system.
Sys.Nucs = 'Cu'; % natural-abundance mixture of 69% 63Cu and 31% 65Cu Sys.Nucs = 'Cu,14N'; % same as above, plus a pure 14N Sys.Nucs = 'F,C'; % 100% 19F, plus a mixture of 99% 12C and 1% 13C
EasySpin will automatically simulate the spectra of all possible isotopologues (isotopes combinations) and combine them with the appropriate weights. Hyperfine constants and quadrupole couplings are automatically converted between isotopes. The values given in the spin system are taken to apply for the most abundant isotope with an appropriate spin (e.g. Cu: 63Cu for both gn and quadrupole moment; H: 1H for g value, 2H for quadrupole moment; N: 14N for both; Sn: 119Sn for both; the only three cases where the reference isotopes for gn and quadrupole moment differ are H, Xe and Hg, for all others either the most abundant isotope has spin 1 or larger [N], or there is no isotope with spin 1 or larger [C]).
It is also possible to specify custom isotope mixtures by listing the mass numbers of all isotopes in parentheses in Nucs
and giving the associated abundances in Abund
. In the simplest case of one atom, this would be
Sys.Nucs = '(12,13)C'; % for a mixture of 12C and 13C Sys.Abund = [0.3 0.7]; % 30% of 12C, the rest 13C Sys.Nucs = '(1,2)H'; % for a mixture of protons and deuterons Sys.Abund = [0.05 0.95]; % 5% 1H, 95% 2H
In the case of multiple atoms, Abund
should be a cell array with a list of abundances for each atom. For example
Sys.Nucs = '63Cu,(32,33)S'; % 63Cu with enriched 33S Sys.Abund = {1,[0.1,0.9]]; % 100% 63Cu, 10% 32S and 90% 33S
Custom and natural abundance mixtures and single isotopes can be all used at the same time. Any entry for a natural-abundance atom or for a single isotope in Abund
is ignored.
Sys.Nucs = 'Cu,(32,33)S,1H'; % natural Cu with enriched 33S and a pure 1H Sys.Abund = {1,[0.1,0.9],1}; % one way Sys.Abund = {[],[0.1,0.9],[]}; % another way, yieldig the same result
Abund
Nucs
above.
n
Sys.Nucs = '1H,13C'; % one class of 1H and one class of 13C Sys.n = [2 3]; % 2 protons and 3 carbon-13 spins
Sys.n
can be omitted if all nuclei in Sys.Nucs
occur only once.
Important: pepper
does not support Sys.n
. If you have multiple equivalent nuclei, enter each separately.
The g matrices/tensors for all electron spins in the system are supplied in two fields:
g
contains either the 3 principal values of the g tensors, or alternatively the full g tensors.
gFrame
contains the Euler angles specifying the orientations of the g tensors relative to the molecular frame.
See also the reference page on the Electron Zeeman interaction and the EasySpin function ham_ez.
g
Rhombic: Each row contains the three principal values of the g tensor of one electron spin.
Sys.g = [2 2.05 2.3]; % rhombic g, for one electron spin Sys.g = [2 2.1 2.3; 1.9 1.95 2.01]; % rhombic g, for two electron spins
Axial: For axial g tensors, only two values are needed. The first value is the one perpendicular to the unique axis, and the second is the one parallel to it.
Sys.g = [2.25 2.03]; % axial g, for one electron spin % = [2.25 2.25 2.03] Sys.g = [2.25 2.03; 1.99 1.98]; % axial g, for two electron spins % = [2.25 2.25 2.03; 1.99 1.99 1.98]
Isotropic: If g is isotropic, it is sufficient to give its isotropic value once.
Sys.g = 2.005; % isotropic g, for one electron spin % = [2.005 2.005 2.005] Sys.g = [2.0023; 2.0025]; % isotropic g, for two electron spins % = [2.0023 2.0023 2.0023; 2.0025 2.0025 2.0025]
No value: If no values are given, EasySpin assumes isotropic g values of 2.002319... (see gfree) for all electron spins.
When the principal values of g are given in g
, the orientation of the g tensor can be specified by Euler angles in gFrame
, see below.
Alternatively, it is possible to provide the full 3x3 g tensor in g
. For example
% full g tensor for one electron spin Sys.g = [ 2.003397 -0.000431 -0.000004;... -0.000416 2.003032 -0.000006;... -0.000014 0.000013 2.002237]; % full g tensors for two electron spins Sys.g = [2 0 0; 0 2 0; 0 0 2; 2.1 0 0; 0 2.1 0, 0 0 2.1];
If you give full g tensors, EasySpin uses them as provided, i.e. the tensors are not symmetrized, and the Euler angles in gFrame
are ignored.
gFrame
gFrame
is assumed to be all-zero, that is, the g tensors of all electron spins are aligned with the molecular frame.
Sys.gFrame = [0 10 0]*pi/180; % one electron spin Sys.gFrame = [0 10 0; 23 -45 67]*pi/180; % two electron spins Sys.gFrame = [0 0 0; 0 pi/4 0; 0 -pi/4 0]; % three electron spins
With these angles, EasySpin can transform a g tensor from its diagonal eigenframe representation to the molecular frame representation. Here is an explicit example how this is done:
gpv = [2.1 1.97 2.04]; % principal values gFrame = [10 34 -2]*pi/180; % Euler angles, in radians R_M2g = erot(gFrame) % transformation matrix from molecular frame to g frame R_g2M = R_M2g.'; % transformation matrix from g frame to molecular frame g_g = diag(gpv) % g in g frame g_M = R_g2M*g_g*R_g2M.' % g in molecular frame
which gives the following output
R_M2g = 0.8220 0.1095 -0.5589 -0.1450 0.9892 -0.0195 0.5507 0.0971 0.8290 g_g = 2.1000 0 0 0 1.9700 0 0 0 2.0400 g_M = 2.0791 0.0154 -0.0278 0.0154 1.9722 -0.0023 -0.0278 -0.0023 2.0587
The rows of the transformation matrix R_M2g
correspond to the g tensor principal axes in molecular frame coordinates. The columns, on the other hand, correspond to the molecular axes in g frame coordinates. See the page on frames for more details.
If a 3x3 transformation matrix Rg
is given, e.g. from literature, then the corresponding Euler angles can be obtained by
gFrame = eulang(Rg);
Prior to EasySpin 5, the field gpa
was used instead of gFrame
.
To convert old gpa
values to gFrame
, invert the order and flip the sign of the three Euler angles.
For each electron-nucleus pair, a hyperfine coupling tensor can be specified. The following fields are used.
A
A(k,:)
refers to nuclear spin k
. The orientations of the A matrices are given in AFrame
.
Sys.A = [-6 12 23]; % 1 electron and 1 nucleus Sys.A = [10 10 -20; 30 40 50]; % 1 electron and 2 nuclei
For axial and isotropic hyperfine tensors, the notation can be shortened, just as in the case of the g tensor.
Sys.A = [4 10]; % = [4 4 10] (axial, 1 electron and 1 nucleus) Sys.A = 34; % = [34 34 34] (isotropic, 1 electron and 1 nucleus) Sys.A = [4 10; 1 2]; % = [4 4 10; 1 1 2] (axial, 1 electron and 2 nucleui) Sys.A = [7; 3]; % = [7 7 7; 3 3 3] (isotropic, 1 electron and 2 nuclei)
If the system contains more than one electron spin, each row contains the principal values of the hyperfine couplings to all electron spins, listed one after the other.
Sys.A = [10 10 -20 30 40 50]; % 2 electrons and 1 nucleus Sys.A = [10 10 -20 30 40 50; 1 1 -2 3 4 5]; % 2 electrons and 2 nuclei
It is possible to specify full A matrices in A
. The 3x3 matrices have to be combined like the 1x3 vectors used when only principal values are defined: For different electrons, put the 3x3 matrices side by side, for different nuclei, on top of each other. If full matrices are given in A
, AFrame
is ignored.
Sys.A = [5 0 0; 0 5 0; 0 0 5] % 1 electron and 1 nucleus Sys.A = [[5 0 0; 0 5 0; 0 0 5]; [10 0 0; 0 10 0; 0 0 10]] % 1 electron and 2 nuclei Sys.A = [[5 0 0; 0 5 0; 0 0 5], [10 0 0; 0 10 0; 0 0 10]] % 2 electrons and 1 nucleus
In the case where the associated nucleus is a natural or custom isotope mixture, the given hyperfine value refers to the I>=1/2 isotope with the highest abundance. See the description under Sys.Nucs
.
A_
A
and A_
cannot be used at the same time.
Sys.A_ = 2; % isotropic component only Sys.A_ = [2 3] % isotropic and axial component Sys.A_ = [2 3 0.4] % isotropic, axial and rhombic componentThe cartesian form (as used in
A
) and the spherical form (as used in A_
) are related by
% spherical -> cartesian A(1) = A_(1)-A_(2)-A_(3); A(2) = A_(1)-A_(2)+A_(3); A(3) = A_(1)+2*A_(2) % cartesian -> spherical A_(1) = mean(A); A_(2) = (2*A(3)-A(1)-A(2))/6; A_(3) = (-A(1)+A(2))/2;or if you prefer more compact notation
A = A_*[1 1 1; -1 -1 2; -1 +1 0]; % spherical -> cartesian A_ = A*[2 -1 -3; 2 -1 3; 2 2 0]/6; % cartesian -> sphericalFor more than one nucleus and more than one electron spin, the array structure is analogous to
A
.
AFrame
gFrame
. If AFrame
is not specified, it is assumed to be all-zero, that is, all tensors are aligned with the molecular frame. See also erot.
Each row of AFrame
contains the three Euler angles for one nucleus.
Sys.AFrame = [0 20 0]*pi/180; % one electron spin, one nucleus Sys.AFrame = [0 0 0; 0 10 90; 12 -30 34]*pi/180 % one electron spin, three nuclei
If there are two or more electron spins, each nucleus has two or more hyperfine tensors, and consequently each row should contain two or more sets of Euler angles.
Sys.AFrame = [0 20 0, 13 -30 80]*pi/180; % 2 electrons, 1 nucleus Sys.AFrame = [0 20 0, 0 0 0; 0 10 0, 0 30 50]*pi/180; % 2 electrons, 2 nuclei
Here is how principal values and angles can be converted to a full matrix:
Apv = [4 9 13]; % principal values, MHz AFrame = [10 45 -30]*pi/180; % Euler angles A_A = diag(Apv); % full A matrix in A frame R_M2A = erot(AFrame); % transformation matrix from molecular frame to A frame R_A2M = R_M2A.'; % transformation matrix from A frame to molecular frame A_M = R_A2M*A_A*R_A2M; % full A matrix in molecular frame
See the page on frames for more details.
Prior to EasySpin 5, the field Apa
was used instead of AFrame
.
To convert old Apa
values to AFrame
, invert the order and flip the sign of the three Euler angles.
For each nucleus spin, a nuclear quadrupole coupling tensor Q can be given,
using the fields Q
(for the parameters e2qQ/h and η, the principal values, or the full matrix) and QFrame
(for the orientation).
Q
Sys.Q = 0.7 % one nucleus, eeQq/h = 0.7 MHz Sys.Q = [0.7, 1.2] % same for two nuclei
Sys.Q = [1.2 0.29] % one nucleus, eeQq/h = 1.2 MHz and eta = 0.29 Sys.Q = [1.2 0.29; 0.1 0] % same with a second nucleus (second row)
Sys.Q = [-1 -1 2] % one nucleus, Qxx = -1, Qyy = -1, Qzz = +2 MHz Sys.Q = [-1 -1 2; 0.2 0.3 -0.5] % same for two nuclei
Sys.Q = [-1 0 0; 0 -1 0; 0 0 2]*0.1; % for one nucleus, diagonal Sys.Q = [0.125 -0.6495 -1.299; -0.6495 -0.625 0.75; -1.299 0.75 0.5]; % general, one nucleus Q1 = [-0.9 0 0; 0 -1.1 0; 0 0 2]*0.15; Q2 = [-0.7 0 0; 0 -1.3 0; 0 0 2]*0.31; Sys.Q = [Q1; Q2]; % for two nuclei
Here is an example of how to convert from e2Qq/h and η to the three principal Q values:
eeQqh = 1; % MHz eta = 0.2; % unitless I = 1; % nuclear spin must be known! Q = eeQqh/(4*I*(2*I-1)) * [-1+eta, -1-eta, 2]
And here is a demonstration of how to convert from the three principal values of Q to e2Qq/h and η:
Q = [-0.5 -1.0 1.5] % MHz I = 1; % nuclear spin must be known! eeQqh = 2*I*(2*I-1)*Q(3) % MHz eta = (Q(1)-Q(2))/Q(3) % unitless
See also the reference page on nuclear quadrupole coupling.
In the case where the associated nucleus is a natural or custom isotope mixture, the given quadrupole data refers to the I>=1 isotope with the highest abundance. See the description under Sys.Nucs
.
QFrame
gFrame
and AFrame
. QFrame
should include one row of three angles for each nucleus. The angles are in units of radians, not degrees.
Sys.QFrame = [0 pi/4 0]; % one nucleus Sys.QFrame = [30 45 0; 10 -30 0]*pi/180; % two nuclei
Here is how principal values and angles can be converted to a full matrix:
Qpv = [-0.9 -1.1 2]*0.125; % principal values, MHz QFrame = [10 45 -30]*pi/180; % Euler angles R_M2Q = erot(QFrame); % transformation matrix from molecular frame to Q frame R_Q2M = R_M2Q.'; % transformation matrix from Q frame to molecular frame Q_Q = diag(Qpv); % full matrix in Q frame Q_M = R_Q2M*Q_Q*R_Q2M.'; % full matrix in molecular frame
See the page on frames for more details.
Prior to EasySpin 5, the field Qpa
was used instead of QFrame
.
To convert old Qpa
values to QFrame
, invert the order and flip the sign of the three Euler angles.
For each electron spin, a zero-field splitting can be specified in the fields D
or D_
and DFrame
. See also the reference page on the zero-field interaction.
D
D
gives the zero-field splitting tensors for the electron spins in the spin system. It should be in units of MHz (1 cm-1 = 29979 MHz). It can be specified in several different ways.
Axial: If the zero-field splitting tensor is axial, give the D value for each electron spin. The orientation of the tensor can be specified in the field DFrame
(see below).
Sys.D = [200]; % 1 electron spin, D = 200 MHz Sys.D = [200 -340]; % 2 electron spins, D value each, in MHz Sys.D = [200 -340 1100]; % 3 electron spins, D value each, in MHz
Rhombic: For a zero-field splitting tensor with rhombic asymmetry, give both the D and the E value for each electron spin. The orientation of the tensor can be specified in the field DFrame
(see below).
Sys.D = [200 10]; % 1 electron spin, D = 200 MHz and E = 10 MHz Sys.D = [200 10; 300 90]; % 2 electron spins, D and E value for each spin
Principal values: For both axial and rhombic symmetry, you can give the three principal values of the D tensor. The orientation of the tensor can be specified in the field DFrame
(see below).
Sys.D = [-100 -100 200]; % 1 electron spin, Dx = Dy = -100 MHz, Dz = 200 MHz Sys.D = [-150 -50 200; 450 350 -800]; % 2 electron spinsHere is how the principal values can be computed from D and E
D = 120; E = 15; % D and E parameters, in MHz Sys.D = [-1,-1,2]/3*D + [1,-1,0]*E % conversion to D principal values
It is possible to provide a non-traceless D tensor.
Full matrix: You can also specify the full D matrix for each electron spin. E.g. for one electron spin
Sys.D = [-33.8 -24.1 -122.1; -24.1 -91.2 44.4; -122.1 44.4 125];
It is possible to provide a non-traceless D tensor.
Include zeros for any electron spin with S = 1/2.
D_
D_
gives the zero-field splitting tensors for the electron spins in the spin system defined in terms of D and the ratio E/D. D should be in units of MHz (1 cm-1 = 29979 MHz), E/D is unitless.
Sys.D_ = [200 0.05]; % 1 electron spin, D = 200 MHz and E/D = 0.05, i.e. E = 10 MHz Sys.D_ = [200 0.05; 300 0.3]; % 2 electron spins, D and E/D value for each spin
DFrame
gFrame
and QFrame
. If absent, it is assumed to be all zeros.
Internally, EasySpin uses the following procedure to compute the full D tensor in the molecular frame from the given principal values and the Euler angles
Dvals = [-25 -55 80]; % principal values DFrame = [10 20 0]*pi/180; % tilt angles D_D = diag(Dvals); % full D tensor in its eigenframe R_M2D = erot(DFrame); % transformation matrix from molecular frame to D frame R_D2M = R_M2D.'; % transformation matrix from D frame to molecular frame D_M = R_D2M*diag(Dvals)*R_D2M.'; % full D tensor in molecular frame
See the page on frames for more details.
Prior to EasySpin 5, the field Dpa
was used instead of DFrame
.
To convert old Dpa
values to DFrame
, invert the order and flip the sign of the three Euler angles.
EasySpin supports a series of high-order electron spin operators in the spin Hamiltonian.
B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12
Each field that is given should contain a row vector of 2k+1 parameters, in order of decreasing q, running from +k to -k. For example:
Sys.B2 = [0 0 560 0 0]; % B(2,q) with q = +2,+1,0,-1,-2 Sys.B4 = [0 132 0 0 0 0 0 0 0]; % B(4,q) with q = +4,+3,+2,+1,0,-1,-2,-3,-4The only nonzero elements in the above examples are therefore B(2,0) and B(4,+3).
Positive (and zero) q correspond to to the cosine tesseral operators, and negative q correspond to the sine tesseral operators.
In the common case that only the q=0 element is needed for a given k, it can be given alone in an abbreviated syntax.
Sys.B2 = [0 0 99 0 0]; % B(2,0) only, full form Sys.B2 = 99; % equivalent abbreviated form Sys.B4 = [0 0 0 0 -8700 0 0 0 0]; % B(4,0) only, full form Sys.B4 = -8700; % equivalent abbreviated form
If more than one electron spin is present, specify one row of 2k+1 elements for each electron spin. The first row is for the first electron spin, etc.
Sys.S = [5/2 2]; % two spins B20a = 100; % for the first spin B20b = -98; % for the second spin Sys.B2 = [0 0 B20a 0 0; 0 0 B20b 0 0]; % two rows: one row per spin Sys.B2 = [B20a; B20b]; % abbreviated form for two spins: two rows as well
To include tilt angles for Sys.B1
, Sys.B2
, etc, use the fields Sys.B1Frame
, Sys.B2Frame
, etc. See below.
Both Sys.B2
and Sys.D
provide parameters for the rank-2 zero-field splitting term in the spin Hamiltonian. Therefore, only one of the two can be used. The two spin systems Sys1
and Sys2
in the following example give identical Hamiltonians:
D = 1000; % MHz E = D*0.2; % MHz ang = [pi/3 pi/7 pi/11]; % tilt angles Sys1.D = [D E]; Sys1.DFrame = ang; Sys2.B2 = [E 0 D/3 0 0]; Sys2.B2Frame = ang;
In the special case of high-spin 3d5 ions such as Fe(III), Mn(II), and Cr(I) in axially distorted cubic environments, the fourth-order terms are often written in terms of the traditional a and F parameters instead of B4. For their definition, see the reference page on high-order operators. EasySpin versions prior to 6 had a dedicated field Sys.aF
for these. Since EasySpin 6, this is no longer supported. Instead, the fourth-order terms should be specified using Sys.B4
and Sys.B4Frame
. Pay attention that the frames for the a and the F term are different.
B1Frame, B2Frame, ..., B12Frame
B1
, B2
, etc. (see above) in the molecular frame. Use B1Frame
for the rank-1 tensor in B1
, B2Frame
for the rank-2 tensor in B2
, and so forth.
These fields are fully analogous to AFrame
(see above). See the page on frames for more details on frames.
Here is an example for rank 2:
Sys.B2 = [0 30 100 0 0]; % in MHz Sys.B2Frame = [0 pi/3 0]; % in radians
For each pair of electron spins, a bilinear coupling matrix (composed of isotropic, anisotropic, and antisymmetric terms) can be given. You can enter it in one of several ways:
Sys.J
, Sys.dip
, and Sys.dvec
.
Sys.ee
(with Sys.eeFrame
).
Sys.ee
.
Except for the last option, give the orientation of the interaction matrices in Sys.eeFrame
.
In addition, it is also possible to specify an isotropic biquadratic exchange coupling for each electron spin pair in Sys.ee2
. This is a type of coupling that is very rare.
J
List of isotropic exchange coupling constants (in MHz), one for each pair of electron spins. The associated spin Hamiltonian is +J S1S2 (not -2J S1S2). Here is an example for a two-spin system:
Sys.S = [3/2 3/2]; % two electron spins Sys.J = J12; % coupling constant, in MHz
For more than two spins, the pairs are ordered lexicographically, for example for a 4-spin system 1-2, 1-3, 1-4, 2-3, 2-4, 3-4.
Sys.S = [1/2 1/2 1/2 1/2]; % four spins Sys.J = [J12 J13 J14 J23 J24 J34]; % six coupling constants, in MHz
To convert from the more traditional unit cm-1 to MHz, use
J_MHz = unitconvert(J_cm,'cm^-1->MHz'); % cm^-1 to MHz conversion
You can use either Sys.J
(together with Sys.dip
and Sys.dvec
if needed) or Sys.ee
(with Sys.eeFrame
), but not both at the same time.
dip
List of values that describe the symmetric part of the coupling between two electron spins (dipolar interaction), in units of MHz. Each row corresponds to one electron-electron pair. It can contain 1, 2, or 3 numbers.
Sys.S = [1/2 1/2]; % two spins % The following two inputs give the same axial dipolar tensor Sys.dip = 23; % axial dipolar coupling, MHz Sys.dip = 23*[1 1 -2]; % principal values of axial dipolar coupling tensor, MHz % The following two inputs give the same rhombic dipolar tensor Sys.dip = [23 3]; % axial and rhombic dipolar coupling, MHz Sys.dip = 23*[1 1 -2] + 3*[1 -1 0]; % principal values of axial dipolar coupling tensor, MHz
The axial and rhombic couplings and the principal values of the dipolar tensor are related via
% axial and rhombic -> principal values dip_pv = dip_axial*[1 1 -2] + dip_rhombic*[1 -1 0]; % principal values -> axial and rhombic dip_rhombic = (dip_pv(1)-dip_pv(2))/2 dip_axial = ((dip_pv(1)+dip_pv(2))/2-dip_pv(3))/3
For more than two spins, specify the couplings for electron pairs in lexicographic order, for example 1-2, 1-3, 2-3 for a three-spin system.
Sys.S = [3/2 3/2 3/2]; % three spins dip12 = 1.4e4; % units: MHz dip23 = 2.1e4; dip13 = 3.7e4; Sys.dip = [dip12; dip13; dip23]; % three tensors
To specify the orientation of the dipolar tensor, use Sys.eeFrame
.
You can use either Sys.dip
(together with Sys.J
and Sys.dvec
if needed) or Sys.ee
, but not both at the same time.
dvec
List of vectors (one per row, in units of MHz) that describe the antisymmetric part of the coupling between two electron spins (Dzyaloshinskii-Moriya interaction). The associated spin Hamiltonian is d12.(S1xS2), where d12 is the interaction vector.
Sys.S = [1/2 1/2]; % two spins d12 = [dx dy dz]; % units: MHz Sys.dvec = d12; % one interaction vector
For more than two spins, the vectors are ordered in lexicographic order, for example 1-2, 1-3, 2-3 for a three-spin system.
Sys.S = [1 1 1]; % three spins d12 = [0 0 1.4e4]; % units: MHz d23 = [0 0 2.1e4]; d13 = [0 0 3.7e4]; Sys.dvec = [d12;d13;d23]; % three interaction vectors, one per row
You can use either Sys.J
(together with Sys.dip
and Sys.dvec
if needed) or Sys.ee
(with Sys.eeFrame
), but not both at the same time.
ee
Principal value of the electron-electron interaction matrices, in MHz.
Each row corresponds to the diagonal of an interaction matrix (in its eigenframe). For two electron spins, ee
contains one row only.
Sys.S = [1/2 1/2]; % two electron spins Sys.ee = [80 80 20]; % principal values of one coupling matrix, MHz
For more than two electron spins, the pairs are lexicographically ordered according to the indices of the electron spins involved. If n is the number of electron spins, there are N = n(n-1)/2 rows. For example, for 4 spins there are 6 rows with the principal values for the interaction of spins 1-2, 1-3, 1-4, 2-3, 2-4, 3-4, in this order.
Sys.S = [1/2 1/2 1/2]; % three spins ee12 = [80 80 20]; ee13 = [10 10 -30]; ee14 = [10 10 -30]; ee23 = [0 0 0]; ee24 = [0 0 0]; ee34 = [80 80 80]; Sys.ee = [ee12; ee13; ee14; ee23; ee24; ee34]; % 6 coupling matrices, MHz
If only isotropic couplings are needed, use Sys.J
(see above).
It is also possible to specify the full 3x3 interaction matrices instead of the 3 principal values and 3 Euler angles. These matrices combine the isotropic, antisymmetric and symmetric parts of the interaction. For a 2-electron system, ee
is a single 3x3 array.
Sys.S = [1/2 1/2]; % two spins Sys.ee = [80 0 0;0 80 0; 0 0 20]; % one coupling matrix, MHz
For more electrons, the 3x3 matrices are stacked on top of each other, to give a 3Nx3 array.
Sys.S = [1/2 1/2 1/2]; % three spins ee12 = [80 0 0; 0 80 0; 0 0 20]; ee13 = diag([10 10 -30]); ee23 = zeros(3); Sys.ee = [ee12; ee13; ee23]; % three coupling matrices
Note that you can use either Sys.ee
or Sys.J
(together with Sys.dip
and Sys.dvec
if needed), but not both at the same time.
eeFrame
ee
) in the molecular frame. Each row contains the Euler angles for the corresponding row in ee
.
This is fully analogous to AFrame
(see above). Check out the page on frames for more details on frames.
Prior to EasySpin 5, the field eepa
was used instead of eeFrame
.
To convert old eepa
values to eeFrame
, invert the order and flip the sign of the three Euler angles.
ee2
ee
.
Sys.S = [3/2 3/2]; % two electron spins Sys.ee2 = 130; % one biquadratic coupling 1-2 Sys.S = [3/2 3/2 3/2]; % three electron spins Sys.ee2 = [130 150 190]; % couplings 1-2, 1-3, 2-3 Sys.S = [1 1 1 1]; % four electron spins Sys.ee2 = [130 0 130 130 0 130]; % couplings 1-2, 1-3, 1-4, 2-3, 2-4, 3-4
EasySpin defines the biquadratic exchange term in the spin Hamiltonian as +j(S1.S2)2, with a plus sign. In the literature, it is sometimes defined with a negative sign, so be careful when using literature values.
Chemical shielding/shift (CS) tensors for all nuclei in the spin system can be specified in the field Sys.sigma
, with the orientation in Sys.sigmaFrame
.
In EPR spectroscopy practice, the typically very small deviations of the shielding tensor from the identity matrix are never detectable. The field can be used for numerical investigations. Also, Sys.sigma
can be used to emulate the effective pseudo-nuclear "effect" that has been used to describe hyperfine spectra of high-spin systems in an effective-spin picture.
sigma
Principal values of the CS tensors, or full CS tensors. When providing principal values, each row contains the three principal values of one CS tensor.
Sys.Nucs = '1H'; % one nuclear spin Sys.sigma = 1-[4 5 9]*1e-6; % principal values of shielding tensor
sigmaFrame
Array containing the Euler angles describing the orientation of the chemical shielding tensors (specified in sigma
) in the molecular frame. Each row contains the three Euler angles for the corresponding row in sigma
.
This is fully analogous to eeFrame
(see above). Check out the page on frames for more details on frames.
For each pair of nuclear spins, a bilinear coupling matrix (composed of isotropic, anisotropic, and antisymmetric terms) can be given. This term is specified in the field Sys.nn
, with the orientation in Sys.nnFrame
.
In practice, this term is essentially always too small to be of any relevance for EPR or ENDOR spectra. EasySpin provides it so its effects on spectra can be explored.
nn
Principal values of the nucleus-nucleus interaction matrices, or full interaction matrices, in MHz. For providing principal values, each row contains the three principal values of one interaction matrix. For two nuclear spins, nn
contains one row only.
Sys.Nucs = '1H,1H'; % two nuclear spins Sys.nn = [10 20 30]*1e-6; % principal values of coupling matrix between spins 1 and 2, MHz
For more than two nuclear spins, the pairs are lexicographically ordered according to the indices of the nuclear spins involved. If n is the number of nuclear spins, there are N = n(n-1)/2 rows. For example, for 4 spins there are 6 rows with the principal values for the interaction of spins 1-2, 1-3, 1-4, 2-3, 2-4, 3-4, in this order.
Sys.Nucs = '1H,1H,19F'; % three spins nn12 = [50 50 100]*1e-6; nn13 = [10 10 -30]*1e-6; nn14 = [10 10 -30]*1e-6; nn23 = [0 0 0]; nn24 = [0 0 0]; nn34 = [80 80 80]*1e-6; Sys.nn = [nn12; nn13; nn14; nn23; nn24; nn34]; % 6 coupling matrices, MHz
If the principal values are given, the orientation of the interaction matrices can be specified via Euler angles in the field nnFrame
(see below).
It is also possible to specify the full 3x3 interaction matrices instead of the 3 principal values and 3 Euler angles. For two nuclei, nn
is a single 3x3 array.
Sys.Nucs = '1H,1H'; % two nuclear spins Sys.nn = [50 0 0;0 50 0; 0 0 100]*1e-6; % one coupling matrix, MHz
For more nuclei, the 3x3 matrices are stacked on top of each other, to give a 3Nx3 array.
Sys.S = '1H,1H,1H'; % three spins nn12 = [50 0 0; 0 50 0; 0 0 100]*1e-6; nn13 = diag([10 10 -30])*1e-6; nn23 = zeros(3); Sys.nn = [nn12; nn13; nn23]; % three coupling matrices, MHz
nnFrame
Array containing the Euler angles describing the orientation of the nucleus-nucleus interaction matrices (specified in nn
) in the molecular frame. Each row contains the three Euler angles for the corresponding row in nn
.
This is fully analogous to eeFrame
(see above). Check out the page on frames for more details on frames.
L
and the associated isotropic orbital g factors in the field gL
. Spin-orbit coupling is specified via the field soc
. Orbital angular momenta are supported by the simulation functions pepper (solid-state EPR) and curry (magnetometry).
L
L
is an optional field. If given, it must have the same number of entries as S
and the entries have to be nonnegative integers. The kth orbital angular momentum is coupled to the kth spin angular momentum. Examples:
% one spin 1 associated to a L = 3 Sys.S = 1; Sys.L = 3; % two spin-1/2, each associated to L = 2 Sys.S = [1/2 1/2]; Sys.L = [2 2]; % one spin-1/2 without L and a spin 3/2 with L = 1 Sys.S = [1/2 3/2]; Sys.L = [0 1];
CF0, CF2, CF4, CF6, CF8, CF10, CF12
CF2
is for k = 2, and CF4
is k = 4. If any of these fields is not given, it is treated as zero. L
must be given, otherwise the CF are ignored.
Each field that is given should contain a row vector of 2k+1 parameters, in order of decreasing q, running from +k to -k. For example:
Sys.CF2 = [0 0 560 0 0]; % CF(2,q) with q = +2,+1,0,-1,-2 Sys.CF4 = [0 132 0 0 0 0 0 0 0]; % CF(4,q) with q = +4,+3,+2,+1,0,-1,-2,-3,-4The only nonzero elements in the above examples are therefore CF(2,0) and CF(4,+3).
In the common case that only the q=0 element is needed for a given k, it can be given alone in an abbreviated syntax valid for any k.
Sys.CF2 = [0 0 99 0 0]; % CF(2,0) only, full form Sys.CF2 = 99; % equivalent abbreviated form Sys.CF4 = [0 0 0 0 -8700 0 0 0 0]; % CF(4,0) only, full form Sys.CF4 = -8700; % equivalent abbreviated form
If more than one electron spin (and therefore more than one orbital angular moment) is present, specify one row of 2k+1 elements for each orbital angular moment. The first row is for the first orbital angular moment, etc.
Sys.S = [5/2 2]; % two spins Sys.L = [1 2]; % with two orbital angular momenta CF20a = 100; % for the first orbital angular moment CF20b = -98; % for the second orbital angular moment Sys.CF2 = [0 0 CF20a 0 0; 0 0 CF20b 0 0]; % two rows: one row per orbital angular moment Sys.CF2 = [CF20a; CF20b]; % abbreviated form for two orbital angular moment, two rows as well
Currently, it is not possible to include tilt angles for the principal frames of these crystal field interaction tensors. All of them are assumed to be collinear with the molecular frame. By changing the molecular frame, i.e. by tilting all other tensors (g, A, etc), this limitation can be partially circumvented. Still, all the crystal-field interactions are collinear. Alternatively, you can use wignerd
to compute a Wigner rotation matrix that can be used to tilt the tensors explicitly.
angles = rand(1,3)*pi; % Euler tilt angles, in radians CF2 = [3 4 5 0 2]; % CF(2,q) tensor components R = wignerd(2,angles); % rotation matrix for rank-2 tensor CF2 = R*CF2; % rotated tensor Sys.CF2 = CF2.';
gL
L
. gL
is an optional field, if omitted it is assumed equal to 1 for all orbital angular momenta. The number of elements in gL
must match the number of elements in L
.
Sys.gL = 3/2; % gL for a single orbital angular momentum Sys.gL = [0.97 0.93]; % gL for two orbital angular momenta
soc
% three electron spins, with linear soc parameter of 170, 250 cm^-1 and 0: Sys.soc = [170; 250; 0]*clight*1e-4; % as above, plus the first spin has a cubic soc parameter of 10 cm-^1: Sys.soc = [170 0, 10; 250, 0, 0; 0, 0, 0]*clight*1e-4; % two electron spin with S =1/2 and 1 and L = 2 and 1 Sys.S = [1/2 1]; Sys.L = [2 1]; Sys.soc = [200; 100]*clight*1e-4; % linear soc of 200 cm-1 between S = 1/2 and L = 2 % linear soc of 100 cm-1 parameter between S = 1 and L = 1
The Spin-Hamiltonian is in general a polynom of the magnetic field and the spin operator. This general expansion is implemented for electron spins (not for nuclei). Currently, general parameter are supported by the simulation functions pepper (solid-state EPR)and curry. The coefficients can be provided in the following way:
Ham
Sys.Ham134 = [0 0 36 0 0 0 12 0 0 0]; % pB = 1, pS = 3, p = 4, q = +4,+3,+2,+1,0,-1,-2,-3,-4
%convert the more common D and E: Sys.Ham022 = [sqrt(2)*E 0 sqrt(2/3)*D 0 0]; %convert an isotropic g value: Sys.Ham110 = -bmagn/planck*1e-9*sqrt(3)*g;
There is a number of fields by which line broadenings can be specified. lw
and lwEndor
are line widths (FWHM) which are used for convolution of the simulated spectrum. All others are so-called strains and describe Gaussian distributions in the associated spin Hamiltonian parameters.
For a full documentation of the line broadening fields in the spin system structure, see the page on line broadenings.
For the simulation of spin-polarised systems, the non-equilibrium populations need to be specified in the field Sys.initState
. The general syntax is
Sys.initState = {state, basis}
where state
is a list of populations or the full density matrix, and basis
is a keyword indicating the corresponding basis. The available basis keywords are
'uncoupled'
: uncoupled Zeeman basis (default)
'coupled'
: coupled basis for a system of two coupled spins
'eigen'
: eigenbasis of the full spin Hamiltonian
'zerofield'
: eigenbasis of the spin Hamiltonian at zero field
'xyz'
: (Tx,Ty,Tz) basis for triplet states
The ordering of the basis states for the 'uncoupled'
basis is in descending order of ms (refer to sop for details). For the 'coupled'
basis, the basis states are ordered in descending order of Stot (refer to cgmatrix for details).
For the 'eigen'
and 'zerofield'
bases, the states are assumed to be in order of increasing energy.
The 'xyz'
basis is for triplet states only and takes the populations of the TX
, TY
and TZ
states as input. The provided populations of the X, Y and Z sublevels are converted into energy-ordered populations based on the standard definition of the zero-field energy levels for a set of given ZFS parameters D
and E
and their signs.
En(1) = (1/3)*D - E; % Tx En(2) = (1/3)*D + E; % Ty En(3) = -(2/3)*D; % TzFor a triplet state, the
'xyz'
and 'zerofield'
bases are therefore equivalent, except for the ordering of the populations in the input vector.
The options for defining non-equilibrium states through Sys.initState
are the following:
Sys.initState = {[pTx pTy pTz],'xyz'};
Sys.initState = {[p1 p2 p3],'zerofield'};E.g., if
Sys.initState = {[0.85 0.95 1.2],'zerofield'}
for a triplet system (S=1), the population of the lowest-energy zero-field state has a population of 0.85, the middle one has 0.95, and the highest-energy zero-field state has a population of 1.2. If there are coupled nuclei, the populations of all nuclear sublevels within each electron spin manifold are assumed to be equal.
Sys.initState = {[p1 p2 p3],'eigen'};E.g.
Sys.initState = {[0 1 0],'eigen'}
for a triplet system (S=1) corresponds to a triplet state populated only in the high-field T0 level, for example from recombination from a radical pair.
Sys.initState = {[pTp pT0 pTm pS],'coupled'}; % for two coupled S = 1/2E.g.
Sys.initState = {[1/3 1/3 1/3 0],'coupled'}
for two coupled spins S = 1/2 corresponds to a spin-correlated radical pair originating from a thermalized triplet precursor (equal population of the triplet levels).
Sys.initState = {sigma,'uncoupled'}; % or Sys.initState = sigma;If no basis is given, the uncoupled basis, i.e. ordering of operators in terms of product Zeeman basis states as explained in sop, is assumed. For example, for a spin-correlated radical pair with singlet-precursor the initial density matrix can be defined based on the state vector for the singlet state as
S = 1/sqrt(2)*[0; 1; -1; 0]; % alternatively, S = cgmatrix(1/2,1/2,0).'; sigma = S*S'; Sys.initState = sigma;The same result is obtained by defining the density matrix in the coupled basis as follows
S = [0; 0; 0; 1]; Sigma = S*S'; Sys.initState = {Sigma,'coupled'};
Sys.initState = 'singlet'; % only possible if Sys.S = [1/2 1/2]
Sys.initState = 'T0';
For a spin system with N
electron states (e.g. 4 for a biradical, 3 for a triplet state), the population vector must contain N
elements and the density matrix must contain N*N
elements.
In the presence of coupled nuclei, individual nuclear populations can also be specified in Sys.initState
(with Nelectron*Nnuclear
elements), if not, it is assumed that the populations of the nuclear sublevels corresponding to the same electron sublevel are equal.
In the presence of degenerate energy levels at zero field, the states for the 'zerofield'
basis are not uniquely defined, preventing unambiguous assignment of the provided energy-ordered populations to basis states within EasySpin. In order to simulate spectra for these cases, the full non-equilibrium density matrix should be provided in the uncoupled basis (see triplet_axialZFS_spinpolarized.m for an example illustrating this for a triplet state with axial ZFS).
If Sys.initState
is given, the temperature specified in Exp.Temperature
is ignored.
For examples of spin-polarized systems (ISC triplets, recombination triplets, spin-correlated radical pairs), see the user guide on spin-polarized systems and the corresponding examples.
To simulate the EPR spectra of photo-generated paramagnetic species, it might be necessary to take into account photoselection, i.e. the dependence of excitation yield on the polarization direction of the incident light beam relative to the electric transition dipole moment (tdm) of the excited optical transition. For this, the spin system has a field Sys.tdm
that allows you to specify the orientation of the tdm in the molecular frame. There are three ways to do this:
Sys.tdm = 'y'
specifies that the tdm is along the molecular y axis.Sys.tdm = [0;1;0]
specifies that the tdm is along the molecular y axis.Sys.tdm = [pi/2 pi/2]
specifies that the tdm is along the molecular y axis.