Source code for glue_solar.sources.maps

"""
A reader for `sunpy.map.Map`.
"""
from glue.config import data_factory, importer, qglue_parser
from glue.core.component import Component
from glue.core.data import Data
from glue.core.data_factories import is_fits
from glue.core.visual import VisualAttributes
from qtpy import QtWidgets

import sunpy.map
from sunpy.map.mapbase import GenericMap

from glue_solar.sources.loaders.maps import QtSunpyMapImporter

__all__ = ["import_sunpy_map", "read_sunpy_map", "_parse_sunpy_map"]


[docs]@qglue_parser(GenericMap) def _parse_sunpy_map(data, label): """ Parse sunpy map so that it can be loaded by ``glue``. """ scan_map = data label = label + "-" + scan_map.name result = Data(label=label) result.coords = scan_map.wcs # preferred way, preserves more info in some cases result.add_component(Component(scan_map.data), scan_map.name) result.meta = scan_map.meta result.style = VisualAttributes(color="#FDB813", preferred_cmap=scan_map.cmap) return result
[docs]@data_factory("sunpy Map", is_fits) def read_sunpy_map(sunpy_map_file): """ For ``glue`` to read in parsed sunpy map. """ sunpy_map_data = _parse_sunpy_map(sunpy.map.Map(sunpy_map_file), "sunpy-map") return sunpy_map_data
def pick_directory(caption): """ Pick the directory to load sunpy map files from. """ dialog = QtWidgets.QFileDialog(caption=caption) dialog.setFileMode(QtWidgets.QFileDialog.Directory) directory = dialog.exec_() if directory == QtWidgets.QDialog.Rejected: return [] directory = dialog.selectedFiles() return directory[0]
[docs]@importer("Import sunpy Map Directory") def import_sunpy_map(): """ Import sunpy maps with directory importer. """ caption = "Select a directory containing sunpy Map files." directory = pick_directory(caption) wi = QtSunpyMapImporter(directory) wi.exec_() return wi.datasets