Skip to content

Commit

Permalink
Add consideration of loaded mask to aperture weight mask
Browse files Browse the repository at this point in the history
  • Loading branch information
rosteen committed Dec 13, 2024
1 parent cbe230d commit ce319a0
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -386,14 +386,14 @@ def slice_display_unit(self):
return astropy.units.Unit(self.app._get_display_unit(self.slice_display_unit_name))

@property
def mask_non_science(self):
def inverted_mask_non_science(self):
# Aperture masks begin by removing from consideration any pixel
# set to NaN, which corresponds to a pixel on the "non-science" portions
# of the detector. For JWST spectral cubes, these pixels are also marked in
# the DQ array with flag `513`.
return np.logical_not(
np.isnan(self.dataset.selected_obj.flux.value)
).astype(float)
# the DQ array with flag `513`. Also respect the loaded mask, if it exists
nan_mask = np.isnan(self.dataset.selected_obj.flux.value)
return np.logical_not(np.logical_or(self.mask_cube.get_component('flux').data,
nan_mask)).astype(float)

@property
def aperture_weight_mask(self):
Expand All @@ -402,10 +402,10 @@ def aperture_weight_mask(self):
# wavelength, on the range [0, 1].
if self.aperture.selected == self.aperture.default_text:
# Entire Cube
return self.mask_non_science
return self.inverted_mask_non_science

return (
self.mask_non_science *
self.inverted_mask_non_science *
self.aperture.get_mask(
self.dataset.selected_obj,
self.aperture_method_selected,
Expand Down
26 changes: 23 additions & 3 deletions jdaviz/configs/cubeviz/plugins/tests/test_parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,10 +209,30 @@ def test_numpy_cube(cubeviz_helper):
assert flux.units == 'ct / pix2'


def test_loading_with_mask(cubeviz_helper):
# This also tests that spaxel is converted to pix**2
custom_spec = Spectrum1D(flux=[[[20, 1],[9, 1]],[[3, 1],[6, 5]]] * u.Unit("erg / Angstrom s cm**2 spaxel"), # noqa
spectral_axis = [1, 2]*u.AA,
mask=[[[1, 0],[0, 0]],[[0, 0],[0, 0]]])
with warnings.catch_warnings():
warnings.filterwarnings("ignore")
cubeviz_helper.load_data(custom_spec)
#cubeviz_helper.load_data("https://stsci.box.com/shared/static/gts87zqt5265msuwi4w5u003b6typ6h0.gz", cache=True) # noqa

uc = cubeviz_helper.plugins['Unit Conversion']
uc.spectral_y_type = "Surface Brightness"

se = cubeviz_helper.plugins['Spectral Extraction']
se.function = "Mean"
se.extract()
extracted = cubeviz_helper.get_data("Spectrum (mean)")
assert_allclose(extracted.flux.value, [6, 2])
assert extracted.unit == u.Unit("erg / Angstrom s cm**2 pix**2")


@pytest.mark.remote_data
def test_manga_cube(cubeviz_helper):
def test_manga_with_mask(cubeviz_helper):
# Remote data test of loading and extracting an up-to-date (as of 11/19/2024) MaNGA cube
# This also tests that spaxel is converted to pix**2
with warnings.catch_warnings():
warnings.filterwarnings("ignore")
cubeviz_helper.load_data("https://stsci.box.com/shared/static/gts87zqt5265msuwi4w5u003b6typ6h0.gz", cache=True) # noqa
Expand All @@ -224,7 +244,7 @@ def test_manga_cube(cubeviz_helper):
se.function = "Mean"
se.extract()
extracted_max = cubeviz_helper.get_data("Spectrum (mean)").max()
assert_allclose(extracted_max.value, 2.836957E-18)
assert_allclose(extracted_max.value, 5.566169e-18)
assert extracted_max.unit == u.Unit("erg / Angstrom s cm**2 pix**2")


Expand Down

0 comments on commit ce319a0

Please sign in to comment.