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