Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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))
Beispiel #6
0
    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")
Beispiel #7
0
 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}')
Beispiel #8
0
    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)
Beispiel #9
0
    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
Beispiel #10
0
    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")
Beispiel #11
0
    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)
Beispiel #12
0
    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)