Source code for taurus.qt.qtgui.extra_guiqwt.builder

#!/usr/bin/env python

# ###########################################################################
#
# This file is part of Taurus
#
# http://taurus-scada.org
#
# Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
#
# Taurus is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Taurus is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Taurus.  If not, see <http://www.gnu.org/licenses/>.
#
# ###########################################################################

"""Extension of :mod:`guiqwt.builder`
"""

import guiqwt.builder
import numpy

from .curve import TaurusCurveItem, TaurusTrendItem
from .image import (
    TaurusImageItem,
    TaurusRGBImageItem,
    TaurusEncodedImageItem,
    TaurusEncodedRGBImageItem,
    TaurusXYImageItem,
)
from guiqwt.curve import CurveParam
from guiqwt.image import ImageParam
from guiqwt.styles import XYImageParam
from guiqwt.config import _
from guiqwt.histogram import lut_range_threshold
from taurus.core.units import Quantity

__all__ = ["TaurusPlotItemBuilder", "make"]

__docformat__ = "restructuredtext"


[docs]class TaurusPlotItemBuilder(guiqwt.builder.PlotItemBuilder): """extension of :class:`guiqwt.builder.PlotItemBuilder` to provide tauruscurve and taurusimage items""" def __init__(self, *args, **kwargs): guiqwt.builder.PlotItemBuilder.__init__(self, *args, **kwargs)
[docs] def set_curve_axes(self, *args, **kwargs): # ugly hack: I need to redefine this here because it is a private # method in PlotItemBuilder guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_curve_axes( self, *args, **kwargs )
[docs] def set_image_param(self, *args, **kwargs): # ugly hack: I need to redefine this here because it is a private # method in PlotItemBuilder guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_image_param( self, *args, **kwargs )
[docs] def set_param(self, *args, **kwargs): # ugly hack: I need to redefine this here because it is a private # method in PlotItemBuilder guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_param( self, *args, **kwargs )
[docs] def pcurve(self, x, y, param, xaxis="bottom", yaxis="left"): """ Extension to meth:`guiqwt.builder.PlotItemBuilder.pcurve` to support x and y being taurus attribute models instead of arrays, in which case, a TaurusCurveItem is returned. This method is called from :meth:`curve` Usage: pcurve(x, y, param) """ if x is None or numpy.isscalar(x) or numpy.isscalar(y): curve = TaurusCurveItem(param) curve.setModels(x, y) curve.update_params() self.set_curve_axes(curve, xaxis, yaxis) else: curve = guiqwt.builder.PlotItemBuilder.pcurve( self, x, y, param, xaxis="bottom", yaxis="left" ) return curve
[docs] def image(self, taurusmodel=None, **kwargs): """Extension to meth:`guiqwt.builder.PlotItemBuilder.image` to support passing a 'taurusmodel' as a keyword argument instead passing 'data' or 'filename'. """ if taurusmodel is None: image = guiqwt.builder.PlotItemBuilder.image(self, **kwargs) else: title = kwargs.get("title", taurusmodel) data = kwargs.get("data", None) filename = kwargs.get("filename", None) alpha_mask = kwargs.get("alpha_mask", None) alpha = kwargs.get("alpha", None) background_color = kwargs.get("background_color", None) colormap = kwargs.get("colormap", None) xdata = kwargs.get("xdata", [None, None]) ydata = kwargs.get("ydata", [None, None]) pixel_size = kwargs.get("pixel_size", None) interpolation = kwargs.get("interpolation", "linear") eliminate_outliers = kwargs.get("eliminate_outliers", None) xformat = kwargs.get("xformat", "%.1f") yformat = kwargs.get("yformat", "%.1f") zformat = kwargs.get("zformat", "%.1f") forceRGB = kwargs.get("force_rgb", False) assert isinstance(xdata, (tuple, list)) and len(xdata) == 2 assert isinstance(ydata, (tuple, list)) and len(ydata) == 2 assert filename is None assert data is None param = ImageParam(title=_("Image"), icon="image.png") from taurus import Attribute if pixel_size is None: xmin, xmax = xdata ymin, ymax = ydata else: attr = Attribute(taurusmodel) valueobj = attr.read() data = getattr(valueobj, "rvalue", numpy.zeros((1, 1))) attrdata = data if isinstance(data, Quantity): attrdata = data.magnitude xmin, xmax, ymin, ymax = self.compute_bounds( attrdata, pixel_size ) self.set_image_param( param, title, alpha_mask, alpha, interpolation, background=background_color, colormap=colormap, xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, xformat=xformat, yformat=yformat, zformat=zformat, ) from taurus.core import DataType if forceRGB: if Attribute(taurusmodel).getType() == DataType.DevEncoded: image = TaurusEncodedRGBImageItem(param) else: image = TaurusRGBImageItem(param) else: if Attribute(taurusmodel).getType() == DataType.DevEncoded: image = TaurusEncodedImageItem(param) else: image = TaurusImageItem(param) image.setModel(taurusmodel) if eliminate_outliers is not None: image.set_lut_range( lut_range_threshold(image, 256, eliminate_outliers) ) return image
[docs] def xyimage(self, taurusmodel=None, **kwargs): if taurusmodel is None: return guiqwt.builder.PlotItemBuilder.xyimage(self, **kwargs) title = kwargs.get("title", taurusmodel) alpha_mask = kwargs.get("alpha_mask", None) alpha = kwargs.get("alpha", None) background_color = kwargs.get("background_color", None) colormap = kwargs.get("colormap", None) interpolation = kwargs.get("interpolation", "linear") eliminate_outliers = kwargs.get("eliminate_outliers", None) xformat = kwargs.get("xformat", "%.1f") yformat = kwargs.get("yformat", "%.1f") zformat = kwargs.get("zformat", "%.1f") param = XYImageParam(title=_("Image"), icon="image.png") self.set_image_param( param, title, alpha_mask, alpha, interpolation, background=background_color, colormap=colormap, xformat=xformat, yformat=yformat, zformat=zformat, ) image = TaurusXYImageItem(param) image.setModel(taurusmodel) if eliminate_outliers is not None: image.set_lut_range( lut_range_threshold(image, 256, eliminate_outliers) ) return image
[docs] def rgbimage(self, taurusmodel=None, **kwargs): if taurusmodel is None: image = guiqwt.builder.PlotItemBuilder.rgbimage(self, **kwargs) else: image = self.image( taurusmodel=taurusmodel, force_rgb=True, **kwargs ) return image
[docs] def ttrend( self, model, taurusparam=None, title="", color=None, linestyle=None, linewidth=None, marker=None, markersize=None, markerfacecolor=None, markeredgecolor=None, shade=None, fitted=None, curvestyle=None, curvetype=None, baseline=None, ): """ Make a taurus trend item :return (TaurusTrendItem): """ curveparam = CurveParam(icon="curve.png") if not title: title = model self.set_param( curveparam, title, color, linestyle, linewidth, marker, markersize, markerfacecolor, markeredgecolor, shade, fitted, curvestyle, curvetype, baseline, ) item = TaurusTrendItem(curveparam=curveparam, taurusparam=taurusparam) item.setModel(model) item.update_params() return item
# "make" is an instance of the builder # (this mimics the structure of guiqwt.builder.make) make = TaurusPlotItemBuilder()