Spin System (Sys)
In the class Sys all parameters that describe the fundamental spin system are set as attributes. This can be done in the script by typing:
Sys.Attribute = Value
If the class is initialized by:
import teacups.classes as cl
Sys = cl.SpinSystem()
the following attributes are preallocated (but can/should be newly assigned by the user):
spin_system: “doub”
precursor: “eigen”
population: [1, 0]
g: [1.95, 2, 2.1]
width_gauss: 3
decay: 1e-6
dynamics: None
T_relax_1: 1e-6
T_relax_2: 1e-6
In the following all possible attributes are named. For each attribute an explanation, cases where it is needed and an example are given. You can get a quick reference file with all attributes here.
Polarisation
Sys.spin_system
- Defines the type of the spin system, set it to
'doub'for simulating a doublet.'trip'for simulating a triplet.'rp'for simulating a radical pair.'tdp'for simulating a triplet-doublet pair.
Obligatory for all simulations
e.g.:
Sys.spin_system = 'doub'
Sys.precursor
- Defines the initial polarisation of the spin system. Dependent on the chosen system different initial polarisations are available. The precursor attribute defines the basis chosen for the initial polarisation. Set Sys.precursor to
'eigen'to give the polarisation vector in the eigenbasis of the system. → possible for all spin systems'zf'to give the poalrisation vector in the basis of the zero field states. → possible for triplet spin systems'singlet'to initialize a pure singlet polarisation. → possible for radical pair spin systems'triplet-zf'to give the polarisation vector as a trplet precursor in the zero field basis (xyz) → possible for radical pairs (with triplet precursor) and triplet doublet pairs (consisting of the triplet precursor and a radical precursor'triplet-pnm'to give the polarisation vector as a triplet precursor in the zero field basis (+1, 0, -1) → possible for radical pairs (with triplet precursor) and triplet doublet pairs (consisting of the triplet precursor and a radical precursor
Obligatory for all simulations
e.g.:
Sys.precursor = 'eigen'
Hint
Some bases are especially recommended for special spin systems:
for
'doub'use'eigen'for the population of the alpha and beta states in ascending energetic orderfor
'trip'use'zf'for ISC triplets (populate \(T_x\), \(T_y\) and \(T_z\) in ascending energetic order) and'eigen'for recombination triplets (populate \(T_-\), \(T_0\) and \(T_+\) in ascending energetic order)for
'rp'use'singlet'for a singlet precursor and'triplet-zf'(ISC) or'triplet-pnm'(recombination) for a triplet precursorfor
'tdp'use'triplet-zf'to populate the zerofield levels of an ISC-triplet perecursor and a doublet precursor,'triplet-pnm'to populate the zerofield levels of a recombination-triplet perecursor and a doublet precursor and'eigen'to populate the highfield levels of the coupled system
Sys.population
- Set the initial population vector in the basis that is defined in Sys.precursor.
List of floats
In general the populations are given in ascending order of the energy levels.
Obligatory for all simulations
e.g.:
# doublet, eigen: populate the alpha and beta spinstates Sys.population = [0.5, 0.505] # triplet, zf: populate the three zerofield states of a triplet Tx, Ty and Tz Sys.population = [0, 1, 0] # radical pair, triplet-zf: populate the three zerofield states of the triplet-precursor Sys.population = [1, 1, 0] # radical pair, singlet # no Sys.population is needed # triplet doublet pair, eigen: populate the six eigenstates of the triplet doublet pair Sys.population = [0.3, 0, 0, 0.3, 0.1, 0.1] # triplet doublet pair, triplet-zf: # populate the two doublet precursor levels alpha and beta # and the three triplet precursor zero field levels # [alpha, beta, Tx, Ty, Tz] Sys.population = [0.2, 0.2, 0.3, 0.2, 0.1]
g-tensors
Sys.g
- Principal elements of the g-tensor of a doublet spin
List of floats with three members (\(g_{xx}\), \(g_{yy}\), \(g_{zz}\))
Obligatory for doublet systems and triplet doublet pairs
e.g.:
Sys.g = [2.001, 2.005, 2.003]
Sys.g_tri
- Diagonal elements of the g-tensor of a triplet spin
List of floats with three members (\(g_{xx}\), \(g_{yy}\), \(g_{zz}\))
Obligatory for triplet systems and triplet doublet pairs and radical pairs with triplet precursor
e.g.:
Sys.g_tri = [2.01, 2.05, 1.99]
Sys.g1
- Diagonal elements of the g1-tensor of a radical pair
List of floats with three members (\(g_{xx}\), \(g_{yy}\), \(g_{zz}\))
Acceptor
Obligatory for radical pair simulation
e.g.:
Sys.g1 = [2.001, 2.005, 2.003]
Sys.g2
- Diagonal elements of the g2-tensor of a radical pair
List of floats with three members (\(g_{xx}\), \(g_{yy}\), \(g_{zz}\))
Donor
Obligatory for radical pair simulation
e.g.:
Sys.g2 = [2.001, 2.005, 2.003]
Sys.g_frame
- Three euler angles to rotate the doublet g-tensor from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for doublet and triplet doublet pair systems
e.g.:
Sys.g_frame = [0, np.pi/2, 0] # rad
Sys.g_tri_frame
- Three euler angles to rotate the triplet g-tensor from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for triplet systems, triplet doublet pairs and radical pairs with triplet precursor
e.g.:
Sys.g_tri_frame = [0, np.pi/2, 0] # rad
Sys.g1_frame
- Three euler angles to rotate the g1-tensor of a radical pair from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for radical pair simulation
e.g.:
Sys.g_1_frame = [0, np.pi/2, 0] # rad
Sys.g2_frame
- Three euler angles to rotate the g2-tensor of a radical pair from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for radical pair simulation
e.g.:
Sys.g_2_frame = [0, np.pi/2, 0] # rad
Spin-spin interactions
Sys.J_ex
- Exchange coupling constant J for two interacting spin species
Float in MHz
The exchange coupling Hamiltonian is defined as:
\[\hat{H}_{\mathrm{ex}} = J\mathbf{S}_1\mathbf{S}_2\]
Optional for radical pairs and triplet doublet pairs
e.g.:
Sys.J = -20000 # MHz
Sys.D & Sys.E
- Axial dipolar coupling (D) and rhombic dipolar coupling (E) for two interacting spin species
Float in MHz
The dipolar coupling Hamiltonian is defined as:
\[\begin{split}\hat{H}_{\mathrm{dip}} &= \mathbf{S}_1 \mathbf{D} \mathbf{S}_2 \\ &\text{ }\\ \mathbf{D} &= \begin{pmatrix} D+E & 0 & 0\\ 0 & D-E & 0 \\ 0 & 0 & -2 D \end{pmatrix}\end{split}\]
Optional for radical pairs and triplet doublet pairs
e.g.:
Sys.D = 3.5 # MHz Sys.E = 0 # MHz
Sys.D_frame
- Three euler angles to rotate the D-tensor for dipolar couplings from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for radical pair and tripled douplet pair simulations if a dipolar coupling is given
e.g.:
Sys.D_frame = [0, np.pi/2, 0] # rad
Sys.D_tri & Sys.E_tri
- Zero field splitting constants D and E of a triplet spin
Float in MHz
The ZFS Hamiltonian is defined as:
\[\hat{H}_{\mathrm{ZFS}} = \mathbf{S} \mathbf{D} \mathbf{S}\]The ZFS Hamiltonian is defined in the secular approximation as:
\[\hat{H}_{\mathrm{ZFS}} = \mathbf{D}_{zz} (\mathbf{S}_z^2 - 1/3\mathbf{S}^2)\]The ZFS-tensor is defined as:
\[\begin{split}\mathbf{D} &= \begin{pmatrix} -1/3 D+E & 0 & 0\\ 0 & -1/3 D-E & 0 \\ 0 & 0 & 2/3 D \end{pmatrix}\end{split}\]
Optional for triplets, radical pairs with triplet precursor and triplet doublet pairs
e.g.:
Sys.D_tri = 700 # MHz Sys.E_tri = -100 # MHz
Sys.D_tri_frame
- Three euler angles to rotate the ZFS tensor of a triplet spin from molecular to laboratory frame
List of floats with three members (\(\phi\), \(\vartheta\), \(\psi\))
Optional for triplets, radical pairs with triplet precursor and triplet doublet pairs if a ZFS is defined
e.g.:
Sys.D_tri_frame = [0, np.pi/2, 0] # rad
Relaxation
Sys.decay
- After a simulation in Hilbert space the resulting spectrum is convoluted with an exponential function to simulate an exponential decay of the signal. The exponential decay constant \(\tau\) (which has no physical meaning!) can be set in
Sys.decay. Float in s
The convolution is done by:
\[S_{\mathrm{decay}} = S * \exp\left[-\tau t\right]\]
- After a simulation in Hilbert space the resulting spectrum is convoluted with an exponential function to simulate an exponential decay of the signal. The exponential decay constant \(\tau\) (which has no physical meaning!) can be set in
Obligatory for all simulations in Hilbert space
e.g.:
Sys.decay = 1e-6 # s
Sys.T_relax_1
Important
Choose Sys.dynamics = None if you want to use Sys.T_relax_1 and Sys.T_relax_2.
- Longitudinal relaxation time for the simulation of a phenomenological relaxation.
Float in s
Describes the relaxation time that drives the populations to equilibrium
Optional for all simulations in Liouville space
e.g.:
Sys.dynamics = None Sys.T_relax_1 = 1e-6 # s Sys.T_relax_2 = 1e-7 # s
Sys.T_relax_2
- Transversal relaxation time for the simulation of a phenomenological relaxation.
Float in s
Describes the relaxation time that describes the decay of the coherences
Optional for all simulations in Liouville space
e.g.:
Sys.dynamics = None Sys.T_relax_1 = 1e-6 # s Sys.T_relax_2 = 1e-7 # s
Sys.dynamics
- Set your own relaxation matrix for transitions between the systems eigenstates
The rateconstants are set in 1/s
The matrix has the dimension of the spin system (if the spin system e.g. has 4 eigenfunctions, its dimension is 4x4)
The diagonal elements describe the decay of populations to states “outside” of the spin system (e.g. ground state)
The off-diagonal elements describe transitions between the eigenstates of the system
The order of the eigenstates is ascending
Optional for all simulations in Liouville space
e.g.:
# System with three eigenstates # Population of eigenstate 1 (lowest energy) decays with -1/5s^-1 # Transition between state 1 <-> 3 with a rate of 1/2s^-1 Sys.dynamics = np.array([[-1/5, 0, 1/2], [ 0, 0, 0], [ 1/2, 0, 0]])
Line width
Sys.width_gauss
- After the spectrum is generated, it is convoluted with a gaussian function. The width of this function can be set in Sys.width_gauss.
Float in mT
Obligatory for all simulations
e.g.:
Sys.width_gauss = 1 # mT
Sys.sigma_time
- After the spectrum is generated, it is convoluted with a gaussian function along the time axis. The width of this function can be set in Sys.sigma_time. If a perfect time resolution is desired, set
Sys.sigma_time = 0. If it is chosen to be greater than zero, a worse time resoltion is simulated, which can be important for simulating experimental data. Float in s
- After the spectrum is generated, it is convoluted with a gaussian function along the time axis. The width of this function can be set in Sys.sigma_time. If a perfect time resolution is desired, set
Obligatory for all simulations
e.g.:
Sys.width_gauss = 0.1e-6 # s
Consider to set
SimOpt.extend_t = True
Hyperfine interaction
Warning
Hyperfine interactions for radical pairs and triplet-doublet pairs are not yet fully implemented and do not yet work properly.
Sys.Ai
- Diagonal elements of a hyperfine tensor of nucleus i
i ranges from 1-5
List of floats with three members (Ax, Ay and Az)
Optional for doublet and triplet simulations
e.g.:
Sys.A1 = [100, 100, 200]
Sys.Ai_frame
- Three euler angles to rotate the hyperfine tensor of nucleus i from molecular to laboratory frame
i ranges from 1-5
List of floats with three members (phi, theta, psi)
Optional for doublets and triplets where a hyperfine tensor A is given
e.g.:
Sys.A_1_frame = [0, np.pi/2, 0] # rad
Sys.Ii
- Spin quantum number of nucleus (-group) i
integer or half
i ranges from 1-5
Optional for doublets and triplets where a hyperfine tensor A is given
e.g.:
Sys.I1 = 1/2
Sys.ni
- Number of nuclei in core group i
integer
i ranges from 1-5
Optional for doublets and triplets where a hyperfine tensor A is given
e.g.:
Sys.n1 = 3