def appendCatalog(self, catalog: BlueskyRun): # give catalog to out catalog viewer self.split_widget.catalog_view.setCatalog(catalog, 'primary', 'img') display_name = f"scan:{catalog.metadata['start']['scan_id']}" item = QStandardItem() item.setData(display_name, Qt.DisplayRole) item.setData(catalog, Qt.UserRole) self.model.appendRow(item) # tell our model that the data has been updated, the two parameters are rox index and column index self.model.dataChanged.emit(item.index(), item.index())
def test_metadataview(qtbot, catalog): catalogmodel = QStandardItemModel() selectionmodel = QItemSelectionModel() selectionmodel.setModel(catalogmodel) item = QStandardItem() item.setData('test catalog', Qt.DisplayRole) item.setData(catalog, Qt.UserRole) catalogmodel.appendRow(item) catalogmodel.dataChanged.emit(item.index(), item.index()) selectionmodel.setCurrentIndex(catalogmodel.indexFromItem(item), selectionmodel.SelectCurrent) w = MetadataView(catalogmodel, selectionmodel) w.show()
def add_model(self, model): """ Adds a model to the internal Qt model. Parameters ---------- model : :class:`astropy.modeling.FittableModel` The model instance to add. Returns ------- :class:`qtpy.QtCore.QModelIndex` The index in the Qt model where the new model been added. """ model_name = model.name or model.__class__.name model_count = len([self.item(idx) for idx in range(self.rowCount()) if model_name in self.item(idx).text()]) model_name = model_name + "_" + str(model_count) \ if model_count > 0 else model_name model_item = QStandardItem(model_name) model_item.setData(model, Qt.UserRole + 1) for para_name in model.param_names: # Retrieve the parameter object from the model parameter = getattr(model, para_name) # Store the name value param_name = QStandardItem(parameter.name) param_name.setData(parameter.name, Qt.UserRole + 1) param_name.setEditable(False) # Store the data value of the parameter param_value = QStandardItem("{:.5g}".format(parameter.value)) param_value.setData(parameter.value, Qt.UserRole + 1) # Store the unit information # param_unit = QStandardItem("{}".format(parameter.unit)) param_unit = QStandardItem("Plot Units") param_unit.setData(parameter.unit, Qt.UserRole + 1) param_unit.setEditable(False) # Store the fixed state of the unit param_fixed = QStandardItem() param_fixed.setData(parameter.fixed, Qt.UserRole + 1) param_fixed.setCheckable(True) param_fixed.setEditable(False) model_item.appendRow([param_name, param_value, param_unit, param_fixed]) self.appendRow([model_item, None, None, None]) # Add this model to the model equation string. By default, all models # are simply added together self._equation += " + {}".format(model_name) \ if len(self._equation) > 0 else "{}".format(model_name) return model_item.index()
def add_model(self, model): model_name = model.__class__.name model_count = len([ self.item(idx) for idx in range(self.rowCount()) if model.__class__.name in self.item(idx).text() ]) model_name = model_name + str( model_count) if model_count > 0 else model_name model_item = QStandardItem(model_name) model_item.setData(model, Qt.UserRole + 1) for para_name in model.param_names: # Retrieve the parameter object from the model parameter = getattr(model, para_name) # Store the name value param_name = QStandardItem(parameter.name) param_name.setData(parameter.name, Qt.UserRole + 1) param_name.setEditable(False) # Store the data value of the parameter param_value = QStandardItem("{:.5g}".format(parameter.value)) param_value.setData(parameter.value, Qt.UserRole + 1) # Store the unit information # param_unit = QStandardItem("{}".format(parameter.unit)) param_unit = QStandardItem("Plot Units") param_unit.setData(parameter.unit, Qt.UserRole + 1) param_unit.setEditable(False) # Store the fixed state of the unit param_fixed = QStandardItem() param_fixed.setData(parameter.fixed, Qt.UserRole + 1) param_fixed.setCheckable(True) param_fixed.setEditable(False) model_item.appendRow( [param_name, param_value, param_unit, param_fixed]) self.appendRow([model_item, None, None, None]) # Add this model to the model equation string. By default, all models # are simply added together self._equation += " + {}".format(model_name) \ if len(self._equation) > 0 else "{}".format(model_name) return model_item.index()
def updatePlot(self, item: QStandardItem): self.clear() itemIndex = QPersistentModelIndex(item.index()) if item.checkState(): self.checkedItemIndexes.append(itemIndex) else: # TODO -- might need try for ValueError self.checkedItemIndexes.remove(itemIndex) g2 = list(self.results('norm-0-g2')) g2Err = list(self.results('norm-0-stderr')) lagSteps = list(self.results('tau')) fitCurve = list(self.results('g2avgFIT1')) roiList = list(self.results('dqlist')) for roi in range(len(self.checkedItemIndexes)): yData = g2[roi].squeeze() xData = lagSteps[roi].squeeze() color = [ float(roi) / len(self.checkedItemIndexes) * 255, (1 - float(roi) / len(self.checkedItemIndexes)) * 255, 255 ] self.plotOpts['pen'] = color err = g2Err[roi].squeeze() self.plot.addItem( pg.ErrorBarItem(x=np.log10(xData), y=yData, top=err, bottom=err, **self.plotOpts)) curve = self.plot.plot(x=xData, y=yData, **self.plotOpts) opts = self.plotOpts.copy() opts['pen'] = pg.mkPen(self.plotOpts['pen']) # type: QPen opts['pen'].setStyle(Qt.DashLine) name = roiList[roi] curveItem = CurveItemSample(curve, name=name) self._curveItems.append(curveItem) self.legend.addItem(curveItem, curveItem.name) if len(fitCurve[roi]) > 0: fit_curve = self.plot.plot(x=xData, y=fitCurve[roi].squeeze(), **opts) fitCurveItem = CurveItemSample(fit_curve, name=f'{name} (fit)') self._curveItems.append(fitCurveItem) self.legend.addItem(fitCurveItem, fitCurveItem.name) self.legend.show()