User Specified Populations - experimental.temperature

General forum for EasySpin: questions, how to's, etc.
Matt Krzyaniak
EasySpin Guru
Posts: 153
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

User Specified Populations - experimental.temperature

Post by Matt Krzyaniak »

I think I may have stumbled upon a bug, either that or I'm misreading the documentation and thinking about the system incorrectly.

Basically when specifying non-equilibrium populations if hyperfine included pepper produces the incorrect polarization pattern. It appears that pepper is not providing an equal population to the nuclear sub-levels within a electron spin manifold, but rather is filling in the nuclear sub-levels with the populations and that they are equal between the electron spin manifolds.

A sample piece of code is provided. In the absence of hyperfine, both thermal equilibrium and user specified thermal equilibrium show the same absorptive feature. When the hyperfine is turned on, the user specified thermal equilibrium has an emissive/absorptive spectrum.

Code: Select all

clear Sys Exp

Sys.g = 2.01;
Sys.lwpp=0.2;

Exp.Harmonic = 0;
Exp.mwFreq = 9.69;
Exp.Range = [337.5 352.5];
Exp.nPoints = 1024;

% Thermal equilibrium
Exp.Temperature = 85;
[B,therm]=pepper(Sys,Exp);

% user specified thermal equilibrium
Exp.Temperature = [0.9945 1];
[~,non]=pepper(Sys,Exp);

subplot(2,1,1)
plot(B,therm,B,non)
xlim([min(B1)/10 max(B1)/10]);

% Add the Hyperfine
Sys.Nucs = '1H';
Sys.A = 100;

% Thermal equilibrium
Exp.Temperature = 85;
[B,therm]=pepper(Sys,Exp);

% user specified thermal equilibrium
Exp.Temperature = [0.9945 1];
[~,non]=pepper(Sys,Exp);

subplot(2,1,2)
plot(B,therm,B,non)
xlim([min(B1)/10 max(B1)/10]);

legend('Thermal','User Specified')
xlabel('field (mT)')
Stefan Stoll
EasySpin Creator
Posts: 1050
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: User Specified Populations - experimental.temperature

Post by Stefan Stoll »

User-specificed populations in Exp.Temperature have primarily been designed for photoexcited spin-polarized S=1 states:
The populations at field are calculated from the populations of the zero-field states, which are given in Exp.Temperature.

Here's how the population calculation works currently (as of ES 4.5.5):
  1. ES calculates zero-field energies (ZFEnergies) and eigenstates (ZFStates) for the spin system.
  2. Based on Exp.Temperature, ES assigns populations to these states (ZFPopulations), one element from Exp.Temperature per electron manifold. Here, ES assumes that the electron manifolds don't overlap.
  3. Once the states U and V at resonance field for a given transition have been determined, the populations for these two states are computed from the zero-field state populations using simple projections:

    Code: Select all

    PopulationU = (abs(ZFStates'*U).^2).'*ZFPopulations; % lower level
    PopulationV = (abs(ZFStates'*V).^2).'*ZFPopulations; % upper level
    
  4. The polarization of the transition is computed: Polarization = PopulationU - PopulationV;
  5. Polarization is included as a factor in the overall line intensity.
For your S=I=1/2 case, the values are as follows:

Code: Select all

K>> ZFEnergies.'
ans =
  -75.0000   25.0000   25.0000   25.0000
K>> ZFStates
ZFStates =
         0         0    1.0000         0
    0.7071    0.7071         0         0
   -0.7071    0.7071         0         0
         0         0         0    1.0000
K>> ZFPopulations.'
ans =
    0.4986    0.4986    0.5014    0.5014
There's a singlet (-75 MHz) and a triplet manifold (+25 MHz) at zero field, as expected. The triplet substates are populated differently.

What exactly do you want to achieve?
Matt Krzyaniak
EasySpin Guru
Posts: 153
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

Re: User Specified Populations - experimental.temperature

Post by Matt Krzyaniak »

So this is likely working as intended then...

Well ultimately I was trying to simulate a nitroxide that is coupled to a photoexcited spin polarized triplet. I was trying to get a handle on how to specify the populations for a simulation and in my playing around I stumbled on this and it didn't quite make sense to me.
Stefan Stoll
EasySpin Creator
Posts: 1050
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: User Specified Populations - experimental.temperature

Post by Stefan Stoll »

If the coupling between the triplet and the nitroxide is small, then it should still be possible to use Exp.Temperature. You'll need to give populations for all 6 electron manifolds. Something along this should work:

Code: Select all

clear
Sys.S = [1 1/2];
Sys.Nucs = '14N';
Sys.A = [0 0 0, 20 20 80];
Sys.D = [1000 0];
Sys.ee = 30;
Sys.lwpp = 1;
Exp.mwFreq = 9.5;
Exp.Range = [200 400];
Exp.Temperature = [0 0 1 1 0 0];
pepper(Sys,Exp);
Matt Krzyaniak
EasySpin Guru
Posts: 153
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

Re: User Specified Populations - experimental.temperature

Post by Matt Krzyaniak »

Stefan Stoll wrote:If the coupling between the triplet and the nitroxide is small, then it should still be possible to use Exp.Temperature. You'll need to give populations for all 6 electron manifolds. Something along this should work:

Code: Select all

clear
Sys.S = [1 1/2];
Sys.Nucs = '14N';
Sys.A = [0 0 0, 20 20 80];
Sys.D = [1000 0];
Sys.ee = 30;
Sys.lwpp = 1;
Exp.mwFreq = 9.5;
Exp.Range = [200 400];
Exp.Temperature = [0 0 1 1 0 0];
pepper(Sys,Exp);
So that is about where I had started. I made the observation from the first post while I was playing around with the electron electron coupling parameter, when I set it to zero(basically turning it off) I was having a hard time understanding the emission/absorption pattern. To get a handle on how Exp.Temperature was working I stepped back and started playing around with just the nitroxide spectrum.

In hindsight I should have recognized what was happening at zerofield with the nitroxide spectrum, it's so obvious now. Though in my defense in the pepper reference it suggests that the nuclear sub-levels are equal in a given spin manifold. The populations of all nuclear sublevels within an electron spin manifold are assumed to be equal. Though I guess that does imply that there is a significant zero-field interaction.
Matt Krzyaniak
EasySpin Guru
Posts: 153
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

Re: User Specified Populations - experimental.temperature

Post by Matt Krzyaniak »

Alright I'm going to come back to this thread as I've run into another peculiarity with regard to specifying populations and it ties into the above discussion. This time around I'm sure there is something off with how ES is handling things and likely has to do with your comment above in point 2, Here, ES assumes that the electron manifolds don't overlap.

I was trying to fit a triplet(S=1) generated from a radical pair, so it is spin polarized(100% of the population is in the ms = 0 sublevel). I've attached the file I was fitting for reference. I did manage to fit it, somewhat, however the polarization pattern doesn't make sense.

Code: Select all

%%
clear

Sys.S = 1;
Sys.lwpp = .5;

D = 1650;
E = 0.035*D;
Sys.D = [D E];

Exp.Harmonic = 0;
Exp.mwFreq = 9.78;
Exp.Range = [223  473];
Exp.nPoints = 401;
Exp.Temperature = [1 0 0];

pepper(Sys,Exp);
Using zfield and then diagonalizing we can identify the ms = 0 level, the lowest one, and the ms = +-1 levels.

Code: Select all

>> eigs(zfield(Sys)/1000)
ans =
   -1.1000
    0.6078
    0.4922
So If I'm understanding the population calculation properly then its correct as I have it written in the script above. And we should observe two transitions(1->2, 1->3) one emissive and one absorptive with considerable overlap. The simulation from ES has the polarization of the xy component of the transition inverted. As for what I'm expecting, I've attached a simulation from some code that was in use here(Northwestern) using the same parameters in the above script(the program is extremely limited in what it can do and I really wanted to see if I can adapt ES to solve some of the more complicated problems that are popping up, like the coupled nitroxide-triplet, rather than rewrite our code).
Attachments
pertriplet.zip
(16.46 KiB) Downloaded 293 times
Stefan Stoll
EasySpin Creator
Posts: 1050
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: User Specified Populations - experimental.temperature

Post by Stefan Stoll »

Here is a minimal script that shows what ES does, for a single orientation. Change n0 to change the direction of the magnetic field.

Transition 1-2 is emissive for n0=[0;0;1] and absorptive for n0=[1;0;0] and n0=[0;1;0].

Code: Select all

clear, clc

D = 1650; % MHz
E = 0.035*D; % MHz
B0 = 350; % mT
n0 = [0;0;1];

% Zero-field states, energies and populations
Sys.D = [D E]; % MHz
Sys.S = 1;
H0 = sham(Sys,[0 0 0]); % MHz
[States0,Energies0] = eig(H0);
Energies0 = diag(Energies0/1e3).'
States0
Populations0 = [1 0 0]

% Field states and energies
H = sham(Sys,B0*n0/norm(n0));
[States,Energies] = eig(H);
Energies = diag(Energies/1e3).'
States

% Populations of field states
popfun = @(idx)(abs(States0'*States(:,idx)).^2).'*Populations0(:);
Populations = arrayfun(popfun,[1 2 3])

% Polarization of transitions
fprintf('Polarization of transition 1-2: %+g\n',Populations(1) - Populations(2));
fprintf('Polarization of transition 1-3: %+g\n',Populations(1) - Populations(3));
fprintf('Polarization of transition 2-3: %+g\n',Populations(2) - Populations(3));
Matt Krzyaniak
EasySpin Guru
Posts: 153
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

Re: User Specified Populations - experimental.temperature

Post by Matt Krzyaniak »

I never thought to use sham to be honest this little discussion has been quite informative since prior to it I never really explored some of those Hamiltonian analysis tools you've got written into ES.

Anyway I think you just touched on the problem I'm having, ES is calculating the polarization patterns for a triplet generated via the spin-orbit intersystem crossing mechanism. In the particular case I presented above, that triplet is formed via the radical-pair intersystem crossing mechanism, the T_0(ms=0) sublevel is mixed with the singlet state and as a result all of the population from intersystem crossing ends up in the T_0 level while the other two sublevels are empty(regardless of orientation).

We encounter photogenerated spin-polarized triplets produced through both mechanism.


A semi relevant reference: Accurate and general solutions to three-dimensional anisotropies: Applications involving dipole-dipole, spin-orbit interactions and liquid crystals, Q. Mi, M. A. Ratner, and M. R. Wasielewski, J. Phys. Chem. C 114, 13853-13860 (2010).
Stefan Stoll
EasySpin Creator
Posts: 1050
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: User Specified Populations - experimental.temperature

Post by Stefan Stoll »

ES does not have much built-in functionality for spin-polarized radical pairs. Maybe worthwhile considering.

Have you tried to simulate a spectrum without polarization using Opt.Output = 'separate' (returns each transition separately) and then linearly combining the transitions with the emissive or absorptive prefactors for your particular case?
Stefan Stoll
EasySpin Creator
Posts: 1050
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: User Specified Populations - experimental.temperature

Post by Stefan Stoll »

Something along these lines:

Code: Select all

clear, clc

Sys.S = [1/2 1/2];
Sys.g = [2 2.03];
Sys.ee = [-1 -1 2]*10;
Sys.lwpp = 0.01;

Exp.mwFreq = 9.5;
Exp.Range = [330 345];
Exp.Harmonic = 0;

Opt.Output = 'separate';

[B,spc,trans] = pepper(Sys,Exp,Opt);
trans

spcpol = spc(1,:)-spc(2,:)-spc(3,:)+spc(4,:);
subplot(2,1,1)
plot(B,spc);
subplot(2,1,2)
plot(B,spcpol)
Post Reply