Skip to content

[Feature Request] let imviz load jwst data model objects directly #3252

Open
@eteq

Description

@eteq

Jdaviz component

Imviz

Description

The documentation for Imviz.load_data implies that it should be possible to load asdf-in-fits files from jwst directly. However, when I try to do that (see "how to reproduce"), I get the error below.

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In[59], line 1
----> 1 imviz.load_data(im)

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/helper.py:174, in Imviz.load_data(self, data, data_label, show_in_viewer, **kwargs)
    172     if data_label:
    173         kwargs['data_label'] = data_label
--> 174     self.app.load_data(data, parser_reference='imviz-data-parser', **kwargs)
    176 # find the current label(s) - TODO: replace this by calling default label functionality
    177 # above instead of having to refind it
    178 applied_labels = []

File ~/REDACTED/python3.12/site-packages/jdaviz/app.py:851, in Application.load_data(self, file_obj, parser_reference, **kwargs)
    848         parser = data_parser_registry.members.get(data_parser)
    850 if parser is not None:
--> 851     parser(self, file_obj, **kwargs)
    852 else:
    853     self._application_handler.load_data(file_obj)

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:149, in parse_data(app, file_obj, ext, data_label, parent, cache, local_path, timeout)
    147             _parse_image(app, pf, data_label, ext=ext, parent=parent)
    148 else:
--> 149     _parse_image(app, file_obj, data_label, ext=ext, parent=parent)

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:227, in _parse_image(app, file_obj, data_label, ext, parent)
    225 if data_label is None:
    226     data_label = app.return_data_label(file_obj, ext, alt_name="image_data")
--> 227 data_iter = get_image_data_iterator(app, file_obj, data_label, ext=ext)
    229 # Save the SCI extension to this list:
    230 sci_ext = None

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:217, in get_image_data_iterator(app, file_obj, data_label, ext)
    214     data_iter = _roman_asdf_2d_to_glue_data(file_obj, data_label, ext=ext)
    216 else:
--> 217     raise NotImplementedError(f'Imviz does not support {file_obj}')
    219 return data_iter

NotImplementedError: Imviz does not support <ImageModel(1994, 2404) from contents>

Note if I load using stdatamodels.asdf_in_fits instead of jwst.datamodels I get a different error but still an error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[61], line 1
----> 1 imviz.load_data(im)

File ~/casA_light_echos/.pixi/envs/default/lib/python3.12/site-packages/jdaviz/configs/imviz/helper.py:174, in Imviz.load_data(self, data, data_label, show_in_viewer, **kwargs)
    172     if data_label:
    173         kwargs['data_label'] = data_label
--> 174     self.app.load_data(data, parser_reference='imviz-data-parser', **kwargs)
    176 # find the current label(s) - TODO: replace this by calling default label functionality
    177 # above instead of having to refind it
    178 applied_labels = []

File ~/REDACTED/python3.12/site-packages/jdaviz/app.py:851, in Application.load_data(self, file_obj, parser_reference, **kwargs)
    848         parser = data_parser_registry.members.get(data_parser)
    850 if parser is not None:
--> 851     parser(self, file_obj, **kwargs)
    852 else:
    853     self._application_handler.load_data(file_obj)

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:149, in parse_data(app, file_obj, ext, data_label, parent, cache, local_path, timeout)
    147             _parse_image(app, pf, data_label, ext=ext, parent=parent)
    148 else:
--> 149     _parse_image(app, file_obj, data_label, ext=ext, parent=parent)

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:232, in _parse_image(app, file_obj, data_label, ext, parent)
    229 # Save the SCI extension to this list:
    230 sci_ext = None
--> 232 for data, data_label in data_iter:
    233 
    234     # if the science extension hasn't been identified yet, do so here:
    235     if sci_ext is None and data.ndim == 2 and ('[DATA' in data_label or '[SCI' in data_label):
    236         sci_ext = data_label

File ~/REDACTED/python3.12/site-packages/jdaviz/configs/imviz/plugins/parsers.py:440, in _roman_asdf_2d_to_glue_data(file_obj, data_label, ext)
    437     ext_list = (ext, )
    439 roman = file_obj.tree.get('roman')
--> 440 meta = roman.get('meta', {})
    441 coords = meta.get('wcs', None)
    443 for cur_ext in ext_list:

AttributeError: 'NoneType' object has no attribute 'get'

How to Reproduce

from jdaviz import Imviz
import jwst.datamodels

image = jwst.datamodels.open('https://archive.stsci.edu/hlsps/jwst-ero/hlsp_jwst-ero_jwst_miri_stephansquintet_f770w_v1_i2d.fits')

imviz = Imviz()
imviz.load_data(image)

can substitute stdatamodels.asdf_in_fits for jwst.datamodels and I still get an error

Expected behavior

The image should load without complaint.

Browser

Latest Stable Chrome

Jupyter

import sys; print("Python", sys.version)
Python 3.12.7 | packaged by conda-forge | (main, Oct 4 2024, 16:05:46) [GCC 13.3.0]
import numpy; print("Numpy", numpy.version)
Numpy 2.1.2
import astropy; print("astropy", astropy.version)
astropy 6.1.4
import matplotlib; print("matplotlib", matplotlib.version)
matplotlib 3.9.2
import scipy; print("scipy", scipy.version)
scipy 1.14.1
import skimage; print("scikit-image", skimage.version)
scikit-image 0.24.0
import asdf; print("asdf", asdf.version)
asdf 3.5.0
import stdatamodels; print("stdatamodels", stdatamodels.version)
stdatamodels 1.10.1
import gwcs; print("gwcs", gwcs.version)
gwcs 0.21.0
import regions; print("regions", regions.version)
regions 0.10
import specutils; print("specutils", specutils.version)
specutils 1.18.0
import specreduce; print("specreduce", specreduce.version)
specreduce 1.4.1
import photutils; print("photutils", photutils.version)
photutils 2.0.1
import astroquery; print("astroquery", astroquery.version)
astroquery 0.4.7
import yaml; print("pyyaml", yaml.version)
pyyaml 6.0.2
import asteval; print("asteval", asteval.version)
asteval 1.0.5
import idna; print("idna", idna.version)
idna 3.10
import traitlets; print("traitlets", traitlets.version)
traitlets 5.14.3
import bqplot; print("bqplot", bqplot.version)
bqplot 0.12.43
import bqplot_image_gl; print("bqplot-image-gl", bqplot_image_gl.version)
bqplot-image-gl 1.5.0
import glue; print("glue-core", glue.version)
glue-core 1.21.1
import glue_jupyter; print("glue-jupyter", glue_jupyter.version)
glue-jupyter 0.23.0
import glue_astronomy; print("glue-astronomy", glue_astronomy.version)
glue-astronomy 0.10.0
import echo; print("echo", echo.version)
echo 0.9.0
import ipyvue; print("ipyvue", ipyvue.version)
ipyvue 1.11.1
import ipyvuetify; print("ipyvuetify", ipyvuetify.version)
ipyvuetify 1.10.0
import ipysplitpanes; print("ipysplitpanes", ipysplitpanes.version)
ipysplitpanes 0.2.0
import ipygoldenlayout; print("ipygoldenlayout", ipygoldenlayout.version)
ipygoldenlayout 0.4.0
import ipypopout; print("ipypopout", ipypopout.version)
ipypopout 2.0.0
import jinja2; print("Jinja2", jinja2.version)
Jinja2 3.1.4
import solara; print("solara", solara.version)
solara 1.40.0
import vispy; print("vispy", vispy.version)
vispy 0.14.3
import sidecar; print("sidecar", sidecar.version)
sidecar 0.7.0
import jdaviz; print("Jdaviz", jdaviz.version)
Jdaviz 4.0.0

Software versions

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("Numpy", numpy.version)
import astropy; print("astropy", astropy.version)
import matplotlib; print("matplotlib", matplotlib.version)
import scipy; print("scipy", scipy.version)
import skimage; print("scikit-image", skimage.version)
import asdf; print("asdf", asdf.version)
import stdatamodels; print("stdatamodels", stdatamodels.version)
import gwcs; print("gwcs", gwcs.version)
import regions; print("regions", regions.version)
import specutils; print("specutils", specutils.version)
import specreduce; print("specreduce", specreduce.version)
import photutils; print("photutils", photutils.version)
import astroquery; print("astroquery", astroquery.version)
import yaml; print("pyyaml", yaml.version)
import asteval; print("asteval", asteval.version)
import idna; print("idna", idna.version)
import traitlets; print("traitlets", traitlets.version)
import bqplot; print("bqplot", bqplot.version)
import bqplot_image_gl; print("bqplot-image-gl", bqplot_image_gl.version)
import glue; print("glue-core", glue.version)
import glue_jupyter; print("glue-jupyter", glue_jupyter.version)
import glue_astronomy; print("glue-astronomy", glue_astronomy.version)
import echo; print("echo", echo.version)
import ipyvue; print("ipyvue", ipyvue.version)
import ipyvuetify; print("ipyvuetify", ipyvuetify.version)
import ipysplitpanes; print("ipysplitpanes", ipysplitpanes.version)
import ipygoldenlayout; print("ipygoldenlayout", ipygoldenlayout.version)
import ipypopout; print("ipypopout", ipypopout.version)
import jinja2; print("Jinja2", jinja2.version)
import solara; print("solara", solara.version)
import vispy; print("vispy", vispy.version)
import sidecar; print("sidecar", sidecar.version)
import jdaviz; print("Jdaviz", jdaviz.version)

🐱

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions