Source code for arpes.analysis.background

"""Provides background estimation approaches."""
import xarray as xr
import numpy as np
from scipy.spatial import ConvexHull
from scipy.interpolate import interp1d

__all__ = (
    "calculate_background_hull",
    "remove_background_hull",
)


[docs]def calculate_background_hull(arr, breakpoints=None): """Calculates a background using the convex hull of the data (viewing the intensity as a Z axis).""" if breakpoints: breakpoints = [None] + breakpoints + [None] dim = arr.dims[0] processed = [] for blow, bhigh in zip(breakpoints, breakpoints[1:]): processed.append( calculate_background_hull(arr.sel(**dict([[dim, slice(blow, bhigh)]]))) ) return xr.concat(processed, dim) points = np.stack(arr.G.to_arrays(), axis=1) hull = ConvexHull(points) vertices = np.array(hull.vertices) index_of_zero = np.argwhere(vertices == 0)[0][0] vertices = np.roll(vertices, -index_of_zero) xis = vertices[: np.argwhere(vertices == len(arr) - 1)[0][0]] xis = list(xis) + [len(arr) - 1] support = points[xis] bkg = interp1d(support[:, 0], support[:, 1], fill_value="extrapolate")(points[:, 0]) return arr.S.with_values(interp1d(support[:, 0], support[:, 1])(points[:, 0]))
[docs]def remove_background_hull(data, *args, **kwargs): """Removes a background according to `calculate_background_hull`.""" return data - calculate_background_hull(data, *args, **kwargs)