Additional line broadening for exchange() function

General forum for EasySpin: questions, how to's, etc.
Post Reply
katarkon
Local Expert
Posts: 186
Joined: Mon Jan 12, 2015 4:01 am

Additional line broadening for exchange() function

Post by katarkon »

I have found that exchange() function is quite useless when exchange process is accompanied by "thumbling effect" (or correlation time of the fastmotion regime is comparable with the sites lifetimes), especially when esfit() function is used. I proposed that including of additional broadening should solve the problem.
The code of exchange() function contains folow fragments responsible for linewidths:

Code: Select all

...
if ~isempty(Sys.lw) && isempty(Sys.lwpp), Sys.lwpp = Sys.lw/sqrt(3); end
...
lwpp = mt2mhz(Sys.lwpp,mean(Sys.g)); % field to frequency conversion
Gamma = lwpp*pi*sqrt(3); % peak-to-peak lw -> Gamma (= 1/T2) conversion
...
M0 = -Gamma*eye(nSites) + X;
...
for iLine = 1:nLines
      [U,Lambda] = eig(M0 - diag(1i*nu(iLine,:)));
      Lvalues(:,iLine) = diag(Lambda);
      Svalues(:,iLine) = (Det*U).'.*(U\Pop);
end
So, the main diagonal of M0 matrix contains linewidths in MHz multiplied by -pi. Also I found that Sys.lw may be a vector with separate linewidths for each site, but code for M0 calculation should be changed:

Code: Select all

if numel(Gamma)==1
        M0 = -Gamma*eye(nSites) + X;
else
        M0 = diag(-Gamma) + X;
end
So, additional broadening should be incorporated at [U,Lambda] calculation step:

Code: Select all

[U,Lambda] = eig(M0 - diag(lb(iLine)) - diag(1i*nu(iLine,:)));
where lb(iLine) should be a vector with line broadening for each site (in the same units as Gamma variable, of course).
It is a problem to define the reasonable lb values. I suggest that fhe function fastmotion() may be used (for each site, of course):

Code: Select all

lb=fastmotion(Sys,mean(Exp.Range),tcorr);
lb=lb-min(lb);
lb=mt2mhz(lb,mean(Sys.g))*pi;
But it there is a problem occurs: will the output of fastmotion() function the same as line order in exchange() function or not? And will the idea be working in generally?
katarkon
Local Expert
Posts: 186
Joined: Mon Jan 12, 2015 4:01 am

Re: Additional line broadening for exchange() function

Post by katarkon »

I have found, that fastmotion() function really gives linewidths in required order. But there are several problem with it.
Firstly, it does not treat equivalent nuclei. Because garlic() function throws an error with equivalent nuclei in fastmotion regime, the problem seems to be unsolvable. Is any way to overcome this restriction except treating of each nucleus separately?
Secondary, the function is relatively slow even for small number of nuclei. I suggest the following solution. Firstly, the "linebroadening matrix" is calculated for each site:

Code: Select all

lbm(iSite)=fastmotion(Sys(iSite),B0,tcorr);
lbm(iSite)=lbm(iSite)-min(lbm(iSite));
lbm(iSite)=lbm(iSite)/max(lbm(iSite));
Obtained lbm matrix calculates once and uses as constant Sys.lbm parameter.
Secondly, the parameter Sys.lb defines maximal line broadening. The required lb matrix is calculating inside the function exchange():

Code: Select all

lb=Sys.lbm*Sys.lb;
lb=mt2mhz(lb,mean(Sys.g))*pi;
Varying of Sys.lw and Sys.lb allows to simulate "thumbling effect" broadening without callning of fastmotion() function every time (but without determination of tcorr). Are any restrictions of some suggestions?
Post Reply