pyFAI.gui package
The package pyFAI.gui contains mainly the code of the graphical user interface widgets. This code is not intended to be used by users of pyFAI as a library hence it makes little sense to document it all here. Only documentation on the Jupyter tools are exposed.
pyFAI.gui.cli_calibration module
pyFAI-calib
A tool for determining the geometry of a detector using a reference sample.
- class pyFAI.gui.cli_calibration.AbstractCalibration(img=None, mask=None, detector=None, wavelength=None, calibrant=None)
Bases:
object
Everything that is common to Calibration and Recalibration
- PARAMETERS = ['dist', 'poni1', 'poni2', 'rot1', 'rot2', 'rot3', 'wavelength']
- PTS_PER_DEG = 0.3
- UNITS = {'dist': 'meter', 'poni1': 'meter', 'poni2': 'meter', 'rot1': 'radian', 'rot2': 'radian', 'rot3': 'radian', 'wavelength': 'meter'}
- VALID_URL = ['', 'file', 'hdf5', 'nxs', 'h5']
- __init__(img=None, mask=None, detector=None, wavelength=None, calibrant=None)
Constructor of AbstractCalibration
- Parameters:
img – 2d numpy array with the data
mask – 2d array with invalid pixels marked
detector – Detector name or instance
wavelength – radiation wavelength in meter
calibrant – pyFAI.calibrant.Calibrant instance
- analyse_options(options=None, args=None)
Analyzes options and arguments
- Returns:
option,arguments
- chiplot(rings=None)
plot delta_2theta/2theta = f(chi) and fit the curve.
- Parameters:
rings – list of rings to consider
- configure_parser(version='calibration from pyFAI version 2024.2.0: 15/01/2024', usage='pyFAI-calib [options] input_image.edf', description=None, epilog=None)
Common configuration for parsers
- extract_cpt(method='massif', pts_per_deg=1.0, max_rings=9223372036854775807)
Performs an automatic keypoint extraction: Can be used in recalib or in calib after a first calibration has been performed.
- Parameters:
method – method for keypoint extraction
pts_per_deg – number of control points per azimuthal degree (increase for better precision)
max_rings – extract at most max_rings
- get_pixelSize(ans)
convert a comma separated sting into pixel size
- initgeoRef(defaults=None)
Tries to initialise the GeometryRefinement (dist, poni, rot)
- Param:
default parameters as a dict to be passed to constructor of GeometryRefinement
- Returns:
initialized geometry refinement
- postProcess()
Common part: shows the result of the azimuthal integration in 1D and 2D
- preprocess()
Initialize peakpicker
- prompt()
prompt for commands to guide the calibration process
- Returns:
True when the user is happy with what he has, False to request another refinement
- read_dSpacingFile(verbose=True)
Read the name of the calibrant / file with d-spacing
- read_pixelsSize()
Read the pixel size from prompt if not available
- read_wavelength()
Read the wavelength
- refine(maxiter=1000000, fixed=None)
Contains the common geometry refinement part
- Parameters:
maxiter – number of iteration to run for in the minimizer
fixed – a list of parameters for maintain fixed during the refinement. self.fixed by default.
- Returns:
nothing, object updated in place
- reset_geometry(how='center', refine=False)
Reset the geometry: no tilt in all cases
- Parameters:
how – multiple options * center: set the PONI at the center of the detector * ring: center the poni at the middle of the inner-most ring * best: try both option and keeps the best (this option is not available)
refine – launch the refinement (argument not used)
- set_data(data)
call-back function for the peak-picker
- Parameters:
data – list of point with ring index
- Returns:
associated azimuthal integrator
- validate_calibration()
Validate the calibration and calculate the offset in the diffraction image
- validate_center(slices=36)
Validate the position of the center by cross-correlating two spectra 180 deg appart. Output values are in micron.
Designed for orthogonal setup with centered beam…
- Parameters:
slices – number of slices on which perform
- win_error = 'We are under windows with a 32 bit version of python, matplotlib is not able to display too many images without crashing, this is why the window showing the diffraction image is closed'
- class pyFAI.gui.cli_calibration.Calibration(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, gaussianWidth=None, wavelength=None, calibrant=None)
Bases:
CliCalibration
class doing the calibration of frames
- __init__(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, gaussianWidth=None, wavelength=None, calibrant=None)
Constructor for calibration:
- Parameters:
dataFiles – list of filenames containing data images
darkFiles – list of filenames containing dark current images
flatFiles – list of filenames containing flat images
pixelSize – size of the pixel in meter as 2 tuple
splineFile – file containing the distortion of the taper
detector – Detector name or instance
wavelength – radiation wavelength in meter
calibrant – pyFAI.calibrant.Calibrant instance
- gui_peakPicker()
- parse()
parse options from command line
- preprocess()
do dark, flat correction thresholding, …
- refine(maxiter=1000000, fixed=None)
Contains the geometry refinement part specific to Calibration Sets up the initial guess when starting pyFAI-calib
- Parameters:
maxiter – number of iteration to run for in the minimizer
fixed – a list of parameters for maintain fixed during the refinement. self.fixed by default.
- Returns:
nothing, object updated in place
- class pyFAI.gui.cli_calibration.CheckCalib(poni=None, img=None, unit='2th_deg')
Bases:
object
- __init__(poni=None, img=None, unit='2th_deg')
- get_1dsize()
- integrate()
- parse()
- rebuild()
Rebuild the diffraction image and measures the offset with the reference :return: offset
- show()
Show the image with the the errors
- property size1d
- smooth_mask(hwhm=5)
smooth out around the mask to avoid aligning on the mask
- class pyFAI.gui.cli_calibration.CliCalibration(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, wavelength=None, calibrant=None)
Bases:
AbstractCalibration
- __init__(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, wavelength=None, calibrant=None)
Constructor of CliCalibration
- Parameters:
dataFiles – list of filenames containing data images
darkFiles – list of filenames containing dark current images
flatFiles – list of filenames containing flat images
pixelSize – size of the pixel in meter as 2 tuple
splineFile – file containing the distortion of the taper
detector – Detector name or instance
wavelength – radiation wavelength in meter
calibrant – pyFAI.calibrant.Calibrant instance
- preprocess()
Common part: do dark, flat correction thresholding, … and read missing data from keyboard if needed
- class pyFAI.gui.cli_calibration.MultiCalib(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None)
Bases:
object
- __init__(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None)
- get_pixelSize(ans)
convert a comma separated sting into pixel size
- parse(exe=None, description=None, epilog=None)
parse options from command line :param exe: name of the program (MX-calibrate) :param description: Description of the program
- process()
- read_dSpacingFile()
Read the name of the calibrant or the file with d-spacing
- read_pixelsSize()
Read the pixel size from prompt if not available
- read_wavelength()
Read the wavelength
- regression()
- class pyFAI.gui.cli_calibration.Recalibration(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, wavelength=None, calibrant=None)
Bases:
CliCalibration
class doing the re-calibration of frames
- __init__(dataFiles=None, darkFiles=None, flatFiles=None, pixelSize=None, splineFile=None, detector=None, wavelength=None, calibrant=None)
Constructor for Recalibration:
- Parameters:
dataFiles – list of filenames containing data images
darkFiles – list of filenames containing dark current images
flatFiles – list of filenames containing flat images
pixelSize – size of the pixel in meter as 2 tuple
splineFile – file containing the distortion of the taper
detector – Detector name or instance
wavelength – radiation wavelength in meter
calibrant – pyFAI.calibrant.Calibrant instance
- parse()
parse options from command line
- preprocess()
do dark, flat correction thresholding, …
- read_dSpacingFile()
Read the name of the file with d-spacing
- refine(maxiter=1000000, fixed=None)
Contains the geometry refinement part specific to Recalibration
- Parameters:
maxiter – number of iteration to run for in the minimizer
fixed – a list of parameters for maintain fixed during the refinement. self.fixed by default.
- Returns:
nothing, object updated in place
- pyFAI.gui.cli_calibration.calib(img, calibrant, detector, basename='from_ipython', reconstruct=False, dist=0.1, gaussian=None, interactive=True)
Procedural interfact for calibration
- Parameters:
img – 2d array representing the calibration image
calibrant – Instance of Calibrant, set-up with wavelength
detector – Detector instance containing the mask
basename – output file base
recontruct – perform image reconstruction of masked pixel ?
dist – initial distance
gaussian – width of the gaussian used for difference of gaussian in the “massif” peak-picking algorithm
interactive – set to False for testing
- Returns:
AzimuthalIntegrator instance
- pyFAI.gui.cli_calibration.get_detector(detector, datafiles=None)
Detector factory taking into account the binning knowing the datafiles
- Parameters:
detector – string or detector or other junk
datafiles – can be a list of images to be opened and their shape used
- Returns:
pyFAI.detector.Detector instance
- Raises:
RuntimeError – If no detector found
pyFAI.gui.jupyter module
pyFAI.gui.matplotlib module
This module inits matplotlib and setups the backend to use.
It MUST be imported prior to any other import of matplotlib.
It provides the matplotlib FigureCanvasQTAgg
class corresponding
to the used backend.
pyFAI.gui.peak_picker module
Semi-graphical tool for peak-picking and extracting visually control points from an image with Debye-Scherer rings
- class pyFAI.gui.peak_picker.PeakPicker(data, reconst=False, mask=None, pointfile=None, calibrant=None, wavelength=None, detector=None, method='massif')
Bases:
object
This class is in charge of peak picking, i.e. find bragg spots in the image Two methods can be used : massif or blob
- VALID_METHODS = ['massif', 'blob', 'watershed']
- __init__(data, reconst=False, mask=None, pointfile=None, calibrant=None, wavelength=None, detector=None, method='massif')
- Parameters:
data – input image as numpy array
reconst – shall masked part or negative values be reconstructed (wipe out problems with pilatus gaps)
mask – area in which keypoints will not be considered as valid
pointfile –
- property append_mode
- closeGUI()
- contour(data, cmap='autumn', linewidths=2, linestyles='dashed')
Overlay a contour-plot
- Parameters:
data – 2darray with the 2theta values in radians…
- display_points(minIndex=0, reset=False)
display all points and their ring annotations :param minIndex: ring index to start with :param reset: remove all point before re-displaying them
- finish(filename=None, callback=None)
Ask the ring number for the given points
- Parameters:
filename – file with the point coordinates saved
callback –
- Returns:
list of control points
- gui(log=False, maximize=False, pick=True, widget_klass=None)
Display the GUI
- Parameters:
log – show z in log scale
maximize – set to true to maximize window
pick – activate pixel picking
widget_klass – provide the MplCalibWidget (either Qt or Jupyter) to instanciate the widget
- Returns:
None
- help = ['Please select rings on the diffraction image. In parenthesis, some modified shortcuts for single button mouse (Apple):', ' * Right-click (click+n): try an auto find for a ring', ' * Right-click + Ctrl (click+b): create new group with one point', ' * Right-click + Shift (click+v): add one point to current group', ' * Right-click + m (click+m): find more points for current group', ' * Center-click or (click+d): erase current group', ' * Center-click + 1 or (click+1): erase closest point from current group']
- init(method, sync=True)
Unified initializer
- load(filename)
load a filename and plot data on the screen (if GUI)
- massif_contour(data)
Overlays a mask over a diffraction image
- Parameters:
data – mask to be overlaid
- on_minus_pts_clicked(*args)
callback function
- on_plus_pts_clicked(*args)
callback function
- onclick_append_1_point(yx, ring=None)
Right-click + Shift (click+v): add one point to current group
- Parameters:
xy – 2tuple of coordinates
- onclick_append_more_points(yx, ring)
Right-click + m (click+m): find more points for current group
- onclick_erase_1_point(yx, ring)
Center-click + 1 or (click+1): erase closest point from current group
- onclick_erase_grp(yx, ring)
Center-click or (click+d): erase current group
- onclick_new_grp(yx, ring)
new_grp Right-click (click+n): try an auto find for a ring
- onclick_option(*args)
callback function
- onclick_refine(*args)
callback function
- onclick_single_point(yx, ring)
Right-click + Ctrl (click+b): create new group with one single point
- peaks_from_area(**kwargs)
Return the list of peaks within an area
- Parameters:
mask – 2d array with mask.
Imin – minimum of intensity above the background to keep the point
keep – maximum number of points to keep
method – enforce the use of detection using “massif” or “blob” or “watershed”
ring – ring number to which assign the points
dmin – minimum distance between two peaks (in pixels)
seed – good starting points.
- Returns:
list of peaks [y,x], [y,x], …]
- remove_grp(lbl)
remove a group of points
- Parameters:
lbl – label of the group of points
- reset()
Reset control point and graph (if needed)
- sync_init()
- pyFAI.gui.peak_picker.preprocess_image(data, log=False, clip=0.001)
Preforms the pre-processing of the image
- Parameters:
data – the input image
log – set to apply logarithmic intensity scale
clip – discard pixel fraction which are too weak/intense
- Returns:
scaled image, bounds