corrct.physics package

Submodules

corrct.physics.materials module

Materials support functions and classes.

@author: Nicola VIGANÒ, ESRF - The European Synchrotron, Grenoble, France, and CEA-IRIG, Grenoble, France

class corrct.physics.materials.VolumeMaterial(materials_fractions: Sequence[ndarray[Any, dtype[_ScalarType_co]]], materials_composition: Sequence, voxel_size_cm: float, dtype: dtype[Any] | None | type[Any] | _SupportsDType[dtype[Any]] | str | tuple[Any, int] | tuple[Any, SupportsIndex | Sequence[SupportsIndex]] | list[Any] | _DTypeDict | tuple[Any, Any] = None, verbose: bool = False)[source]

Bases: object

VolumeMaterial class, that can be used for predicting fluorescence and Compton yields, attenuation, etc.

Parameters:
  • material_fractions (Sequence) – Concentration fractions of each material for each voxel.

  • material_compounds (Sequence) – Compound description of each material.

  • voxel_size_cm (float) – Voxel size in cm.

  • dtype (DTypeLike, optional) – Data type of the produced data. The default is None.

Raises:

ValueError – Raised in case of incorrect parameters.

get_attenuation(energy_keV: float) ndarray[Any, dtype[_ScalarType_co]][source]

Compute the local attenuation for each voxel.

Parameters:

energy_keV (float) – The X-ray energy.

Returns:

The computed local attenuation volume.

Return type:

NDArray

get_compton_scattering(energy_in_keV: float, angle_rad: float | None = None, detector: DetectorXRF | None = None) tuple[float, ndarray[Any, dtype[_ScalarType_co]]][source]

Compute the local Compton scattering.

Parameters:
  • energy_in_keV (float) – Incoming beam energy.

  • angle_rad (float, optional) – The detector angle, with respect to incoming beam direction. The default is None.

  • detector (DetectorXRF, optional) – The detector object. The default is None.

Raises:

ValueError – In case neither of angle_rad nor detector have been passed.

Returns:

  • energy_out_keV (float) – The energy of the Compton radiation received by the detector.

  • cmptn_yield (NDArray) – Local yield of Compton radiation.

  • Either angle_rad or detector need to be supplied.

get_element_mass_fraction(element: str | int) ndarray[Any, dtype[_ScalarType_co]][source]

Compute the local element mass fraction through out all the materials.

Parameters:

element (str | int) – The element to look for.

Returns:

mass_fraction – The local mass fraction in each voxel.

Return type:

NDArray

get_fluo_yield(element: str | int, energy_in_keV: float, fluo_lines: str | FluoLine | Sequence[FluoLine], detector: DetectorXRF | None = None) tuple[float, ndarray[Any, dtype[_ScalarType_co]]][source]

Compute the local fluorescence yield, for the given line of the given element.

Parameters:
  • element (str | int) – The element to consider.

  • energy_in_keV (float) – The incombing X-ray beam energy.

  • fluo_lines (str | FluoLine | Sequence[FluoLine]) – The fluorescence line to consider.

  • detector (DetectorXRF, optional) – The detector geometry. The default is None.

Returns:

  • energy_out_keV (float) – The emitted fluorescence energy.

  • el_yield (NDArray) – The local fluorescence yield in each voxel.

corrct.physics.materials.get_linear_attenuation_coefficient(compound: str | dict, energy_keV: float, pixel_size_um: float, density: float | None = None) float[source]

Compute the linear attenuation coefficient for given compound, energy, and pixel size.

Parameters:
  • compound (Union[str, dict]) – The compound for which we compute the linear attenuation coefficient

  • energy_keV (float) – The energy of the photons

  • pixel_size_um (float) – The pixel size in microns

  • density (Union[float, None], optional) – The density of the compound (if different from the default value), by default None

Returns:

The linear attenuation coefficient

Return type:

float

corrct.physics.materials.plot_effective_attenuation(compound: str | dict, thickness_um: float, mean_energy_keV: float, fwhm_keV: float, line_shape: str = 'lorentzian', num_points: int = 201) None[source]

Plot spectral attenuation of a given line.

Parameters:
  • compound (Union[str, dict]) – Compound to consider

  • thickness_um (float) – Thickness of the compound (in microns)

  • mean_energy_keV (float) – Average energy of the line

  • fwhm_keV (float) – Full-width half-maximum of the line

  • line_shape (str, optional) – Shape of the line, by default “lorentzian”. Options are: “gaussian” | “lorentzian” | “sech**2”.

  • num_points (int, optional) – number of discretization points, by default 201

Raises:

ValueError – When an unsupported line is chosen.

corrct.physics.phase module

Phase contrast support functions.

@author: Nicola VIGANÒ, CEA-IRIG, Grenoble, France

corrct.physics.phase.apply_propagation_filter(data_wvu: ndarray[Any, dtype[_ScalarType_co]], pix_size_um: float, dist_um: float, wlength_um: float, delta_beta: float, filter_type: str = 'tie') ndarray[Any, dtype[_ScalarType_co]][source]

Apply a requested propagation filter to an image or a stack of images.

Parameters:
  • data_wvu (NDArray) – The Image or stack of images

  • pix_size_um (float) – Pixel size of the detector (in microns)

  • dist_um (float) – Propagation distance (in microns)

  • wlength_um (float) – Wavelength of the radiation (in microns)

  • delta_beta (float) – Delta-over-beta value for the given material

  • filter_type (str, optional) – Type of the filter, by default “tie”. Options: “ctf” (Contrast Transfer Function) | “tie” (Transport of Intensity Equation)

Returns:

The filtered image

Return type:

NDArray

corrct.physics.phase.get_delta_beta(cmp_name: str, energy_keV: float, density: float | None = None) float[source]

Compute the delta-over-beta parameter for a specific compound.

Parameters:
  • cmp_name (str) – Molar composition of a compound

  • energy_keV (float) – Energy at which the d/b value should be computed

  • density (Optional[float], optional) – Density of the compound, by default None

Returns:

The computed delta-over-beta.

Return type:

float

corrct.physics.phase.get_delta_beta_curves(compounds: Sequence[str], energy_keV_range: tuple[float, float, int] = (1.0, 800.0, 500), plot: bool = True) Sequence[ndarray[Any, dtype[_ScalarType_co]]][source]

Compute the delta-over-beta curves for the listed compounds, in the requested energy range.

Parameters:
  • compounds (Sequence[str]) – Sequence of compounds.

  • energy_keV_range (tuple[float, float, int], optional) – The energy range in keV, by default (1.0, 800.0, 500)

  • plot (bool, optional) – Whether to plot the result, by default True

Returns:

The computed delta-over-beta valueas.

Return type:

Sequence[NDArray]

corrct.physics.phase.get_propagation_filter(img_shape: ~collections.abc.Sequence[int] | ~numpy.ndarray[~typing.Any, ~numpy.dtype[~numpy._typing._array_like._ScalarType_co]], pix_size_um: float, dist_um: float, wlength_um: float, delta_beta: float, filter_type: str = 'ctf', use_rfft: bool = False, plot_result: bool = False, dtype: ~numpy.dtype[~typing.Any] | None | type[~typing.Any] | ~numpy._typing._dtype_like._SupportsDType[~numpy.dtype[~typing.Any]] | str | tuple[~typing.Any, int] | tuple[~typing.Any, ~typing.SupportsIndex | ~collections.abc.Sequence[~typing.SupportsIndex]] | list[~typing.Any] | ~numpy._typing._dtype_like._DTypeDict | tuple[~typing.Any, ~typing.Any] = <class 'numpy.float32'>) tuple[ndarray[Any, dtype[_ScalarType_co]], ndarray[Any, dtype[_ScalarType_co]]][source]

Compute the phase contrast propagation filter for the given parameters.

Parameters:
  • img_shape (Union[Sequence[int], NDArray]) – Shape of the target image

  • pix_size_um (float) – Pixel size of the detector (in microns)

  • dist_um (float) – Propagation distance (in microns)

  • wlength_um (float) – Wavelength of the radiation (in microns)

  • delta_beta (float) – Delta-over-beta value for the given material

  • filter_type (str, optional) – Type of the filter, by default “ctf”. Options: “ctf” (Contrast Transfer Function) | “tie” (Transport of Intensity Equation)

  • use_rfft (bool, optional) – Whether to use the rfft, by default False

  • plot_result (bool, optional) – Whether to plot the result, by default False

  • dtype (DTypeLike, optional) – Data type to use, by default np.float32

Returns:

The Fourier-space and real-space filters, respectively

Return type:

tuple[NDArray, NDArray]

Raises:

ValueError – When choosing an incorrect filter type

corrct.physics.phase.plot_filter_responses(filter_length: int, pix_size_um: float, dist_um: float, wlength_um: float, delta_beta: float, domain: str = 'fourier') tuple[source]

Plot frequency response of the wave propagation.

Parameters:
  • filter_length (int) – Length of the filter in pixels

  • pix_size_um (float) – Pixel-wise of the detector in microns

  • dist_um (float) – Distance of the detector from sample in microns

  • wlength_um (float) – Wavelength of the wave in microns

  • delta_beta (float) – Radio between the refraction index decrement and the absorption coefficient.

  • domain (str) – Whether to plot Fourier or direct-space responses. By default, “Fourier”.

Returns:

Figure and axes of the plot

Return type:

tuple

corrct.physics.xraylib_helper module

xraylib handling functions.

@author: Nicola VIGANÒ, CEA-IRIG, Grenoble, France

corrct.physics.xraylib_helper.get_compound(cmp_name: str, density: float | None = None) dict[source]

Build a compound from the compound composition string.

Parameters:
  • cmp_name (str) – Compund name / composition.

  • density (float, optional) – The density of the compound. If not provided it will be approximated from the composing elements. The default is None.

Returns:

cmp – The compound structure.

Return type:

dict

corrct.physics.xraylib_helper.get_element_number(element: str | int) int[source]

Return the element number from the symbol.

Parameters:

element (str | int) – The element symbol (or number, which won’t be converted).

Returns:

The corresponding element number.

Return type:

int

corrct.physics.xraylib_helper.get_element_number_and_symbol(element: str | int) tuple[str, int][source]

Return both the element symbol and number from either the symbol or the number.

Parameters:

element (str | int) – The element symbol (or number, which won’t be converted).

Returns:

The element symbol and number.

Return type:

tuple[str, int]

corrct.physics.xrf module

XRF support functions.

@author: Nicola VIGANÒ, ESRF - The European Synchrotron, Grenoble, France, and CEA-IRIG, Grenoble, France

class corrct.physics.xrf.DetectorXRF(surface_mm2: float, distance_mm: float | ndarray[Any, dtype[_ScalarType_co]], angle_rad: float = 1.5707963267948966)[source]

Bases: object

Simple XRF detector model.

angle_rad: float = 1.5707963267948966
distance_mm: float | ndarray[Any, dtype[_ScalarType_co]]
property solid_angle_sr: float | ndarray[Any, dtype[_ScalarType_co]]

Compute the solid angle covered by the detector.

Returns:

The computed solid angle of the detector geometry.

Return type:

float | NDArray

surface_mm2: float
class corrct.physics.xrf.FluoLine(name: str, indx: int)[source]

Bases: object

Fluorescence line description class.

indx: int
name: str
class corrct.physics.xrf.LinesSiegbahn[source]

Bases: object

Siegbahn fluorescence lines collection class.

static get_energy(element: str | int, lines: str | FluoLine | Sequence[FluoLine], compute_average: bool = False, verbose: bool = False) float | ndarray[Any, dtype[_ScalarType_co]][source]

Return the energy(ies) of the requested line for the given element.

Parameters:
  • element (Union[str, int]) – The requested element.

  • line (str) – The requested line. It can be a whole shell (transition to that shell), or sub-shells.

  • compute_average (bool, optional) – Weighted averaging the lines, using the radiation rate. The default is False.

Returns:

energy_keV – Either the average energy or the list of different energies.

Return type:

Union[float, NDArray]

static get_lines(line: str) Sequence[FluoLine][source]

Return the list of xraylib line macro definitions for the requested family.

Parameters:

line (str) – The requested line. It can be a whole shell (transition to that shell), or sub-shells.

Returns:

List of corresponding lines.

Return type:

Sequence

lines = [FluoLine(name='KA1', indx=-3), FluoLine(name='KA2', indx=-2), FluoLine(name='KA3', indx=-1), FluoLine(name='KB1', indx=-6), FluoLine(name='KB2', indx=-11), FluoLine(name='KB3', indx=-5), FluoLine(name='KB4', indx=-13), FluoLine(name='KB5', indx=-8), FluoLine(name='LA1', indx=-90), FluoLine(name='LA2', indx=-89), FluoLine(name='LB1', indx=-63), FluoLine(name='LB2', indx=-95), FluoLine(name='LB3', indx=-34), FluoLine(name='LB4', indx=-33), FluoLine(name='LB5', indx=-102), FluoLine(name='LB6', indx=-91), FluoLine(name='LB7', indx=-98), FluoLine(name='LB9', indx=-36), FluoLine(name='LB10', indx=-35), FluoLine(name='LB15', indx=-94), FluoLine(name='LB17', indx=-62), FluoLine(name='LG1', indx=-68), FluoLine(name='LG2', indx=-38), FluoLine(name='LG3', indx=-39), FluoLine(name='LG4', indx=-47), FluoLine(name='LG5', indx=-65), FluoLine(name='LG6', indx=-75), FluoLine(name='LG8', indx=-72), FluoLine(name='LE', indx=-60), FluoLine(name='LH', indx=-60), FluoLine(name='LL', indx=-86), FluoLine(name='LS', indx=-88), FluoLine(name='LT', indx=-87), FluoLine(name='LU', indx=-96), FluoLine(name='LV', indx=-70), FluoLine(name='MA1', indx=-207), FluoLine(name='MA2', indx=-206), FluoLine(name='MB', indx=-187), FluoLine(name='MG', indx=-165)]

Module contents

Physics module.

corrct.physics.convert_energy_to_wlength(energy_keV: float | ndarray[Any, dtype[_ScalarType_co]]) float | ndarray[Any, dtype[_ScalarType_co]][source]

Convert from energy in keV to wavelength in meters.

Parameters:

energy_keV (float | NDArray) – The energy in keV

Returns:

The wavelength in m

Return type:

float | NDArray

corrct.physics.convert_wlength_to_energy(wlength_m: float | ndarray[Any, dtype[_ScalarType_co]]) float | ndarray[Any, dtype[_ScalarType_co]][source]

Convert wavelength in meters to energy in keV.

Parameters:

wlength_m (float | NDArray) – The wavelength in meter

Returns:

The energy in keV

Return type:

float | NDArray

corrct.physics.pencil_beam_profile(voxel_size_um: float, beam_fwhm_um: float, profile_size: int = 1, beam_shape: str = 'gaussian', verbose: bool = False) ndarray[Any, dtype[_ScalarType_co]][source]

Compute the pencil beam integration point spread function.

Parameters:
  • voxel_size_um (float) – The integration length.

  • beam_fwhm_um (float) – The beam FWHM.

  • profile_size (int, optional) – The number of pixels of the PSF. The default is 1.

  • verbose (bool, optional) – Whether to print verbose information. The default is False.

Returns:

The beam PSF.

Return type:

NDArray