Filtering

Image processing-related functions are commonly used in the analysis of ARPES data. The erlab.analysis.image submodule provides a collection of functions that are useful for processing and analyzing images.

The module includes xarray wrappers for several functions in scipy.ndimage and scipy.signal, along with several processing methods that are commonly used to visualize ARPES data.s

Image smoothing filters

import erlab.analysis as era

First, let us generate some example data: a simple tight binding simulation of graphene.

from erlab.io.exampledata import generate_data_angles

cut = generate_data_angles(
    shape=(500, 1, 500),
    angrange={"alpha": (-15, 15), "beta": (-5, 5)},
    seed=1,
    bandshift=-0.2,
).T
cut.qplot()
<matplotlib.image.AxesImage at 0x703cd951de80>
../_images/200e82db8a3bd1d6755d94080ba847ef53f709ccaa5cf34c01c533baa7c7d565.png

Here, we apply a Gaussian filter in coordinate units using erlab.analysis.image.gaussian_filter() to simulate an instrumental broadening of 10 meV and 0.2 degrees:

cut_smooth = era.image.gaussian_filter(cut, sigma=dict(eV=0.01, alpha=0.2))
cut_smooth.qplot()
<matplotlib.image.AxesImage at 0x703ccab80910>
../_images/cfaa765bd74a482854dbff8fc860f4ed7c6d9dff249e6adea4ca6724dd839075.png

For all arguments and available filters, see the API reference at erlab.analysis.image.

Visualizing dispersive features

Important

An interactive tool for smoothing and differentiation is available; see dtool for details.

There are several methods that are used to visualize dispersive features in ARPES data. To demonstrate, we first generate a synthetic ARPES cut with broad features:

import erlab.analysis as era

from erlab.io.exampledata import generate_data_angles

cut = generate_data_angles(
    shape=(500, 1, 500),
    angrange={"alpha": (-5, 5), "beta": (-10, 10)},
    temp=200.0,
    seed=1,
    bandshift=-0.15,
    Simag=0.1,
    count=1e11,
).T
cut.qplot()
<matplotlib.image.AxesImage at 0x703cda1dfd90>
../_images/745ead149132abbad6361895ef24548e53f76f2cb6eaed3b12dbb1ff2d2a8941.png

The 2D curvature can be calculated with erlab.analysis.image.curvature():

result = era.image.curvature(cut, a0=0.1, factor=1.0)

result.qplot(vmax=0, vmin=-200, cmap="Greys_r")
<matplotlib.image.AxesImage at 0x703ccaa65950>
../_images/0e902b8a6dd127024dd4cb4158f95c06b349b496c2ceec8a799982ac3ebe6dab.png

For different methods and arguments, see the API reference at erlab.analysis.image.