Skip to content

Commit

Permalink
Implement regions to spectral region conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
nmearl committed Jun 26, 2020
1 parent c8deb88 commit d938651
Showing 1 changed file with 32 additions and 8 deletions.
40 changes: 32 additions & 8 deletions jdaviz/configs/specviz/helper.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pathlib
import uuid

from specutils import Spectrum1D, SpectrumCollection
from specutils import Spectrum1D, SpectrumCollection, SpectralRegion

from jdaviz.core.helpers import ConfigHelper

Expand All @@ -11,32 +11,56 @@ class SpecViz(ConfigHelper):

_default_configuration = 'specviz'

def load_data(self, data, data_label='', format=None):
"""Loads a data file or Spectrum1D object into SpecViz
def load_data(self, data, data_label=None, format=None):
"""
Loads a data file or `~specutils.Spectrum1D` object into SpecViz.
:param data: Spectrum1D spectra, or path to compatible data file
:param data_label: Name/identifier of data
:param format: Spectrum1D data format to load
Parameters
----------
data : str or `~specutils.Spectrum1D`
Spectrum1D spectra, or path to compatible data file.
data_label : str
The Glue data label found in the ``DataCollection``.
format : str
Loader format specification used to indicate data format in
`~specutils.Spectrum1D.read` io method.
"""
# If no data label is assigned, give it a unique identifier
if not data_label:
if data_label is None:
data_label = "specviz_data|" + uuid.uuid4().hex

# If data provided is a path, try opening into a Spectrum1D object
try:
path = pathlib.Path(data)

if path.is_file():
data = Spectrum1D.read(path, format=format)
else:
raise FileNotFoundError("No such file: " + path)
# If not, it must be a Spectrum1D object. Otherwise, it's unsupported
except TypeError:
if type(data) is SpectrumCollection:
raise TypeError("SpectrumCollection detected. Please provide a Spectrum1D")
raise TypeError("`SpectrumCollection` detected. Please "
"provide a `Spectrum1D`.")
elif type(data) is not Spectrum1D:
raise TypeError("Data is not a Spectrum1D object or compatible file")

self.app.add_data(data, data_label)
self.app.add_data_to_viewer('spectrum-viewer', data_label)

def get_spectra(self):
"""Returns the current data loaded into the main viewer"""
return self.app.get_data_from_viewer('spectrum-viewer')

def get_regions(self):
regions = self.app.get_subsets_from_viewer('spectrum-viewer')

spec_regs = {}

for name, reg in regions.items():
spec_reg = SpectralRegion((reg.center.x - reg.width * 0.5,
reg.center.x + reg.width * 0.5))

spec_regs[name] = spec_reg

return spec_regs

0 comments on commit d938651

Please sign in to comment.