def save_cb(self, mode): """Save image, figure, and plot data arrays.""" # This just defines the basename. # Extension has to be explicitly defined or things can get messy. target = Widgets.SaveDialog( title='Save {0} data'.format(mode)).get_path() # Save cancelled if not target: return # TODO: This can be a user preference? fig_dpi = 100 if mode == 'cuts': # Save as fits file image = self.fitsimage.get_image() self.fv.error_wrap(image.save_as_file, target + '.fits') fig, xarr, yarr = self.cuts_plot.get_data() elif mode == 'slit': fig, xarr, yarr = self.slit_plot.get_data() fig.savefig(target + '.png', dpi=fig_dpi) numpy.savez_compressed(target + '.npz', x=xarr, y=yarr)
def save_cb(self, mode): """Save image, figure, and plot data arrays.""" # This just defines the basename. # Extension has to be explicitly defined or things can get messy. w = Widgets.SaveDialog(title='Save {0} data'.format(mode)) filename = w.get_path() if filename is None: # user canceled dialog return # TODO: This can be a user preference? fig_dpi = 100 if mode == 'cuts': fig, xarr, yarr = self.cuts_plot.get_data() elif mode == 'slit': fig, xarr, yarr = self.slit_plot.get_data() figname = filename + '.png' self.logger.info("saving figure as: %s" % (figname)) fig.savefig(figname, dpi=fig_dpi) dataname = filename + '.npz' self.logger.info("saving data as: %s" % (dataname)) np.savez_compressed(dataname, x=xarr, y=yarr)
def save_plan_cb(self, w): try: if self.inputData is None: raise ValueError("No table data defined yet") w = Widgets.SaveDialog(title="Save Plan As", selectedfilter="*.yml") plan_file = w.get_path() if plan_file is None: # user cancelled dialog return # prepare a dict of the plan plan_dct = { d['proposal']: dict(qc_priority=d['qcp'], skip=d['skip']) for d in self.inputData.rows } plan_dct = dict(programs=plan_dct) with open(plan_file, 'w') as out_f: out_f.write(yaml.dump(plan_dct)) self.logger.info(f"wrote plan {plan_file}") except Exception as e: errmsg = f"error writing plan file: {e}" self.logger.error(errmsg, exc_info=True) self.view.gui_do(self.view.show_error, errmsg, raisetab=True)
def save_imlist(self): """Save selected image filename(s) to a plain text file. If no image selected, no output is generated. This can be re-implemented by sub-class if a different output format is needed. """ imlist = self.get_selected_paths() if len(imlist) == 0: s = 'No image selected!' self.logger.error(s) self.update_status(s) return fname = Widgets.SaveDialog(title='Save image list', selectedfilter='*.txt').get_path() if fname is None: # Cancel return if os.path.exists(fname): s = '{0} will be overwritten'.format(fname) self.logger.warn(s) ascii.write([imlist], fname, names=['IMAGE'], format='commented_header') s = 'Image list saved' self.logger.info(s) self.update_status(s)
def save_cb(self): """Save plot to file.""" # This just defines the basename. # Extension has to be explicitly defined or things can get messy. target = Widgets.SaveDialog(title='Save plot').get_path() plot_ext = self.settings.get('file_suffix', '.png') # Save cancelled if not target: return if not target.endswith(plot_ext): target += plot_ext # TODO: This can be a user preference? fig_dpi = 100 try: fig = self.tab_plot.get_figure() fig.savefig(target, dpi=fig_dpi) except Exception as e: self.logger.error(str(e)) else: self.logger.info('Table plot saved as {0}'.format(target))
def save_slice_cb(self): target = Widgets.SaveDialog(title='Save slice', selectedfilter='*.png').get_path() with open(target, 'w') as target_file: hival = self.fitsimage.get_cut_levels()[1] image = self.fitsimage.get_image() curr_slice_data = image.get_data() plt.imsave(target_file, curr_slice_data, vmax=hival, cmap=plt.get_cmap('gray'), origin='lower') self.fv.show_status("Successfully saved slice")
def save_params(self): """Save parameters to a JSON file.""" pardict = self.params_dict() fname = Widgets.SaveDialog( title='Save parameters', selectedfilter='*.json').get_path() if fname is None: # Cancel return if os.path.exists(fname): self.logger.warn(f'{fname} will be overwritten') with open(fname, 'w') as fout: json.dump(pardict, fout, indent=4, sort_keys=True, cls=JsonCustomEncoder) self.logger.info(f'Parameters saved as {fname}')
def save_movie_cb(self): start = int(self.w.start_slice.get_text()) end = int(self.w.end_slice.get_text()) if not start or not end: return elif start < 1 or end > (self.play_max + 1): self.fv.show_status("Wrong slice index") return elif start > end: self.fv.show_status("Wrong slice order") return start, end = start - 1, end - 1 w = Widgets.SaveDialog(title='Save Movie', selectedfilter='*.avi') target = w.get_path() if target is not None: self.save_movie(start, end, target)
def save_report_cb(self, w): def _save_rpt(path): text_buf = self.tw.get_text() with open(path, 'w') as out_f: out_f.write(text_buf) dialog_w = Widgets.SaveDialog(title="Save Report") dialog_w.show() path = dialog_w.get_path() dialog_w.hide() dialog_w.deleteLater() if path is None: return self.view.error_wrap(_save_rpt, path) return
def save_slice_cb(self): import matplotlib.pyplot as plt w = Widgets.SaveDialog(title='Save slice', selectedfilter='*.png') target = w.get_path() if target is None: # save canceled return with open(target, 'wb') as target_file: hival = self.fitsimage.get_cut_levels()[1] image = self.fitsimage.get_image() curr_slice_data = image.get_data() plt.imsave(target_file, curr_slice_data, vmax=hival, cmap=plt.get_cmap('gray'), origin='lower') self.fv.show_status("Successfully saved slice")
def save_movie_cb(self): start = int(self.w.start_slice.get_text()) end = int(self.w.end_slice.get_text()) if not start or not end: return elif start < 0 or end > self.play_max: self.fv.showStatus("Wrong slice index") return elif start > end: self.fv.showStatus("Wrong slice order") return if start == 1: start = 0 target = Widgets.SaveDialog(title='Save Movie', selectedfilter='*.avi').get_path() if target: self.save_movie(start, end, target)
def save_cb(self, mode): """Save image, figure, and plot data arrays.""" # This just defines the basename. # Extension has to be explicitly defined or things can get messy. target = Widgets.SaveDialog( title='Save {0} data'.format(mode)).get_path() # Save cancelled if not target: return # TODO: This can be a user preference? fig_dpi = 100 if mode == 'cuts': # Save as fits file image = self.fitsimage.get_image() self.fv.error_wrap(image.save_as_file, target + '.fits') fig, xarr, yarr = self.cuts_plot.get_data() elif mode == 'slit': fig, xarr, yarr = self.slit_plot.get_data() if isinstance(target, tuple): # is this always a tuple? filename = target[0] if filename == '': # user canceled dialog return False else: filename = target figname = filename + '.png' self.logger.info("saving figure as: %s" % (figname)) fig.savefig(figname, dpi=fig_dpi) dataname = filename + '.npz' self.logger.info("saving data as: %s" % (dataname)) numpy.savez_compressed(dataname, x=xarr, y=yarr)