├── .gitattributes ├── jdaviz ├── components │ ├── __init__.py │ ├── plugin_popout.vue │ ├── plugin_live_results_icon.vue │ ├── child_layer_icon.vue │ ├── external_link.vue │ ├── plugin_input_header.vue │ ├── custom_toolbar_toggle.vue │ ├── docs_link.vue │ ├── subset_icon.vue │ ├── plugin_slider.vue │ ├── multiselect_toggle.vue │ ├── plugin_inline_select.vue │ ├── plugin_loaders_panel.vue │ ├── glue_state_select.vue │ ├── plugin_plot.vue │ ├── hover_api_hint.vue │ ├── plugin_action_button.vue │ ├── plugin_section_header.vue │ ├── plugin_previews_temp_disabled.vue │ ├── plugin_color_picker.vue │ ├── plugin_switch.vue │ ├── layer_viewer_icon.vue │ └── glue_state_sync_wrapper.vue ├── core │ ├── tests │ │ ├── __init__.py │ │ ├── test_custom_traitlets.py │ │ └── test_config_detection.py │ ├── loaders │ │ ├── importers │ │ │ ├── ramp │ │ │ │ └── __init__.py │ │ │ ├── catalog │ │ │ │ └── __init__.py │ │ │ ├── image │ │ │ │ └── __init__.py │ │ │ ├── subset │ │ │ │ ├── __init__.py │ │ │ │ └── subset.vue │ │ │ ├── trace │ │ │ │ ├── __init__.py │ │ │ │ └── trace.py │ │ │ ├── footprint │ │ │ │ ├── __init__.py │ │ │ │ └── footprint.vue │ │ │ ├── spectrum1d │ │ │ │ └── __init__.py │ │ │ ├── spectrum2d │ │ │ │ └── __init__.py │ │ │ ├── spectrum3d │ │ │ │ └── __init__.py │ │ │ ├── spectrum_list │ │ │ │ └── __init__.py │ │ │ ├── ramp_integration │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── resolvers │ │ │ ├── file │ │ │ │ └── __init__.py │ │ │ ├── url │ │ │ │ └── __init__.py │ │ │ ├── object │ │ │ │ └── __init__.py │ │ │ ├── file_drop │ │ │ │ └── __init__.py │ │ │ ├── astroquery │ │ │ │ └── __init__.py │ │ │ ├── virtual_observatory │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ └── parsers │ │ │ ├── __init__.py │ │ │ ├── object.py │ │ │ ├── parser.py │ │ │ ├── jpg_png.py │ │ │ ├── regions.py │ │ │ └── fits.py │ ├── layer_sonified.vue │ ├── __init__.py │ ├── style_widget.py │ ├── viewer_creators │ │ ├── __init__.py │ │ ├── base_viewer_creator.vue │ │ ├── table │ │ │ ├── table.vue │ │ │ └── table.py │ │ ├── ramp3d │ │ │ └── ramp3d.py │ │ ├── spectrum1d │ │ │ └── spectrum1d.py │ │ ├── spectrum3d │ │ │ └── spectrum3d.py │ │ ├── image │ │ │ └── image.py │ │ ├── spectrum2d │ │ │ └── spectrum2d.py │ │ ├── ramp_integration │ │ │ └── ramp_integration.py │ │ ├── histogram │ │ │ └── histogram.vue │ │ └── scatter │ │ │ └── scatter.vue │ └── custom_traitlets.py ├── configs │ ├── imviz │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── data │ │ │ │ ├── gauss100_fits_wcs.fits │ │ │ │ ├── miri_i2d_lonlat_gwcs.asdf │ │ │ │ ├── gauss100_fits_wcs_block_reduced.fits │ │ │ │ ├── gauss100_fits_wcs_block_reduced_rotated.fits │ │ │ │ └── ds9_annulus_01.reg │ │ │ ├── test_compass.py │ │ │ ├── test_parser_asdf.py │ │ │ └── test_parser_roman.py │ │ ├── plugins │ │ │ ├── catalogs │ │ │ │ └── __init__.py │ │ │ ├── compass │ │ │ │ ├── __init__.py │ │ │ │ └── compass.vue │ │ │ ├── coords_info │ │ │ │ └── __init__.py │ │ │ ├── footprints │ │ │ │ └── __init__.py │ │ │ ├── orientation │ │ │ │ └── __init__.py │ │ │ ├── aper_phot_simple │ │ │ │ └── __init__.py │ │ │ ├── line_profile_xy │ │ │ │ └── __init__.py │ │ │ ├── image_viewer_creator │ │ │ │ ├── __init__.py │ │ │ │ ├── image_viewer_creator.vue │ │ │ │ └── image_viewer_creator.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ ├── imviz.ipynb │ │ └── imviz.yaml │ ├── mosviz │ │ ├── tests │ │ │ └── __init__.py │ │ ├── plugins │ │ │ ├── row_lock │ │ │ │ ├── __init__.py │ │ │ │ ├── row_lock.vue │ │ │ │ └── row_lock.py │ │ │ ├── slit_overlay │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── slit_overlay.vue │ │ │ └── __init__.py │ │ ├── __init__.py │ │ ├── mosviz.ipynb │ │ └── mosviz.yaml │ ├── rampviz │ │ ├── tests │ │ │ └── __init__.py │ │ ├── plugins │ │ │ ├── ramp_extraction │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ └── rampviz.yaml │ ├── specviz │ │ ├── tests │ │ │ └── __init__.py │ │ ├── plugins │ │ │ ├── line_analysis │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── unit_conversion │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ ├── specviz.yaml │ │ └── specviz.ipynb │ ├── specviz2d │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_helper.py │ │ ├── plugins │ │ │ ├── spectral_extraction │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── cross_dispersion_profile │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ └── specviz2d.yaml │ ├── cubeviz │ │ ├── plugins │ │ │ ├── slice │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_data_retrieval.py │ │ │ ├── moment_maps │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── sonify_data │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── spectral_extraction │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ ├── cubeviz.ipynb │ │ └── cubeviz.yaml │ ├── default │ │ ├── plugins │ │ │ ├── collapse │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── line_lists │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── about │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_about_plugin.py │ │ │ │ └── __init__.py │ │ │ ├── data_menu │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── gaussian_smooth │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── markers │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── model_fitting │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── subset_tools │ │ │ │ ├── __init__.py │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── subset_widget │ │ │ │ ├── __init__.py │ │ │ │ └── subset_widget.vue │ │ │ ├── data_quality │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── plot_options │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── metadata_viewer │ │ │ │ ├── tests │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── logger │ │ │ │ └── __init__.py │ │ │ ├── export │ │ │ │ └── __init__.py │ │ │ ├── data_tools │ │ │ │ ├── __init__.py │ │ │ │ └── data_tools.vue │ │ │ ├── virtual_observatory │ │ │ │ ├── __init__.py │ │ │ │ ├── vo_plugin.vue │ │ │ │ └── vo_plugin.py │ │ │ ├── viewer_creator │ │ │ │ ├── __init__.py │ │ │ │ ├── viewer_creator.vue │ │ │ │ └── viewer_creator.py │ │ │ └── __init__.py │ │ ├── __init__.py │ │ ├── default.yaml │ │ └── default.ipynb │ ├── deconfigged │ │ ├── __init__.py │ │ ├── deconfigged.yaml │ │ └── helper.py │ └── __init__.py ├── models │ └── __init__.py ├── tests │ └── __init__.py ├── solara.css └── data │ ├── icons │ ├── home.svg │ ├── viewer_clone.svg │ ├── table_subset.svg │ ├── blink.svg │ ├── zoom_back.svg │ ├── contrast.svg │ ├── image.svg │ ├── pan_y.svg │ ├── select_x.svg │ ├── tune.svg │ ├── left-east.svg │ ├── right-east.svg │ ├── select_y.svg │ ├── catalog_select.svg │ ├── pan_x.svg │ ├── roman_solid.svg │ ├── pan.svg │ ├── pan2.svg │ ├── select_xy.svg │ ├── compass.svg │ ├── select_circle.svg │ ├── jwst_solid.svg │ ├── select_ellipse.svg │ ├── select_lasso.svg │ ├── slice.svg │ ├── line_select.svg │ ├── zoom_box.svg │ ├── home_match.svg │ ├── select_annulus.svg │ ├── footprint_select.svg │ ├── select_single_pixel.svg │ ├── line_select_disabled.svg │ ├── cog.svg │ ├── zoom_xrange.svg │ ├── pan_x_match.svg │ ├── pixelspectra.svg │ ├── stretch_bounds.svg │ ├── zoom_yrange.svg │ ├── checktoradial.svg │ ├── spectral_range.svg │ ├── pan_y_match.svg │ ├── zoom_box_match.svg │ ├── specviz_icon.svg │ └── zoom_xrange_match.svg │ ├── linelists │ ├── H-Paschen-Brackett.csv │ ├── CO-band-heads.csv │ ├── PAH.csv │ ├── Atomic-Ionic.csv │ ├── Common_Galactic_700A-2000A.csv │ ├── Common_nebular.csv │ ├── SDSS-IV.csv │ └── CO.csv │ └── data_quality │ ├── hst-wfc3-uvis.csv │ ├── hst-cos.csv │ ├── hst-wfc3-ir.csv │ ├── hst-stis.csv │ ├── roman.csv │ └── jwst.csv ├── docs ├── logos │ ├── mos.ico │ ├── cube.ico │ ├── imviz.ico │ ├── imviz.png │ ├── rampviz.png │ ├── speciz2d.png │ ├── specviz.ico │ ├── imviz icon.png │ ├── specviz2d.ico │ ├── speciz2d icon.png │ ├── rampviz.svg │ └── specicon.svg ├── img │ ├── toolbar.png │ ├── data_menu.png │ ├── icons │ │ ├── eye.png │ │ ├── blink.png │ │ ├── box_zoom.png │ │ ├── plugins.png │ │ ├── line_select.png │ │ ├── region_circ.png │ │ ├── xrange_zoom.png │ │ ├── zoom_pan_2d.png │ │ ├── color_square.png │ │ ├── region_horiz.png │ │ ├── white_to_black.png │ │ ├── zoom_pan_home.png │ │ ├── zoom_pan_horiz.png │ │ ├── zoom_pan_vert.png │ │ ├── settings_sliders.png │ │ ├── picture_with_plus.png │ │ └── viewer_data_select.png │ ├── line_lists.png │ ├── moment1_map.png │ ├── collapse_plugin.png │ ├── jdaviz-launcher.png │ ├── navigator_env.png │ ├── moment0_line_map.png │ ├── navigator_jupyter.png │ ├── navigator_nameenv.png │ ├── glue-jupyter_diagram.png │ ├── imviz_plot_options.png │ ├── navigator_launchlab.png │ ├── model_fitting_components.png │ └── cubeviz_spectral_extraction.png ├── imviz │ ├── img │ │ ├── imviz_dq.png │ │ ├── plugins.jpg │ │ ├── imviz_radial_profile.png │ │ └── imviz_radial_profile_raw.png │ └── index.rst ├── mosviz │ ├── img │ │ └── mosviz_ui.png │ └── redshift.rst ├── specviz │ └── img │ │ ├── data_menu.png │ │ ├── specvizplugins.jpg │ │ ├── specviztoolbar.png │ │ ├── spectral_region_5.png │ │ ├── line_analysis_plugin.png │ │ ├── spectrumlist_combined.png │ │ └── specviz_plotopt_viewerbounds.png ├── cubeviz │ ├── img │ │ ├── cubevizplugins.jpg │ │ ├── cubeviztoolbar.png │ │ ├── contour_location.png │ │ ├── subset_creation.png │ │ └── layer_tab_with_2_layers.png │ └── displayspectra.rst ├── index_ref_api.rst ├── _templates │ └── autosummary │ │ ├── base.rst │ │ ├── class.rst │ │ └── module.rst ├── dev │ ├── index.rst │ └── win_dev.rst ├── _static │ └── jdaviz.css ├── specviz2d │ ├── displaying.rst │ ├── index.rst │ └── export_data.rst ├── index_using_jdaviz.rst ├── reference │ ├── api_parsers.rst │ ├── api.rst │ ├── api_configs.rst │ └── api_viewers.rst ├── nitpick-exceptions ├── rampviz │ ├── index.rst │ └── import_data.rst ├── plugin_api.rst ├── save_state.rst ├── index_citation.rst └── sample_notebooks.rst ├── codecov.yml ├── standalone ├── hooks │ ├── hook-dask.py │ ├── hook-bqplot.py │ ├── hook-ipypopout.py │ ├── hook-mistune.py │ ├── hook-asdf.py │ ├── hook-glue.py │ ├── hook-pysiaf.py │ ├── hook-strauss.py │ ├── hook-specreduce.py │ ├── hook-glue_jupyter.py │ ├── hook-jupyter_events.py │ ├── hook-jupyter_server.py │ ├── hook-regions.py │ ├── hook-photutils.py │ ├── hook-numpy.py │ ├── hook-scipy.py │ ├── hook-jdaviz.py │ ├── hook-solara.py │ ├── hook-astroquery.py │ ├── hook-ipyvuetify.py │ ├── hook-solara_ui.py │ ├── hook-matplotlib_inline.py │ ├── hook-solara_server.py │ ├── hook-ipyreact.py │ ├── hook-jupyter_client.py │ ├── hook-debugpy.py │ └── hook-skimage.py ├── test_standalone.py ├── entitlements.plist └── jdaviz-cli-entrypoint.py ├── notebooks └── concepts │ └── README.md ├── .bandit.yaml ├── .github ├── ISSUE_TEMPLATE │ └── config.yml ├── CODEOWNERS ├── workflows │ ├── changelog_check.yml │ ├── open_actions.yml │ └── check_milestone.yml ├── dependabot.yml └── labeler.yml ├── MANIFEST.in ├── licenses ├── README.rst └── IPYFILECHOOSER_LICENSE.rst ├── .flake8 ├── .readthedocs.yaml ├── .gitignore └── LICENSE.rst /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /jdaviz/components/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/core/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/rampviz/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/slice/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/collapse/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/line_lists/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/row_lock/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/moment_maps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/slice/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/sonify_data/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/about/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/collapse/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_menu/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/gaussian_smooth/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/markers/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/model_fitting/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/subset_tools/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/subset_widget/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/slit_overlay/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/plugins/line_analysis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/plugins/unit_conversion/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/moment_maps/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/sonify_data/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/spectral_extraction/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_quality/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/line_lists/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/model_fitting/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/plot_options/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/subset_tools/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/slit_overlay/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/plugins/line_analysis/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/spectral_extraction/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/gaussian_smooth/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/metadata_viewer/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/plugins/unit_conversion/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/plugins/spectral_extraction/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/plugins/cross_dispersion_profile/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/plugins/spectral_extraction/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/ramp/__init__.py: -------------------------------------------------------------------------------- 1 | from .ramp import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/file/__init__.py: -------------------------------------------------------------------------------- 1 | from .file import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/url/__init__.py: -------------------------------------------------------------------------------- 1 | from .url import * # noqa -------------------------------------------------------------------------------- /jdaviz/configs/deconfigged/__init__.py: -------------------------------------------------------------------------------- 1 | from .helper import App # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/catalog/__init__.py: -------------------------------------------------------------------------------- 1 | from .catalog import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/image/__init__.py: -------------------------------------------------------------------------------- 1 | from .image import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/subset/__init__.py: -------------------------------------------------------------------------------- 1 | from .subset import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/trace/__init__.py: -------------------------------------------------------------------------------- 1 | from .trace import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/object/__init__.py: -------------------------------------------------------------------------------- 1 | from .object import * # noqa -------------------------------------------------------------------------------- /jdaviz/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .physical_models import BlackBody # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/about/__init__.py: -------------------------------------------------------------------------------- 1 | from .about import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/logger/__init__.py: -------------------------------------------------------------------------------- 1 | from .logger import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/catalogs/__init__.py: -------------------------------------------------------------------------------- 1 | from .catalogs import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/footprint/__init__.py: -------------------------------------------------------------------------------- 1 | from .footprint import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/file_drop/__init__.py: -------------------------------------------------------------------------------- 1 | from .file_drop import * # noqa -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/export/__init__.py: -------------------------------------------------------------------------------- 1 | from .export import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/markers/__init__.py: -------------------------------------------------------------------------------- 1 | from .markers import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/compass/__init__.py: -------------------------------------------------------------------------------- 1 | from .compass import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/spectrum1d/__init__.py: -------------------------------------------------------------------------------- 1 | from .spectrum1d import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/spectrum2d/__init__.py: -------------------------------------------------------------------------------- 1 | from .spectrum2d import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/spectrum3d/__init__.py: -------------------------------------------------------------------------------- 1 | from .spectrum3d import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/astroquery/__init__.py: -------------------------------------------------------------------------------- 1 | from .astroquery import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/virtual_observatory/__init__.py: -------------------------------------------------------------------------------- 1 | from .vo import * # noqa -------------------------------------------------------------------------------- /docs/logos/mos.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/mos.ico -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_menu/__init__.py: -------------------------------------------------------------------------------- 1 | from .data_menu import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .data_tools import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/coords_info/__init__.py: -------------------------------------------------------------------------------- 1 | from .coords_info import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/footprints/__init__.py: -------------------------------------------------------------------------------- 1 | from .footprints import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/orientation/__init__.py: -------------------------------------------------------------------------------- 1 | from .orientation import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/spectrum_list/__init__.py: -------------------------------------------------------------------------------- 1 | from .spectrum_list import * # noqa -------------------------------------------------------------------------------- /docs/img/toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/toolbar.png -------------------------------------------------------------------------------- /docs/logos/cube.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/cube.ico -------------------------------------------------------------------------------- /docs/logos/imviz.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/imviz.ico -------------------------------------------------------------------------------- /docs/logos/imviz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/imviz.png -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_quality/__init__.py: -------------------------------------------------------------------------------- 1 | from .data_quality import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/plot_options/__init__.py: -------------------------------------------------------------------------------- 1 | from .plot_options import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/virtual_observatory/__init__.py: -------------------------------------------------------------------------------- 1 | from .vo_plugin import * # noqa -------------------------------------------------------------------------------- /jdaviz/configs/rampviz/plugins/ramp_extraction/__init__.py: -------------------------------------------------------------------------------- 1 | from .ramp_extraction import * # noqa -------------------------------------------------------------------------------- /jdaviz/core/layer_sonified.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/ramp_integration/__init__.py: -------------------------------------------------------------------------------- 1 | from .ramp_integration import * # noqa -------------------------------------------------------------------------------- /docs/img/data_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/data_menu.png -------------------------------------------------------------------------------- /docs/img/icons/eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/eye.png -------------------------------------------------------------------------------- /docs/img/line_lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/line_lists.png -------------------------------------------------------------------------------- /docs/logos/rampviz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/rampviz.png -------------------------------------------------------------------------------- /docs/logos/speciz2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/speciz2d.png -------------------------------------------------------------------------------- /docs/logos/specviz.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/specviz.ico -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/metadata_viewer/__init__.py: -------------------------------------------------------------------------------- 1 | from .metadata_viewer import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/viewer_creator/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewer_creator import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/aper_phot_simple/__init__.py: -------------------------------------------------------------------------------- 1 | from .aper_phot_simple import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/line_profile_xy/__init__.py: -------------------------------------------------------------------------------- 1 | from .line_profile_xy import * # noqa 2 | -------------------------------------------------------------------------------- /docs/img/icons/blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/blink.png -------------------------------------------------------------------------------- /docs/img/moment1_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/moment1_map.png -------------------------------------------------------------------------------- /docs/logos/imviz icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/imviz icon.png -------------------------------------------------------------------------------- /docs/logos/specviz2d.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/specviz2d.ico -------------------------------------------------------------------------------- /jdaviz/configs/imviz/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Imviz # noqa 3 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Mosviz # noqa 3 | -------------------------------------------------------------------------------- /docs/img/collapse_plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/collapse_plugin.png -------------------------------------------------------------------------------- /docs/img/icons/box_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/box_zoom.png -------------------------------------------------------------------------------- /docs/img/icons/plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/plugins.png -------------------------------------------------------------------------------- /docs/img/jdaviz-launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/jdaviz-launcher.png -------------------------------------------------------------------------------- /docs/img/navigator_env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/navigator_env.png -------------------------------------------------------------------------------- /docs/imviz/img/imviz_dq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/imviz/img/imviz_dq.png -------------------------------------------------------------------------------- /docs/imviz/img/plugins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/imviz/img/plugins.jpg -------------------------------------------------------------------------------- /docs/logos/speciz2d icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/logos/speciz2d icon.png -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Cubeviz # noqa 3 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/image_viewer_creator/__init__.py: -------------------------------------------------------------------------------- 1 | from .image_viewer_creator import * # noqa 2 | -------------------------------------------------------------------------------- /jdaviz/configs/rampviz/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Rampviz # noqa 3 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Specviz # noqa 3 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/__init__.py: -------------------------------------------------------------------------------- 1 | from .plugins import * # noqa 2 | from .helper import Specviz2d # noqa 3 | -------------------------------------------------------------------------------- /docs/img/icons/line_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/line_select.png -------------------------------------------------------------------------------- /docs/img/icons/region_circ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/region_circ.png -------------------------------------------------------------------------------- /docs/img/icons/xrange_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/xrange_zoom.png -------------------------------------------------------------------------------- /docs/img/icons/zoom_pan_2d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/zoom_pan_2d.png -------------------------------------------------------------------------------- /docs/img/moment0_line_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/moment0_line_map.png -------------------------------------------------------------------------------- /docs/img/navigator_jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/navigator_jupyter.png -------------------------------------------------------------------------------- /docs/img/navigator_nameenv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/navigator_nameenv.png -------------------------------------------------------------------------------- /docs/mosviz/img/mosviz_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/mosviz/img/mosviz_ui.png -------------------------------------------------------------------------------- /docs/specviz/img/data_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/data_menu.png -------------------------------------------------------------------------------- /docs/img/glue-jupyter_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/glue-jupyter_diagram.png -------------------------------------------------------------------------------- /docs/img/icons/color_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/color_square.png -------------------------------------------------------------------------------- /docs/img/icons/region_horiz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/region_horiz.png -------------------------------------------------------------------------------- /docs/img/icons/white_to_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/white_to_black.png -------------------------------------------------------------------------------- /docs/img/icons/zoom_pan_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/zoom_pan_home.png -------------------------------------------------------------------------------- /docs/img/icons/zoom_pan_horiz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/zoom_pan_horiz.png -------------------------------------------------------------------------------- /docs/img/icons/zoom_pan_vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/zoom_pan_vert.png -------------------------------------------------------------------------------- /docs/img/imviz_plot_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/imviz_plot_options.png -------------------------------------------------------------------------------- /docs/img/navigator_launchlab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/navigator_launchlab.png -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | patch: 4 | default: 5 | target: 90% 6 | threshold: 0.01% 7 | -------------------------------------------------------------------------------- /docs/cubeviz/img/cubevizplugins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/cubeviz/img/cubevizplugins.jpg -------------------------------------------------------------------------------- /docs/cubeviz/img/cubeviztoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/cubeviz/img/cubeviztoolbar.png -------------------------------------------------------------------------------- /docs/img/icons/settings_sliders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/settings_sliders.png -------------------------------------------------------------------------------- /docs/specviz/img/specvizplugins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/specvizplugins.jpg -------------------------------------------------------------------------------- /docs/specviz/img/specviztoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/specviztoolbar.png -------------------------------------------------------------------------------- /docs/cubeviz/img/contour_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/cubeviz/img/contour_location.png -------------------------------------------------------------------------------- /docs/cubeviz/img/subset_creation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/cubeviz/img/subset_creation.png -------------------------------------------------------------------------------- /docs/img/icons/picture_with_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/picture_with_plus.png -------------------------------------------------------------------------------- /docs/img/icons/viewer_data_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/icons/viewer_data_select.png -------------------------------------------------------------------------------- /docs/img/model_fitting_components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/model_fitting_components.png -------------------------------------------------------------------------------- /docs/specviz/img/spectral_region_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/spectral_region_5.png -------------------------------------------------------------------------------- /standalone/hooks/hook-dask.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files 2 | 3 | datas = collect_data_files('dask') 4 | -------------------------------------------------------------------------------- /docs/img/cubeviz_spectral_extraction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/img/cubeviz_spectral_extraction.png -------------------------------------------------------------------------------- /docs/imviz/img/imviz_radial_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/imviz/img/imviz_radial_profile.png -------------------------------------------------------------------------------- /jdaviz/core/loaders/__init__.py: -------------------------------------------------------------------------------- 1 | from .resolvers import * # noqa 2 | from .parsers import * # noqa 3 | from .importers import * # noqa -------------------------------------------------------------------------------- /notebooks/concepts/README.md: -------------------------------------------------------------------------------- 1 | This directory stores notebooks that may not yet function, 2 | but represent *desired* Jdaviz workflows. 3 | -------------------------------------------------------------------------------- /standalone/hooks/hook-bqplot.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files 2 | 3 | datas = collect_data_files('bqplot') 4 | -------------------------------------------------------------------------------- /docs/imviz/img/imviz_radial_profile_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/imviz/img/imviz_radial_profile_raw.png -------------------------------------------------------------------------------- /docs/specviz/img/line_analysis_plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/line_analysis_plugin.png -------------------------------------------------------------------------------- /docs/specviz/img/spectrumlist_combined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/spectrumlist_combined.png -------------------------------------------------------------------------------- /standalone/hooks/hook-ipypopout.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files 2 | 3 | datas = collect_data_files('ipypopout') 4 | -------------------------------------------------------------------------------- /docs/cubeviz/img/layer_tab_with_2_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/cubeviz/img/layer_tab_with_2_layers.png -------------------------------------------------------------------------------- /jdaviz/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # Licensed under a 3-clause BSD style license - see LICENSE.rst 2 | """ 3 | This module contains package tests. 4 | """ 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-mistune.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules 2 | 3 | hiddenimports = collect_submodules("mistune") 4 | -------------------------------------------------------------------------------- /jdaviz/configs/rampviz/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewers import * # noqa 2 | from .ramp_extraction import * # noqa 3 | from .tools import * # noqa 4 | -------------------------------------------------------------------------------- /docs/specviz/img/specviz_plotopt_viewerbounds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/docs/specviz/img/specviz_plotopt_viewerbounds.png -------------------------------------------------------------------------------- /.bandit.yaml: -------------------------------------------------------------------------------- 1 | exclude_dirs: 2 | - jdaviz/tests 3 | 4 | # skip warning about asserts - they are used as behavior checks not as code tools 5 | skips: ['B101'] 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Question/Help/Support 3 | url: https://jwsthelp.stsci.edu 4 | about: "JWST Help Desk" 5 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/data/gauss100_fits_wcs.fits: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/jdaviz/configs/imviz/tests/data/gauss100_fits_wcs.fits -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/data/miri_i2d_lonlat_gwcs.asdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/jdaviz/configs/imviz/tests/data/miri_i2d_lonlat_gwcs.asdf -------------------------------------------------------------------------------- /jdaviz/core/__init__.py: -------------------------------------------------------------------------------- 1 | # Import glue translators because this registers them - not used directly here 2 | import glue_astronomy.translators as _glue_astronomy_translators # noqa 3 | -------------------------------------------------------------------------------- /standalone/hooks/hook-asdf.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('asdf') 4 | datas += copy_metadata('asdf') 5 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .spectral_extraction.spectral_extraction import * # noqa 2 | from .cross_dispersion_profile.cross_dispersion_profile import * # noqa 3 | -------------------------------------------------------------------------------- /standalone/hooks/hook-glue.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('glue') 4 | datas += copy_metadata('glue-core') 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-pysiaf.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('pysiaf') 4 | datas += copy_metadata('pysiaf') 5 | -------------------------------------------------------------------------------- /docs/index_ref_api.rst: -------------------------------------------------------------------------------- 1 | .. _jdaviz-dev: 2 | 3 | ********** 4 | Developers 5 | ********** 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | dev/index 11 | reference/api 12 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/data/gauss100_fits_wcs_block_reduced.fits: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/jdaviz/configs/imviz/tests/data/gauss100_fits_wcs_block_reduced.fits -------------------------------------------------------------------------------- /standalone/hooks/hook-strauss.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('strauss') 4 | datas += copy_metadata('strauss') 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-specreduce.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('specreduce') 4 | datas += copy_metadata('specreduce') 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-glue_jupyter.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('glue_jupyter') 4 | datas += copy_metadata('glue_jupyter') 5 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/data/gauss100_fits_wcs_block_reduced_rotated.fits: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacetelescope/jdaviz/main/jdaviz/configs/imviz/tests/data/gauss100_fits_wcs_block_reduced_rotated.fits -------------------------------------------------------------------------------- /standalone/hooks/hook-jupyter_events.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('jupyter_events') 4 | datas += copy_metadata('jupyter_events') 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-jupyter_server.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files 2 | 3 | datas = collect_data_files('jupyter_server') 4 | hiddenimports = collect_submodules("jupyter_server") 5 | -------------------------------------------------------------------------------- /standalone/hooks/hook-regions.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files 2 | 3 | hiddenimports = collect_submodules("regions") 4 | # for CITATION.rst 5 | datas = collect_data_files('regions') 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-photutils.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files 2 | 3 | hiddenimports = collect_submodules("photutils") 4 | # for CITATION.rst 5 | datas = collect_data_files('photutils') 6 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewers import * # noqa 2 | from .parsers import * # noqa 3 | from .tools import * # noqa 4 | from .slit_overlay.slit_overlay import * # noqa 5 | from .row_lock.row_lock import * # noqa 6 | -------------------------------------------------------------------------------- /jdaviz/solara.css: -------------------------------------------------------------------------------- 1 | .solara-content-main { 2 | padding-top: 0 !important; 3 | } 4 | .widget-output { 5 | margin: 0; 6 | } 7 | .v-content.jdaviz__content--not-in-notebook { 8 | height: 100vh; 9 | max-height: 100vh; 10 | } 11 | -------------------------------------------------------------------------------- /standalone/hooks/hook-numpy.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("numpy") 4 | datas = collect_data_files('numpy') 5 | datas += copy_metadata('numpy') 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-scipy.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("scipy") 4 | datas = collect_data_files('scipy') 5 | datas += copy_metadata('scipy') 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-jdaviz.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("jdaviz") 4 | datas = collect_data_files('jdaviz') 5 | datas += copy_metadata('jdaviz') 6 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.rst 2 | include CHANGES.rst 3 | include LICENSE.rst 4 | include pyproject.toml 5 | 6 | recursive-include licenses * 7 | recursive-include share * 8 | 9 | prune build 10 | prune docs 11 | 12 | global-exclude *.pyc *.o 13 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/test_compass.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | 4 | def test_user_api(imviz_helper): 5 | plugin = imviz_helper.plugins['Compass'] 6 | 7 | with pytest.raises(AttributeError): 8 | plugin.data_label = 'cannot set readonly' 9 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewers import * # noqa 2 | from .parsers import * # noqa 3 | from .tools import * # noqa 4 | from .unit_conversion.unit_conversion import * # noqa 5 | from .line_analysis.line_analysis import * # noqa 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-solara.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("solara") 4 | datas = collect_data_files('solara') 5 | datas += collect_data_files('solara-ui') 6 | -------------------------------------------------------------------------------- /jdaviz/configs/__init__.py: -------------------------------------------------------------------------------- 1 | from .cubeviz import * # noqa 2 | from .default import * # noqa 3 | from .imviz import * # noqa 4 | from .mosviz import * # noqa 5 | from .rampviz import * # noqa 6 | from .specviz import * # noqa 7 | from .specviz2d import * # noqa 8 | -------------------------------------------------------------------------------- /standalone/hooks/hook-astroquery.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("astroquery") 4 | datas = collect_data_files('astroquery') 5 | datas += copy_metadata('astroquery') 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-ipyvuetify.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("ipyvuetify") 4 | datas = collect_data_files('ipyvuetify') 5 | datas += copy_metadata('ipyvuetify') 6 | -------------------------------------------------------------------------------- /standalone/hooks/hook-solara_ui.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("solara-ui") 4 | datas = collect_data_files('solara-ui') 5 | datas += copy_metadata('solara-ui') 6 | -------------------------------------------------------------------------------- /jdaviz/data/icons/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /standalone/hooks/hook-matplotlib_inline.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata 2 | 3 | datas = collect_data_files('matplotlib_inline') 4 | # since matplotlib 3.9 entry_points.txt is needed 5 | datas += copy_metadata('matplotlib_inline') 6 | -------------------------------------------------------------------------------- /jdaviz/data/icons/viewer_clone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/subset_widget/subset_widget.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /standalone/hooks/hook-solara_server.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("solara-server") 4 | datas = collect_data_files('solara-server') 5 | datas += copy_metadata('solara-server') 6 | -------------------------------------------------------------------------------- /docs/_templates/autosummary/base.rst: -------------------------------------------------------------------------------- 1 | {% extends "autosummary_core/base.rst" %} 2 | {# The template this is inherited from is in astropy/sphinx/ext/templates/autosummary_core. If you want to modify this template, it is strongly recommended that you still inherit from the astropy template. #} -------------------------------------------------------------------------------- /docs/_templates/autosummary/class.rst: -------------------------------------------------------------------------------- 1 | {% extends "autosummary_core/class.rst" %} 2 | {# The template this is inherited from is in astropy/sphinx/ext/templates/autosummary_core. If you want to modify this template, it is strongly recommended that you still inherit from the astropy template. #} -------------------------------------------------------------------------------- /licenses/README.rst: -------------------------------------------------------------------------------- 1 | Licenses 2 | ======== 3 | 4 | This directory holds license and credit information for works the Jdaviz 5 | package is derived from or distributes, and/or datasets. 6 | 7 | The license file for the Jdaviz package itself is located in the root of 8 | this repository. 9 | -------------------------------------------------------------------------------- /docs/_templates/autosummary/module.rst: -------------------------------------------------------------------------------- 1 | {% extends "autosummary_core/module.rst" %} 2 | {# The template this is inherited from is in astropy/sphinx/ext/templates/autosummary_core. If you want to modify this template, it is strongly recommended that you still inherit from the astropy template. #} -------------------------------------------------------------------------------- /jdaviz/components/plugin_popout.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | from .parser import * # noqa 2 | from .fits import * # noqa 3 | from .jpg_png import * # noqa 4 | from .asdf import * # noqa 5 | from .regions import * # noqa 6 | from .specutils import * # noqa 7 | from .object import * # noqa 8 | from .astropytable import * # noqa -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/row_lock/row_lock.vue: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /jdaviz/core/style_widget.py: -------------------------------------------------------------------------------- 1 | from ipyvuetify import VuetifyTemplate 2 | 3 | __all__ = ['StyleWidget'] 4 | 5 | 6 | class StyleWidget(VuetifyTemplate): 7 | def __init__(self, template_file, *args, **kwargs): 8 | self.template_file = template_file 9 | super().__init__(*args, **kwargs) 10 | -------------------------------------------------------------------------------- /standalone/hooks/hook-ipyreact.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules 2 | 3 | hiddenimports = collect_submodules("ipyreact") 4 | datas = collect_data_files("ipyreact") # codespell:ignore datas 5 | datas += copy_metadata("ipyreact") # codespell:ignore datas 6 | -------------------------------------------------------------------------------- /standalone/test_standalone.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | from playwright.sync_api import Page, expect 4 | 5 | 6 | def test_solara_basics(page: Page): 7 | page.goto("http://localhost:8765/") 8 | 9 | # when jdaviz is loaded (button at the top left) 10 | page.locator("text=Welcome to Jdaviz").wait_for() 11 | -------------------------------------------------------------------------------- /jdaviz/data/icons/table_subset.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/image_viewer_creator/image_viewer_creator.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/dev/index.rst: -------------------------------------------------------------------------------- 1 | ############### 2 | Developer Guide 3 | ############### 4 | 5 | Here is some documentation specific for developers. 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | release 11 | infrastructure 12 | ui_description 13 | ui_style_guide 14 | ui_plugin_components 15 | specviz_selection 16 | links 17 | win_dev 18 | -------------------------------------------------------------------------------- /jdaviz/data/icons/blink.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_live_results_icon.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_back.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/components/child_layer_icon.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/data/ds9_annulus_01.reg: -------------------------------------------------------------------------------- 1 | # Region file format: DS9 version 4.1 2 | global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 3 | icrs 4 | annulus(337.51894337,-20.83208305,0.5",1.0",3") # color=magenta font="helvetica 10 bold roman" text={Annulus} 5 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/resolvers/__init__.py: -------------------------------------------------------------------------------- 1 | from .resolver import * # noqa 2 | # NOTE: order imported here will be order tabs appear in loader dialog 3 | from .file import * # noqa 4 | from .file_drop import * # noqa 5 | from .url import * # noqa 6 | from .object import * # noqa 7 | from .astroquery import * # noqa 8 | from .virtual_observatory import * # noqa 9 | -------------------------------------------------------------------------------- /standalone/hooks/hook-jupyter_client.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import (collect_submodules, 2 | collect_data_files, 3 | copy_metadata) 4 | 5 | datas = collect_data_files('jupyter_client') 6 | datas += copy_metadata('jupyter_client') 7 | hiddenimports = collect_submodules("jupyter_client") 8 | -------------------------------------------------------------------------------- /jdaviz/data/icons/contrast.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/_static/jdaviz.css: -------------------------------------------------------------------------------- 1 | /* Main page overview cards */ 2 | 3 | .sd-card .sd-card-img-top { 4 | height: 52px; 5 | width: 52px; 6 | margin-left: auto; 7 | margin-right: auto; 8 | margin-top: 10px; 9 | } 10 | 11 | /* Dark theme tweaking */ 12 | html[data-theme=dark] .sd-card img[src*='.svg'] { 13 | filter: invert(0.82) brightness(0.8) contrast(1.2); 14 | } 15 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .mixins import * # noqa 2 | from .viewers import * # noqa 3 | from .parsers import * # noqa 4 | from .moment_maps.moment_maps import * # noqa 5 | from .slice.slice import * # noqa 6 | from .spectral_extraction.spectral_extraction import * # noqa 7 | from .sonify_data.sonify_data import * # noqa 8 | from .tools import * # noqa 9 | -------------------------------------------------------------------------------- /standalone/hooks/hook-debugpy.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs 2 | 3 | datas = collect_data_files("debugpy") 4 | # we are picking up debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_linux_amd64.dylib 5 | datas = filter(lambda x: not x[0].endswith('.dylib'), datas) 6 | # binaries = collect_dynamic_libs('omp') 7 | 8 | # breakpoint() -------------------------------------------------------------------------------- /jdaviz/components/external_link.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners 2 | 3 | # These owners will be the default owners for everything in 4 | # the repo. Unless a later match takes precedence, 5 | # they will be requested for 6 | # review when someone opens a pull request. 7 | * @rosteen @javerbukh @kecnry @bmorris3 @haticekaratay @cshanahan1 @gibsongreen @matthewportman 8 | -------------------------------------------------------------------------------- /jdaviz/data/icons/image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/deconfigged/deconfigged.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: deconfigged 3 | visible: 4 | menu_bar: false 5 | toolbar: true 6 | tray: true 7 | tab_headers: true 8 | dense_toolbar: false 9 | server_is_remote: false 10 | remote_enable_importers: true 11 | context: 12 | notebook: 13 | max_height: 600px 14 | toolbar: 15 | - g-coords-info 16 | viewer_area: 17 | - container: col 18 | -------------------------------------------------------------------------------- /docs/specviz2d/displaying.rst: -------------------------------------------------------------------------------- 1 | .. _specviz2d-displaying: 2 | 3 | ****************** 4 | Displaying Spectra 5 | ****************** 6 | 7 | Specviz2D consists of a 2D spectrum viewer and a 1D spectrum viewer, with linked x-axes. Each 8 | viewer window contains a toolbar, legend, and data menu. 9 | 10 | .. seealso:: 11 | 12 | :ref:`Specviz: Displaying Spectra ` 13 | Specviz documentation on the spectrum viewer. 14 | -------------------------------------------------------------------------------- /docs/index_using_jdaviz.rst: -------------------------------------------------------------------------------- 1 | .. _using-jdaviz: 2 | 3 | ********** 4 | User Guide 5 | ********** 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | installation 11 | quickstart 12 | load 13 | video_tutorials 14 | imviz/index 15 | specviz/index 16 | cubeviz/index 17 | specviz2d/index 18 | mosviz/index 19 | rampviz/index 20 | plugin_api 21 | save_state 22 | display 23 | sample_notebooks 24 | create_products 25 | known_bugs 26 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .tools import * # noqa 2 | from .viewers import * # noqa 3 | from .image_viewer_creator import * # noqa 4 | from .parsers import * # noqa 5 | from .coords_info import * # noqa 6 | from .orientation import * # noqa 7 | from .compass import * # noqa 8 | from .aper_phot_simple import * # noqa 9 | from .line_profile_xy import * # noqa 10 | from .catalogs import * # noqa 11 | from .footprints import * # noqa 12 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_input_header.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /docs/reference/api_parsers.rst: -------------------------------------------------------------------------------- 1 | .. _jdaviz-api-parsers: 2 | 3 | Parsers API 4 | =========== 5 | 6 | .. automodapi:: jdaviz.configs.cubeviz.plugins.parsers 7 | :no-inheritance-diagram: 8 | 9 | .. automodapi:: jdaviz.configs.imviz.plugins.parsers 10 | :no-inheritance-diagram: 11 | 12 | .. automodapi:: jdaviz.configs.mosviz.plugins.parsers 13 | :no-inheritance-diagram: 14 | 15 | .. automodapi:: jdaviz.configs.specviz.plugins.parsers 16 | :no-inheritance-diagram: -------------------------------------------------------------------------------- /jdaviz/configs/default/default.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | visible: 3 | menu_bar: false 4 | toolbar: true 5 | tray: true 6 | tab_headers: true 7 | server_is_remote: false 8 | remote_enable_importers: true 9 | context: 10 | notebook: 11 | max_height: 600px 12 | toolbar: 13 | - g-data-tools 14 | - g-viewer-creator 15 | - g-subset-tools 16 | tray: 17 | - g-subset-tools 18 | - g-gaussian-smooth 19 | - export 20 | - about 21 | - logger 22 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan_y.svg: -------------------------------------------------------------------------------- 1 | viz logos [Recovered] -------------------------------------------------------------------------------- /jdaviz/data/icons/select_x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/tune.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jdaviz/data/icons/left-east.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jdaviz/data/icons/right-east.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_y.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/virtual_observatory/vo_plugin.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | -------------------------------------------------------------------------------- /jdaviz/data/icons/catalog_select.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/H-Paschen-Brackett.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value 2 | HI 4-3, 1.8756 3 | HI 5-3, 1.2822 4 | HI 6-3, 1.0941 5 | HI 7-3, 1.0052 6 | HI 5-4, 4.05225 7 | HI 6-4, 2.6259 8 | HI 7-4, 2.1661 9 | HI 8-4, 1.9451 10 | HI 9-4, 1.8181 11 | HI 10-4, 1.7367 12 | HI 11-4, 1.6811 13 | HI 12-4, 1.6412 14 | HI 13-4, 1.6114 15 | HI 14-4, 1.5885 16 | HI 15-4, 1.5705 17 | HI 16-4, 1.5561 18 | HI 17-4, 1.5443 19 | HI 18-4, 1.5346 20 | HI 19-4, 1.5265 21 | HI 20-4, 1.5196 22 | HI series limit, 1.459 23 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan_x.svg: -------------------------------------------------------------------------------- 1 | viz logos [Recovered] -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewer_creators import BaseViewerCreator # noqa 2 | from .spectrum1d.spectrum1d import * # noqa 3 | from .spectrum2d.spectrum2d import * # noqa 4 | from .spectrum3d.spectrum3d import * # noqa 5 | from .image.image import * # noqa 6 | from .histogram.histogram import * # noqa 7 | from .scatter.scatter import * # noqa 8 | from .table.table import * # noqa 9 | from .ramp3d.ramp3d import * # noqa 10 | from .ramp_integration.ramp_integration import * # noqa 11 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/__init__.py: -------------------------------------------------------------------------------- 1 | from .importer import * # noqa 2 | from .spectrum_common import * # noqa 3 | from .spectrum1d import * # noqa 4 | from .spectrum2d import * # noqa 5 | from .spectrum3d import * # noqa 6 | from .spectrum_list import * # noqa 7 | from .ramp import * # noqa 8 | from .ramp_integration import * # noqa 9 | from .image import * # noqa 10 | from .subset import * # noqa 11 | from .trace import * # noqa 12 | from .catalog import * # noqa 13 | from .footprint import * # noqa -------------------------------------------------------------------------------- /.flake8: -------------------------------------------------------------------------------- 1 | # flake8 does not support pyproject.toml (https://github.com/PyCQA/flake8/issues/234) 2 | 3 | [flake8] 4 | max-line-length = 100 5 | # E123: closing bracket does not match indentation of opening bracket's line 6 | # E126: continuation line over-indented for hanging indent 7 | # E226: missing whitespace around arithmetic operator 8 | # E402: Module level import not at top of file 9 | # W503: line break before binary operator 10 | # W504: line break after binary operator 11 | ignore = E123,E126,E226,E402,W503,W504 12 | 13 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/hst-wfc3-uvis.csv: -------------------------------------------------------------------------------- 1 | flag,description,name 2 | 0,Reed Solomon decoding error, 3 | 1,Data replaced by fill value, 4 | 2,Bad detector pixel, 5 | 3,(Reserved), 6 | 4,Hot pixel, 7 | 5,CTE tail, 8 | 6,Warm pixel, 9 | 7,Bad pixel in bias, 10 | 8,Full well saturation, 11 | 9,Bad or uncertain flat value, 12 | 10,Charge trap and sink pixels, 13 | 11,A to D saturation, 14 | 12,Cosmic ray detected by AstroDrizzle, 15 | 13,Cosmic ray detected during CR SPLIT or RPT OBS combination, 16 | 14,Pixel affected by ghost/crosstalk, 17 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/object.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | 3 | from jdaviz.core.loaders.parsers import BaseParser 4 | from jdaviz.core.registries import loader_parser_registry 5 | 6 | 7 | @loader_parser_registry('object') 8 | class ObjectParser(BaseParser): 9 | # pass through an object from the object resolver directly to the importers 10 | @property 11 | def is_valid(self): 12 | return self.input is not None 13 | 14 | @cached_property 15 | def output(self): 16 | return self.input 17 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/hst-cos.csv: -------------------------------------------------------------------------------- 1 | flag,description,name 2 | 0,Reed-Solomon error, 3 | 1,Hot Spot (FUV), 4 | 2,Detector shadow, 5 | 3,Poorly calibrated region (including detector edge), 6 | 4,Very low response region (>80% depression), 7 | 5,Background feature (FUV), 8 | 6,Burst (FUV), 9 | 7,Pixel out-of-bounds, 10 | 8,Fill data, 11 | 9,Pulse Height out of bounds (FUV), 12 | 10,Low response region (>50% depression), 13 | 11,Bad time interval, 14 | 12,Low PHA feature, 15 | 13,Gain-Sag Hole, 16 | 14,FUV detector edge high dark rates (FUV), 17 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/CO-band-heads.csv: -------------------------------------------------------------------------------- 1 | Line Name, Rest Value, frequency 2 | 2-0, 2.2935, 4360.1 3 | 2-0, 2.3448, 4264.7 4 | 3-1, 2.3227, 4305.4 5 | 3-1, 2.3739, 4212.4 6 | 4-2, 2.3535, 4250.8 7 | 4-2, 2.4037, 4160.3 8 | 5-3, 2.3829, 4196.5 9 | 5-3, 2.4341, 4108.3 10 | 6-4, 2.4142, 4142.2 11 | 6-4, 2.4652, 4056.4 12 | 7-5, 2.4461, 4088.2 13 | 7-5, 2.4971, 4004.7 14 | 8-6, 2.4787, 4034.3 15 | 9-7, 2.5122, 3980.5 16 | 3-0, 1.5582, 6417.8 17 | 4-1, 1.5780, 6337.2 18 | 5-2, 1.5982, 6257.2 19 | 6-3, 1.6187, 6177.7 20 | 7-4, 1.6397, 6098.8 21 | 8-5, 1.6610, 6020.5 -------------------------------------------------------------------------------- /standalone/entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.apple.security.cs.allow-jit 7 | 8 | com.apple.security.cs.allow-unsigned-executable-memory 9 | 10 | com.apple.security.cs.disable-library-validation 11 | 12 | 13 | -------------------------------------------------------------------------------- /jdaviz/components/custom_toolbar_toggle.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | -------------------------------------------------------------------------------- /jdaviz/data/icons/roman_solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/hst-wfc3-ir.csv: -------------------------------------------------------------------------------- 1 | flag,description,name 2 | 0,Reed Solomon decoding error, 3 | 1,Data missing and replaced by fill value, 4 | 2,Bad detector pixel, 5 | 3,Deviant zero read (bias) value, 6 | 4,Hot pixel, 7 | 5,Unstable response, 8 | 6,Warm pixel, 9 | 7,Bad reference pixel, 10 | 8,Full well saturation, 11 | 9,"Bad or uncertain flat value, including ""blobs""", 12 | 10,(Reserved), 13 | 11,Signal in zero read, 14 | 12,Cosmic ray detected by AstroDrizzle, 15 | 13,Cosmic ray detected during calwf3 up the ramp fitting, 16 | 14,Pixel affected by ghost/crosstalk, 17 | -------------------------------------------------------------------------------- /standalone/hooks/hook-skimage.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs 2 | 3 | datas = collect_data_files("skimage", includes=["*.pyi"]) 4 | # osx does not like the .dylib directory with signing 5 | # [('.../site-packages/skimage/.dylibs/libomp.dylib', 'skimage/.dylibs')] 6 | binaries = collect_dynamic_libs('skimage') 7 | if binaries and binaries[0][0].endswith('.dylib'): 8 | assert len(binaries) == 1 9 | assert binaries[0][0].endswith('.dylibs/libomp.dylib') 10 | binaries = [ 11 | (binaries[0][0], 'skimage'), 12 | ] 13 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_xy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/reference/api.rst: -------------------------------------------------------------------------------- 1 | .. _jdaviz-api: 2 | 3 | ############# 4 | Reference/API 5 | ############# 6 | 7 | Configurations 8 | ============== 9 | 10 | .. toctree:: 11 | :maxdepth: 2 12 | 13 | api_configs 14 | 15 | Viewers 16 | ======= 17 | 18 | .. toctree:: 19 | :maxdepth: 2 20 | 21 | api_viewers 22 | 23 | Parsers 24 | ======= 25 | 26 | .. toctree:: 27 | :maxdepth: 2 28 | 29 | api_parsers 30 | 31 | Plugins 32 | ======= 33 | 34 | .. toctree:: 35 | :maxdepth: 2 36 | 37 | api_plugins 38 | 39 | Nuts and Bolts 40 | ============== 41 | 42 | .. toctree:: 43 | :maxdepth: 2 44 | 45 | api_nuts_bolts 46 | -------------------------------------------------------------------------------- /jdaviz/data/icons/compass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/base_viewer_creator.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/table/table.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /docs/nitpick-exceptions: -------------------------------------------------------------------------------- 1 | # https://github.com/mariobuikhuizen/ipyvuetify/issues/180 2 | py:class ipyvuetify.VuetifyTemplate.VuetifyTemplate 3 | 4 | # https://github.com/glue-viz/glue-jupyter/issues/258 5 | py:class glue_jupyter.table.viewer.TableViewer 6 | 7 | # Upstream refs not found 8 | py:class bqplot.marks.Lines 9 | py:class bqplot.marks.Scatter 10 | py:class bqplot.marks.Label 11 | py:class ipywidgets.widgets.valuewidget.ValueWidget 12 | py:class ipywidgets.widgets.widget_box.VBox 13 | py:class glue_jupyter.bqplot.common.tools.BqplotPanZoomMode 14 | py:class glue_jupyter.bqplot.image.state.BqplotImageViewerState 15 | -------------------------------------------------------------------------------- /.github/workflows/changelog_check.yml: -------------------------------------------------------------------------------- 1 | name: Check PR change log 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, labeled, unlabeled] 6 | 7 | concurrency: 8 | group: ${{ github.workflow }}-${{ github.ref }} 9 | cancel-in-progress: true 10 | 11 | jobs: 12 | changelog_checker: 13 | name: Check if change log entry is correct 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Check change log entry 17 | uses: scientific-python/action-check-changelogfile@1fc669db9618167166d5a16c10282044f51805c0 # 0.3 18 | env: 19 | CHANGELOG_FILENAME: CHANGES.rst 20 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 21 | -------------------------------------------------------------------------------- /docs/rampviz/index.rst: -------------------------------------------------------------------------------- 1 | .. |rampviz_logo| image:: ../logos/rampviz.svg 2 | :height: 42px 3 | 4 | .. _rampviz: 5 | 6 | 7 | ###################### 8 | |rampviz_logo| Rampviz 9 | ###################### 10 | 11 | .. warning:: 12 | 13 | Heads up: Rampviz is new, and in active development. 14 | 15 | Rampviz is a visualization and analysis toolbox for ramp cubes from 16 | infrared detectors, and is designed to work with ramp files from the Roman Space Telescope and JWST. 17 | It utilizes the `glue visualization `_ tool. 18 | 19 | **Using Rampviz** 20 | 21 | .. toctree:: 22 | :maxdepth: 2 23 | 24 | import_data 25 | plugins 26 | -------------------------------------------------------------------------------- /docs/reference/api_configs.rst: -------------------------------------------------------------------------------- 1 | .. _jdaviz-api-configs: 2 | 3 | Helpers API 4 | =========== 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | .. automodapi:: jdaviz.configs.cubeviz.helper 10 | :no-inheritance-diagram: 11 | 12 | .. automodapi:: jdaviz.configs.imviz.helper 13 | :no-inheritance-diagram: 14 | 15 | .. automodapi:: jdaviz.configs.mosviz.helper 16 | :no-inheritance-diagram: 17 | 18 | .. automodapi:: jdaviz.configs.specviz.helper 19 | :no-inheritance-diagram: 20 | 21 | .. automodapi:: jdaviz.configs.specviz2d.helper 22 | :no-inheritance-diagram: 23 | 24 | .. automodapi:: jdaviz.configs.rampviz.helper 25 | :no-inheritance-diagram: 26 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" # See documentation for possible values 9 | directory: ".github/workflows" # Location of package manifests 10 | schedule: 11 | interval: "monthly" 12 | groups: 13 | actions: 14 | patterns: 15 | - "*" 16 | -------------------------------------------------------------------------------- /docs/reference/api_viewers.rst: -------------------------------------------------------------------------------- 1 | .. _jdaviz-api-viewers: 2 | 3 | Viewers API 4 | =========== 5 | 6 | .. automodapi:: jdaviz.configs.default.plugins.viewers 7 | :no-inheritance-diagram: 8 | 9 | .. automodapi:: jdaviz.configs.cubeviz.plugins.viewers 10 | :no-inheritance-diagram: 11 | 12 | .. automodapi:: jdaviz.configs.imviz.plugins.viewers 13 | :no-inheritance-diagram: 14 | 15 | .. automodapi:: jdaviz.configs.mosviz.plugins.viewers 16 | :no-inheritance-diagram: 17 | 18 | .. automodapi:: jdaviz.configs.specviz.plugins.viewers 19 | :no-inheritance-diagram: 20 | 21 | .. automodapi:: jdaviz.configs.rampviz.plugins.viewers 22 | :no-inheritance-diagram: 23 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/slit_overlay/slit_overlay.vue: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /docs/rampviz/import_data.rst: -------------------------------------------------------------------------------- 1 | .. _rampviz-import-api: 2 | 3 | *************************** 4 | Importing Data into Rampviz 5 | *************************** 6 | 7 | 8 | Level 1 ramp products can be loaded into Rampviz with 9 | :py:meth:`~jdaviz.configs.rampviz.helper.Rampviz.load_data`. Rampviz loads 10 | Level 1 ramp cubes from: 11 | 12 | - JWST when given as paths to "_uncal.fits" files 13 | or :py:class:`~stdatamodels.jwst.datamodels.Level1bModel` data models, or 14 | 15 | - Roman Level 1 ramp files in asdf format or 16 | :py:class:`~roman_datamodels.datamodels.RampModel` data models. 17 | 18 | In order to load Roman files, you will need to install the :ref:`optional-deps-roman`. 19 | 20 | -------------------------------------------------------------------------------- /jdaviz/configs/deconfigged/helper.py: -------------------------------------------------------------------------------- 1 | from jdaviz.core.helpers import ConfigHelper 2 | from jdaviz.configs.default.plugins.line_lists.line_list_mixin import LineListMixin 3 | 4 | 5 | class App(ConfigHelper, LineListMixin): 6 | """Base user-facing application helper.""" 7 | 8 | _default_configuration = "deconfigged" # temporary during deconfig process 9 | 10 | def __init__(self, *args, **kwargs): 11 | api_hints_obj = kwargs.pop('api_hints_obj', 'viz') 12 | super().__init__(*args, **kwargs) 13 | self.app.api_hints_obj = api_hints_obj 14 | 15 | # Temporary during deconfig process 16 | self.load = self._load 17 | self.app.state.dev_loaders = True 18 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/plugin_api.rst: -------------------------------------------------------------------------------- 1 | .. _plugin-apis: 2 | 3 | ********************* 4 | Accessing Plugin APIs 5 | ********************* 6 | 7 | Each plugin object is wrapped by a public user API which enables interacting with the plugin from 8 | the notebook directly. The plugin API object for each plugin is accessible through ``viz.plugins``. 9 | For example: 10 | 11 | .. code-block:: python 12 | 13 | plugin = viz.plugins['Plot Options'] 14 | plugin.open_in_tray() 15 | plugin.show('popout') 16 | 17 | When running in a notebook, some plugins provide API hints directly in the UI. To enable these, toggle the ``[API]`` button on the top bar of the app or call: 18 | 19 | .. code-block:: python 20 | 21 | viz.toggle_api_hints() -------------------------------------------------------------------------------- /docs/save_state.rst: -------------------------------------------------------------------------------- 1 | *************************************** 2 | Saving the State of Your Jdaviz Session 3 | *************************************** 4 | 5 | While Jdaviz has no :guilabel:`Save` button, the various data products created 6 | within Jdaviz can be :ref:`exported to the notebook ` 7 | and ultimately saved locally using standard Python write commands. 8 | This is the suggested workflow to ensure reproducibility in your 9 | analysis without having to retrace your steps in Jdaviz each time you run a notebook. 10 | We also encourage users to manually record steps in their Jupyter notebook 11 | (or anywhere of convenience) with any details that may be of interest when 12 | running Jdaviz. 13 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/PAH.csv: -------------------------------------------------------------------------------- 1 | Line Name, Rest Value 2 | PAH3.25, 3.25 3 | PAH3.3, 3.3 4 | PAH3.4, 3.4 5 | PAH3.5, 3.5 6 | PAH3.8, 3.75 7 | PAH5.3, 5.27 8 | PAH5.7, 5.70 9 | PAH6.2, 6.22 10 | PAH6.7, 6.69 11 | PAH7.4, 7.42 12 | PAH7.6, 7.60 13 | PAH7.9, 7.85 14 | PAH8.3, 8.33 15 | PAH8.6, 8.61 16 | PAH10.7, 10.68 17 | PAH11.2, 11.23 18 | PAH11.3, 11.33 19 | PAH12.0, 11.99 20 | PAH12.6, 12.62 21 | PAH12.7, 12.69 22 | PAH13.5, 13.48 23 | PAH14.0, 14.04 24 | PAH14.2, 14.19 25 | PAH15.9, 15.90 26 | PAH16.5, 16.45 27 | PAH17.0, 17.04 28 | PAH17.4, 17.375 29 | PAH17.9, 17.87 30 | PAH18.9, 18.92 31 | PAH33.1, 33.10 -------------------------------------------------------------------------------- /jdaviz/components/docs_link.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /jdaviz/data/icons/jwst_solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_ellipse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/Atomic-Ionic.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value,Error,Reference 2 | CIV 12-9,1.0546 3 | CIV 8-7,1.1908 4 | CIV 16-11,1.3068 5 | CIV 17-12,1.6351 6 | CIV 2D-2P,1.6637 7 | CIV 9-8,1.7368 8 | CIV 2D-2P,2.0802 9 | CIV 15-12,2.2782 10 | CIV 17-13,2.3182 11 | CIV 13-11,2.4264 12 | CIV 10-9,2.4285 13 | CIII 3D-3P,0.9721 14 | CIII 3P-3S,1.19946 15 | CIII 15-9,1.2806 16 | CIII 1P-1S,2.10806 17 | CIII 8-7,2.1143 18 | CIII 3P-3S,2.32473 19 | CII 4D-4P,0.987 20 | NIII 2P3/2-2S1/2,2.0995 21 | NIII 2P3/2-2S1/2,2.2471 22 | NIII 2P1/2-2D1/2,2.2513 23 | NIV 1P-1S,1.18670 24 | NaI 2P-2S,2.2083 25 | NaI 2D-2P,2.345 26 | MgI 1P-1S,2.28494 27 | AlI y2D-2P,1.677 28 | CaI 3D-3P,1.615965 29 | CaI 3P-3S,2.2604 30 | FeI Many,1.58 31 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/ramp3d/ramp3d.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.rampviz.plugins.viewers import RampvizImageView 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['Ramp3DViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('3D Ramp', overwrite=True) 10 | class Ramp3DViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_ramp_cube'] 16 | self.viewer_label_default = '3D Ramp' 17 | 18 | @property 19 | def viewer_class(self): 20 | return RampvizImageView 21 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/Common_Galactic_700A-2000A.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value 2 | Ne VIII,770.409 3 | Ne VIII,780.324 4 | Ly e,937.814 5 | Ly d,949.742 6 | C III,977.03 7 | N III,989.79 8 | N III,991.514 9 | N III,991.579 10 | Ly b,1025.722 11 | O VI,1031.912 12 | O VI,1037.613 13 | Ar I,1066.66 14 | Ly a,1215.67 15 | N V,1238.821 16 | N V,1242.804 17 | Si II,1260.422 18 | Si II,1264.73 19 | O I,1302.168 20 | C II,1334.532 21 | C II,1335.708 22 | Si IV,1393.755 23 | O IV],1397.232 24 | O IV],1399.78 25 | Si IV,1402.77 26 | N IV],1486.496 27 | C IV,1548.187 28 | C IV,1550.772 29 | He II,1640.42 30 | O III],1660.809 31 | O III],1666.15 32 | N III],1746.823 33 | N III],1748.656 34 | Al III,1854.716 35 | Al III,1862.79 36 | Si III],1892.03 37 | C III],1908.734 38 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | build: 4 | os: ubuntu-22.04 5 | apt_packages: 6 | - graphviz 7 | tools: 8 | python: "3.11" 9 | jobs: 10 | post_checkout: 11 | # Use `git log` to check if the latest commit contains "skip rtd" or "rtd skip", 12 | # in that case exit the command with 183 to skip the build 13 | - MSG=`git --no-pager log --pretty="tformat:%s -- %b" -1`; case $MSG in *"skip rtd"*|*"rtd skip"*) exit 183;; *);; esac 14 | 15 | sphinx: 16 | builder: html 17 | configuration: docs/conf.py 18 | fail_on_warning: true 19 | 20 | python: 21 | install: 22 | - method: pip 23 | path: . 24 | extra_requirements: 25 | - docs 26 | 27 | # Build zipped HTML 28 | formats: 29 | - htmlzip 30 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/viewer_creator/viewer_creator.vue: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/spectrum1d/spectrum1d.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.specviz.plugins.viewers import Spectrum1DViewer 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['Spectrum1DViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('1D Spectrum', overwrite=True) 10 | class Spectrum1DViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_spectrum'] 16 | self.viewer_label_default = '1D Spectrum' 17 | 18 | @property 19 | def viewer_class(self): 20 | return Spectrum1DViewer 21 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/spectrum3d/spectrum3d.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.cubeviz.plugins.viewers import CubevizImageView 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['Spectrum3DViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('3D Spectrum', overwrite=True) 10 | class Spectrum3DViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_flux_cube'] 16 | self.viewer_label_default = '3D Spectrum' 17 | 18 | @property 19 | def viewer_class(self): 20 | return CubevizImageView 21 | -------------------------------------------------------------------------------- /docs/index_citation.rst: -------------------------------------------------------------------------------- 1 | .. _cite-jdaviz: 2 | 3 | ******** 4 | Citation 5 | ******** 6 | 7 | Cite Us 8 | ======= 9 | 10 | If you use ``jdaviz``, please cite us via our Zenodo record: |Zenodo| 11 | 12 | .. |Zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.5513927.svg 13 | :target: https://doi.org/10.5281/zenodo.5513927 14 | 15 | License 16 | ======= 17 | 18 | This project is Copyright (c) JDADF Developers and licensed under 19 | the terms of the BSD 3-Clause license. 20 | 21 | This package is based upon 22 | the `Astropy package template `_ 23 | which is licensed under the BSD 3-clause licence. See the 24 | `licenses `_ 25 | folder for more information. 26 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/image/image.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.imviz.plugins.viewers import ImvizImageView 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['ImageViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('Image', overwrite=True) 10 | class ImageViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_catalog_or_image_not_spectrum', 'is_not_wcs_only'] 16 | self.viewer_label_default = 'Image' 17 | 18 | @property 19 | def viewer_class(self): 20 | return ImvizImageView 21 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_lasso.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/slice.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /jdaviz/components/subset_icon.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/spectrum2d/spectrum2d.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.specviz.plugins.viewers import Spectrum2DViewer 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['Spectrum2DViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('2D Spectrum', overwrite=True) 10 | class Spectrum2DViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_2d_spectrum_or_trace'] 16 | self.viewer_label_default = '2D Spectrum' 17 | 18 | @property 19 | def viewer_class(self): 20 | return Spectrum2DViewer 21 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/virtual_observatory/vo_plugin.py: -------------------------------------------------------------------------------- 1 | from jdaviz.core.registries import tray_registry 2 | from jdaviz.core.template_mixin import PluginTemplateMixin 3 | 4 | __all__ = ["VoPlugin"] 5 | vo_plugin_label = "Virtual Observatory" 6 | 7 | 8 | @tray_registry("VoPlugin", label=vo_plugin_label) 9 | class VoPlugin(PluginTemplateMixin): 10 | """Plugin to query the Virtual Observatory and load data into Imviz""" 11 | 12 | template_file = __file__, "vo_plugin.vue" 13 | 14 | def __init__(self, *args, **kwargs): 15 | super().__init__(*args, **kwargs) 16 | 17 | # description displayed under plugin title in tray 18 | self._plugin_description = ( 19 | "Download data products from VO-registered telescopes and missions." 20 | ) 21 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_slider.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 26 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/ramp_integration/ramp_integration.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.rampviz.plugins.viewers import RampvizProfileView 2 | from jdaviz.core.viewer_creators import BaseViewerCreator 3 | from jdaviz.core.registries import viewer_creator_registry 4 | 5 | 6 | __all__ = ['RampIntegrationViewerCreator'] 7 | 8 | 9 | @viewer_creator_registry('Ramp Integration', overwrite=True) 10 | class RampIntegrationViewerCreator(BaseViewerCreator): 11 | template_file = __file__, "../base_viewer_creator.vue" 12 | 13 | def __init__(self, app, **kwargs): 14 | super().__init__(app, **kwargs) 15 | self.dataset.filters = ['is_ramp_integration'] 16 | self.viewer_label_default = 'Ramp Integration' 17 | 18 | @property 19 | def viewer_class(self): 20 | return RampvizProfileView 21 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/image_viewer_creator/image_viewer_creator.py: -------------------------------------------------------------------------------- 1 | from traitlets import List 2 | 3 | from jdaviz.core.events import NewViewerMessage 4 | from jdaviz.core.template_mixin import TemplateMixin 5 | from jdaviz.core.registries import tool_registry 6 | from jdaviz.configs.imviz.plugins.viewers import ImvizImageView 7 | 8 | __all__ = ['ImageViewerCreator'] 9 | 10 | 11 | @tool_registry('g-image-viewer-creator') 12 | class ImageViewerCreator(TemplateMixin): 13 | 14 | template_file = __file__, "image_viewer_creator.vue" 15 | viewer_types = List([]).tag(sync=True) 16 | 17 | def vue_create_image_viewer(self, *args, **kwargs): 18 | 19 | new_viewer_message = NewViewerMessage( 20 | ImvizImageView, data=None, sender=self) 21 | 22 | self.hub.broadcast(new_viewer_message) 23 | -------------------------------------------------------------------------------- /jdaviz/components/multiselect_toggle.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 26 | 27 | 29 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | from .viewers import * # noqa 2 | from .gaussian_smooth.gaussian_smooth import * # noqa 3 | from .data_tools import * # noqa 4 | from .viewer_creator import * # noqa 5 | from .subset_tools.subset_tools import * # noqa 6 | from .subset_widget.subset_widget import * # noqa 7 | from .model_fitting.model_fitting import * # noqa 8 | from .collapse.collapse import * # noqa 9 | from .line_lists.line_lists import * # noqa 10 | from .metadata_viewer.metadata_viewer import * # noqa 11 | from .export.export import * # noqa 12 | from .plot_options.plot_options import * # noqa 13 | from .markers.markers import * # noqa 14 | from .data_quality.data_quality import * # noqa 15 | from .about.about import * # noqa 16 | from .logger.logger import * # noqa 17 | from .virtual_observatory.vo_plugin import * # noqa 18 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/trace/trace.py: -------------------------------------------------------------------------------- 1 | from specreduce.tracing import Trace 2 | 3 | 4 | from jdaviz.core.registries import loader_importer_registry 5 | from jdaviz.core.loaders.importers import BaseImporterToDataCollection 6 | 7 | 8 | @loader_importer_registry('Trace') 9 | class TraceImporter(BaseImporterToDataCollection): 10 | template_file = __file__, "../to_dc_with_label.vue" 11 | 12 | @staticmethod 13 | def _get_supported_viewers(): 14 | return [{'label': '2D Spectrum', 'reference': 'spectrum-2d-viewer'}] 15 | 16 | @property 17 | def is_valid(self): 18 | if self.app.config not in ('deconfigged', 'specviz2d'): 19 | # NOTE: temporary during deconfig process 20 | return False 21 | return (isinstance(self.input, Trace) 22 | and 'Spectral Extraction' in self.app._jdaviz_helper.plugins) 23 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/table/table.py: -------------------------------------------------------------------------------- 1 | from jdaviz.configs.default.plugins.viewers import JdavizTableViewer 2 | from jdaviz.core.user_api import ViewerCreatorUserApi 3 | from jdaviz.core.viewer_creators import BaseViewerCreator 4 | from jdaviz.core.registries import viewer_creator_registry 5 | 6 | 7 | __all__ = ['TableViewerCreator'] 8 | 9 | 10 | @viewer_creator_registry('Table', overwrite=True) 11 | class TableViewerCreator(BaseViewerCreator): 12 | template_file = __file__, "table.vue" 13 | 14 | def __init__(self, app, **kwargs): 15 | super().__init__(app, **kwargs) 16 | self.dataset.filters = ['is_catalog'] 17 | self.viewer_label_default = 'Table' 18 | 19 | @property 20 | def user_api(self): 21 | return ViewerCreatorUserApi(self) 22 | 23 | @property 24 | def viewer_class(self): 25 | return JdavizTableViewer 26 | -------------------------------------------------------------------------------- /.github/workflows/open_actions.yml: -------------------------------------------------------------------------------- 1 | name: "When Opened" 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | pull_request_target: 8 | types: 9 | - opened 10 | 11 | jobs: 12 | triage: 13 | runs-on: ubuntu-latest 14 | steps: 15 | # NOTE: sync-labels due to https://github.com/actions/labeler/issues/112 16 | - name: Label PR 17 | uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 18 | if: github.event_name == 'pull_request_target' && github.event.pull_request.user.login != 'meeseeksmachine' 19 | with: 20 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 21 | # Special action for a special day. Until next year! 22 | #- name: Special comment 23 | # uses: pllim/action-special_pr_comment@5126c189c02418a55448480b28efd1a00af48d7b # 0.2 24 | # with: 25 | # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 26 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/parser.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from jdaviz.core.template_mixin import WithCache 3 | 4 | __all__ = ['BaseParser'] 5 | 6 | 7 | class BaseParser(WithCache): 8 | def __init__(self, app, inp): 9 | self._app = app 10 | self._input = inp 11 | 12 | @property 13 | def app(self): 14 | return self._app 15 | 16 | @property 17 | def is_valid(self): 18 | raise NotImplementedError("Subclasses must implement is_valid property") # pragma: nocover 19 | 20 | @property 21 | def input(self): 22 | return self._input 23 | 24 | @cached_property 25 | def output(self): 26 | raise NotImplementedError("Subclasses must implement output property") # pragma: nocover 27 | 28 | def _cleanup(self): 29 | """Cleanup any resources held by the parser.""" 30 | return 31 | -------------------------------------------------------------------------------- /jdaviz/data/icons/line_select.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_box.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_inline_select.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 26 | 27 | 29 | -------------------------------------------------------------------------------- /jdaviz/data/icons/home_match.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_annulus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/test_parser_asdf.py: -------------------------------------------------------------------------------- 1 | import asdf 2 | import numpy as np 3 | import astropy.units as u 4 | 5 | from jdaviz.configs.imviz.tests.utils import create_example_gwcs 6 | 7 | 8 | def test_asdf_not_rdm(imviz_helper): 9 | # test support for ASDF files that look like Roman files 10 | # for users with or without roman_datamodels: 11 | in_unit = u.Jy 12 | in_data = np.arange(16, dtype=np.float32).reshape((4, 4)) * in_unit 13 | tree = { 14 | 'roman': { 15 | 'data': in_data, 16 | 'meta': { 17 | 'wcs': create_example_gwcs((4, 4)) 18 | }, 19 | }, 20 | } 21 | 22 | af = asdf.AsdfFile(tree=tree) 23 | imviz_helper.load_data(af) 24 | out_component = imviz_helper.app.data_collection[0].get_component('DATA') 25 | np.testing.assert_array_equal(in_data.value, out_component.data) 26 | assert str(in_unit) == out_component.units 27 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/Common_nebular.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value 2 | [Ne V],3426 3 | OIII,3444 4 | [O II],3727 5 | [O II],3729 6 | O III,3760 7 | H10,3797 8 | H9,3835 9 | [Ne III],3868 10 | H8,3889 11 | He II,3923 12 | He,3970 13 | He I,4026 14 | [S II],4068 15 | N III,4097 16 | Hd,4101.748 17 | He I,4143 18 | [K V],4163 19 | He II,4199 20 | [Fe V],4227 21 | C II,4267 22 | Hg,4340.475 23 | [O III],4363 24 | He I,4471 25 | He II,4541 26 | [Fe [III+ III]],4607 27 | N III,4640 28 | He II,4686 29 | He I + [Ar IV],4712 30 | [Ar IV],4740 31 | Hb,4861.342 32 | [O III],4959 33 | [O III],5007 34 | He II,5411 35 | [CI III],5517 36 | [CI III],5537 37 | [N II],5755 38 | He I,5876 39 | [K IV],6101 40 | [O I],6300 41 | [S III],6319 42 | [Mn V],6393 43 | [He II],6406 44 | [Ar V],6435 45 | [N II],6548 46 | Ha,6563 47 | [N II],6584 48 | He I,6678 49 | [S II],6719 50 | [S II],6730 51 | He I,7065 52 | Ar III,7136 53 | -------------------------------------------------------------------------------- /jdaviz/data/icons/footprint_select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /jdaviz/data/icons/select_single_pixel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/tests/test_helper.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from specutils import Spectrum 3 | 4 | from jdaviz import Specviz 5 | 6 | 7 | def test_helper(specviz2d_helper, mos_spectrum2d): 8 | specviz2d_helper.load_data(spectrum_2d=mos_spectrum2d) 9 | assert isinstance(specviz2d_helper.specviz, Specviz) 10 | 11 | specviz2d_helper.app.data_collection[0].meta['Trace'] = "Test" 12 | 13 | returned_data = specviz2d_helper.get_data("Spectrum 2D") 14 | assert len(returned_data.shape) == 1 15 | assert isinstance(returned_data, Spectrum) 16 | 17 | 18 | # Some API might be going through deprecation, so ignore the warning. 19 | @pytest.mark.filterwarnings("ignore::DeprecationWarning") 20 | def test_plugin_user_apis(specviz2d_helper): 21 | for plugin_name, plugin_api in specviz2d_helper.plugins.items(): 22 | plugin = plugin_api._obj 23 | for attr in plugin_api._expose: 24 | assert hasattr(plugin, attr) 25 | -------------------------------------------------------------------------------- /jdaviz/data/icons/line_select_disabled.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/core/tests/test_custom_traitlets.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from traitlets import HasTraits, TraitError 3 | 4 | from jdaviz.core.custom_traitlets import IntHandleEmpty, FloatHandleEmpty 5 | 6 | 7 | class Foo(HasTraits): 8 | int_handle_empty = IntHandleEmpty(0) 9 | int_handle_empty_replace = IntHandleEmpty(0, replace_with_default=True) 10 | float_handle_empty = FloatHandleEmpty() 11 | 12 | 13 | def test_inthandleempty(): 14 | foo = Foo() 15 | 16 | foo.int_handle_empty = 1 17 | foo.int_handle_empty = '' 18 | assert foo.int_handle_empty == '' 19 | with pytest.raises( 20 | TraitError, 21 | match=r"The 'int_handle_empty' trait of a Foo instance expected an int, not the str 'blah'\."): # noqa 22 | foo.int_handle_empty = 'blah' 23 | 24 | foo.int_handle_empty_replace = 1 25 | foo.int_handle_empty_replace = '' 26 | assert foo.int_handle_empty_replace == 0 27 | 28 | foo.float_handle_empty = 1.2 29 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/specviz.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: specviz 3 | data: 4 | parser: specviz-spectrum1d-parser 5 | visible: 6 | menu_bar: false 7 | toolbar: true 8 | tray: true 9 | tab_headers: false 10 | dense_toolbar: false 11 | server_is_remote: false 12 | remote_enable_importers: true 13 | context: 14 | notebook: 15 | max_height: 600px 16 | toolbar: 17 | - g-data-tools 18 | - g-subset-tools 19 | - g-coords-info 20 | tray: 21 | - g-metadata-viewer 22 | - g-plot-options 23 | - g-subset-tools 24 | - g-markers 25 | - g-gaussian-smooth 26 | - g-model-fitting 27 | - g-unit-conversion 28 | - g-line-list 29 | - specviz-line-analysis 30 | - export 31 | - about 32 | - logger 33 | viewer_area: 34 | - container: col 35 | children: 36 | - container: row 37 | viewers: 38 | - name: Spectrum 39 | plot: spectrum-1d-viewer 40 | reference: spectrum-viewer 41 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/subset/subset.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/histogram/histogram.vue: -------------------------------------------------------------------------------- 1 | 26 | -------------------------------------------------------------------------------- /jdaviz/data/icons/cog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_xrange.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/specviz2d/index.rst: -------------------------------------------------------------------------------- 1 | .. |specviz2d_logo| image:: ../logos/specviz2d\ icon.svg 2 | :height: 42px 3 | 4 | .. _specviz2d: 5 | 6 | ########################## 7 | |specviz2d_logo| Specviz2D 8 | ########################## 9 | 10 | .. image:: https://stsci.box.com/shared/static/xn3x7642zjjqz5ysu5i4obvqt0p7wb27.gif 11 | :alt: Introductory video tour of the Specviz2d configuration and its features 12 | 13 | Specviz2d is a tool for visualization and quick-look analysis of 2D astronomical spectra. 14 | It incorporates visualization tools with analysis capabilities, 15 | such as Astropy regions and `specreduce `_ 16 | and :ref:`specutils` packages. In particular, it features interactive spectral 17 | extraction of 2D spectra. 18 | 19 | .. We do not want a real section here so navbar shows toc directly. 20 | 21 | **Using Specviz2D** 22 | 23 | .. toctree:: 24 | :maxdepth: 2 25 | 26 | import_data 27 | displaying 28 | plugins 29 | export_data 30 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan_x_match.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/jpg_png.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from skimage.io import imread 3 | from skimage.color import rgb2gray, rgba2rgb 4 | from jdaviz.core.loaders.parsers import BaseParser 5 | from jdaviz.core.registries import loader_parser_registry 6 | 7 | 8 | __all__ = ['JPGPNGParser'] 9 | 10 | 11 | @loader_parser_registry('jpgpng') 12 | class JPGPNGParser(BaseParser): 13 | 14 | @property 15 | def is_valid(self): 16 | if self.app.config not in ('deconfigged', 'specviz2d', 'lcviz', 'imviz'): 17 | # NOTE: temporary during deconfig process 18 | return False 19 | return isinstance(self.input, str) and self.input.endswith(('.jpg', '.jpeg', '.png')) 20 | 21 | @cached_property 22 | def output(self): 23 | im = imread(self.input) 24 | if im.shape[2] == 4: 25 | pf = rgb2gray(rgba2rgb(im)) 26 | else: # Assume RGB 27 | pf = rgb2gray(im) 28 | return pf[::-1, :] # Flip it 29 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pixelspectra.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/stretch_bounds.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/importers/footprint/footprint.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_yrange.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_loaders_panel.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | -------------------------------------------------------------------------------- /jdaviz/components/glue_state_select.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 29 | 30 | 37 | -------------------------------------------------------------------------------- /docs/logos/rampviz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/sample_notebooks.rst: -------------------------------------------------------------------------------- 1 | 2 | .. _sample_notebook: 3 | 4 | Sample Notebooks 5 | ================ 6 | 7 | ``jdaviz`` is one tool that is part of STScI's larger `Data Analysis Tools Ecosystem `_. 8 | 9 | These tools include three types of example Jupyter notebooks. 10 | 11 | 1. :gh-tree:`Sample Jdaviz Notebooks ` that illustrate how to use Jdaviz and various API calls. These notebooks are located in the ``notebooks`` sub-directory of the git repository. 12 | 13 | 2. `Sample JDAT notebooks `_ that illustrate likely science workflows with data obtained from the various JWST instruments. These notebooks incorporate ``astropy`` and Jdaviz when possible. 14 | 15 | 3. `Sample JWST pipeline notebooks `_ that illustrate how to run the JWST science calibration pipeline. 16 | -------------------------------------------------------------------------------- /docs/cubeviz/displayspectra.rst: -------------------------------------------------------------------------------- 1 | ****************** 2 | Displaying Spectra 3 | ****************** 4 | 5 | A collapsed spectrum of the cube displayed in the upper-left viewer 6 | automatically appears in the 1D spectrum viewer, using the set collapse function. 7 | The collapse function can be changed in the :guilabel:`Line` 8 | tab of the Plot Options plugin, which can be reached by clicking the |icon-settings-sliders| 9 | icon in the spectrum viewer. Additional spectra 10 | can be loaded into the spectrum viewer, as detailed in the linked documentation 11 | below. 12 | 13 | .. seealso:: 14 | 15 | :ref:`Displaying Spectra (Specviz) ` 16 | Documentation on displaying spectra in a 1D spectrum viewer. 17 | 18 | There is one important difference when using the API to access Specviz from within Cubeviz. 19 | The functionality of the :class:`jdaviz.configs.specviz.helper.Specviz` API can be accessed in Cubeviz via 20 | the `~jdaviz.configs.cubeviz.helper.Cubeviz.specviz` attribute, e.g. ``cubeviz.specviz.get_spectra()``. 21 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/imviz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# PREFIX\n", 10 | "from jdaviz import Imviz\n", 11 | "\n", 12 | "imviz = Imviz(verbosity='JDAVIZ_VERBOSITY', history_verbosity='JDAVIZ_HISTORY_VERBOSITY')\n", 13 | "data_path = 'DATA_FILENAME'\n", 14 | "if data_path:\n", 15 | " imviz.load_data('DATA_FILENAME')\n", 16 | "imviz.app" 17 | ] 18 | } 19 | ], 20 | "metadata": { 21 | "kernelspec": { 22 | "display_name": "Python 3", 23 | "language": "python", 24 | "name": "python3" 25 | }, 26 | "language_info": { 27 | "codemirror_mode": { 28 | "name": "ipython", 29 | "version": 3 30 | }, 31 | "file_extension": ".py", 32 | "mimetype": "text/x-python", 33 | "name": "python", 34 | "nbconvert_exporter": "python", 35 | "pygments_lexer": "ipython3", 36 | "version": "3.9.1" 37 | } 38 | }, 39 | "nbformat": 4, 40 | "nbformat_minor": 2 41 | } 42 | -------------------------------------------------------------------------------- /jdaviz/data/icons/checktoradial.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz/specviz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# PREFIX\n", 10 | "from jdaviz import Specviz\n", 11 | "\n", 12 | "specviz = Specviz(verbosity='JDAVIZ_VERBOSITY', history_verbosity='JDAVIZ_HISTORY_VERBOSITY')\n", 13 | "data_path = 'DATA_FILENAME'\n", 14 | "if data_path:\n", 15 | " specviz.load_data(data_path)\n", 16 | "specviz.app" 17 | ] 18 | } 19 | ], 20 | "metadata": { 21 | "kernelspec": { 22 | "display_name": "Python 3", 23 | "language": "python", 24 | "name": "python3" 25 | }, 26 | "language_info": { 27 | "codemirror_mode": { 28 | "name": "ipython", 29 | "version": 3 30 | }, 31 | "file_extension": ".py", 32 | "mimetype": "text/x-python", 33 | "name": "python", 34 | "nbconvert_exporter": "python", 35 | "pygments_lexer": "ipython3", 36 | "version": "3.7.6-final" 37 | } 38 | }, 39 | "nbformat": 4, 40 | "nbformat_minor": 2 41 | } 42 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/cubeviz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# PREFIX\n", 10 | "from jdaviz import Cubeviz\n", 11 | "\n", 12 | "cubeviz = Cubeviz(verbosity='JDAVIZ_VERBOSITY', history_verbosity='JDAVIZ_HISTORY_VERBOSITY')\n", 13 | "data_path = 'DATA_FILENAME'\n", 14 | "if data_path:\n", 15 | " cubeviz.load_data('DATA_FILENAME')\n", 16 | "cubeviz.app" 17 | ] 18 | } 19 | ], 20 | "metadata": { 21 | "kernelspec": { 22 | "display_name": "Python 3", 23 | "language": "python", 24 | "name": "python3" 25 | }, 26 | "language_info": { 27 | "codemirror_mode": { 28 | "name": "ipython", 29 | "version": 3 30 | }, 31 | "file_extension": ".py", 32 | "mimetype": "text/x-python", 33 | "name": "python", 34 | "nbconvert_exporter": "python", 35 | "pygments_lexer": "ipython3", 36 | "version": "3.7.6-final" 37 | } 38 | }, 39 | "nbformat": 4, 40 | "nbformat_minor": 2 41 | } 42 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/imviz.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: imviz 3 | data: 4 | auto_populate: true 5 | parser: imviz-data-parser 6 | visible: 7 | menu_bar: false 8 | toolbar: true 9 | tray: true 10 | tab_headers: true 11 | dense_toolbar: false 12 | server_is_remote: false 13 | remote_enable_importers: true 14 | context: 15 | notebook: 16 | max_height: 600px 17 | toolbar: 18 | - g-data-tools 19 | - g-subset-tools 20 | - g-image-viewer-creator 21 | - g-coords-info 22 | tray: 23 | - g-metadata-viewer 24 | - imviz-orientation 25 | - VoPlugin 26 | - g-plot-options 27 | - g-data-quality 28 | - g-subset-tools 29 | - g-markers 30 | - imviz-compass 31 | - imviz-line-profile-xy 32 | - imviz-aper-phot-simple 33 | - imviz-catalogs 34 | - imviz-footprints 35 | - export 36 | - about 37 | - logger 38 | viewer_area: 39 | - container: col 40 | children: 41 | - container: row 42 | viewers: 43 | - name: imviz-0 44 | plot: imviz-image-viewer 45 | reference: imviz-0 46 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_plot.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 19 | 20 | 37 | -------------------------------------------------------------------------------- /jdaviz/data/icons/spectral_range.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jdaviz/components/hover_api_hint.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | -------------------------------------------------------------------------------- /jdaviz/data/icons/pan_y_match.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /docs/dev/win_dev.rst: -------------------------------------------------------------------------------- 1 | ********************* 2 | Developing on Windows 3 | ********************* 4 | 5 | On some Windows OS versions, symbolic links cannot be created without 6 | using a terminal started with administrative priviledge, which is not 7 | recommended for security reasons. Therefore, ``setup.py`` instead 8 | creates a copy of the data files instead of using symbolic links. 9 | As a result, if you are changing the contents in ``share`` folder 10 | under the source checkout's root directory, you will need to rebuild 11 | the package even in editable install mode. Otherwise, this should not 12 | affect your development experience. 13 | 14 | WSL2 and Solara 15 | --------------- 16 | 17 | ``solara`` is unable to display when `WSL2 `_ cannot 18 | start up the Windows-side browser executable. Unfortunately, 19 | unlike Jupyter notebook, ``solara`` does not have a ``--no-browser`` 20 | option with a tokenized URL you can copy-and-paste manually on the 21 | Windows side. Therefore, you might need to install Jdaviz natively 22 | on Windows to test its standalone application functionality. 23 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/tests/test_parser_roman.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | # NOTE: Since this is optional dependency, codecov coverage does not include this test module. 4 | roman_datamodels = pytest.importorskip("roman_datamodels") 5 | 6 | from gwcs import WCS as GWCS 7 | 8 | 9 | @pytest.mark.parametrize( 10 | ('ext_list', 'n_dc'), 11 | [(None, 1), 12 | ('data', 1), 13 | (['data', 'var_rnoise'], 2)]) 14 | def test_roman_wfi_ext_options(imviz_helper, roman_imagemodel, ext_list, n_dc): 15 | imviz_helper.load_data(roman_imagemodel, data_label='roman_wfi_image_model', ext=ext_list) 16 | dc = imviz_helper.app.data_collection 17 | assert len(dc) == n_dc 18 | 19 | if ext_list == '*': 20 | ext_list = ('data', 'dq', 'err', 'var_poisson', 'var_rnoise') 21 | elif isinstance(ext_list, str): 22 | ext_list = (ext_list, ) 23 | elif ext_list is None: 24 | ext_list = ('data', ) 25 | 26 | for data, ext in zip(dc, ext_list): 27 | assert data.label == f'roman_wfi_image_model[{ext}]' 28 | assert data.shape == (20, 10) # ny, nx 29 | assert isinstance(data.coords, GWCS) 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled files 2 | *.py[cod] 3 | *.a 4 | *.o 5 | *.so 6 | __pycache__ 7 | 8 | # Ignore .c files by default to avoid including generated code. If you want to 9 | # add a non-generated .c extension, use `git add -f filename.c`. 10 | *.c 11 | 12 | # Other generated files 13 | */version.py 14 | */cython_version.py 15 | htmlcov 16 | .coverage 17 | MANIFEST 18 | .ipynb_checkpoints 19 | notebooks/*.fits 20 | 21 | # Sphinx 22 | docs/api 23 | docs/_build 24 | 25 | # Eclipse editor project files 26 | .project 27 | .pydevproject 28 | .settings 29 | 30 | # Pycharm editor project files 31 | .idea 32 | 33 | # Floobits project files 34 | .floo 35 | .flooignore 36 | 37 | # Packages/installer info 38 | *.egg 39 | *.egg-info 40 | dist 41 | build 42 | eggs 43 | parts 44 | bin 45 | var 46 | sdist 47 | develop-eggs 48 | .installed.cfg 49 | distribute-*.tar.gz 50 | 51 | # Other 52 | .cache 53 | .tox 54 | .*.sw[op] 55 | *~ 56 | ._* 57 | .project 58 | .pydevproject 59 | .settings 60 | pip-wheel-metadata 61 | .vscode 62 | .pytest_cache 63 | .tmp 64 | .eggs 65 | .python-version 66 | 67 | # Mac OSX 68 | .DS_Store 69 | 70 | # Environments 71 | /env* 72 | /*venv 73 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/plugins/row_lock/row_lock.py: -------------------------------------------------------------------------------- 1 | from traitlets import Bool 2 | 3 | from jdaviz.core.registries import tool_registry 4 | from jdaviz.core.template_mixin import TemplateMixin 5 | from jdaviz.core.events import RowLockMessage 6 | 7 | __all__ = ['RowLock'] 8 | 9 | 10 | @tool_registry('g-row-lock') 11 | class RowLock(TemplateMixin): 12 | template_file = __file__, "row_lock.vue" 13 | is_locked = Bool(False).tag(sync=True) 14 | 15 | def __init__(self, *args, **kwargs): 16 | super().__init__(*args, **kwargs) 17 | 18 | # Watch for messages from Specviz helper redshift functions 19 | self.session.hub.subscribe(self, RowLockMessage, 20 | handler=self._row_lock_changed) 21 | 22 | def _row_lock_changed(self, msg): 23 | self.is_locked = msg.is_locked 24 | 25 | def vue_toggle_lock(self, event): 26 | # Send the RowLockMessage which will update is_locked in _row_lock_changed 27 | # but will also set the application state in the Mosviz helper 28 | msg = RowLockMessage(not self.is_locked, sender=self) 29 | self.app.hub.broadcast(msg) 30 | -------------------------------------------------------------------------------- /docs/mosviz/redshift.rst: -------------------------------------------------------------------------------- 1 | .. _mosviz-redshift: 2 | 3 | ******************* 4 | Setting Redshift/RV 5 | ******************* 6 | 7 | The :ref:`Line Lists Plugin ` contains a redshift slider as well as the ability to 8 | view and set the redshift and/or radial velocity. 9 | 10 | Additionally, the :ref:`Line Analysis Plugin ` includes the capability to 11 | compute and assign the redshift based on the measured centroid of a line. 12 | 13 | From the notebook 14 | ================= 15 | 16 | In the notebook, the value of the Redshift column can be changed for all rows or a single row 17 | using :py:meth:`~jdaviz.configs.mosviz.helper.Mosviz.update_column`. 18 | 19 | The 1D and 2D spectrum objects can be retrieved (with redshift optionally applied) using 20 | :py:meth:`~jdaviz.configs.mosviz.helper.Mosviz.get_spectrum_1d` and :py:meth:`~jdaviz.configs.mosviz.helper.Mosviz.get_spectrum_2d`, 21 | respectively. 22 | 23 | See the ``notebooks/MosvizNIRISSExample.ipynb`` notebook in the 24 | `repository `_ to see examples of 25 | manipulating MOS Table data, including the redshift. 26 | -------------------------------------------------------------------------------- /jdaviz/configs/specviz2d/specviz2d.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: specviz2d 3 | visible: 4 | menu_bar: false 5 | toolbar: true 6 | tray: true 7 | tab_headers: false 8 | dense_toolbar: false 9 | server_is_remote: false 10 | remote_enable_importers: true 11 | context: 12 | notebook: 13 | max_height: 600px 14 | toolbar: 15 | - g-data-tools 16 | - g-subset-tools 17 | - g-coords-info 18 | tray: 19 | - g-metadata-viewer 20 | - g-plot-options 21 | - g-subset-tools 22 | - g-markers 23 | - g-unit-conversion 24 | - spectral-extraction-2d 25 | - g-gaussian-smooth 26 | - g-model-fitting 27 | - g-line-list 28 | - cross-dispersion-profile 29 | - specviz-line-analysis 30 | - export 31 | - about 32 | - logger 33 | viewer_area: 34 | - container: col 35 | children: 36 | - container: row 37 | viewers: 38 | - name: 2D Spectrum viewer 39 | plot: mosviz-profile-2d-viewer 40 | reference: spectrum-2d-viewer 41 | - container: row 42 | viewers: 43 | - name: Spectrum 44 | plot: mosviz-profile-viewer 45 | reference: spectrum-viewer -------------------------------------------------------------------------------- /jdaviz/components/plugin_action_button.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 39 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_section_header.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 16 | 58 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/hst-stis.csv: -------------------------------------------------------------------------------- 1 | flag,description,name 2 | 0,Error in the Reed-Solomon decoding (an algorithm for error correction in digital communications)., 3 | 1,Lost data replaced by fill values., 4 | 2,"Bad detector pixel (e.g., bad column or row, mixed science and bias for overscan, or beyond aperture).", 5 | 3,Data masked by occulting bar., 6 | 4,Pixel having dark rate > 5-sigma times the median dark level., 7 | 5,"Large blemish, depth > 40% of the normalized p-flat (repeller wire).", 8 | 6,Vignetted pixel, 9 | 7,Pixel in the overscan region., 10 | 8,"Saturated pixel, count rate at 90% of max possible local non-linearity turns over and is multi-valued; pixels within 10% of turnover and all pixels within 4 pixels of that pixel are flagged.", 11 | 9,Bad pixel in reference file., 12 | 10,"Small blemish, depth between 40% and 70% of the normalized flat. Applies to MAMA and CCD p-flats.", 13 | 11,">30% of background pixels rejected by sigma-clip, or flagged, during 1-D spectral extraction.", 14 | 12,Extracted flux affected by bad input data., 15 | 13,Data rejected in input pixel during image combination for cosmic ray rejection., 16 | 14,Extracted flux not CTI corrected because gross counts are <= 0., 17 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_previews_temp_disabled.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 29 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/mosviz.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "scrolled": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "# PREFIX\n", 12 | "import pathlib\n", 13 | "from jdaviz import Mosviz\n", 14 | "\n", 15 | "data_path = pathlib.Path('DATA_FILENAME')\n", 16 | "\n", 17 | "mosviz = Mosviz(verbosity='JDAVIZ_VERBOSITY', history_verbosity='JDAVIZ_HISTORY_VERBOSITY')\n", 18 | "data_path = 'DATA_FILENAME'\n", 19 | "if data_path:\n", 20 | " mosviz.load_data(directory=data_path, instrument='INSTRUMENT')\n", 21 | "mosviz.app" 22 | ] 23 | } 24 | ], 25 | "metadata": { 26 | "kernelspec": { 27 | "display_name": "Python 3", 28 | "language": "python", 29 | "name": "python3" 30 | }, 31 | "language_info": { 32 | "codemirror_mode": { 33 | "name": "ipython", 34 | "version": 3 35 | }, 36 | "file_extension": ".py", 37 | "mimetype": "text/x-python", 38 | "name": "python", 39 | "nbconvert_exporter": "python", 40 | "pygments_lexer": "ipython3", 41 | "version": "3.10.4" 42 | } 43 | }, 44 | "nbformat": 4, 45 | "nbformat_minor": 2 46 | } 47 | -------------------------------------------------------------------------------- /jdaviz/configs/rampviz/rampviz.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: rampviz 3 | data: 4 | auto_populate: true 5 | parser: rampviz-data-parser 6 | visible: 7 | menu_bar: false 8 | toolbar: true 9 | tray: true 10 | tab_headers: true 11 | dense_toolbar: false 12 | server_is_remote: false 13 | remote_enable_importers: true 14 | context: 15 | notebook: 16 | max_height: 750px 17 | toolbar: 18 | - g-data-tools 19 | - g-subset-tools 20 | - g-coords-info 21 | tray: 22 | - g-metadata-viewer 23 | - g-plot-options 24 | - g-data-quality 25 | - g-subset-tools 26 | - ramp-extraction 27 | - g-markers 28 | - ramp-slice 29 | - export 30 | - about 31 | - logger 32 | viewer_area: 33 | - container: col 34 | children: 35 | - container: row 36 | viewers: 37 | - name: Flux 38 | plot: rampviz-image-viewer 39 | reference: group-viewer 40 | - name: Difference 41 | plot: rampviz-image-viewer 42 | reference: diff-viewer 43 | - container: row 44 | viewers: 45 | - name: Integration profile 46 | plot: rampviz-profile-viewer 47 | reference: integration-viewer 48 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_box_match.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 12 | 13 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /jdaviz/configs/default/default.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "scrolled": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from jdaviz.app import Application\n", 12 | "app = Application(configuration='default')\n", 13 | "app.verbosity = 'JDAVIZ_VERBOSITY'\n", 14 | "app.history_verbosity = 'JDAVIZ_HISTORY_VERBOSITY'\n", 15 | "data_path = 'DATA_FILENAME'\n", 16 | "if data_path:\n", 17 | " app.load_data('DATA_FILENAME')\n", 18 | "app" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [] 27 | } 28 | ], 29 | "metadata": { 30 | "kernelspec": { 31 | "display_name": "Python 3", 32 | "language": "python", 33 | "name": "python3" 34 | }, 35 | "language_info": { 36 | "codemirror_mode": { 37 | "name": "ipython", 38 | "version": 3 39 | }, 40 | "file_extension": ".py", 41 | "mimetype": "text/x-python", 42 | "name": "python", 43 | "nbconvert_exporter": "python", 44 | "pygments_lexer": "ipython3", 45 | "version": "3.7.6" 46 | } 47 | }, 48 | "nbformat": 4, 49 | "nbformat_minor": 2 50 | } 51 | -------------------------------------------------------------------------------- /standalone/jdaviz-cli-entrypoint.py: -------------------------------------------------------------------------------- 1 | import sys 2 | # this avoids: 3 | # ValueError: Key backend: 'module://matplotlib_inline.backend_inline' is not a valid value for backend; supported values are [...] 4 | # Although not 100% why, it has two effects: 5 | # 1. PyInstaller picks it up as a module to include 6 | # 2. It registers the backend, maybe earlier than it would be otherwise 7 | import matplotlib_inline 8 | import matplotlib_inline.backend_inline 9 | 10 | # We still see the above error on CI on jdaviz, and the PyInstaller 11 | # output recommends the following: 12 | import matplotlib 13 | matplotlib.use("module://matplotlib_inline.backend_inline") 14 | # since matplotlib 3.9 (see https://github.com/matplotlib/matplotlib/pull/27948), 15 | # it seems that matplotlib_inline.backend_inline is an alias for inline 16 | # so we make sure to communicate that to PyInstaller 17 | matplotlib.use("inline") 18 | 19 | import jdaviz.cli 20 | 21 | 22 | if __name__ == "__main__": 23 | # should change this to _main, but now it doesn't need arguments 24 | args = sys.argv.copy() 25 | # change the browser to qt if not specified 26 | if "--browser" not in args: 27 | args.append("--browser") 28 | args.append("qt") 29 | sys.argv = args 30 | jdaviz.cli._main() 31 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_color_picker.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 40 | -------------------------------------------------------------------------------- /licenses/IPYFILECHOOSER_LICENSE.rst: -------------------------------------------------------------------------------- 1 | This package includes code adapted from the ipyfilechooser package, released 2 | under the following license. 3 | 4 | --- 5 | 6 | MIT License 7 | 8 | Copyright (c) 2019 Thomas Bouve 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | -------------------------------------------------------------------------------- /jdaviz/components/plugin_switch.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 43 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/SDSS-IV.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value,Type 2 | Mg II 2799,2799.49,Emission 3 | [O II] 3725,3726.032,Emission 4 | [O II] 3727,3728.815,Emission 5 | [Ne III] 3868,3868.76,Emission 6 | Hζ,3889.049,Emission 7 | [Ne III] 3970,3970.00,Emission 8 | Hδ,4101.734,Emission 9 | Hγ,4340.464,Emission 10 | [O III] 4363,4363.209,Emission 11 | He II 4685,4685.68,Emission 12 | Hβ,4861.325,Emission 13 | [O III] 4959,4958.911,Emission 14 | [O III] 5007,5006.843,Emission 15 | He II 5411,5411.52,Emission 16 | [O I] 5577,5577.339,Emission 17 | [N II] 5755,5754.59,Emission 18 | He I 5876,5875.68,Emission 19 | [O I] 6300,6300.304,Emission 20 | [S III] 6312,6312.06,Emission 21 | [O I] 6363,6363.776,Emission 22 | [N II] 6548,6548.05,Emission 23 | Hα,6562.801,Emission 24 | [N II] 6583,6583.45,Emission 25 | [S II] 6716,6716.44,Emission 26 | [S II] 6730,6730.82,Emission 27 | [Ar III] 7135,7135.790,Emission 28 | Hζ,3889.049,Absorption 29 | K (Ca II 3933),3933.7,Absorption 30 | H (Ca II 3968),3968.5,Absorption 31 | Hε,3970.072,Absorption 32 | Hδ,4101.734,Absorption 33 | G (Ca I 4307),4307.74,Absorption 34 | Hγ,4340.464,Absorption 35 | Hβ,4861.325,Absorption 36 | Mg I 5175,5175.0,Absorption 37 | D2 (Na I 5889),5889.95,Absorption 38 | D1 (Na I 5895),5895.92,Absorption 39 | Hα,6562.801,Absorption 40 | -------------------------------------------------------------------------------- /docs/imviz/index.rst: -------------------------------------------------------------------------------- 1 | .. |imviz_logo| image:: ../logos/imviz\ icon.svg 2 | :height: 42px 3 | 4 | .. _imviz: 5 | 6 | ################## 7 | |imviz_logo| Imviz 8 | ################## 9 | 10 | .. image:: https://stsci.box.com/shared/static/56jhed2cqr3nr2w5a3e5gwwkvytmc00n.gif 11 | :alt: Introductory video tour of the Imviz configuration and its features 12 | 13 | Imviz is a tool for visualization and analysis of 2D astronomical images. 14 | It incorporates visualization tools with analysis capabilities, such as Astropy 15 | regions and photutils packages. 16 | Users can interact with their data from within the tool. 17 | Imviz also provides programmatic access to its viewers using 18 | `Astrowidgets `_ API; 19 | see `~jdaviz.core.astrowidgets_api.AstrowidgetsImageViewerMixin` for available functionality. 20 | Data can be both imported into and exported out of the tool so users can continue their 21 | desired workflow within the notebook. 22 | This documentation provides details on the various capabilities, demo videos, and example notebooks. 23 | 24 | .. We do not want a real section here so navbar shows toc directly. 25 | 26 | **Using Imviz** 27 | 28 | .. toctree:: 29 | :maxdepth: 2 30 | 31 | import_data 32 | displayimages 33 | plugins 34 | export_data 35 | -------------------------------------------------------------------------------- /jdaviz/core/tests/test_config_detection.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from astropy.utils.data import download_file 3 | 4 | from jdaviz.core.data_formats import identify_helper 5 | from jdaviz.utils import cached_uri 6 | 7 | 8 | # URIs to example JWST/HST files on MAST, and their corresponding jdaviz helpers. 9 | @pytest.mark.remote_data 10 | @pytest.mark.filterwarnings(r"ignore::astropy.wcs.wcs.FITSFixedWarning") 11 | @pytest.mark.parametrize(("uri, expected_helper"), [ 12 | ('mast:HST/product/jclj01010_drz.fits', 'imviz'), 13 | ('mast:JWST/product/jw02732-c1001_t004_miri_ch1-short_x1d.fits', 'specviz'), 14 | ('mast:jwst/product/jw01538-o161_t002-s000000001_nirspec_f290lp-g395h-s1600a1_s2d.fits', 'specviz2d'), # noqa: E501 15 | ('mast:JWST/product/jw02727-o002_t062_nircam_clear-f277w_i2d.fits', 'imviz'), 16 | ('mast:JWST/product/jw02732-c1001_t004_miri_ch1-short_s3d.fits', 'cubeviz')]) 17 | def test_auto_config_detection(uri, expected_helper): 18 | uri = cached_uri(uri) 19 | if 'mast' in uri: 20 | url = f'https://mast.stsci.edu/api/v0.1/Download/file/?uri={uri}' 21 | fn = download_file(url, timeout=100) 22 | else: 23 | fn = uri 24 | helper_name, hdul = identify_helper(fn) 25 | hdul.close() 26 | assert len(helper_name) == 1 and helper_name[0] == expected_helper 27 | -------------------------------------------------------------------------------- /jdaviz/core/viewer_creators/scatter/scatter.vue: -------------------------------------------------------------------------------- 1 | 35 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/regions.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from regions import Regions 3 | from specutils import SpectralRegion 4 | 5 | from jdaviz.core.region_translators import is_stcs_string, stcs_string2region 6 | from jdaviz.core.loaders.parsers import BaseParser 7 | from jdaviz.core.registries import loader_parser_registry 8 | 9 | 10 | __all__ = ['RegionsParser'] 11 | 12 | 13 | @loader_parser_registry('Regions') 14 | class RegionsParser(BaseParser): 15 | @property 16 | def is_valid(self): 17 | if isinstance(self.input, str): 18 | if is_stcs_string(self.input): 19 | return True 20 | ext = self.input.split('.')[-1] 21 | if self.app.config == 'imviz': 22 | return ext in ('reg', 'fits') 23 | elif self.app.config in ('specviz', 'specviz2d'): 24 | return ext == 'ecsv' 25 | return ext in ('reg', 'fits', 'ecsv') 26 | 27 | @cached_property 28 | def output(self): 29 | region_format = None 30 | if is_stcs_string(self.input): 31 | return stcs_string2region(self.input) 32 | try: 33 | return Regions.read(self.input, format=region_format) 34 | except Exception: # nosec 35 | return SpectralRegion.read(self.input) 36 | -------------------------------------------------------------------------------- /docs/logos/specicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /jdaviz/components/layer_viewer_icon.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 28 | 29 | 42 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/about/tests/test_about_plugin.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from jdaviz import __version__ 4 | from jdaviz.configs.default.plugins.about.about import latest_version_from_pypi 5 | 6 | 7 | @pytest.mark.remote_data 8 | def test_get_latest_version_from_pypi(): 9 | # Since the latest version will change over time, 10 | # we can only check that something is returned but not what exactly. 11 | 12 | v = latest_version_from_pypi("jdaviz") 13 | assert isinstance(v, str) 14 | 15 | v = latest_version_from_pypi("fakespacetelescopepackage") 16 | assert v is None 17 | 18 | 19 | # NOTE: Theoretically now all the tests in jdaviz are remote data tests 20 | # because all the viz loads About plugin and About plugin always polls 21 | # PyPI for the latest release version. If that bothers you or PyPI 22 | # starts blocking us as spammer, we can consider caching it at package level 23 | # but that introduces new non-standard package attributes. 24 | def test_about_basic(specviz_helper): 25 | plg = specviz_helper.plugins["About"]._obj 26 | 27 | assert plg.jdaviz_version == __version__ 28 | assert isinstance(plg.jdaviz_pypi, str) 29 | # not_is_latest can be non-deterministic because user can be running 30 | # this test from an older version going forward, so we skip checking it. 31 | -------------------------------------------------------------------------------- /jdaviz/core/loaders/parsers/fits.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from astropy.io import fits 3 | 4 | from jdaviz.core.loaders.parsers import BaseParser 5 | from jdaviz.core.registries import loader_parser_registry 6 | 7 | 8 | __all__ = ['FITSParser'] 9 | 10 | 11 | @loader_parser_registry('fits') 12 | class FITSParser(BaseParser): 13 | 14 | @property 15 | def is_valid(self): 16 | if self.app.config not in ('deconfigged', 'specviz2d', 17 | 'lcviz', 'imviz', 'cubeviz', 18 | 'rampviz'): 19 | # NOTE: temporary during deconfig process 20 | return False 21 | 22 | try: 23 | self.output 24 | except Exception: 25 | return False 26 | 27 | return True 28 | 29 | @cached_property 30 | def output(self): 31 | return fits.open(self.input) 32 | 33 | def _cleanup(self): 34 | if 'output' not in self.__dict__: 35 | return 36 | for hdu in self.output: 37 | try: 38 | del hdu.data 39 | except Exception: # nosec 40 | pass 41 | try: 42 | self.output.close() 43 | except Exception: # nosec 44 | pass 45 | self._clear_cache('output') 46 | -------------------------------------------------------------------------------- /jdaviz/data/icons/specviz_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /jdaviz/data/linelists/CO.csv: -------------------------------------------------------------------------------- 1 | Line Name,Rest Value 2 | CO 2-0,2.2935 3 | CO 3-1,2.3227 4 | CO 4-2,2.3525 5 | CO 5-3,2.3829 6 | CO 6-4,2.4142 7 | CO 7-5,2.4461 8 | CO 8-6,2.4787 9 | CO 9-7,2.5122 10 | CO 3-0,1.5582 11 | CO 4-1,1.5780 12 | CO 5-2,1.5982 13 | CO 6-3,1.6187 14 | CO 7-4,1.6397 15 | CO 8-5,1.6610 16 | CO 1-0R(22),4.5010 17 | CO 1-0R(21),4.5071 18 | CO 1-0R(20),4.5132 19 | CO 1-0R(19),4.5195 20 | CO 1-0R(18),4.5259 21 | CO 1-0R(17),4.5324 22 | CO 1-0R(16),4.5389 23 | CO 1-0R(15),4.5456 24 | CO 1-0R(14),4.5547 25 | CO 1-0R(13),4.5592 26 | CO 1-0R(12),4.5662 27 | CO 1-0R(11),4.5732 28 | CO 1-0R(10),4.5804 29 | CO 1-0R(9),4.5876 30 | CO 1-0R(8),4.5950 31 | CO 1-0R(7),4.6024 32 | CO 1-0R(6),4.6100 33 | CO 1-0R(5),4.6177 34 | CO 1-0R(4),4.6254 35 | CO 1-0R(3),4.6333 36 | CO 1-0R(2),4.6412 37 | CO 1-0R(1),4.6493 38 | CO 1-0R(0),4.6575 39 | CO 1-0P(1),4.6742 40 | CO 1-0P(2),4.6826 41 | CO 1-0P(3),4.6912 42 | CO 1-0P (4),4.7002 43 | CO 1-0P (5),4.7088 44 | CO 1-0P (6),4.7177 45 | CO 1-0P (7),4.7267 46 | CO 1-0P (8),4.7359 47 | CO 1-0P (9),4.7451 48 | CO 2-0R(0),2.345305 49 | CO 2-0R(1),2.343269 50 | CO 2-0R(2),2.341275 51 | CO 2-0R(3),2.339323 52 | CO 2-0R(4),2.337413 53 | CO 2-0P(1),2.34950 54 | CO 2-0P(2),2.35167 55 | CO 2-0P(3),2.35387 56 | CO 2-0P(4),2.35612 57 | CO 2-0P(5),2.35841 58 | -------------------------------------------------------------------------------- /.github/workflows/check_milestone.yml: -------------------------------------------------------------------------------- 1 | name: Check PR milestone 2 | 3 | on: 4 | # So it cannot be skipped. 5 | pull_request_target: 6 | types: [opened, synchronize, milestoned, demilestoned] 7 | 8 | concurrency: 9 | group: ${{ github.workflow }}-${{ github.ref }} 10 | cancel-in-progress: true 11 | 12 | permissions: 13 | contents: read 14 | 15 | jobs: 16 | # https://stackoverflow.com/questions/69434370/how-can-i-get-the-latest-pr-data-specifically-milestones-when-running-yaml-jobs 17 | milestone_checker: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 21 | if: github.repository == 'spacetelescope/jdaviz' 22 | with: 23 | github-token: ${{ secrets.GITHUB_TOKEN }} 24 | script: | 25 | const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", { 26 | owner: context.repo.owner, 27 | repo: context.repo.repo, 28 | pr: context.payload.pull_request.number 29 | }); 30 | if (data.milestone) { 31 | core.info(`This pull request has a milestone set: ${data.milestone.title}`); 32 | } else { 33 | core.setFailed(`A maintainer needs to set the milestone for this pull request.`); 34 | } 35 | -------------------------------------------------------------------------------- /docs/specviz2d/export_data.rst: -------------------------------------------------------------------------------- 1 | .. _specviz2d-export-data: 2 | 3 | ***************************** 4 | Exporting Data From Specviz2D 5 | ***************************** 6 | 7 | .. _specviz2d-export-data-2d: 8 | 9 | 2D Spectra 10 | ========== 11 | 12 | Images in the 2D spectrum viewer can be exported as `specutils.Spectrum` objects into 13 | the notebook (replace '2D data' with the label of the desired data): 14 | 15 | .. code-block:: python 16 | 17 | specviz2d.get_data(data_label='2D data') 18 | 19 | .. _specviz2d-export-data-1d: 20 | 21 | 1D Spectra 22 | ========== 23 | 24 | Similarly, the 1D spectrum data objects can be exported into the notebook: 25 | 26 | .. code-block:: python 27 | 28 | specviz2d.get_data(data_label='1D data') 29 | 30 | An instance of Specviz can also be accessed, which exposes some helper methods from Specviz: 31 | 32 | .. code-block:: python 33 | 34 | specviz2d.specviz.get_spectra() 35 | 36 | .. seealso:: 37 | 38 | :ref:`Specviz: Export Data ` 39 | Specviz documentation on exporting spectra. 40 | 41 | 42 | Markers Table 43 | ============= 44 | 45 | All mouseover information in the :ref:`markers plugin ` can be exported to an 46 | :ref:`astropy table ` 47 | by calling :meth:`~jdaviz.core.template_mixin.TableMixin.export_table` (see :ref:`plugin-apis`). 48 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/roman.csv: -------------------------------------------------------------------------------- 1 | flag,name,description 2 | 0,DO_NOT_USE,Bad pixel. Do not use. 3 | 1,SATURATED,Pixel saturated during exposure 4 | 2,JUMP_DET,Jump detected during exposure 5 | 3,DROPOUT,Data lost in transmission 6 | 4,GW_AFFECTED_DATA,Data affected by the GW read window 7 | 5,PERSISTENCE,High persistence (was RESERVED_2) 8 | 6,AD_FLOOR,Below A/D floor (0 DN; was RESERVED_3) 9 | 7,OUTLIER,Flagged by outlier detection (was RESERVED_4) 10 | 8,UNRELIABLE_ERROR,Uncertainty exceeds quoted error 11 | 9,NON_SCIENCE,Pixel not on science portion of detector 12 | 10,DEAD,Dead pixel 13 | 11,HOT,Hot pixel 14 | 12,WARM,Warm pixel 15 | 13,LOW_QE,Low quantum efficiency 16 | 15,TELEGRAPH,Telegraph pixel 17 | 16,NONLINEAR,Pixel highly nonlinear 18 | 17,BAD_REF_PIXEL,Reference pixel cannot be used 19 | 18,NO_FLAT_FIELD,Flat field cannot be measured 20 | 19,NO_GAIN_VALUE,Gain cannot be measured 21 | 20,NO_LIN_CORR,Linearity correction not available 22 | 21,NO_SAT_CHECK,Saturation check not available 23 | 22,UNRELIABLE_BIAS,Bias variance large 24 | 23,UNRELIABLE_DARK,Dark variance large 25 | 24,UNRELIABLE_SLOPE,Slope variance large (i.e.; noisy pixel) 26 | 25,UNRELIABLE_FLAT,Flat variance large 27 | 26,RESERVED_5, 28 | 27,RESERVED_6, 29 | 28,UNRELIABLE_RESET,Sensitive to reset anomaly 30 | 29,RESERVED_7, 31 | 30,OTHER_BAD_PIXEL,A catch-all flag 32 | 31,REFERENCE_PIXEL,Pixel is a reference pixel 33 | -------------------------------------------------------------------------------- /jdaviz/core/custom_traitlets.py: -------------------------------------------------------------------------------- 1 | from traitlets import Int, Float 2 | 3 | __all__ = ['HandleEmptyMixin', 'IntHandleEmpty', 'FloatHandleEmpty'] 4 | 5 | 6 | class HandleEmptyMixin: 7 | """Mixin to handle empty field.""" 8 | def __init__(self, *args, **kwargs): 9 | self._empty_to_default = kwargs.pop('replace_with_default', False) 10 | super().__init__(*args, **kwargs) 11 | 12 | def validate(self, obj, value): 13 | if value is None or (isinstance(value, str) and not len(value)): 14 | if self._empty_to_default: 15 | # If the field is emptied, it will override with the default value. 16 | return self.default_value 17 | # The value will remain as the empty string or None, likely will need to either 18 | # couple this with form validation or handle the case where the value 19 | # is an empty string once retrieved. 20 | return value 21 | return super().validate(obj, value) 22 | 23 | 24 | class IntHandleEmpty(HandleEmptyMixin, Int): 25 | """Mixin to handle empty integer field.""" 26 | pass 27 | 28 | 29 | class FloatHandleEmpty(HandleEmptyMixin, Float): 30 | """Mixin to handle empty floating point field.""" 31 | def validate(self, obj, value): 32 | if value == '.': 33 | return value 34 | return super().validate(obj, value) 35 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/plugins/tests/test_data_retrieval.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | 3 | import pytest 4 | import numpy as np 5 | 6 | from astropy.utils.data import download_file 7 | 8 | 9 | @pytest.mark.remote_data 10 | def test_data_retrieval(cubeviz_helper): 11 | """The purpose of this test is to check that both methods: 12 | 13 | - app.get_viewer('spectrum-viewer').data() 14 | - cubeviz_helper.get_data() 15 | 16 | return the same spectrum values. 17 | """ 18 | # This file is originally from 19 | # https://data.sdss.org/sas/dr17/manga/spectro/redux/v3_1_1/9862/stack/manga-9862-12703-LOGCUBE.fits.gz 20 | # (Updated to a newer file 11/19/2024) 21 | URL = 'https://stsci.box.com/shared/static/gts87zqt5265msuwi4w5u003b6typ6h0.gz' 22 | 23 | spectrum_viewer_reference_name = "spectrum-viewer" 24 | fn = download_file(URL, cache=True) 25 | with warnings.catch_warnings(): 26 | warnings.filterwarnings("ignore") 27 | cubeviz_helper.load_data(fn) 28 | 29 | # two ways of retrieving data from the viewer. 30 | # They should return the same spectral values 31 | a1 = cubeviz_helper.app.get_viewer(spectrum_viewer_reference_name).data() 32 | a2 = cubeviz_helper.get_data("Spectrum (sum)") 33 | 34 | test_value_1 = a1[0].data 35 | test_value_2 = a2.flux.value 36 | 37 | assert np.allclose(test_value_1, test_value_2, atol=1e-5) 38 | -------------------------------------------------------------------------------- /jdaviz/configs/cubeviz/cubeviz.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: cubeviz 3 | data: 4 | auto_populate: true 5 | parser: cubeviz-data-parser 6 | visible: 7 | menu_bar: false 8 | toolbar: true 9 | tray: true 10 | tab_headers: true 11 | dense_toolbar: false 12 | server_is_remote: false 13 | remote_enable_importers: true 14 | context: 15 | notebook: 16 | max_height: 750px 17 | toolbar: 18 | - g-data-tools 19 | - g-subset-tools 20 | - g-coords-info 21 | tray: 22 | - g-metadata-viewer 23 | - g-plot-options 24 | - g-data-quality 25 | - g-subset-tools 26 | - g-markers 27 | - cube-slice 28 | - g-unit-conversion 29 | - spectral-extraction-3d 30 | - g-gaussian-smooth 31 | - g-collapse 32 | - g-model-fitting 33 | - g-line-list 34 | - specviz-line-analysis 35 | - cubeviz-moment-maps 36 | - imviz-aper-phot-simple 37 | - cubeviz-sonify-data 38 | - export 39 | - about 40 | - logger 41 | viewer_area: 42 | - container: col 43 | children: 44 | - container: row 45 | viewers: 46 | - name: Flux 47 | plot: cubeviz-image-viewer 48 | reference: flux-viewer 49 | - name: Uncertainty 50 | plot: cubeviz-image-viewer 51 | reference: uncert-viewer 52 | - container: row 53 | viewers: 54 | - name: Spectrum 55 | plot: cubeviz-profile-viewer 56 | reference: spectrum-viewer 57 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | documentation: 2 | - changed-files: 3 | - any-glob-to-any-file: 4 | - docs/**/* 5 | - licenses/* 6 | - notebooks/**/* 7 | - .mailmap 8 | - .readthedocs.yaml 9 | - README.rst 10 | - LICENSE.rst 11 | - '*.md' 12 | - '*.cff' 13 | 14 | testing: 15 | - changed-files: 16 | - any-glob-to-any-file: 17 | - .github/workflows/* 18 | - jdaviz/conftest.py 19 | - jdaviz/tests/* 20 | - .bandit.yaml 21 | - .flake8 22 | - codecov.yml 23 | - conftest.py 24 | - '**/conftest.py' 25 | - tox.ini 26 | 27 | embed: 28 | - changed-files: 29 | - any-glob-to-any-file: 30 | - jdaviz/*.vue 31 | - share/**/* 32 | 33 | plugin: 34 | - changed-files: 35 | - all-globs-to-any-file: 36 | - '**/plugins/**/*' 37 | - '!**/plugins/viewers.py' 38 | 39 | cubeviz: 40 | - changed-files: 41 | - any-glob-to-any-file: 42 | - jdaviz/configs/cubeviz/**/* 43 | 44 | imviz: 45 | - changed-files: 46 | - any-glob-to-any-file: 47 | - jdaviz/configs/imviz/**/* 48 | 49 | mosviz: 50 | - changed-files: 51 | - any-glob-to-any-file: 52 | - jdaviz/configs/mosviz/**/* 53 | 54 | specviz: 55 | - changed-files: 56 | - any-glob-to-any-file: 57 | - jdaviz/configs/specviz/**/* 58 | 59 | specviz2d: 60 | - changed-files: 61 | - any-glob-to-any-file: 62 | - jdaviz/configs/specviz2d/**/* 63 | 64 | rampviz: 65 | - changed-files: 66 | - any-glob-to-any-file: 67 | - jdaviz/configs/rampviz/**/* 68 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/viewer_creator/viewer_creator.py: -------------------------------------------------------------------------------- 1 | from traitlets import List 2 | 3 | from jdaviz.core.events import NewViewerMessage 4 | from jdaviz.core.registries import tool_registry, viewer_registry 5 | from jdaviz.core.template_mixin import TemplateMixin 6 | 7 | __all__ = ['ViewerCreator'] 8 | 9 | 10 | @tool_registry('g-viewer-creator') 11 | class ViewerCreator(TemplateMixin): 12 | template_file = __file__, "viewer_creator.vue" 13 | viewer_types = List([]).tag(sync=True) 14 | 15 | def __init__(self, *args, **kwargs): 16 | super().__init__(*args, **kwargs) 17 | 18 | # Load in the references to the viewer registry. Because traitlets 19 | # can't serialize the actual viewer class reference, create a list of 20 | # dicts containing just the viewer name and label. 21 | self.viewer_types = [{'name': k, 'label': v['label']} 22 | for k, v in viewer_registry.members.items()] 23 | 24 | def vue_create_viewer(self, name): 25 | viewer_cls = viewer_registry.members[name]['cls'] 26 | 27 | # selected = self.components.get('g-data-tree').selected 28 | 29 | # for idx in selected: 30 | # data = validate_data_argument(self.data_collection, 31 | # self.data_collection[idx]) 32 | 33 | new_viewer_message = NewViewerMessage( 34 | viewer_cls, data=None, sender=self) 35 | 36 | self.hub.broadcast(new_viewer_message) 37 | -------------------------------------------------------------------------------- /jdaviz/configs/mosviz/mosviz.yaml: -------------------------------------------------------------------------------- 1 | settings: 2 | configuration: mosviz 3 | visible: 4 | menu_bar: false 5 | toolbar: true 6 | tray: true 7 | tab_headers: false 8 | dense_toolbar: false 9 | server_is_remote: false 10 | remote_enable_importers: true 11 | context: 12 | notebook: 13 | max_height: 860px 14 | toolbar: 15 | - g-data-tools 16 | - g-subset-tools 17 | - g-row-lock 18 | - g-coords-info 19 | tray: 20 | - g-metadata-viewer 21 | - g-plot-options 22 | - g-subset-tools 23 | - g-markers 24 | - g-gaussian-smooth 25 | - g-slit-overlay 26 | - g-model-fitting 27 | - g-line-list 28 | - specviz-line-analysis 29 | - export 30 | - about 31 | - logger 32 | viewer_area: 33 | - container: col 34 | children: 35 | - container: col 36 | children: 37 | - container: row 38 | children: 39 | - container: col 40 | viewers: 41 | - name: Image viewer 42 | plot: mosviz-image-viewer 43 | reference: image-viewer 44 | - container: col 45 | viewers: 46 | - name: 2D Spectrum viewer 47 | plot: mosviz-profile-2d-viewer 48 | reference: spectrum-2d-viewer 49 | - name: Spectrum 50 | plot: mosviz-profile-viewer 51 | reference: spectrum-viewer 52 | - container: row 53 | viewers: 54 | - name: Table viewer 55 | plot: mosviz-table-viewer 56 | reference: table-viewer 57 | -------------------------------------------------------------------------------- /jdaviz/data/data_quality/jwst.csv: -------------------------------------------------------------------------------- 1 | flag,name,description 2 | 0,DO_NOT_USE,Bad pixel. Do not use. 3 | 1,SATURATED,Pixel saturated during exposure 4 | 2,JUMP_DET,Jump detected during exposure 5 | 3,DROPOUT,Data lost in transmission 6 | 4,OUTLIER,Flagged by outlier detection (was RESERVED_1) 7 | 5,PERSISTENCE,High persistence (was RESERVED_2) 8 | 6,AD_FLOOR,Below A/D floor (0 DN; was RESERVED_3) 9 | 7,CHARGELOSS,Charge migration (was RESERVED_4) 10 | 8,RESERVED,Reserved for future use (was UNRELIABLE_ERROR) 11 | 9,NON_SCIENCE,Pixel not on science portion of detector 12 | 10,DEAD,Dead pixel 13 | 11,HOT,Hot pixel 14 | 12,WARM,Warm pixel 15 | 13,LOW_QE,Low quantum efficiency 16 | 14,RC,RC pixel 17 | 15,TELEGRAPH,Telegraph pixel 18 | 16,NONLINEAR,Pixel highly nonlinear 19 | 17,BAD_REF_PIXEL,Reference pixel cannot be used 20 | 18,NO_FLAT_FIELD,Flat field cannot be measured 21 | 19,NO_GAIN_VALUE,Gain cannot be measured 22 | 20,NO_LIN_CORR,Linearity correction not available 23 | 21,NO_SAT_CHECK,Saturation check not available 24 | 22,UNRELIABLE_BIAS,Bias variance large 25 | 23,UNRELIABLE_DARK,Dark variance large 26 | 24,UNRELIABLE_SLOPE,Slope variance large (i.e. noisy pixel) 27 | 25,UNRELIABLE_FLAT,Flat variance large 28 | 26,OPEN,Open pixel (counts move to adjacent pixels) 29 | 27,ADJ_OPEN,Adjacent to open pixel 30 | 28,FLUX_ESTIMATED,Pixel flux estimated due to missing/bad data 31 | 29,MSA_FAILED_OPEN,Pixel sees light from failed-open shutter 32 | 30,OTHER_BAD_PIXEL,A catch-all flag 33 | 31,REFERENCE_PIXEL,Pixel is a reference pixel 34 | -------------------------------------------------------------------------------- /jdaviz/data/icons/zoom_xrange_match.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 14 | 17 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /jdaviz/configs/default/plugins/data_tools/data_tools.vue: -------------------------------------------------------------------------------- 1 | 39 | -------------------------------------------------------------------------------- /jdaviz/configs/imviz/plugins/compass/compass.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 44 | 45 | 46 | 51 | -------------------------------------------------------------------------------- /LICENSE.rst: -------------------------------------------------------------------------------- 1 | Copyright 2020-2023 JDADF Developers 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this 7 | list of conditions and the following disclaimer. 8 | 9 | 2. Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | 3. Neither the name of the copyright holder nor the names of its 14 | contributors may be used to endorse or promote products derived from 15 | this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 21 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 24 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /jdaviz/components/glue_state_sync_wrapper.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 41 | --------------------------------------------------------------------------------