Abins: Fast approximate broadening with “interpolate”¶
The “interpolate” scheme in abins.instruments.broadening
estimates broadened spectra using a limited number of kernel
evaluations or convolution steps in order to reduce the computation
time. The method appears to be novel, so some explanation is needed.
Consider first that we can approximate a Gaussian function by a linear combination of two other Gaussians; one narrower and one wider. If the mixing parameters are linearly based on the relationship between the widths the results are not impressive:

Enable :plots: using DOCS_PLOTDIRECTIVE in CMake¶
But if we optimise the mixing parameter at each width then the magnitudes improve significantly, even if the shapes remain distinctly non-Gaussian:

Enable :plots: using DOCS_PLOTDIRECTIVE in CMake¶
This error is closely related to the width difference between the endpoints. Here the range is reduced from a factor 4 to a factor 2, and the resulting functions are visually quite convincing

Enable :plots: using DOCS_PLOTDIRECTIVE in CMake¶
while a gap of

Enable :plots: using DOCS_PLOTDIRECTIVE in CMake¶
For TOSCA
We can build on this by performing convolution of the full spectrum with each of the sampled kernels, and then interpolate between the spectra using the predetermined mixing weights. The convolution is performed efficiently using FFTs, and relatively little memory is required to hold this limited number of spectra and interpolate between them.

Enable :plots: using DOCS_PLOTDIRECTIVE in CMake¶
This procedure is not strictly equivalent to a summation over frequency-dependent functions, even if there is no interpolation error.
At each energy coordinate

We can see the artefacts of this approach more clearly if we use fewer Gaussians (spaced by factor 2) and zoom in on the spectrum. The interpolation method has a tendency to show small peaks at turning points; this may be related to the imperfection in the shape of the smooth bell.

Category: Concepts