exchange
program viewtopic.php?f=8&t=309. The major changes are follows:- separate linewidth for each site
- automatic calculation of each site population (manual definition is possible too)
- multicomponent simulation (spectra without exchange are possible too)
- natural isotope mixtures are supported
- gaussian line broadening (now it's single for whole spectrum, use Sys.lwg parameter)
- tumbling effect compensation (via Sys.lb parameter and Sys.lbm matrix)
- frequency drift compensation (via Sys.mwFreq parameter)
- alternative definition for g, A and k to limit the number of parameters for fitting (or alternatively to define the restrictions)
- temperature support (now via simple 1/T scalling factor, more precise calculation may be issued if necessary)
- alternative definition of k via activation entрalpy, entropy and temperature
- more precise line position calculations via Breit-Rabi or second-order perturbation methods (equivalent nuclei not supported yet)
If you use this code, please cite original Stefan Stoll's work http://dx.doi.org/10.1021/jp3104358 and my work http://dx.doi.org/10.1016/j.molstruc.2017.07.001 where modified code was firstly used.
Alternative definition for g, A and k is follow.
Sys.g
, Sys.A
and Sys.k
are lists of values. Additional parameters Sys.gm
, Sys.Am
and Sys.km
are required. They should be a integer numbers meaning the index of corresponding value. I.e. Sys.Am(i,j)=2
means second value from Sys.A
. So, one value may be used several times. For Sys.km
a special value 0
(zero) is also defined. It means the absence of corresponding exchange. Activation entрalpy
Sys.dH
and entropy Sys.dS
may be used instead Sys.k
, the Exp.Temperature
is additionally required.Tumbling effect is defined by two values
Sys.lb
and Sys.lbm
. Sys.lb
means max line broadening. Sys.lbm
contains values between 0
and 1
meaning fractional broadening for each line of each site. I.e. Sys.lbm(i,j)=0.5
means that j-th line of i-th site have a half of max broadening. At least one of values shold be 1 and 0. So, Sys.lbm
should be defined once before fitting and only Sys.lb
should be varied.For nuclei with large hyperfine splitting two alternative methods are proposed. Use
Opt.CalcMethod='breitrabi'
for Breit-Rabi treatment or Opt.CalcMethod='perturb2'
for second-order perturbation treatment. Equivalent nuclei are not supported. Cross-nuclear terms are neglected for both methods, so only system with one large hyperfine splitting will be treated correctly. The matrix diagonalization method is still under development. You may use it by defining Opt.CalcMethod='matrix'
, but it may stuck or give unexpected reults. Use it for own risk.Also, simple wrapper
exchange2D
for temperature-sliced spectra is issued. It uses parameters Sys.dH and Sys.dS for activation enthalpy and entropy and set of temperatures in Exp.Temperature parameter to calculate the rate constants and returns a sequence of the spectra as concatenated "megaspectrum". The wrapper is attended for using together with esfit
function. The parameters Sys.lw, Sys.lb and Sys.mwFreq generally should be arrays of values corresponding to each temperature.