Large HFC splitting in garlic() function

A place to report and discuss potential bugs

Large HFC splitting in garlic() function

Postby katarkon » Mon Oct 09, 2017 1:02 am

I found that garlic threats equivalent nuclei and separate nuclei with equal constants in different manner if HFC constants are large. I.e. if two nuclei with spin 1/2 are defined as equivalent the simulated spectrum is quartet 1:1:1:1 as expected. But if they defined as two separate nuclei with equal constants the triplet 1:2:1 occurs unexpectively. For small constants both definitions give a triplet 1:2:1 as expected. Is this a bug or certain limitation of garlic function?
katarkon
Resident User
 
Posts: 75
Joined: Mon Jan 12, 2015 4:01 am

Re: Large HFC splitting in garlic() function

Postby Stefan Stoll » Mon Oct 09, 2017 5:30 am

Please post a minimal script that shows this.
Stefan Stoll
EasySpin Creator
 
Posts: 492
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: Large HFC splitting in garlic() function

Postby katarkon » Tue Oct 10, 2017 12:30 am

Here is the script demonstrating the problem:
Code: Select all
Sys.g = 2;
Sys.Nucs = '31P,31P';
Sys.n = [1 1];
Sys.lw = 1;
Sys.A = [880 880];
Exp.mwFreq = 9.5;
Exp.Range=[300 380];
[x,y1]=pepper(Sys,Exp);
[x,y2]=garlic(Sys,Exp);
y2=y2+max(y2);
Sys.Nucs='1H';
Sys.n=2;
Sys.A=880;
[x,y3]=garlic(Sys,Exp);
y3=y3-max(y3);
y(1,:)=y1;
y(2,:)=y2;
y(3,:)=y3;
plot(x,y);

Another script with two different large constants:
Code: Select all
Sys.g = 2;
Sys.Nucs = '31P,31P';
Sys.n = [1 1];
Sys.lw = 1;
Sys.A = [880 830];
Exp.mwFreq = 9.5;
Exp.Range=[300 380];
[x,y1]=pepper(Sys,Exp);
[x,y2]=garlic(Sys,Exp);
y(1,:)=y1;
y(2,:)=y2;
plot(x,y);

UPD: Not surprisingly, the perturbation methods give equal (wrong) results as for garlic as for pepper (triplet 1:2:1 instead of doublet of doublets).
katarkon
Resident User
 
Posts: 75
Joined: Mon Jan 12, 2015 4:01 am

Re: Large HFC splitting in garlic() function

Postby katarkon » Wed Oct 11, 2017 3:19 am

It seems I found the reason of the problem. It looks that garlic handles every set of equivalent nuclei indepedently like only one group is present in spin system. So equivalent sets give equal splitting. In such manner the system with only one large constant will be processed correctly.
I suggest that correction of g-factor before each processing should solve the problem.
Briefly the idea is follow. The processing of first set of nuclei gives a set of resonance fields. Each resonance should be converted to g-factor and used for processing of second set of nuclei (each calculated g-factor substitutes initial one). Concatenation of the results should give a set of resonance fields for two group of the nuclei. Third and follows groups may be handled with the same manner.
I still vaguely imagine how to release this idean in the algorythm optimally but I can try if necessary.

Draft demonstrator of the idea.
Code: Select all
Sys.g = 2;
Sys.Nucs = '1H,1H';
Sys.n = [1 1];
Sys.lw = 1;
Sys.A = [880 880];
Exp.mwFreq = 9.5;
Exp.Range=[300 380];
Opt.PerturbOrder=2;

%beginning

gList=Sys.g; %starting value
nNucs=numel(Sys.A); %number of set of the nuclei
Nucs=nucstring2list(Sys.Nucs); %list of nuclei
convConst=Exp.mwFreq*1e12*planck/bmagn; %field to g conversion factor

%beginning iterative calculation

for i=1:nNucs
    B=[]; %starting resonance fields list
    Sys1.A=Sys.A(i);
    Sys1.Nucs=Nucs{i};
    %Sys1.n=Sys.n(i); %may be used in future
    for j=1:numel(gList)
        Sys1.g=gList(j);
        B1=resfields_perturb(Sys1,Exp,Opt); %breit-rabi solver should be used here
        B1=B1';
        B=[B B1];
    end
    gList=convConst*ones(1,numel(B))./B; %field to g conversion
end

%display results

disp(B);


UPD.
Unfortunately the idea looks unworking. I don't completely understand why.
Code: Select all
clear

Sys.g = 2;
Sys.Nucs = '31P';
Sys.n = [2];
Sys.lw = 1;
Sys.A = [880];
Exp.mwFreq = 9.5;
Exp.Range=[300 380];
[x,y]=garlic(Sys,Exp);

convConst=Exp.mwFreq*1e12*planck/bmagn;
Sys.n=1;
B=resfields(Sys,Exp)';
gList=convConst*ones(1,numel(B))./B

Sys1.g=gList(1);
Sys1.Nucs = '31P';
Sys1.n = [1];
Sys1.lw = 1;
Sys1.A = [880];

Vary1.A=80;
Vary1.g=0.1;

Sys2.g=gList(2);
Sys2.Nucs = '31P';
Sys2.n = [1];
Sys2.lw = 1;
Sys2.A = [880];

Vary2.g=0.1;
Vary2.A=80;

FitOpt.Method = 'simplex fcn';
FitOpt.Scaling = 'maxabs';
esfit('garlic',y,{Sys1,Sys2},{Vary1,Vary2},Exp,[],FitOpt);
katarkon
Resident User
 
Posts: 75
Joined: Mon Jan 12, 2015 4:01 am

Re: Large HFC splitting in garlic() function

Postby Matt Krzyaniak » Wed Oct 11, 2017 7:54 am

This is more of a quirk of how garlic calculates the spectrum when large HFI's are present.
This came up some time ago:
viewtopic.php?p=279#p279
Matt Krzyaniak
EasySpin Guru
 
Posts: 95
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

Re: Large HFC splitting in garlic() function

Postby Stefan Stoll » Wed Oct 11, 2017 8:08 am

As explained in the link that Matt sent, garlic is currently not able to model shifts due to interaction (via the electron) of different groups of equivalent nuclei.

If you don't need motional effects on the linewidths, you can use [c]pepper[c] with an isotropic spin system to simulate a solution spectrum. That will take into account these cross-nuclear effects correctly.
Stefan Stoll
EasySpin Creator
 
Posts: 492
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

Re: Large HFC splitting in garlic() function

Postby katarkon » Wed Oct 11, 2017 9:22 am

Thanks. It was wtitten elsewhere that garlic should issue a warning in situations when crossterms should be taken in account. Really not.
If anyone is interested, it is not extremely hard to introduce fastmotion regime broadening for pepper with some additional code. The broadening may be calculated by fastmotion and used for postconvolution of separate lines (pepper allows such output) with further accumulation. Such solution is quite time-cost of course.
katarkon
Resident User
 
Posts: 75
Joined: Mon Jan 12, 2015 4:01 am


Return to Bugs

Who is online

Users browsing this forum: No registered users and 1 guest

cron