## Large HFC splitting in garlic() function

A place to report and discuss potential bugs

### Large HFC splitting in garlic() function

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: 83
Joined: Mon Jan 12, 2015 4:01 am

### Re: Large HFC splitting in garlic() function

Please post a minimal script that shows this.
Stefan Stoll
EasySpin Creator

Posts: 516
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

### Re: Large HFC splitting in garlic() function

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: 83
Joined: Mon Jan 12, 2015 4:01 am

### Re: Large HFC splitting in garlic() function

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;%beginninggList=Sys.g; %starting valuenNucs=numel(Sys.A); %number of set of the nucleiNucs=nucstring2list(Sys.Nucs); %list of nucleiconvConst=Exp.mwFreq*1e12*planck/bmagn; %field to g conversion factor%beginning iterative calculationfor 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 conversionend%display resultsdisp(B);`

UPD.
Unfortunately the idea looks unworking. I don't completely understand why.
Code: Select all
`clearSys.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))./BSys1.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: 83
Joined: Mon Jan 12, 2015 4:01 am

### Re: Large HFC splitting in garlic() function

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: 96
Joined: Tue Jul 22, 2014 11:01 am
Location: Northwestern University

### Re: Large HFC splitting in garlic() function

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: 516
Joined: Mon Jul 21, 2014 10:11 pm
Location: University of Washington

### Re: Large HFC splitting in garlic() function

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: 83
Joined: Mon Jan 12, 2015 4:01 am