Source code for reflectorch.inference.preprocess_exp.attenuation

import numpy as np


[docs] def apply_attenuation_correction( intensity: np.ndarray, attenuation: np.ndarray, scattering_angle: np.ndarray = None, correct_discontinuities: bool = True ) -> np.ndarray: """Applies attenuation correction to experimental reflectivity curves Args: intensity (np.ndarray): intensities of an experimental reflectivity curve attenuation (np.ndarray): attenuation factors for each measured point scattering_angle (np.ndarray, optional): scattering angles of the measured points. Defaults to None. correct_discontinuities (bool, optional): whether to correct discontinuities in the measured curves. Defaults to True. Returns: np.ndarray: the corrected reflectivity curve """ intensity = intensity / attenuation if correct_discontinuities: if scattering_angle is None: raise ValueError("correct_discontinuities options requires scattering_angle, but scattering_angle is None.") intensity = apply_discontinuities_correction(intensity, scattering_angle) return intensity
def apply_discontinuities_correction(intensity: np.ndarray, scattering_angle: np.ndarray) -> np.ndarray: intensity = intensity.copy() diff_angle = np.diff(scattering_angle) for i in range(len(diff_angle)): if diff_angle[i] == 0: factor = intensity[i] / intensity[i + 1] intensity[(i + 1):] *= factor return intensity