# Baseline-determination¶

Due to the high electron cross-section, background signals (or baseline) are much more of a problem for electron diffraction than equivalent X-ray experiments.

In the case of polycrystalline samples (i.e. 1D diffraction signals), the definite way of removing background signals is to use an iterative approach based on the dual-tree complex wavelet transform. Consider the following example polycrystalline vanadium dioxide pattern:

It would be very difficult to interpolate a background from elastic scattering-free regions of the diffraction pattern, and this is a moderately We can add a background typical of silicon nitride substrates, as well as inelastic scattering effects:

```>>> from skued import gaussian
>>> import numpy as np
>>>
>>>
>>> background = 75 * np.exp(-7 * s) + 55 * np.exp(-2 * s)
>>> substrate1 = 0.8 * gaussian(s, center = s.mean(), fwhm = s.mean()/4)
>>> substrate2 = 0.9 * gaussian(s, center = s.mean()/2.5, fwhm = s.mean()/4)
```

Scikit-ued offers two ways of removing the background.

## Iterative Baseline Determination using the Discrete Wavelet Transform¶

The procedure and rational for the `baseline_dwt()` routine is described in detail in:

Galloway et al. ‘An Iterative Algorithm for Background Removal in Spectroscopy by Wavelet Transforms’, Applied Spectroscopy pp. 1370 - 1376, September 2009.

Here is a usage example for the data presented above:

```>>> import numpy as np
>>> from skued import gaussian
>>> from skued import baseline_dwt
>>>
>>>
>>> # Double exponential inelastic background and substrate effects
>>> diffuse = 75 * np.exp(-7 * s) + 55 * np.exp(-2 * s)
>>> substrate1 = 0.8 * gaussian(s, center = s.mean(), fwhm = s.mean()/4)
>>> substrate2 = 0.9 * gaussian(s, center = s.mean()/2.5, fwhm = s.mean()/4)
>>>
>>> baseline = baseline_dwt(s, level = 6, max_iter = 150, wavelet = 'sym6')
```

## Iterative Baseline Determination using the Dual-Tree Complex Wavelet Transform¶

In the case of 1D data (or along a 1D axis), there is a more performant alternative to `baseline_dwt()`. The dual-tree complex wavelet transform improves on the discrete wavelet transform in many ways. Therefore, the method presented in this section should be preferred.

L. P. René de Cotret and B. J. Siwick, A general method for baseline-removal in ultrafast electron powder diffraction data using the dual-tree complex wavelet transform, Struct. Dyn. 4 (2017)

Here is a usage example for the data presented above:

```>>> import numpy as np
>>> from skued import gaussian
>>> from skued import baseline_dt
>>>
The `baseline_dt()` routine will usually be more accurate than its `baseline_dwt()` counterpart.