StollLab / EasySpin

MATLAB toolbox for Electron Paramagnetic Resonance (EPR) spectroscopy
http://easyspin.org
MIT License
48 stars 26 forks source link

Symmetry handling in the case of non-uniform orientational distributions #252

Closed stestoll closed 6 months ago

stestoll commented 2 years ago

When determining grid symmetry, it is crucial to take the symmetry of the orientational distribution into account. Or just set grid symmetry to 'Ci' if a non-uniform orientational distribution is specified via Exp.Ordering.

clf, clear, clc

Sys.g = [2 2 2.3];
Sys.lwpp = 1;

Exp.mwFreq = 9.5;
Exp.Harmonic = 0;
Exp.Ordering = 4;

Opt.GridSymmetry = 'Ci';  % required for correct simulation

beta = linspace(0,pi/2,10);
for k = 1:numel(beta)
  Exp.SampleRotation = {beta(k),'y'};
  [B,spc(:,k)] = pepper(Sys,Exp,Opt);
end

plot(B,spc)
axis tight
stestoll commented 7 months ago

The grid symmetry needs to be dropped to 'C1', not 'Ci', since the orientational distribution function can have any symmetry, including no symmetry.

Alternatively, the Hamiltonian symmetry can be kept. Then, the orientational distribution function must be evaluated for all symmetry-related orientations, and the total weight calculated as the sum of these values. We use this approach in private/foldoridist. As implemented, this approach gives wrong results whenever the sample is rotated using Exp.SampleRotation, because Exp.SampleFrame is ignored. Demonstration:

clf, clear, clc

Sys.g = [2 2 2.3];
%Sys.gFrame = rand(1,3)*pi;
Sys.lwpp = 2;

Exp.mwFreq = 9.5;
Exp.Range = [290 350];
Exp.Harmonic = 0;
Exp.Ordering = 2;

GridSym = {'Dinfh','D2h','Ci','C1'};

Opt.GridSize = 10;

beta = 30*pi/180;
Exp.SampleRotation = {beta,'y'};
%Exp.SampleFrame = [0 -beta 0];

for s = 1:4
  Opt.GridSymmetry = GridSym{s};
  [B,spc(:,s)] = pepper(Sys,Exp,Opt);
end
plot(B,spc);
legend(GridSym{:})
legend boxoff

Basically, if the sample is rotated, the ordering function must be rotated as well.

stestoll commented 6 months ago

Fixed with f0ec5d39b92cb6374a551722a688f861d58bed0a