Esempio n. 1
0
    def view_mask(self):
        data = SimpleDataInfo({'Original mask': load_nifti(self.selectedMaskText.text()).get_data(),
                               'Slice mask': load_nifti(self.selectedOutputFileText.text()).get_data()})

        config = MapPlotConfig()
        config.dimension = self.dimensionInput.value()
        config.slice_index = self.sliceInput.value()
        config.maps_to_show = ['Original mask', 'Slice mask']

        start_gui(data=data, config=config, app_exec=False)
Esempio n. 2
0
    def _start_maps_visualizer(self):
        folder = self.selectedOutputFolder.text(
        ) + '/' + self._get_current_model_name()
        maps = mdt.load_volume_maps(folder)
        a_map = maps[list(maps.keys())[0]]

        config = MapPlotConfig()
        config.dimension = 2

        if len(a_map.shape) > 2:
            config.slice_index = a_map.shape[2] // 2

        start_gui(data=SimpleDataInfo.from_paths([folder]),
                  config=config,
                  app_exec=False)
Esempio n. 3
0
    def set_data(self, data_info, config=None):
        self._data_info = data_info
        self._actions_history = []
        self._redoable_actions = []

        if not config:
            config = MapPlotConfig()
        elif not isinstance(config, MapPlotConfig):
            config = MapPlotConfig.from_dict(config.to_dict())

        config.maps_to_show = list(
            filter(lambda k: k in data_info.maps, config.maps_to_show))

        self._apply_config(config)
        self.new_data.emit(data_info)
        self.new_config.emit(self._current_config)
Esempio n. 4
0
    def _open_new_directory(self):
        initial_dir = self._controller.get_data().directory
        new_dir = QFileDialog(self).getExistingDirectory(
            caption='Select a folder', directory=initial_dir)
        if new_dir:
            data = DataInfo.from_dir(new_dir)
            config = MapPlotConfig()

            if len(data.maps):
                config.slice_index = data.get_max_slice_index(
                    config.dimension) // 2

            if self._controller.get_data().maps:
                start_gui(data, config, app_exec=False)
            else:
                self._controller.set_data(data, config)
    def view_mask(self):
        mask = np.expand_dims(load_brain_mask(self.selectedOutputText.text()),
                              axis=3)
        image_data = load_nifti(self.selectedImageText.text()).get_data()
        masked_image = image_data * mask

        data = SimpleDataInfo({
            'Masked': masked_image,
            'DWI': image_data,
            'Mask': mask
        })

        config = MapPlotConfig()
        config.dimension = 2
        config.slice_index = image_data.shape[2] // 2
        config.maps_to_show = ['DWI', 'Masked', 'Mask']

        start_gui(data=data, config=config, app_exec=False)
Esempio n. 6
0
    def set_data(self, data_info, config=None):
        config = config or MapPlotConfig()
        if not isinstance(config, MapPlotConfig):
            config = MapPlotConfig.from_dict(config.to_dict())

        self._current_model = SimpleDataConfigModel(data_info, config)

        if data_info.get_map_names():
            max_dim = data_info.get_max_dimension()
            if max_dim < config.dimension:
                config.dimension = max_dim

        config.maps_to_show = list(
            filter(lambda k: k in data_info.get_map_names(),
                   config.maps_to_show))

        self._actions_history = []
        self._redoable_actions = []
        self.model_updated.emit(self._current_model)
Esempio n. 7
0
    def view_maps(self):
        if self._folder is None:
            return

        maps_to_show = []
        for item in [
                self.selectMaps.item(index)
                for index in range(self.selectMaps.count())
        ]:
            if item.isSelected():
                maps_to_show.append(item.text())

        data = SimpleDataInfo.from_paths([self._folder])

        config = MapPlotConfig()
        config.maps_to_show = maps_to_show
        config.dimension = self.initialDimensionChooser.value()
        config.slice_index = self.initialSliceChooser.value()

        start_gui(data=data, config=config, app_exec=False)
Esempio n. 8
0
 def _load_settings(self):
     config_file = ['conf (*.conf)', 'All files (*)']
     file_name, used_filter = QFileDialog().getOpenFileName(caption='Select the GUI config file',
                                                            filter=';;'.join(config_file))
     if file_name:
         with open(file_name, 'r') as f:
             try:
                 self._controller.apply_action(NewConfigAction(MapPlotConfig.from_yaml(f.read())))
             except yaml.parser.ParserError:
                 pass
             except yaml.scanner.ScannerError:
                 pass
             except ValueError:
                 pass
Esempio n. 9
0
    def _config_from_string(self, text):
        self._flags['updating_config_from_string'] = True
        text = text.replace('\t', ' '*4)
        try:
            if text.strip() != '':
                new_config = MapPlotConfig.from_yaml(text)
                new_config.validate(self._controller.get_data())

                self._controller.apply_action(NewConfigAction(new_config))
                self._update_status_indication(True)

        except Exception as exc:
            self._update_status_indication(False, str(exc))
            pass
        finally:
            self._flags['updating_config_from_string'] = False
Esempio n. 10
0
def write_view_maps_figure(data,
                           output_filename,
                           config=None,
                           width=None,
                           height=None,
                           dpi=None,
                           figure_options=None,
                           savefig_settings=None):
    """Saves the view maps figure to a file.

    Args:
        data (str, dict, :class:`~mdt.visualization.maps.base.DataInfo`, list, tuple): the data we are showing,
            either a dictionary with result maps, a string with a path name, a DataInfo object or a list
            with filenames and or directories.
        config (str, dict, :class:`~mdt.visualization.maps.base import MapPlotConfig`): either a Yaml string or a
            dictionary with configuration settings or a ValidatedMapPlotConfig object to use directly
        output_filename (str): the output filename
        width (int): the width of the figure, if set it takes precedence over the value in figure_options
        height (int): the height of the figure, if set it takes precedence over the value in figure_options
        dpi (int): the dpi of the figure, if set it takes precedence over the value in figure_options
        figure_options (dict): additional figure options for the matplotlib Figure, supports the
            same settings as :func:`view_maps`, that is, if the arguments 'width' and 'height' are not set directly
            in this function we can also use those in the figure_options
        savefig_settings (dict): extra output options for the savefig command from matplotlib, if dpi is not given, we
            use the dpi from the figure_options.
    """
    from mdt.gui.maps_visualizer.main import start_gui
    from mdt.visualization.maps.base import MapPlotConfig
    from mdt.visualization.maps.matplotlib_renderer import MapsVisualizer
    import matplotlib.pyplot as plt
    from mdt.visualization.maps.base import SimpleDataInfo

    if isinstance(data, string_types):
        data = SimpleDataInfo.from_paths([data])
    elif isinstance(data, dict):
        data = SimpleDataInfo(data)
    elif isinstance(data, collections.Sequence):
        data = SimpleDataInfo.from_paths(data)
    elif data is None:
        data = SimpleDataInfo({})

    if config is None:
        config = MapPlotConfig()
    elif isinstance(config, string_types):
        if config.strip():
            config = MapPlotConfig.from_yaml(config)
        else:
            config = MapPlotConfig()
    elif isinstance(config, dict):
        config = MapPlotConfig.from_dict(config)

    figure_options = figure_options or {}

    if dpi is not None:
        figure_options['dpi'] = dpi
    else:
        figure_options['dpi'] = figure_options.get('dpi', 80)

    if height is not None and width is not None:
        figure_options['figsize'] = (width / figure_options['dpi'],
                                     height / figure_options['dpi'])
    elif height is not None and width is None:
        width = figure_options.get('width', 800)
        figure_options['figsize'] = (width / figure_options['dpi'],
                                     height / figure_options['dpi'])
    elif width is not None and height is None:
        height = figure_options.get('height', 640)
        figure_options['figsize'] = (width / figure_options['dpi'],
                                     height / figure_options['dpi'])
    elif 'figsize' in figure_options:
        pass
    else:
        width = figure_options.get('width', 800)
        height = figure_options.get('height', 640)
        figure_options['figsize'] = (width / figure_options['dpi'],
                                     height / figure_options['dpi'])

    if 'width' in figure_options:
        del figure_options['width']
    if 'height' in figure_options:
        del figure_options['height']

    figure = plt.figure(**figure_options)
    viz = MapsVisualizer(data, figure)

    savefig_settings = savefig_settings or {}
    savefig_settings['dpi'] = savefig_settings.get('dpi',
                                                   figure_options['dpi'])
    viz.to_file(output_filename, config, **savefig_settings)
Esempio n. 11
0
def view_maps(data,
              config=None,
              figure_options=None,
              block=True,
              show_maximized=False,
              use_qt=True,
              window_title=None):
    """View a number of maps using the MDT Maps Visualizer.

    Args:
        data (str, dict, :class:`~mdt.visualization.maps.base.DataInfo`, list, tuple): the data we are showing,
            either a dictionary with result maps, a string with a path name, a DataInfo object or a list
            with filenames and/or directories.
        config (str, dict, :class:`~mdt.visualization.maps.base import MapPlotConfig`): either a Yaml string or a
            dictionary with configuration settings or a ValidatedMapPlotConfig object to use directly
        figure_options (dict): figure options for the matplotlib Figure, if figsizes is not given you can also specify
            two ints, width and height, to indicate the pixel size of the resulting figure, together with the dpi they
            are used to calculate the figsize. Only used if use_qt=False.
        block (boolean): if we block the plots or not
        show_maximized (boolean): if we show the window maximized or not
        window_title (str): the title for the window
        use_qt (boolean): if we want to use the Qt GUI, or show the results directly in matplotlib
    """
    from mdt.gui.maps_visualizer.main import start_gui
    from mdt.visualization.maps.base import MapPlotConfig
    from mdt.visualization.maps.matplotlib_renderer import MapsVisualizer
    from mdt.visualization.maps.base import SimpleDataInfo
    import matplotlib.pyplot as plt

    if isinstance(data, string_types):
        data = SimpleDataInfo.from_paths([data])
    elif isinstance(data, collections.MutableMapping):
        data = SimpleDataInfo(data)
    elif isinstance(data, collections.Sequence):
        if all(isinstance(el, string_types) for el in data):
            data = SimpleDataInfo.from_paths(data)
        else:
            data = SimpleDataInfo({str(ind): v for ind, v in enumerate(data)})
    elif data is None:
        data = SimpleDataInfo({})

    if config is None:
        config = MapPlotConfig()
    elif isinstance(config, string_types):
        if config.strip():
            config = MapPlotConfig.from_yaml(config)
        else:
            config = MapPlotConfig()
    elif isinstance(config, dict):
        config = MapPlotConfig.from_dict(config)

    if use_qt:
        start_gui(data,
                  config,
                  app_exec=block,
                  show_maximized=show_maximized,
                  window_title=window_title)
    else:
        figure_options = figure_options or {}
        figure_options['dpi'] = figure_options.get('dpi', 100)
        if 'figsize' not in figure_options:
            figure_options['figsize'] = (figure_options.pop('width', 1800) /
                                         figure_options['dpi'],
                                         figure_options.pop('height', 1600) /
                                         figure_options['dpi'])

        figure = plt.figure(**figure_options)
        viz = MapsVisualizer(data, figure)
        viz.show(config, block=block, maximize=show_maximized)
Esempio n. 12
0
 def __init__(self):
     super(QtController, self).__init__()
     self._data_info = DataInfo({})
     self._actions_history = []
     self._redoable_actions = []
     self._current_config = MapPlotConfig()
Esempio n. 13
0
 def _remove_files(self):
     data = SimpleDataInfo({})
     config = MapPlotConfig()
     self._controller.apply_action(NewDataAction(data, config))
Esempio n. 14
0
 def __init__(self):
     super(QtController, self).__init__()
     self._current_model = SimpleDataConfigModel(SimpleDataInfo({}),
                                                 MapPlotConfig())
     self._actions_history = []
     self._redoable_actions = []
Esempio n. 15
0
def view_maps(data,
              config=None,
              figure_options=None,
              block=True,
              show_maximized=False,
              use_qt=True,
              window_title=None,
              save_filename=None):
    """View a number of maps using the MDT Maps Visualizer.

    Args:
        data (str, dict, :class:`~mdt.visualization.maps.base.DataInfo`, list, tuple): the data we are showing,
            either a dictionary with result maps, a string with a path name, a DataInfo object or a list
            with filenames and/or directories.
        config (str, dict, :class:`~mdt.visualization.maps.base import MapPlotConfig`): either a Yaml string or a
            dictionary with configuration settings or a ValidatedMapPlotConfig object to use directly
        figure_options (dict): Used when ``use_qt`` is False or when ``write_figure`` is used.
            Sets the figure options for the matplotlib Figure.
            If figsizes is not given you can also specify two ints, width and height, to indicate the pixel size of
            the resulting figure, together with the dpi they are used to calculate the figsize.
        block (boolean): if we block the plots or not
        show_maximized (boolean): if we show the window maximized or not
        window_title (str): the title for the window
        use_qt (boolean): if we want to use the Qt GUI, or show the results directly in matplotlib
        save_filename (str): save the figure to file. If set, we will not display the viewer.
    """
    from mdt.gui.maps_visualizer.main import start_gui
    from mdt.visualization.maps.base import MapPlotConfig
    from mdt.visualization.maps.matplotlib_renderer import MapsVisualizer
    from mdt.visualization.maps.base import SimpleDataInfo
    import matplotlib.pyplot as plt
    from mdt.gui.maps_visualizer.actions import NewDataAction
    from mdt.gui.maps_visualizer.base import SimpleDataConfigModel

    if isinstance(data, str):
        data = SimpleDataInfo.from_paths([data])
    elif isinstance(data, collections.MutableMapping):
        data = SimpleDataInfo(data)
    elif isinstance(data, collections.Sequence):
        if all(isinstance(el, str) for el in data):
            data = SimpleDataInfo.from_paths(data)
        else:
            data = SimpleDataInfo({str(ind): v for ind, v in enumerate(data)})
    elif data is None:
        data = SimpleDataInfo({})

    if config is None:
        config = MapPlotConfig()
    elif isinstance(config, str):
        if config.strip():
            config = MapPlotConfig.from_yaml(config)
        else:
            config = MapPlotConfig()
    elif isinstance(config, dict):
        config = MapPlotConfig.from_dict(config)

    config = config.create_valid(data)

    if not use_qt or save_filename:
        settings = {'dpi': 100, 'width': 1800, 'height': 1600}
        if save_filename:
            settings = {'dpi': 80, 'width': 800, 'height': 600}

        settings.update(figure_options or {})
        if 'figsize' not in settings:
            settings['figsize'] = (settings['width'] / settings['dpi'],
                                   settings['height'] / settings['dpi'])

        del settings['width']
        del settings['height']

        figure = plt.figure(**settings)
        viz = MapsVisualizer(data, figure)

        if save_filename:
            viz.to_file(save_filename, config, dpi=settings['dpi'])
        else:
            viz.show(config, block=block, maximize=show_maximized)
    else:
        start_gui(data,
                  config,
                  app_exec=block,
                  show_maximized=show_maximized,
                  window_title=window_title)
Esempio n. 16
0
def view_maps(data,
              config=None,
              to_file=None,
              to_file_options=None,
              block=True,
              show_maximized=False,
              use_qt=True,
              figure_options=None,
              window_title=None,
              enable_directory_watcher=True):
    """View a number of maps using the MDT Maps Visualizer.

    To save a file to an image, you can use (the simplest) the following two options::

        to_file='filename.png',
        figure_options={'width': 1200, 'height': 750, 'dpi': 100}

    Args:
        data (str, dict, :class:`~mdt.visualization.maps.base.DataInfo`): the data we are showing,
            either a dictionary with result maps, a string with a path name or a DataInfo object
        config (str, dict, :class:`~mdt.visualization.maps.base import MapPlotConfig`): either a Yaml string or a
            dictionary with configuration settings or a ValidatedMapPlotConfig object to use directly
        to_file (str): if set we output the figure to a file and do not launch a GUI
        to_file_options (dict): extra output options for the savefig command from matplotlib, if dpi is not given, we
            use the dpi from the figure_options.
        block (boolean): if we block the plots or not
        show_maximized (boolean): if we show the window maximized or not
        use_qt (boolean): if we want to use the Qt GUI, or show the results directly in matplotlib
        figure_options (dict): figure options for the matplotlib Figure, if figsizes is not given you can also specify
            two ints, width and height, to indicate the pixel size of the resulting figure, together with the dpi they
            are used to calculate the figsize.
        window_title (str): the title for the window
        enable_directory_watcher (boolean): if the directory watcher should be enabled/disabled, only applicable for the
            QT GUI. If the directory watcher is enabled, the viewer will automatically add new maps when added
            to the folder and also automatically remove maps when they are removed from the directory.
            It is useful to disable this if you want to have multiple viewers open with old results.
    """
    from mdt.gui.maps_visualizer.main import start_gui
    from mdt.visualization.maps.base import MapPlotConfig
    from mdt.visualization.maps.matplotlib_renderer import MapsVisualizer
    import matplotlib.pyplot as plt
    from mdt.visualization.maps.base import DataInfo

    if isinstance(data, string_types):
        data = DataInfo.from_dir(data)
    elif isinstance(data, dict):
        data = DataInfo(data)
    elif data is None:
        data = DataInfo({})

    if config is None:
        config = MapPlotConfig()
    elif isinstance(config, string_types):
        if config.strip():
            config = MapPlotConfig.from_yaml(config)
        else:
            config = MapPlotConfig()
    elif isinstance(config, dict):
        config = MapPlotConfig.from_dict(config)

    if to_file:
        figure_options = figure_options or {}

        figure_options['dpi'] = figure_options.get('dpi', 80)
        if 'figsize' not in figure_options:
            figure_options['figsize'] = (figure_options.pop('width', 800) /
                                         figure_options['dpi'],
                                         figure_options.pop('height', 640) /
                                         figure_options['dpi'])

        figure = plt.figure(**figure_options)
        viz = MapsVisualizer(data, figure)

        to_file_options = to_file_options or {}
        to_file_options['dpi'] = to_file_options.get('dpi',
                                                     figure_options['dpi'])
        viz.to_file(to_file, config, **to_file_options)
    elif use_qt:
        start_gui(data,
                  config,
                  app_exec=block,
                  show_maximized=show_maximized,
                  window_title=window_title,
                  enable_directory_watcher=enable_directory_watcher)
    else:
        figure_options = figure_options or {}
        figure_options['dpi'] = figure_options.get('dpi', 100)
        if 'figsize' not in figure_options:
            figure_options['figsize'] = (figure_options.pop('width', 1800) /
                                         figure_options['dpi'],
                                         figure_options.pop('height', 1600) /
                                         figure_options['dpi'])

        figure = plt.figure(**figure_options)
        viz = MapsVisualizer(data, figure)
        viz.show(config, block=block, maximize=show_maximized)