sas.qtgui.Plotting package
Subpackages
- sas.qtgui.Plotting.Masks package
- sas.qtgui.Plotting.Slicers package
- Submodules
- sas.qtgui.Plotting.Slicers.AnnulusSlicer module
- sas.qtgui.Plotting.Slicers.Arc module
- sas.qtgui.Plotting.Slicers.AzimutSlicer module
- sas.qtgui.Plotting.Slicers.BaseInteractor module
- sas.qtgui.Plotting.Slicers.BoxSlicer module
- sas.qtgui.Plotting.Slicers.BoxSum module
- sas.qtgui.Plotting.Slicers.RadiusInteractor module
- sas.qtgui.Plotting.Slicers.SectorSlicer module
- Module contents
- sas.qtgui.Plotting.UI package
- Submodules
- sas.qtgui.Plotting.UI.AddTextUI module
- sas.qtgui.Plotting.UI.BoxSumUI module
- sas.qtgui.Plotting.UI.ColorMapUI module
- sas.qtgui.Plotting.UI.LinearFitUI module
- sas.qtgui.Plotting.UI.MaskEditorUI module
- sas.qtgui.Plotting.UI.PlotPropertiesUI module
- sas.qtgui.Plotting.UI.ScalePropertiesUI module
- sas.qtgui.Plotting.UI.SetGraphRangeUI module
- sas.qtgui.Plotting.UI.SlicerParametersUI module
- sas.qtgui.Plotting.UI.WindowTitleUI module
- Module contents
Submodules
sas.qtgui.Plotting.AddText module
-
class
sas.qtgui.Plotting.AddText.
AddText
(parent=None)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.AddTextUI.Ui_AddText
Simple GUI for a single line text query
-
color
()[source]
-
font
(self) → QFont[source]
-
onColorChange
(event)[source] Pop up the standard Qt color change dialog
-
onFontChange
(event)[source] Pop up the standard Qt Font change dialog
-
text
()[source]
-
sas.qtgui.Plotting.Arrow3D module
Module that draws multiple arrows in 3D coordinates
-
class
sas.qtgui.Plotting.Arrow3D.
Arrow3D
(base, xs, ys, zs, colors, *args, **kwargs)[source] Bases:
matplotlib.patches.FancyArrowPatch
Draw 3D arrow
-
draw
(renderer, rasterized=True)[source] Drawing actually happens here
-
on_left_down
(event)[source] Mouse left-down event
-
on_left_up
(event)[source] Mouse left up event
-
sas.qtgui.Plotting.Binder module
Extension to MPL to support the binding of artists to key/mouse events.
-
class
sas.qtgui.Plotting.Binder.
BindArtist
(figure)[source] Bases:
object
-
alt
= False
-
clear
(h1, h2, ...)[source] Remove connections for artists h1, h2, …
Use clearall() to reset all connections.
-
clearall
()[source] Clear connections to all artists.
Use clear(h1,h2,…) to reset specific artists.
-
control
= False
-
dclick_threshhold
= 0.25
-
disconnect
()[source] In case we need to disconnect from the canvas…
-
events
= ['enter', 'leave', 'motion', 'click', 'dclick', 'drag', 'release', 'scroll', 'key', 'keyup']
-
meta
= False
-
shift
= False
-
trigger
(actor, action, ev)[source] Trigger a particular event for the artist. Fallback to axes, to figure, and to ‘all’ if the event is not processed.
-
-
class
sas.qtgui.Plotting.Binder.
Selection
(artist=None, prop={})[source] Bases:
object
Store and compare selections.
-
artist
= None
-
prop
= {}
-
sas.qtgui.Plotting.BoxSum module
Allows users to modify the box slicer parameters.
-
class
sas.qtgui.Plotting.BoxSum.
BoxSum
(parent=None, model=None)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.BoxSumUI.Ui_BoxSumUI
-
closeWidgetSignal
-
sas.qtgui.Plotting.ColorMap module
Allows users to change the range of the current graph
-
class
sas.qtgui.Plotting.ColorMap.
ColorMap
(parent=None, cmap=None, vmin=0.0, vmax=100.0, data=None)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.ColorMapUI.Ui_ColorMapUI
-
apply_signal
-
cmap
()[source] Getter for the color map
-
initColorMap
()[source] Prepare and display the color map
-
initDetectorData
()[source] Fill out the Detector labels
-
initMapCombobox
()[source] Fill out the combo box with all available color maps
-
initRangeSlider
()[source] Create and display the double slider for data range mapping.
-
norm
()[source] Getter for the color map norm
-
onAmplitudeChange
()[source] Respond to editing the amplitude fields
-
onApply
()[source] Respond to the Apply button click. Send a signal to the plotter with vmin/vmax/cmap for chart update
-
onColorMapReversed
(isChecked)[source] Respond to ticking/unticking the color map reverse checkbox
-
onMapIndexChange
(index)[source] Respond to the color map change event
-
onReset
()[source] Respond to the Reset button click
-
redrawColorBar
()[source] Call ColorbarBase with current values, effectively redrawing the widget
-
updateMap
()[source]
-
sas.qtgui.Plotting.ConvertUnits module
Convert units to strings that can be displayed This is a cleaned up version of unitConverter.py
-
sas.qtgui.Plotting.ConvertUnits.
convertUnit
(power, unit)[source] Convert units to strings that can be displayed
sas.qtgui.Plotting.DataTransform module
-
sas.qtgui.Plotting.DataTransform.
errFromX2
(x, y=None, dx=None, dy=None)[source] calculate error of sqrt(x)
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errFromX4
(x, y=None, dx=None, dy=None)[source] calculate error of x^1/4
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errOneOverSqrtX
(x, y=None, dx=None, dy=None)[source] Calculate error on 1/sqrt(x)
-
sas.qtgui.Plotting.DataTransform.
errOneOverX
(x, y=None, dx=None, dy=None)[source] calculate error on 1/x
-
sas.qtgui.Plotting.DataTransform.
errToLog10X
(x, y=None, dx=None, dy=None)[source] calculate error of Log(x)
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToLogX
(x, y=None, dx=None, dy=None)[source] calculate error of Log(x)
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToLogXY
(x, y, dx=None, dy=None)[source] calculate error of Log(xy)
-
sas.qtgui.Plotting.DataTransform.
errToLogYX2
(y, x, dy=None, dx=None)[source] calculate error of Log(yx**2)
-
sas.qtgui.Plotting.DataTransform.
errToLogYX4
(y, x, dy=None, dx=None)[source] error for ln(y*x^(4))
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
errToX
(x, y=None, dx=None, dy=None)[source] calculate error of x**2
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToX2
(x, y=None, dx=None, dy=None)[source] calculate error of x**2
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToX4
(x, y=None, dx=None, dy=None)[source] calculate error of x**4
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToX_pos
(x, y=None, dx=None, dy=None)[source] calculate error of x**2
Parameters: - x – float value
- dx – float value
-
sas.qtgui.Plotting.DataTransform.
errToYX2
(y, x, dy=None, dx=None)[source]
-
sas.qtgui.Plotting.DataTransform.
errToYX4
(y, x, dy=None, dx=None)[source] error for (y*x^(4))
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
fromX2
(x, y=None)[source] This function is used to load value on Plottable.View Calculate square root of x
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
fromX4
(x, y=None)[source] This function is used to load value on Plottable.View Calculate square root of x
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
toLogX
(x, y=None)[source] This function is used to load value on Plottable.View calculate log x
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
toLogXY
(y, x)[source] This function is used to load value on Plottable.View calculate log x
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
toLogYX2
(y, x)[source]
-
sas.qtgui.Plotting.DataTransform.
toLogYX4
(y, x)[source]
-
sas.qtgui.Plotting.DataTransform.
toOneOverSqrtX
(y, x=None)[source]
-
sas.qtgui.Plotting.DataTransform.
toOneOverX
(x, y=None)[source]
-
sas.qtgui.Plotting.DataTransform.
toX
(x, y=None)[source] This function is used to load value on Plottable.View
Parameters: x – Float value Returns: x
-
sas.qtgui.Plotting.DataTransform.
toX2
(x, y=None)[source] This function is used to load value on Plottable.View
Calculate x^(2)
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
toX4
(x, y=None)[source] This function is used to load value on Plottable.View
Calculate x^(4)
Parameters: x – float value
-
sas.qtgui.Plotting.DataTransform.
toX_pos
(x, y=None)[source] This function is used to load value on Plottable.View
Parameters: x – Float value Returns: x
-
sas.qtgui.Plotting.DataTransform.
toYX2
(y, x)[source]
-
sas.qtgui.Plotting.DataTransform.
toYX4
(y, x)[source]
sas.qtgui.Plotting.Fittings module
This module is used to fit a set of x,y data to a model passed to it. It is used to calculate the slope and intercepts for the linearized fits. Two things should be noted:
First, this fitting module uses the NLLSQ module of SciPy rather than a linear fit. This along with a few other modules could probably be removed if we move to a linear regression approach.
Second, this infrastructure does not allow for resolution smearing of the the models. Hence the results are not that accurate even for pinhole collimation of SANS but may be good for SAXS. It is completely wrong for slit smeared data.
-
class
sas.qtgui.Plotting.Fittings.
Parameter
(model, name, value=None)[source] Bases:
object
Class to handle model parameters - sets the parameters and their initial value from the model based to it.
-
set
(value)[source] Set the value of the parameter
-
-
sas.qtgui.Plotting.Fittings.
calcCommandline
(event)[source]
-
sas.qtgui.Plotting.Fittings.
sasfit
(model, pars, x, y, err_y, qmin=None, qmax=None)[source] Fit function
Parameters: - model – sas model object
- pars – list of parameters
- x – vector of x data
- y – vector of y data
- err_y – vector of y errors
sas.qtgui.Plotting.LineModel module
Provide Line function (y= Ax + B). Until July 10, 2016 this function provided (y= A + Bx). This however was contrary to all the other code using it which assumed (y= mx+b) or in this nomenclature (y=Ax + B). This lead to some contortions in the code and worse incorrect calculations until now for at least some of the functions. This seemed the easiest to fix particularly since this function should disappear in a future iteration (see notes in fitDialog)
-PDB July 10, 2016
-
class
sas.qtgui.Plotting.LineModel.
LineModel
[source] Bases:
object
Class that evaluates a linear model.
\(f(x) = Ax + B\)
List of default parameters: A = 1.0 B = 1.0
-
getParam
(name)[source] Return parameter value
-
run
(x=0.0)[source] Evaluate the model
Parameters: x – simple value Returns: (Line value) Note
This is the function called by fitDialog to calculate the the y(xmin) and y(xmax), but the only difference between this and runXY is when the if statement is true. I however cannot see what that function is for. It needs to be documented here or removed. -PDB 7/10/16
-
runXY
(x=0.0)[source] Evaluate the model.
Parameters: x – simple value Returns: Line value - ..note::
- This is to be what is called by fitDialog for the actual fit but the only difference between this and run is when the if statement is true. I however cannot see what that function is for. It needs to be documented here or removed. -PDB 7/10/16
-
setParam
(name, value)[source] Set parameter value
-
sas.qtgui.Plotting.LinearFit module
Adds a linear fit plot to the chart
-
class
sas.qtgui.Plotting.LinearFit.
LinearFit
(parent=None, data=None, max_range=(0.0, 0.0), fit_range=(0.0, 0.0), xlabel='', ylabel='')[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.LinearFitUI.Ui_LinearFitUI
-
checkFitValues
(item)[source] Check the validity of input values
-
fit
(event)[source] Performs the fit. Receive an event when clicking on the button Fit.Computes chisqr , A and B parameters of the best linear fit y=Ax +B Push a plottable to the caller
-
floatInvTransform
(x)[source] transform a float.It is used to determine the x.View min and x.View max for values not in x. Also used to properly calculate RgQmin, RgQmax and to update qmin and qmax in the linear range boxes on the panel.
-
origData
()[source]
-
range
()[source]
-
setRangeLabel
(label='')[source] Overwrite default fit range label to correspond to actual unit
-
updatePlot
-
sas.qtgui.Plotting.MaskEditor module
-
class
sas.qtgui.Plotting.MaskEditor.
MaskEditor
(parent=None, data=None)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.MaskEditorUI.Ui_MaskEditorUI
-
clearSlicer
()[source] Clear the slicer on the plot
-
emptyRadioButtons
()[source] Uncheck all buttons without them firing signals causing unnecessary slicer updates
-
initializeSignals
()[source] Attach slots to signals from radio boxes
-
onAdd
()[source] Generate required mask and modify underlying DATA
-
onClear
()[source] Remove the current mask(s)
-
onMask
(slicer=None, inside=True)[source] Clear the previous mask and create a new one.
-
onReset
()[source] Removes all the masks from data
-
setSlicer
(slicer)[source] Clear the previous slicer and create a new one. slicer: slicer class to create
-
update
()[source] Redraw the canvas
-
updateMask
(mask)[source] Respond to changes in masking
-
sas.qtgui.Plotting.PlotHelper module
Singleton plot helper module All its variables are bound to the module, which can not be instantiated repeatedly so IDs are session-specific.
-
sas.qtgui.Plotting.PlotHelper.
addPlot
(plot)[source] Adds a new plot to the current dictionary of plots
-
sas.qtgui.Plotting.PlotHelper.
clear
()[source] Reset the plot dictionary
-
sas.qtgui.Plotting.PlotHelper.
currentPlots
()[source] Returns a list of IDs for all currently active plots
-
sas.qtgui.Plotting.PlotHelper.
deletePlot
(plot_id)[source] Deletes an existing plot from the dictionary
-
sas.qtgui.Plotting.PlotHelper.
idOfPlot
(plot)[source] Returns the ID of the plot
-
sas.qtgui.Plotting.PlotHelper.
plotById
(plot_id)[source] Returns the plot referenced by the ID
sas.qtgui.Plotting.PlotProperties module
-
class
sas.qtgui.Plotting.PlotProperties.
PlotProperties
(parent=None, color=0, marker=0, marker_size=5, legend='')[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.PlotPropertiesUI.Ui_PlotPropertiesUI
Dialog for modification of single plot properties
-
color
()[source] return current color: index in COLORS or a hex string
-
legend
()[source] return current legend
-
marker
()[source] return the current shape index in SHAPE
-
markersize
()[source] return marker size (int)
-
onColorChange
()[source] Pop up the standard Qt color change dialog
-
onColorIndexChange
()[source] Dynamically add/remove “Custom” color index
-
sas.qtgui.Plotting.PlotUtilities module
-
sas.qtgui.Plotting.PlotUtilities.
build_matrix
(data, qx_data, qy_data)[source] Build a matrix for 2d plot from a vector Returns a matrix (image) with ~ square binning Requirement: need 1d array formats of data, qx_data, and qy_data where each one corresponds to z, x, or y axis values
-
sas.qtgui.Plotting.PlotUtilities.
fillupPixels
(image=None, weights=None)[source] Fill z values of the empty cells of 2d image matrix with the average over up-to next nearest neighbor points
Parameters: image – (2d matrix with some zi = None) Returns: image (2d array ) TODO: Find better way to do for-loop below
-
sas.qtgui.Plotting.PlotUtilities.
getValidColor
(color)[source] Returns a valid matplotlib color
-
sas.qtgui.Plotting.PlotUtilities.
get_bins
(qx_data, qy_data)[source] get bins return x_bins and y_bins: 1d arrays of the index with ~ square binning Requirement: need 1d array formats of qx_data, and qy_data where each one corresponds to x, or y axis values
-
sas.qtgui.Plotting.PlotUtilities.
rescale
(lo, hi, step, pt=None, bal=None, scale='linear')[source] Rescale (lo,hi) by step, returning the new (lo,hi) The scaling is centered on pt, with positive values of step driving lo/hi away from pt and negative values pulling them in. If bal is given instead of point, it is already in [0,1] coordinates.
This is a helper function for step-based zooming.
sas.qtgui.Plotting.Plottables module
Prototype plottable object support.
The main point of this prototype is to provide a clean separation between the style (plotter details: color, grids, widgets, etc.) and substance (application details: which information to plot). Programmers should not be dictating line colours and plotting symbols.
Unlike the problem of style in CSS or Word, where most paragraphs look the same, each line on a graph has to be distinguishable from its neighbours. Our solution is to provide parametric styles, in which a number of different classes of object (e.g., reflectometry data, reflectometry theory) representing multiple graph primitives cycle through a colour palette provided by the underlying plotter.
A full treatment would provide perceptual dimensions of prominence and distinctiveness rather than a simple colour number.
-
class
sas.qtgui.Plotting.Plottables.
Chisq
(chisq=None)[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
Chisq plottable plots the chisq
-
render
(plot, **kw)[source]
-
setChisq
(chisq)[source] Set the chisq value.
-
-
class
sas.qtgui.Plotting.Plottables.
Graph
(**kw)[source] Bases:
object
Generic plottables graph structure.
Plot styles are based on color/symbol lists. The user gets to select the list of colors/symbols/sizes to choose from, not the application developer. The programmer only gets to add/remove lines from the plot and move to the next symbol/color.
Another dimension is prominence, which refers to line sizes/point sizes.
Axis transformations allow the user to select the coordinate view which provides clarity to the data. There is no way we can provide every possible transformation for every application generically, so the plottable objects themselves will need to provide the transformations. Here are some examples from reflectometry:
independent: x -> f(x) monitor scaling: y -> M*y log: y -> log(y if y > min else min) cos: y -> cos(y*pi/180) dependent: x -> f(x,y) Q4: y -> y*x^4 fresnel: y -> y*fresnel(x) coordinated: x,y = f(x,y) Q: x -> 2*pi/L (cos(x*pi/180) - cos(y*pi/180)) y -> 2*pi/L (sin(x*pi/180) + sin(y*pi/180)) reducing: x,y = f(x1,x2,y1,y2) spin asymmetry: x -> x1, y -> (y1 - y2)/(y1 + y2) vector net: x -> x1, y -> y1*cos(y2*pi/180)
Multiple transformations are possible, such as Q4 spin asymmetry
Axes have further complications in that the units of what are being plotted should correspond to the units on the axes. Plotting multiple types on the same graph should be handled gracefully, e.g., by creating a separate tab for each available axis type, breaking into subplots, showing multiple axes on the same plot, or generating inset plots. Ultimately the decision should be left to the user.
Graph properties such as grids/crosshairs should be under user control, as should the sizes of items such as axis fonts, etc. No direct access will be provided to the application.
Axis limits are mostly under user control. If the user has zoomed or panned then those limits are preserved even if new data is plotted. The exception is when, e.g., scanning through a set of related lines in which the user may want to fix the limits so that user can compare the values directly. Another exception is when creating multiple graphs sharing the same limits, though this case may be important enough that it is handled by the graph widget itself. Axis limits will of course have to understand the effects of axis transformations.
High level plottable objects may be composed of low level primitives. Operations such as legend/hide/show copy/paste, etc. need to operate on these primitives as a group. E.g., allowing the user to have a working canvas where they can drag lines they want to save and annotate them.
Graphs need to be printable. A page layout program for entire plots would be nice.
-
add
(plottable, color=None)[source] Add a new plottable to the graph
-
changed
()[source] Detect if any graphed plottables have changed
-
delete
(plottable)[source] Remove an existing plottable from the graph
-
get
(key)[source] Get the graph properties
-
get_plottable
(name)[source] Return the plottable with the given name if it exists. Otherwise return None
-
get_range
()[source] Return the range of all displayed plottables
-
isPlotted
(plottable)[source] Return True is the plottable is already on the graph
-
render
(plot)[source] Redraw the graph
-
replace
(plottable)[source] Replace an existing plottable from the graph
-
reset
()[source] Reset the graph.
-
reset_scale
()[source] Resets the scale transformation data to the underlying data
-
returnPlottable
()[source] This method returns a dictionary of plottables contained in graph It is just by Plotpanel to interact with the complete list of plottables inside the graph.
-
set
(**kw)[source] Set the graph properties
-
title
(name)[source] Graph title
-
xaxis
(name, units)[source] Properties of the x axis.
-
yaxis
(name, units)[source] Properties of the y axis.
-
-
class
sas.qtgui.Plotting.Plottables.
Plottable
[source] Bases:
object
-
check_data_PlottableX
()[source] Since no transformation is made for log10(x), check that no negative values is plot in log scale
-
check_data_PlottableY
()[source] Since no transformation is made for log10(y), check that no negative values is plot in log scale
-
colors
()[source] Return the number of colors need to render the object
-
custom_color
= None
-
dx
= None
-
dy
= None
-
get_xaxis
()[source] Return the units and name of x-axis
-
get_yaxis
()[source] Return the units and name of y- axis
-
interactive
= True
-
is_empty
()[source] Returns True if there is no data stored in the plottable
-
classmethod
labels
(collection)[source] Construct a set of unique labels for a collection of plottables of the same type.
Returns a map from plottable to name.
-
markersize
= 3
-
name
= None
-
onFitRange
(xmin=None, xmax=None)[source] It limits View data range to plot from min to max
Parameters: - xmin – the minimum value of x to plot.
- xmax – the maximum value of x to plot
-
onReset
()[source] Reset x, y, dx, dy view with its parameters
-
render
(plot)[source] The base class makes sure the correct units are being used for subsequent plottable.
For now it is assumed that the graphs are commensurate, and if you put a Qx object on a Temperature graph then you had better hope that it makes sense.
-
reset_view
()[source] Reload view with new value to plot
-
returnValuesOfView
()[source] Return View parameters and it is used by Fit Dialog
-
setLabel
(labelx, labely)[source] It takes a label of the x and y transformation and set View parameters
Parameters: - transx – The label of x transformation is sent by Properties Dialog
- transy – The label of y transformation is sent Properties Dialog
-
set_View
(x, y)[source] Load View
-
set_data
(x, y, dx=None, dy=None)[source]
-
short_name
= None
-
show_yzero
= False
-
transformView
()[source] It transforms x, y before displaying
-
transformX
(transx, transdx)[source] Receive pointers to function that transform x and dx and set corresponding View pointers
Parameters: - transx – pointer to function that transforms x
- transdx – pointer to function that transforms dx
-
transformY
(transy, transdy)[source] Receive pointers to function that transform y and dy and set corresponding View pointers
Parameters: - transy – pointer to function that transforms y
- transdy – pointer to function that transforms dy
-
x
= None
-
xaxis
(name, units)[source] Set the name and unit of x_axis
Parameters: - name – the name of x-axis
- units – the units of x_axis
-
y
= None
-
yaxis
(name, units)[source] Set the name and unit of y_axis
Parameters: - name – the name of y-axis
- units – the units of y_axis
-
-
class
sas.qtgui.Plotting.Plottables.
PlottableData1D
(x, y, dx=None, dy=None)[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
Data plottable: scatter plot of x,y with errors in x and y.
-
changed
()[source]
-
classmethod
labels
(collection)[source] Build a label mostly unique within a collection
-
render
(plot, **kw)[source] Renders the plottable on the graph
-
-
class
sas.qtgui.Plotting.Plottables.
PlottableData2D
(image=None, qx_data=None, qy_data=None, err_image=None, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None)[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
2D data class for image plotting
-
changed
()[source]
-
classmethod
labels
(collection)[source] Build a label mostly unique within a collection
-
render
(plot, **kw)[source] Renders the plottable on the graph
-
setValues
(datainfo=None)[source] Use datainfo object to initialize data2D
Parameters: datainfo – object
-
set_zrange
(zmin=None, zmax=None)[source]
-
xaxis
(label, unit)[source] set x-axis
Parameters: - label – x-axis label
- unit – x-axis unit
-
yaxis
(label, unit)[source] set y-axis
Parameters: - label – y-axis label
- unit – y-axis unit
-
zaxis
(label, unit)[source] set z-axis
Parameters: - label – z-axis label
- unit – z-axis unit
-
-
class
sas.qtgui.Plotting.Plottables.
PlottableFit1D
(data=None, theory=None)[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
Fit plottable: composed of a data line plus a theory line. This is treated like a single object from the perspective of the graph, except that it will have two legend entries, one for the data and one for the theory.
The color of the data and theory will be shared.
-
changed
()[source]
-
render
(plot, **kw)[source]
-
-
class
sas.qtgui.Plotting.Plottables.
PlottableTheory1D
(x, y, dy=None)[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
Theory plottable: line plot of x,y with confidence interval y.
-
class
sas.qtgui.Plotting.Plottables.
Text
(text=None, xpos=0.5, ypos=0.9, name='text')[source] Bases:
sas.qtgui.Plotting.Plottables.Plottable
-
getText
(text)[source] Get the text string.
-
render
(plot, **kw)[source]
-
setText
(text)[source] Set the text string.
-
set_x
(x)[source] Set the x position of the text ACCEPTS: float
-
set_y
(y)[source] Set the y position of the text ACCEPTS: float
-
-
class
sas.qtgui.Plotting.Plottables.
Transform
[source] Bases:
object
Define a transform plugin to the plottable architecture.
Transforms operate on axes. The plottable defines the set of transforms available for it, and the axes on which they operate. These transforms can operate on the x axis only, the y axis only or on the x and y axes together.
This infrastructure is not able to support transformations such as log and polar plots as these require full control over the drawing of axes and grids.
A transform has a number of attributes.
- name
- user visible name for the transform. This will appear in the context menu for the axis and the transform menu for the graph.
- type
- operational axis. This determines whether the transform should appear on x,y or z axis context menus, or if it should appear in the context menu for the graph.
- inventory
- (not implemented)
a dictionary of user settable parameter names and
their associated types. These should appear as keyword
arguments to the transform call. For example, Fresnel
reflectivity requires the substrate density:
{ 'rho': type.Value(10e-6/units.angstrom**2) }
Supply reasonable defaults in the callback so that limited plotting clients work even though they cannot set the inventory.
-
class
sas.qtgui.Plotting.Plottables.
View
(x=None, y=None, dx=None, dy=None)[source] Bases:
object
Representation of the data that might include a transformation
-
check_data_logX
()[source] Remove negative value in x vector to avoid plotting negative value of Log10
-
check_data_logY
()[source] Remove negative value in y vector to avoid plotting negative value of Log10
-
dx
= None
-
dy
= None
-
onFitRangeView
(xmin=None, xmax=None)[source] It limits View data range to plot from min to max
Parameters: - xmin – the minimum value of x to plot.
- xmax – the maximum value of x to plot
-
onResetView
()[source] Reset x,y,dx and y in their full range and in the initial scale in case their previous range has changed
-
returnXview
()[source] Return View x,y,dx,dy
-
setTransformX
(funcx, funcdx)[source] Receive pointers to function that transform x and dx and set corresponding View pointers
Parameters: - transx – pointer to function that transforms x
- transdx – pointer to function that transforms dx
-
setTransformY
(funcy, funcdy)[source] Receive pointers to function that transform y and dy and set corresponding View pointers
Parameters: - transx – pointer to function that transforms y
- transdx – pointer to function that transforms dy
-
transform
(x=None, y=None, dx=None, dy=None)[source] - Transforms the x,y,dx and dy vectors and stores
- the output in View parameters
Parameters: - x – array of x values
- y – array of y values
- dx – array of errors values on x
- dy – array of error values on y
-
x
= None
-
y
= None
-
-
sas.qtgui.Plotting.Plottables.
all
(L)[source]
-
sas.qtgui.Plotting.Plottables.
any
(L)[source]
sas.qtgui.Plotting.Plotter module
-
class
sas.qtgui.Plotting.Plotter.
Plotter
(parent=None, quickplot=False)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.Plotter.PlotterWidget
-
class
sas.qtgui.Plotting.Plotter.
PlotterWidget
(parent=None, manager=None, quickplot=False)[source] Bases:
sas.qtgui.Plotting.PlotterBase.PlotterBase
1D Plot widget for use with a QDialog
-
addPlotsToContextMenu
()[source] Adds operations on all plotted sets of data to the context menu
-
createContextMenu
()[source] Define common context menu and associated actions for the MPL widget
-
createContextMenuQuick
()[source] Define context menu and associated actions for the quickplot MPL widget
-
data
data getter
-
onAddText
()[source] Show a dialog allowing adding custom text to the chart
-
onFitDisplay
(fit_data)[source] Add a linear fitting line to the chart
-
onFreeze
(id)[source] Freezes the selected plot to a separate chart
-
onLegendMotion
(event)[source] On legend in motion
-
onLinearFit
(id)[source] Creates and displays a simple linear fit for the selected plot
-
onModifyPlot
(id)[source] Allows for MPL modifications to the selected plot
-
onMplMouseDown
(event)[source] Left button down and ready to drag
-
onMplMouseMotion
(event)[source] Check if the left button is press and the mouse in moving. Compute delta for x and y coordinates and then perform the drag
-
onMplMouseUp
(event)[source] Set the data coordinates of the click
-
onMplPick
(event)[source] On pick legend
-
onMplWheel
(event)[source] Process mouse wheel as zoom events
-
onRemovePlot
(id)[source] Responds to the plot delete action
-
onRemoveText
()[source] Remove the most recently added text
-
onResetGraphRange
()[source] Resets the chart X and Y ranges to their original values
-
onResize
(event)[source] Resize the legend window/font on canvas resize
-
onScaleChange
()[source] Show a dialog allowing axes rescaling
-
onSetGraphRange
()[source] Show a dialog allowing setting the chart ranges
-
onToggleHideError
(id)[source] Toggles hide error/show error menu item
-
onToggleLegend
()[source] Toggle legend visibility in the chart
-
plot
(data=None, color=None, marker=None, hide_error=False, transform=True)[source] Add a new plot of self._data to the chart.
-
removePlot
(id)[source] Deletes the selected plot from the chart
-
replacePlot
(id, new_plot, retain_dimensions=False)[source] Remove plot ‘id’ and add ‘new_plot’ to the chart. This effectlvely refreshes the chart with changes to one of its plots
-
xyTransform
(xLabel='', yLabel='')[source] Transforms x and y in View and set the scale
-
sas.qtgui.Plotting.Plotter2D module
-
class
sas.qtgui.Plotting.Plotter2D.
Plotter2D
(parent=None, quickplot=False, dimension=2)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.Plotter2D.Plotter2DWidget
Plotter widget implementation
-
class
sas.qtgui.Plotting.Plotter2D.
Plotter2DWidget
(parent=None, manager=None, quickplot=False, dimension=2)[source] Bases:
sas.qtgui.Plotting.PlotterBase.PlotterBase
2D Plot widget for use with a QDialog
-
calculateDepth
()[source] Re-calculate the plot depth parameters depending on the scale
-
circularAverage
()[source] Calculate the circular average and create the Data object for it
-
createContextMenu
()[source] Define common context menu and associated actions for the MPL widget
-
createContextMenuQuick
()[source] Define context menu and associated actions for the quickplot MPL widget
-
data
data getter
-
data0
-
getActivePlots
()[source] utility method for manager query of active plots
-
imageShow
(img, origin=None)[source] Show background image :Param img: [imread(path) from matplotlib.pyplot]
-
onAnnulusView
()[source] Perform sector averaging on Phi and draw annulus slicer
-
onApplyMap
(v_values, cmap)[source] Update the chart color map based on data passed from the widget
-
onBoxAveragingX
()[source] Perform 2D data averaging on Qx Create a new slicer.
-
onBoxAveragingY
()[source] Perform 2D data averaging on Qy Create a new slicer .
-
onBoxSum
()[source] Perform 2D Data averaging Qx and Qy. Display box slicer details.
-
onCircularAverage
()[source] Perform circular averaging on Data2D
-
onClearSlicer
()[source] Remove all sclicers from the chart
-
onColorMap
()[source] Display the color map dialog and modify the plot’s map accordingly
-
onEditSlicer
()[source] Present a dialog for manipulating the current slicer
-
onMplMouseDown
(event)[source] Display x/y/intensity on click
-
onSectorView
()[source] Perform sector averaging on Q and draw sector slicer
-
onToggleScale
(event)[source] Toggle axis and replot image
-
plot
(data=None, marker=None, show_colorbar=True, update=False)[source] Plot 2D self._data marker - unused
-
replacePlot
(id, new_plot)[source] Replace data in current chart. This effectively refreshes the chart with changes to one of its plots
-
setSlicer
(slicer, reset=True)[source] Clear the previous slicer and create a new one. slicer: slicer class to create
-
showPlot
(data, qx_data, qy_data, xmin, xmax, ymin, ymax, zmin, zmax, label='data2D', cmap=<matplotlib.colors.LinearSegmentedColormap object>, show_colorbar=True, update=False)[source] Render and show the current data
-
updateCircularAverage
()[source] Update circular averaging plot on Data2D change
-
sas.qtgui.Plotting.PlotterBase module
-
class
sas.qtgui.Plotting.PlotterBase.
PlotterBase
(parent=None, manager=None, quickplot=False)[source] Bases:
PyQt5.QtWidgets.QWidget
-
clean
()[source] Redraw the graph
-
clearQRangeSliders
()[source]
-
closeEvent
(event)[source] Overwrite the close event adding helper notification
-
contextMenuEvent
(event)[source] Display the context menu
-
createContextMenu
()[source] Define common context menu and associated actions for the MPL widget
-
createContextMenuQuick
()[source] Define context menu and associated actions for the quickplot MPL widget
-
data
data getter
-
defaultContextMenu
()[source] Content of the dialog-universal context menu: Save, Print and Copy
-
draw
()[source]
-
item
getter for this plot’s QStandardItem
-
offset_graph
()[source] Zoom and offset the graph to the last known settings
-
onClipboardCopy
()[source] Copy MPL widget area to buffer
-
onDataInfo
(plot_data)[source] Displays data info text window for the selected plot
-
onGridToggle
()[source] Add/remove grid lines from MPL plot
-
onImagePrint
()[source] Display printer dialog and print the MPL widget area
-
onImageSave
()[source] Use the internal MPL method for saving to file
-
onMplMouseDown
(event)[source] Mouse button down callback
-
onMplMouseMotion
(event)[source] Mouse motion callback
-
onMplMouseUp
(event)[source] Mouse button up callback
-
onMplPick
(event)[source] Mouse pick callback
-
onMplWheel
(event)[source] Mouse wheel scroll callback
-
onResize
(event)[source] Redefine default resize event
-
onSavePoints
(plot_data)[source] Saves plot data to a file
-
onToggleMenu
()[source] Toggle navigation menu visibility in the chart
-
onWindowsTitle
()[source] Show a dialog allowing chart title customisation
-
plot
(marker=None, linestyle=None)[source] PURE VIRTUAL Plot the content of self._data
-
showLegend
Legend visibility getter
-
title
(title='')[source] title setter
-
upatePlotHelper
()[source] Notify the plot helper about the new plot
-
update
(self)[source] update(self, QRect) update(self, QRegion) update(self, int, int, int, int)
-
xLabel
x-label setter
-
xscale
X-axis scale getter
-
yLabel
y-label setter
-
yscale
Y-axis scale getter
-
sas.qtgui.Plotting.PlotterData module
Adapters for fitting module
-
class
sas.qtgui.Plotting.PlotterData.
Data1D
(x=None, y=None, dx=None, dy=None)[source] Bases:
sas.qtgui.Plotting.Plottables.PlottableData1D
,sas.sascalc.dataloader.data_info.Data1D
-
ROLE_DATA
= 0
-
ROLE_DEFAULT
= 1
-
ROLE_DELETABLE
= 2
-
ROLE_RESIDUAL
= 3
-
copy_from_datainfo
(data1d)[source] copy values of Data1D of type DataLaoder.Data_info
-
-
class
sas.qtgui.Plotting.PlotterData.
Data2D
(image=None, err_image=None, qx_data=None, qy_data=None, q_data=None, mask=None, dqx_data=None, dqy_data=None, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None)[source] Bases:
sas.qtgui.Plotting.Plottables.PlottableData2D
,sas.sascalc.dataloader.data_info.Data2D
-
copy_from_datainfo
(data2d)[source] copy value of Data2D of type DataLoader.data_info
-
-
sas.qtgui.Plotting.PlotterData.
check_data_validity
(data)[source] Return True is data is valid enough to compute chisqr, else False
sas.qtgui.Plotting.QRangeSlider module
Double slider interactor for setting the Q range for a fit or function
-
class
sas.qtgui.Plotting.QRangeSlider.
LineInteractor
(base, axes, color='black', zorder=5, x=0.5, y=0.5, input=None, setter=None, getter=None)[source] Bases:
sas.qtgui.Plotting.Slicers.BaseInteractor.BaseInteractor
Draw a single vertical line that can be dragged on a plot
-
clear
()[source]
-
clear_markers
()[source] Disconnect the input and clear the callbacks
-
inputChanged
()[source] Track the input linked to the x value for this slider and update as needed
-
move
(x, y, ev)[source] Process move to a new position, making sure that the move is allowed.
-
onRelease
(ev)[source] Update the line position when the mouse button is released
-
remove
()[source] Clear this slicer and its markers
-
restore
(ev)[source] Restore the position for this line
-
save
(ev)[source] Remember the position for this line so that we can restore on Esc.
-
update
(x=None, y=None, draw=False)[source] Update the line position on the graph.
-
validate
(param_name, param_value)[source] Validate input from user - Should never fail
-
-
class
sas.qtgui.Plotting.QRangeSlider.
QRangeSlider
(base, axes, color='black', zorder=5, data=None)[source] Bases:
sas.qtgui.Plotting.Slicers.BaseInteractor.BaseInteractor
Draw a pair of draggable vertical lines. Each line can be linked to a GUI input. The GUI input should update the lines and vice-versa.
-
clear
()[source] Clear this slicer and its markers
-
clear_markers
()[source] Clear each of the lines individually
-
draw
()[source]
-
move
(x, y, ev)[source] Process move to a new position, making sure that the move is allowed.
-
restore
(ev)[source] Restore the roughness for this layer.
-
save
(ev)[source] Remember the roughness for this layer and the next so that we can restore on Esc.
-
set_layer
(n)[source] Allow adding plot to the same panel
Parameters: n – the number of layer
-
update
(x=None, y=None)[source] Draw the new roughness on the graph.
-
validate
(param_name, param_value)[source] Validate input from user
-
sas.qtgui.Plotting.ScaleProperties module
-
class
sas.qtgui.Plotting.ScaleProperties.
ScaleProperties
(parent=None, init_scale_x='x', init_scale_y='y')[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.ScalePropertiesUI.Ui_scalePropertiesUI
-
getValues
()[source] Return current values from comboboxes
-
viewIndexChanged
(index)[source] Update X and Y labels based on the “View” index
-
xyIndexChanged
(index)[source] Update View label based on the “X” and “Y” index
-
sas.qtgui.Plotting.SetGraphRange module
Allows users to change the range of the current graph
-
class
sas.qtgui.Plotting.SetGraphRange.
SetGraphRange
(parent=None, x_range=(0.0, 0.0), y_range=(0.0, 0.0))[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.SetGraphRangeUI.Ui_setGraphRangeUI
-
xrange
()[source] Return a tuple with line edit content of (xmin, xmax)
-
yrange
()[source] Return a tuple with line edit content of (ymin, ymax)
-
sas.qtgui.Plotting.SlicerModel module
-
class
sas.qtgui.Plotting.SlicerModel.
SlicerModel
[source] Bases:
object
-
getParams
()[source] pure virtual
-
model
()[source] getter for the model
-
setModelFromParams
()[source] Set up the Qt model for data handling between controls
-
setParams
()[source] pure virtual
-
setParamsFromModel
()[source] Set up the params dictionary based on the current model content.
-
setParamsFromModelItem
(item)[source] Set up the params dictionary for the parameter in item.
-
validate
()[source] pure virtual
-
sas.qtgui.Plotting.SlicerParameters module
Allows users to modify the box slicer parameters.
-
class
sas.qtgui.Plotting.SlicerParameters.
EditDelegate
(parent=None, validate_method=None)[source] Bases:
PyQt5.QtWidgets.QStyledItemDelegate
-
createEditor
(self, QWidget, QStyleOptionViewItem, QModelIndex) → QWidget[source]
-
refocus_signal
-
setModelData
(editor, model, index)[source] Custom version of the model update, rejecting bad values
-
-
class
sas.qtgui.Plotting.SlicerParameters.
PositiveDoubleEditor
(parent=None)[source] Bases:
PyQt5.QtWidgets.QLineEdit
-
editingFinished
-
focusOutEvent
(self, QFocusEvent)[source]
-
-
class
sas.qtgui.Plotting.SlicerParameters.
ProxyModel
(parent=None)[source] Bases:
PyQt5.QtCore.QIdentityProxyModel
Trivial proxy model with custom column edit flag
-
columnReadOnly
(column)[source] Returns True if column is read only, false otherwise
-
flags
(index)[source] Sets column flags
-
setColumnReadOnly
(column, readonly=True)[source] Add/removes a column from the readonly list
-
-
class
sas.qtgui.Plotting.SlicerParameters.
SlicerParameters
(parent=None, model=None, active_plots=None, validate_method=None, communicator=None)[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.SlicerParametersUI.Ui_SlicerParametersUI
Interaction between the QTableView and the underlying model, passed from a slicer instance.
-
applyPlotter
(plot)[source] Apply the current slicer to a plot
-
closeEvent
(event)[source] Overwritten close widget method in order to send the close signal to the parent.
-
closeWidgetSignal
-
enableFileControls
(enabled)[source] Sets enablement of file related UI elements
-
getCurrentPlotDict
()[source] Returns a dictionary of currently shown plots {plot_name:checkbox_status}
-
keyPressEvent
(event)[source] Added Esc key shortcut
-
onApply
()[source] Apply current slicer to selected plots
-
onChooseFilesLocation
()[source] Open save file location dialog
-
onFocus
(row, column)[source] Set the focus on the cell (row, column)
-
onGeneratePlots
(isChecked)[source] Respond to choice of auto saving plots
-
onHelp
()[source] Display generic data averaging help
-
onParamChange
()[source] Respond to param change by updating plots
-
onSlicerChanged
(index)[source] change the parameters based on the slicer chosen
-
prepareFilePathFromData
(data)[source] Prepares full, unique path for a 1D plot
-
save1DPlotsForPlot
(plots)[source] Save currently shown 1D sliced data plots for a given 2D plot
-
sendToFit
(items_for_fit, fitting_requested)[source] Send items_for_fit to the Fit perspective, in either single fit or batch mode
-
serializeData
(data, filepath)[source] Write out 1D plot in a requested format
-
setModel
(model)[source] Model setter
-
setParamsList
()[source] Create and initially populate the list of parameters
-
setPlotsList
()[source] Create and initially populate the list of plots
-
setSlots
()[source] define slots for signals from various sources
-
updatePlotList
()[source]
-
sas.qtgui.Plotting.WindowTitle module
Allows users to change the title of the current graph from “Graph_n” to any ASCII text.
-
class
sas.qtgui.Plotting.WindowTitle.
WindowTitle
(parent=None, new_title='')[source] Bases:
PyQt5.QtWidgets.QDialog
,sas.qtgui.Plotting.UI.WindowTitleUI.Ui_WindowTitle
Simple GUI for a single line text query
-
title
()[source] Return the new title
-
sas.qtgui.Plotting.rangeSlider module
-
class
sas.qtgui.Plotting.rangeSlider.
RangeSlider
(*args)[source] Bases:
PyQt5.QtWidgets.QSlider
A slider for ranges.
This class provides a dual-slider for ranges, where there is a defined maximum and minimum, as is a normal slider, but instead of having a single slider value, there are 2 slider values.
This class emits the same signals as the QSlider base class, with the exception of valueChanged.
In addition, two new signals are emitted to catch the movement of each handle, lowValueChanged(int) and highValueChanged(int).
-
highValue
()[source]
-
highValueChanged
-
lowValue
()[source]
-
lowValueChanged
-
mouseMoveEvent
(self, QMouseEvent)[source]
-
mousePressEvent
(self, QMouseEvent)[source]
-
mouseReleaseEvent
(self, QMouseEvent)[source]
-
paintEvent
(self, QPaintEvent)[source]
-
setHighValue
(high)[source]
-
setLowValue
(low)[source]
-