StollLab / EasySpin

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

A more direct and clear naming of Euler angles? #314

Closed cerium1925 closed 1 year ago

cerium1925 commented 1 year ago
        The naming of the conversion functions between the various coordinate systems from ES 5 to ES 6 has always been confusing. For example, sampleFrame is now even more confusing and confusing. Because in fact the sample (crystal) is directly attached to the single crystal stage, the most intuitive actual angle is the conversion of the crystal to the laboratory coordinate system, and then the conversion of the molecular coordinate system to the crystal coordinate system (The molecule is in a crystal), and then there is the conversion from the crystal coordinate system to the molecular coordinate system.

I personally think the following naming is more straightforward:

C---L: cry2Lab (very convenient to the actual test)

M--L: mol2cry (actually, this cannot be directly measured experimentally. Generally, a paramagnetic center's maximum rotation axis is obtained through single crystal analysis, relative to the maximum rotation axis of the unit cell, which is of course the most direct By default, they overlap best)

Molecular symmetry: (molecular space group): crystal symmetry: cry_sym T----M; tensor ---- mol, such as gFrame, AFrame, B2Frme, B4Frame..... Similar naming can also be adopted: such as g2mol, A2mol, B22mol, D2mol....

The current Function naming rules are very confusing and confusing:

1) For example, B0//a, I need to write: Exp.MolFrame = [0 pi./2 0];

2) B0//b. needs to be written as: Exp.MolFrame = [0 pi./2 pi./2]; This is the most confusing! In the past, Exp.CrystalOrientation = [pi./2 pi./2 0] was used, which is consistent with the defined function angle of levelplot.

3) B0//c, needs to be written as: Exp.MolFrame = [0 0 0]

        For Euler angles conversion I personally tend to gradually convert from macro to micro  items in one direction.     Lab ---- Mol ------ Cry ------Tensor.     Because the actual test is performed from: Lab ---Mol,   it can only be operated in this way. The test is to rotate around the crystal plane or crystal axis of a certain single crystal (the single crystal is inside the molecule). It is actually a molecule that rotates around a specific axis, the X-axis or the Z-axis (current EPRs  can only do ).
stestoll commented 1 year ago

Thanks for these comments!

I agree that the nomenclature for Euler angles frame transformations (gFrame, MolFrame, SampleFrame etc.) is not the most explicit.

At this point, however, EasySpin is too widely used to completely change the naming scheme. The break would be too large, without any tangible benefits. The current scheme is internally consistent (esp. now with the newly introduced SampleFrame), and it is well documented.

Regarding how to orient a crystal in the spectrometer, it is better to use Exp.SampleFrame rather than Exp.MolFrame. Exp.Molframe is for orienting the spin center inside the crystal, and Exp.SampleFrame is for orienting the crystal within the spectrometer. The common angles phi and theta are two of the Euler angles for transformation from the molecular frame to the laboratory frame, and in the case that either Exp.SampleFrame or Exp.MolFrame is [0 0 0], they are simply the flipped and inverted angles from the other. I think there is no ambiguity here.

cerium1925 commented 1 year ago

In fact, the current Exp.SampleFrame is completely invalid for defining B//a, B//b, and B//c. The following is a simulation example:

clear, clc, clf;

% Experimental parameter---------- Exp.mwFreq = 9.5; Exp.Range = [160 600]; Exp.nPoints = 1e3;

% Exp.CrystalSymmetry = 141; % Exp.MolFrame = [0 pi./2 pi./2]; % Exp.SampleFrame = [0 0 0];

Opt.Verbosity = 2; Opt.GridSize = [60 3];

% Spin parameter............. Sys.S = 1/2; Sys.g = [1.5 2 3]; Sys.Nucs = 'Al'; Sys.A = [100 150 250]*2.802495; Sys.lw = [1 1];

% Display and data output............

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

plot(b,spc,'linewidth',1.5); xlabel('magnetic field (mT)'); axis tight;

1) Only valid in the Exp.MolFrame function: B//a ---------[0 pi./2 0]; B//b --------[0 pi /2 pi/2]; B//c ----------[0 0 0]; 2) Does the new Exp.SampleFrame function miss the function of the original Exp.CrystalOrientation?

3) If the Exp.MolFrame definition plays a role, this conflicts with the currently newly defined Euler angle. Currently cry2lab's Euler angle conversion is Exp.MolFrame, not Exp.MolFrame. Did the two functions get replaced incorrectly when revising and replacing the function names?

stestoll commented 1 year ago

Is this what you are looking for?

clear, clc, clf

Exp.mwFreq = 9.5;
Exp.Range = [160 600];
Exp.nPoints = 1e3;

Sys.S = 1/2;
Sys.g = [1.5 2 3];
Sys.Nucs = 'Al';
Sys.A = [100 150 250]*2.802495;
Sys.lw = [1 1];

% Powder
[B,spc] = pepper(Sys,Exp);

% Crystal
Exp.CrystalSymmetry = 'P1';  % one site per unit cell
Exp.MolFrame = [0 0 0];   % spin center aligned with crystal frame
Exp.SampleFrame = [0 -pi/2 0];  % field along crystal X axis
[B,spcX] = pepper(Sys,Exp);
Exp.SampleFrame = [0 -pi/2 -pi/2];   % field along crystal Y axis
[B,spcY] = pepper(Sys,Exp);
Exp.SampleFrame = [0 0 0];    % field along crystal Z axis
[B,spcZ] = pepper(Sys,Exp);

subplot(2,1,1)
plot(B,spc)

subplot(2,1,2)
plot(B,spcX,B,spcY,B,spcZ);
legend('B||x','B||y','B||z');
cerium1925 commented 1 year ago

Exp.CrystalSymmetry = 'P1'; % one site per unit cell Exp.MolFrame = [0 0 0]; % spin center aligned with crystal frame Exp.SampleFrame = [0 -pi/2 0]; % field along crystal X axis [B,spcX] = pepper(Sys,Exp); Exp.SampleFrame = [0 -pi/2 -pi/2]; % field along crystal Y axis [B,spcY] = pepper(Sys,Exp); Exp.SampleFrame = [0 0 0]; % field along crystal Z axis [B,spcZ] = pepper(Sys,Exp);

Yes, but the current Euler angles are weird compared to the previous version.