def __init__(self): super(calibrationpanel, self).__init__() self.autoCalibrateAction = pTypes.ActionParameter( name='Auto Calibrate') self.autoCalibrateAction.sigActivated.connect(self.calibrate) calibrants = sorted(calibrant.ALL_CALIBRANTS.all.keys()) self.calibrant = pTypes.ListParameter(name='Calibrant Material', values=calibrants) self.autoCalibrateMethod = pTypes.ListParameter(name='Algorithm', values=self.algorithms) self.overlayAction = pTypes.ActionParameter(name='Simulate Calibrant') self.overlayAction.sigActivated.connect(self.simulatecalibrant) self.setParameters(pTypes.GroupParameter(name='Calibration', children=[ self.autoCalibrateAction, self.calibrant, self.autoCalibrateMethod, self.overlayAction ]), showTop=False)
def parameter(self) -> Parameter: if not self._param: self._param = parameterTypes.GroupParameter( name='Line ROI', children=[ parameterTypes.SimpleParameter(title='Center X', name='center_x', value=self.center_x, type='float', units='px'), parameterTypes.SimpleParameter(title='Center Y', name='center_y', value=self.center_y, type='float', units='px'), parameterTypes.SimpleParameter(title='Rotation Angle', name='rotation', value=self.rotation, type='float', units='px'), parameterTypes.SimpleParameter(title='Length', name='length', value=self.length, type='float', units='px'), parameterTypes.SimpleParameter(title='Width', name='width', value=self.width, type='float', units='px'), ]) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def parameter(self) -> Parameter: if not self._param: self._param = parameterTypes.GroupParameter( name="Rectangular ROI", children=[ parameterTypes.SimpleParameter(title="Width", name="width", value=self.width, type="float", units="px"), parameterTypes.SimpleParameter(title="Height", name="height", value=self.height, type="float", units="px"), parameterTypes.SimpleParameter(title="Horizontal Segments", name="segments_h", value=self.segments_h, type="int"), parameterTypes.SimpleParameter(title="Vertical Segments", name="segments_v", value=self.segments_v, type="int"), ], ) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def parameter(self): if not self._param: self._param = parameterTypes.GroupParameter( name="Segmented Arc ROI", children=[ parameterTypes.SimpleParameter( title="χ Segments", name="segments_angular", value=self.segments_angular, type="int", min=1 ), parameterTypes.SimpleParameter( title=f"{self.radius_name} segments", name="segments_radial", value=self.segments_radial, type="int", min=1 ), parameterTypes.SimpleParameter( title=f"{self.radius_name} Minimum", name="innerradius", value=self.innerradius, type="float", units=self.radius_units, min=0 ), parameterTypes.SimpleParameter( title=f"{self.radius_name} Maximum", name="outerradius", value=self.outerradius, type="float", units=self.radius_units, min=0 ), parameterTypes.SimpleParameter( title="χ Width", name="thetawidth", value=self.thetawidth, type="float", units="°" ), parameterTypes.SimpleParameter( title="χ Center", name="thetacenter", value=self.thetacenter, type="float", siSuffix="°" ), ], ) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def parameter(self): if not self._param: self._param = parameterTypes.GroupParameter( name='Arc ROI', children=[ parameterTypes.SimpleParameter(title='Q Minimum', name='innerradius', value=self.innerradius, type='float', units='Å⁻¹'), parameterTypes.SimpleParameter(title='Q Maximum', name='outerradius', value=self.outerradius, type='float', units='Å⁻¹'), parameterTypes.SimpleParameter(title='χ Width', name='thetawidth', value=self.thetawidth, type='float', units='°'), parameterTypes.SimpleParameter(title='χ Center', name='thetacenter', value=self.thetacenter, type='float', siSuffix='°') ]) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def _add_to_sidebar(self, parameter, category=None): """Add an item to the sidebar, connecting necessary signals.""" if category: # Create or grab our category if category in self.top_level_groups: group = self.top_level_groups[category] else: logger.debug("Creating new category %r ...", category) group = ptypes.GroupParameter(name=category) self._tree.addParameters(group) self._tree.sortItems(0, QtCore.Qt.AscendingOrder) logger.debug("Adding %r to category %r ...", parameter.name(), group.name()) group.addChild(parameter) widget = parameter.value() if isinstance(widget, QtWidgets.QWidget): # Setup window to have a parent widget.setParent(self) widget.setHidden(True) logger.debug("Connecting parameter signals ...") parameter.sigOpen.connect(partial(self.show_subdisplay, parameter), QtCore.Qt.QueuedConnection) parameter.sigHide.connect(partial(self.hide_subdisplay, parameter), QtCore.Qt.QueuedConnection) if parameter.embeddable: parameter.sigEmbed.connect( partial(self.embed_subdisplay, parameter), QtCore.Qt.QueuedConnection) return parameter
def build_parameter_list(params): return_params = [] for param_dict in params: assert 'key' in param_dict, 'Must provide a key for each item' assert 'value' in param_dict, 'Must provide a value for each item; %s does not have a value' % param_dict[ 'key'] if param_dict['value'] == None: continue if 'name' not in param_dict: param_dict['name'] = param_dict['key'] if param_dict['value'] == 'group': return_params.append( pTypes.GroupParameter( name=param_dict['name'], children=ParameterWidget.build_parameter_list( param_dict['children']))) continue if 'type' not in param_dict: param_dict['type'] = ParameterWidget.type_as_str( param_dict['value']) if param_dict['type'] == 'list': param_dict['values'] = param_dict.pop('value') return_params.append(param_dict) return return_params
def parameter(self): if not self._param: self._param = parameterTypes.GroupParameter( name="Arc ROI", children=[ parameterTypes.SimpleParameter(title="Q Minimum", name="innerradius", value=self.innerradius, type="float", units="Å⁻¹"), parameterTypes.SimpleParameter(title="Q Maximum", name="outerradius", value=self.outerradius, type="float", units="Å⁻¹"), parameterTypes.SimpleParameter(title="χ Width", name="thetawidth", value=self.thetawidth, type="float", units="°"), parameterTypes.SimpleParameter(title="χ Center", name="thetacenter", value=self.thetacenter, type="float", siSuffix="°"), ], ) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def parameter(self) -> Parameter: if not self._param: self._param = parameterTypes.GroupParameter( name='Rectangular ROI', children=[ parameterTypes.SimpleParameter(title='Width', name='width', value=self.width, type='float', units='px'), parameterTypes.SimpleParameter(title='Height', name='height', value=self.height, type='float', units='px'), parameterTypes.SimpleParameter(title='Horizontal Segments', name='segments_h', value=self.segments_h, type='int'), parameterTypes.SimpleParameter(title='Vertical Segments', name='segments_v', value=self.segments_v, type='int') ]) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def args_to_params(*args, **kwargs): param = parameterTypes.GroupParameter(name="Parameters") for arg in args + tuple(kwargs.values()): if isinstance(arg, Parameter): param.addChild(arg) elif isinstance(arg, (list, tuple)): param.addChild(args_to_params(*arg)) return param
def _create_node_controls_widget(self, node): controls_cls = node_to_controls_map[node.__class__.__name__] controls = controls_cls(node) params = parameterTypes.GroupParameter(name=repr(node)) params.addChild(controls) widget = ParameterTree(showHeader=False) widget.setParameters(params) widget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) widget.setSizeAdjustPolicy(1) return widget
def parameter(self): if not (hasattr(self, '_param') and self._param): instructions = parameterTypes.TextParameter(name='Instructions', value='Use the mouse to draw the mask. Click [Finish Mask] below when complete, or [Clear Selection] to start over.', readonly=True) clearmask = parameterTypes.ActionParameter(name='Clear Selection') finishmask = parameterTypes.ActionParameter(name='Finish Mask') children = [instructions, clearmask, finishmask] self._param = parameterTypes.GroupParameter(name='Polygon Mask', children=children) return self._param
def test_device_parameter_tree(qtbot, motor, device): tree = ParameterTree(showHeader=False) devices = ptypes.GroupParameter(name='Devices') tree.addParameters(devices) qtbot.addWidget(tree) # Device with no subdevices motor_param = DeviceParameter(motor, embeddable=False) assert len(motor_param.childs) == 0 devices.addChild(motor_param) # Device with subdevices dev_param = DeviceParameter(device, emeddable=True) assert len(dev_param.childs) == len(device._sub_devices) devices.addChild(dev_param)
def __init__(self, headermodel: QStandardItemModel, selectionmodel: QItemSelectionModel): super(CalibrationPanel, self).__init__() self.selectionmodel = selectionmodel self.headermodel = headermodel self.header().close() calibrants = dict( zip(calibrant.ALL_CALIBRANTS.keys(), calibrant.ALL_CALIBRANTS.values())) self.device = pTypes.ListParameter(name='Device', type='list', values=[], value='') self.calibrant = pTypes.ListParameter(name='Calibrant Material', values=calibrants, value=calibrants['AgBh']) self.autoCalibrateMethod = pTypes.ListParameter( name='Algorithm', values=self.algorithms.keys()) self.autoCalibrateAction = pTypes.ActionParameter( name='Auto Calibrate') self.autoCalibrateAction.sigActivated.connect(self.calibrate) self.calibratetext = pTypes.TextParameter(name='Instructions', value='', readonly=True, visible=False) self.parameter = pTypes.GroupParameter(name='Calibration', children=[ self.device, self.calibrant, self.autoCalibrateMethod, self.autoCalibrateAction, self.autoCalibrateAction, self.calibratetext ]) self.setParameters(self.parameter, showTop=False) from xicam.core.execution import Workflow self.workflow = Workflow()
def __init__(self, node_cls, parent=None): QDialog.__init__(self, parent) self.widget = ParameterTree(showHeader=False) layout = QVBoxLayout() layout.addWidget(self.widget) params = parameterTypes.GroupParameter(name="Parameters setup") self.node = node_cls() controls_cls = node_to_controls_map[node_cls.__name__] self.controls = controls_cls(self.node) params.addChild(self.controls) self.widget.setParameters(params) dialog_buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel ) layout.addWidget(dialog_buttons) dialog_buttons.accepted.connect(self._on_ok) dialog_buttons.rejected.connect(self.reject) self.setLayout(layout) self._thread = QThread()
def __init__(self): super(calibrationpanel, self).__init__() self.autoCalibrateAction = pTypes.ActionParameter( name='Auto Calibrate') self.autoCalibrateAction.sigActivated.connect(self.calibrate) calibrants = sorted(calibrant.calibrant_factory().all.keys()) self.calibrant = pTypes.ListParameter(name='Calibrant Material', values=calibrants) self.autoCalibrateMethod = pTypes.ListParameter( name='Algorithm', values=self.algorithms.keys()) self.setParameters(pTypes.GroupParameter(name='Calibration', children=[ self.autoCalibrateAction, self.calibrant, self.autoCalibrateMethod ]), showTop=False)
def parameter(self) -> Parameter: if not self._param: self._param = parameterTypes.GroupParameter( name="Line ROI", children=[ parameterTypes.SimpleParameter( title="Center X", name="center_x", value=self.center_x, type="float", units="px" ), parameterTypes.SimpleParameter( title="Center Y", name="center_y", value=self.center_y, type="float", units="px" ), parameterTypes.SimpleParameter( title="Rotation Angle", name="rotation", value=self.rotation, type="float", units="px" ), parameterTypes.SimpleParameter( title="Length", name="length", value=self.length, type="float", units="px" ), parameterTypes.SimpleParameter(title="Width", name="width", value=self.width, type="float", units="px"), ], ) self._param.sigTreeStateChanged.connect(self.valueChanged) return self._param
def __init__(self): super(spacegroupwidget, self).__init__() self.parameter = pTypes.GroupParameter(name='') self.setParameters(self.parameter, showTop=False) self.crystalsystem = pTypes.ListParameter(type='list', name='Crystal System', values=spacegrouptypes, value=None) self.spacegroupparameter = pTypes.ListParameter( type='list', name='Space Group', values=spacegroupnames[0], value=None) self.rotationstyle = pTypes.ListParameter(type='list', name='Rotation Mode', values=[ 'Sample-frame vector', 'Crystal-frame vector', 'Crystal plane' ]) self.rotationstyle.sigValueChanged.connect(self.rotationmodechanged) self.rotationxyz = VectorParameter(name='Vector (x,y,z)') self.rotationvectorsample = hideableGroup( name='Rotation (sample-frame vector)', children=[self.rotationxyz]) self.rotationxyz.setValue([0, 0, 1]) self.rotationuvw = VectorParameter(name='Vector (u,v,w)') self.rotationvectorcrystal = hideableGroup( name='Rotation (crystal-frame vector)', children=[self.rotationuvw]) self.rotationuvw.setValue([0, 0, 1]) self.rotationhkl = VectorParameter(name='Vector (h,k,l)') self.rotationplane = hideableGroup(name='Rotation (crystal plane)', children=[self.rotationhkl]) self.rotationhkl.setValue([0, 0, 1]) self.spacegroupeditors = [ triclinicparameter(), monoclinicparameter(), orthorhombicparameter(), tetragonalparameter(), trigonalparameter(), hexagonalparameter(), cubicparameter() ] self.rotations = [ self.rotationvectorsample, self.rotationvectorcrystal, self.rotationplane ] self.delta = pTypes.SimpleParameter(name=u'δ', type='float', value=2.67150153E-06) self.beta = pTypes.SimpleParameter(name=u'β', type='float', value=3.71373554E-09) self.refractiveindex = pTypes.GroupParameter( name='Refractive Index', children=[self.delta, self.beta]) self.redrawsg = pTypes.ActionParameter(name='Overlay space group') self.redrawsg.sigActivated.connect(self.drawoverlay) self.parameter.addChildren( [self.crystalsystem, self.spacegroupparameter] + self.spacegroupeditors + [self.rotationstyle] + self.rotations + [self.refractiveindex, self.redrawsg]) self.hidechildren() self.hiderotations() self.parameter.children()[2].show() self.rotations[0].show() self.crystalsystem.sigValueChanged.connect(self.crystalsystemchanged)
from qtpy.QtWidgets import QWidget, QListView, QPushButton, QSplitter, QVBoxLayout from qtpy.QtCore import QItemSelectionModel, Qt from qtpy.QtGui import QStandardItemModel from xicam.plugins import manager as pluginmanager from pyqtgraph.parametertree import ParameterTree, parameterTypes from xicam.gui.widgets.metadataview import MetadataWidget from functools import partial from xicam.core import threads from xicam.Acquire.runengine import get_run_engine empty_parameter = parameterTypes.GroupParameter(name='No parameters') class RunEngineWidget(QWidget): def __init__(self, *args, **kwargs): super(RunEngineWidget, self).__init__(*args, **kwargs) self.planview = QListView() self.plansmodel = pluginmanager.get_plugin_by_name('plans', 'SettingsPlugin').plansmodel # type: QStandardItemModel self.planview.setModel(self.plansmodel) self.selectionmodel = QItemSelectionModel(self.plansmodel) self.planview.setSelectionModel(self.selectionmodel) self.parameterview = ParameterTree() self.metadata = MetadataWidget() self.runbutton = QPushButton('Run') self.pausebutton = QPushButton('Pause') self.resumebutton = QPushButton('Resume')