def _saveCurveAsNXdata(self, curve, filename): entryPath = self._selectWriteableOutputGroup(filename) if entryPath is None: return False xlabel, ylabel = self._getAxesLabels(curve) return save_NXdata(filename, nxentry_name=entryPath, signal=curve.getYData(copy=False), axes=[curve.getXData(copy=False)], signal_name="y", axes_names=["x"], signal_long_name=ylabel, axes_long_names=[xlabel], signal_errors=curve.getYErrorData(copy=False), axes_errors=[curve.getXErrorData(copy=True)], title=self.plot.getGraphTitle())
def _saveCurveAsNXdata(self, curve, filename): entryPath = self._selectWriteableOutputGroup(filename) if entryPath is None: return False xlabel, ylabel = self._getAxesLabels(curve) return save_NXdata( filename, nxentry_name=entryPath, signal=curve.getYData(copy=False), axes=[curve.getXData(copy=False)], signal_name="y", axes_names=["x"], signal_long_name=ylabel, axes_long_names=[xlabel], signal_errors=curve.getYErrorData(copy=False), axes_errors=[curve.getXErrorData(copy=True)], title=self.plot.getGraphTitle())
def _saveScatter(self, plot, filename, nameFilter): """Save an image from the plot. :param str filename: The name of the file to write :param str nameFilter: The selected name filter :return: False if format is not supported or save failed, True otherwise. """ if nameFilter not in self.DEFAULT_SCATTER_FILTERS: return False if nameFilter == self.SCATTER_FILTER_NXDATA: entryPath = self._selectWriteableOutputGroup(filename) if entryPath is None: return False scatter = plot.getScatter() x = scatter.getXData(copy=False) y = scatter.getYData(copy=False) z = scatter.getValueData(copy=False) xerror = scatter.getXErrorData(copy=False) if isinstance(xerror, float): xerror = xerror * numpy.ones(x.shape, dtype=numpy.float32) yerror = scatter.getYErrorData(copy=False) if isinstance(yerror, float): yerror = yerror * numpy.ones(x.shape, dtype=numpy.float32) xlabel = plot.getGraphXLabel() ylabel = plot.getGraphYLabel() return save_NXdata( filename, nxentry_name=entryPath, signal=z, axes=[x, y], signal_name="values", axes_names=["x", "y"], axes_long_names=[xlabel, ylabel], axes_errors=[xerror, yerror], title=plot.getGraphTitle())
def _saveImageStack(self, plot, filename, nameFilter): """Save all images from the stack into a volume. :param str filename: The name of the file to write :param str nameFilter: The selected name filter :return: False if format is not supported or save failed, True otherwise. :raises: ValueError if nameFilter is invalid """ if not nameFilter == self.IMAGE_STACK_FILTER_NXDATA: raise ValueError('Wrong callback') entryPath = silx_io.SaveAction._selectWriteableOutputGroup(filename, parent=self) if entryPath is None: return False return save_NXdata(filename, nxentry_name=entryPath, signal=self.getStack(copy=False, returnNumpyArray=True)[0], signal_name="image_stack")
def _saveScatter(self, filename, nameFilter): """Save an image from the plot. :param str filename: The name of the file to write :param str nameFilter: The selected name filter :return: False if format is not supported or save failed, True otherwise. """ if nameFilter not in self.SCATTER_FILTERS: return False if nameFilter == self.SCATTER_FILTER_NXDATA: scatter = self.plot.getScatter() # TODO: we could get all scatters on this plot and concatenate their (x, y, values) x = scatter.getXData(copy=False) y = scatter.getYData(copy=False) z = scatter.getValueData(copy=False) xerror = scatter.getXErrorData(copy=False) if isinstance(xerror, float): xerror = xerror * numpy.ones(x.shape, dtype=numpy.float32) yerror = scatter.getYErrorData(copy=False) if isinstance(yerror, float): yerror = yerror * numpy.ones(x.shape, dtype=numpy.float32) xlabel = self.plot.getGraphXLabel() ylabel = self.plot.getGraphYLabel() return save_NXdata(filename, signal=z, axes=[x, y], signal_name="values", axes_names=["x", "y"], axes_long_names=[xlabel, ylabel], axes_errors=[xerror, yerror], title=self.plot.getGraphTitle())
def _saveImage(self, plot, filename, nameFilter): """Save an image from the plot. :param str filename: The name of the file to write :param str nameFilter: The selected name filter :return: False if format is not supported or save failed, True otherwise. """ if nameFilter not in self.DEFAULT_IMAGE_FILTERS: return False image = plot.getActiveImage() if image is None: qt.QMessageBox.warning( plot, "No Data", "No image to be saved") return False data = image.getData(copy=False) # TODO Use silx.io for writing files if nameFilter == self.IMAGE_FILTER_EDF: edfFile = EdfFile(filename, access="w+") edfFile.WriteImage({}, data, Append=0) return True elif nameFilter == self.IMAGE_FILTER_TIFF: tiffFile = TiffIO(filename, mode='w') tiffFile.writeImage(data, software='silx') return True elif nameFilter == self.IMAGE_FILTER_NUMPY: try: numpy.save(filename, data) except IOError: self._errorMessage('Save failed\n') return False return True elif nameFilter == self.IMAGE_FILTER_NXDATA: entryPath = self._selectWriteableOutputGroup(filename) if entryPath is None: return False xorigin, yorigin = image.getOrigin() xscale, yscale = image.getScale() xaxis = xorigin + xscale * numpy.arange(data.shape[1]) yaxis = yorigin + yscale * numpy.arange(data.shape[0]) xlabel, ylabel = self._getAxesLabels(image) interpretation = "image" if len(data.shape) == 2 else "rgba-image" return save_NXdata(filename, nxentry_name=entryPath, signal=data, axes=[yaxis, xaxis], signal_name="image", axes_names=["y", "x"], axes_long_names=[ylabel, xlabel], title=plot.getGraphTitle(), interpretation=interpretation) elif nameFilter in (self.IMAGE_FILTER_ASCII, self.IMAGE_FILTER_CSV_COMMA, self.IMAGE_FILTER_CSV_SEMICOLON, self.IMAGE_FILTER_CSV_TAB): csvdelim, filetype = { self.IMAGE_FILTER_ASCII: (' ', 'txt'), self.IMAGE_FILTER_CSV_COMMA: (',', 'csv'), self.IMAGE_FILTER_CSV_SEMICOLON: (';', 'csv'), self.IMAGE_FILTER_CSV_TAB: ('\t', 'csv'), }[nameFilter] height, width = data.shape rows, cols = numpy.mgrid[0:height, 0:width] try: save1D(filename, rows.ravel(), (cols.ravel(), data.ravel()), filetype=filetype, xlabel='row', ylabels=['column', 'value'], csvdelim=csvdelim, autoheader=True) except IOError: self._errorMessage('Save failed\n') return False return True elif nameFilter == self.IMAGE_FILTER_RGB_PNG: # Get displayed image rgbaImage = image.getRgbaImageData(copy=False) # Convert RGB QImage qimage = convertArrayToQImage(rgbaImage[:, :, :3]) if qimage.save(filename, 'PNG'): return True else: _logger.error('Failed to save image as %s', filename) qt.QMessageBox.critical( self.parent(), 'Save image as', 'Failed to save image') return False
def _saveCurve(self, filename, nameFilter): """Save a curve from the plot. :param str filename: The name of the file to write :param str nameFilter: The selected name filter :return: False if format is not supported or save failed, True otherwise. """ if nameFilter not in self.CURVE_FILTERS: return False # Check if a curve is to be saved curve = self.plot.getActiveCurve() # before calling _saveCurve, if there is no selected curve, we # make sure there is only one curve on the graph if curve is None: curves = self.plot.getAllCurves() if not curves: self._errorMessage("No curve to be saved") return False curve = curves[0] if nameFilter in self.CURVE_FILTERS_TXT: filter_ = self.CURVE_FILTERS_TXT[nameFilter] fmt = filter_['fmt'] csvdelim = filter_['delimiter'] autoheader = filter_['header'] else: # .npy or nxdata fmt, csvdelim, autoheader = ("", "", False) # If curve has no associated label, get the default from the plot xlabel = curve.getXLabel() if xlabel is None: xlabel = self.plot.getXAxis().getLabel() ylabel = curve.getYLabel() if ylabel is None: ylabel = self.plot.getYAxis().getLabel() if nameFilter == self.CURVE_FILTER_NXDATA: return save_NXdata(filename, signal=curve.getYData(copy=False), axes=[curve.getXData(copy=False)], signal_name="y", axes_names=["x"], signal_long_name=ylabel, axes_long_names=[xlabel], signal_errors=curve.getYErrorData(copy=False), axes_errors=[curve.getXErrorData(copy=True)], title=self.plot.getGraphTitle()) try: save1D(filename, curve.getXData(copy=False), curve.getYData(copy=False), xlabel, [ylabel], fmt=fmt, csvdelim=csvdelim, autoheader=autoheader) except IOError: self._errorMessage('Save failed\n') return False return True