Isotropic (powder / liquid) S(|Q|,E). E is sampled uniformly in [Emin, min(Ei,Emax)]
and |Q| uniformly in the kinematically allowed part of [Qmin,Qmax]. S(Q,E) is an
expression in Q [AA^-1] and E [meV], or a grid file in the Isotropic_Sqw format
(first numeric row: q values; second: energy values; then nq rows of nw values),
bilinearly interpolated. For grid data McStas' Isotropic_Sqw already exists; the
new parts are the analytic S(Q,E) and the energy focusing: when dEf>0, E is
restricted so that Ef lies in [Ef-dEf, Ef+dEf] (MCViNE SQE_EnergyFocusing_Kernel).
Functions are given as strings evaluated at run time (MCViNE uses fparser):
+ - * / ^ (or **), % , comparisons, && ||, if(c,a,b), sin cos tan asin acos
atan sinh cosh tanh exp log log10 log2 sqrt abs floor ceil int sign cbrt,
pow atan2 min max hypot fmod, constants pi and e.
Union process. Part of the Union components: define this process, collect it
into a material with Union_make_material (absorption is set there with
my_absorption, the absorption inverse penetration depth at 2200 m/s), assign
the material to Union_box/Union_cylinder/Union_sphere/Union_mesh geometries,
and add a Union_master after them. Geometry, attenuation and multiple
scattering are handled by Union_master; this component provides the MCViNE
kernel: the scattering coefficient and the final-state sampling (weight).
Isotropic process (powder/liquid-like); rotation is irrelevant.
The kernel code is shared with the standalone component MCViNE_SQE (mcvine-lib.c).
Uses share/mcvine-lib.h/.c and share/mcvine-union-lib.h/.c; the process type
MCViNE is declared in share/union-lib.h and registered with Union_master in
share/mcvine-union-lib.h.
Example: MCViNE_SQE_process(SQE="exp(-(E-10)^2/2)*Q^2*exp(-Q^2/4)", Qmin=0, Qmax=10, Emin=-5, Emax=30, sigma_scat=5, Vc=50)
Input parameters
Parameters in boldface are required;
the others are optional.