Source code for islatu.image

"""
The two-dimension detector generates images of the reflected intensity.
The purpose of the Image class stored in this module is the investigation
and manipulation of these images.
"""


import numpy as np


[docs]class Image: """ This class stores information about the detector images. Attributes: file_path (:py:attr:`str`): File path for the image. array (:py:attr:`array_like`): The image described as an array. array_original (:py:attr:`array_like`): The original value of the image array when it was loaded from disk. array_e (:py:attr:`array_like`): The errors on each pixel of the array. bkg (:py:attr:`float`): The background that was subtracted from the image. bkg_e (:py:attr:`float`): The uncertainty on the background. Args: file_path (:py:attr:`str`): The file path for the image. data (:py:class:`pandas.DataFrame`, optional): Experimental data about the measurement. Defaults to :py:attr:`None`. transpose (:py:attr:`bool`, optional): Should the data be rotated by 90 degrees? Defaults to :py:attr:`False`. """ def __init__(self, array: np.ndarray, transpose: bool = False): """ Initialisation of the :py:class:`islatu.image.Image` class, includes assigning uncertainties. """ if transpose: array = array.T self.array = array self.array_original = np.copy(array) self.array_e = self.initial_std_devs self.bkg = 0 self.bkg_e = 0 @property def nominal_values(self): """ Get the nominal values of the image array. Returns: :py:attr:`array_like`: Nominal values of image. """ return self.array @property def initial_std_devs(self): """ Get the standard deviation values of the original raw image array. Returns: :py:attr:`array_like`: Standard deviation values of image. """ array_error = np.sqrt(self.array_original) array_error[np.where(self.array_original == 0)] = 1 return array_error @property def shape(self): """ Array shape Returns: :py:attr:`tuple` of :py:attr:`int`: The shape of the image. """ return self.array.shape def __repr__(self): """ Custom representation. Returns: :py:attr:`array_like`: Image array. """ return self.array def __str__(self): """ Custom string. Returns: :py:attr:`array_like`: Image array. """ return self.array
[docs] def crop(self, crop_function, **kwargs): """ Perform an image crop based on some function. Args: crop_function (:py:attr:`callable`): The function to crop the data. **kwargs (:py:attr:`dict`): The crop function keyword arguments. """ self.array = crop_function(self.array, **kwargs) self.array_e = crop_function(self.array_e, **kwargs)
[docs] def background_subtraction(self, background_subtraction_function, **kwargs): """ Perform a background subtraction based on some function. Args: background_subtraction_function (:py:attr:`callable`): The function to model the data and therefore remove the background. **kwargs (:py:attr:`dict`): The background substraction function keyword arguments. """ bkg_sub_info = background_subtraction_function( self, **kwargs ) # Store the calculated background, and its error. self.bkg, self.bkg_e = bkg_sub_info.bkg, bkg_sub_info.bkg_e # Do the subtraction. self.array = self.array - self.bkg self.array_e = np.sqrt(self.bkg_e**2 + self.array_e**2) # Expose information relating to the background subtraction for # meta-analyses. return bkg_sub_info
[docs] def sum(self): """ Perform a summation on the image's array. Returns: A tuple taking the form (summed_intensity, summed_intensity_e). """ intensity = np.sum(self.array) intensity_e = np.sqrt(np.sum(self.array_e**2)) return intensity, intensity_e