Home > Scripts > Treatment > Sqw > Sqw_scatt_xs.m

# iFit/Sqw_scatt_xs

## PURPOSE

Sqw_scatt_xs(s,Ei): compute the total scattering cross section for

## SYNOPSIS

function sigma = Sqw_scatt_xs(s, Ei, M)

## DESCRIPTION

 Sqw_scatt_xs(s,Ei): compute the total scattering cross section for
incoming neutron energy. The S(|q|,w) should be the non-classical
dynamic structure factor.

Such data sets are obtained from e.g. xray and neutron scattering
experiments on isotropic density materials (liquids, powders, amorphous
systems).

Data sets from analytical models and molecular dynamics simulations must
be symmetrised in energy, and the detailed balance must be applied to
take into account the material temperature on the inelastic part.

The S(q,w) is a dynamic structure factor aka scattering function.

The incident neutron energy is given in [meV], and may be computed:
Ei = 2.0721*Ki^2 = 81.8042/lambda^2 with Ki in [Angs-1] and lambda in [Angs]

The S(|q|,w) is first restricted to the achievable dynamic range:
Ef         = Ei - w                                is positive
cos(theta) = (Ki.^2 + Kf.^2 - q.^2) ./ (2*Ki.*Kf)  is within [-1:1]
and then integrated as XS = 1/2Ki^2 \int q S(q,w) dq dw

The computed value must then be multiplied by the tabulated bound cross-section
from e.g. Sears, Neut. News 3 (1992) 26.

When the weight M of the scattering unit is given, it is used to multiply the
cross section by the estimated Debye-Waller-like factor so that it equals
A/(A+1)]^2 at Ei=1eV to gradually go from the bound (thermal) to the free
cross section at 1 eV. The threshold of 1eV is used by e.g. OpenMC.
W  = 2e-3*(log(M)-log(M+1));
DW = exp(W*Ei) = exp(2e-3*(log(M)-log(M+1))*Ei)
Above the ethermal energy threshold, the DW factor is kept fixed.
For a poly-atomic scatterer, the effective mass is computed by weighting
with the bound cross sections for elements A, e.g.
r = sqrt(sum((A/(A+1))^2 * sigma_bound(A)) / sum(sigma_bound(A)));
M = r/(1-r)
For instance, for H2O (twice A=1 sigma=80.2 and A=18 sigma=4.2):
r = sqrt((2*(1/(1+1))^2*80.2+(18/(18+1))^2*4.2)/(2*80.2+4.2)) = 0.52
M = r/(1-r) = 1.06 i.e. scattering is mostly the hydrogen one.
WARNING: this factor is NOT the Debye-Waller factor exp(-<u2>Q2) !

A classical S(|q|,w) obeys S(|q|,w) = S(|q|,-w) and is usually given
on the positive energy side (w>0).
The non classical S(q,w), needed by this function, can be obtained from a
classical S(q,w) (which is symmetric in energy) with e.g.:
extend to +/- energy range
s = Sqw_symmetrize(s);
apply detailed balance (Bose factor). Omit T if you do not know it.
s = Sqw_Bosify(s, T);

The positive energy values in the S(q,w) map correspond to Stokes processes,
i.e. material gains energy, and neutrons loose energy when scattered.

input:
s: Sqw data set (non classical, with T Bose factor e.g from experiment)
e.g. 2D data set with w as 1st axis (rows, meV), q as 2nd axis (Angs-1).
Ei: incoming neutron energy [meV]
M: molar weight of the atom/molecule in [g/mol].
when given empty, it is searched 'weight' or 'mass' is the object.
Default is set to 0, i.e. the Debye-Waller factor is not taken into account.
output:
sigma: cross section per scattering unit (scalar or iData)
to be multiplied afterwards by the bound cross section [barn]

Example: sigma = Sqw_scatt_xs(s, 14.6)

(c) E.Farhi, ILL. License: EUPL.