`exchange`

program http://easyspin.org/forum/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.