Skip to content

Commit

Permalink
Merge pull request #179 from tiagopereira/master
Browse files Browse the repository at this point in the history
Fixed arguments in SpectrogramCube to match NDCube
  • Loading branch information
DanRyanIrish committed Jan 19, 2021
2 parents 6d6d1c0 + 34e98b7 commit b6cbaf3
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 26 deletions.
1 change: 1 addition & 0 deletions changelog/179.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Ensure args are passed correctly to NDCube constructor by SpectrogramCube by entering them as kwargs instead of ordered args.
13 changes: 7 additions & 6 deletions sunraster/spectrogram.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ class SpectrogramCube(NDCube, SpectrogramABC):
def __init__(self, data, wcs, extra_coords=None, unit=None, uncertainty=None, meta=None,
mask=None, instrument_axes=None, copy=False, **kwargs):
# Initialize SpectrogramCube.
super().__init__(data, wcs, uncertainty=uncertainty, mask=mask, meta=meta, unit=unit,
extra_coords=extra_coords, copy=copy, **kwargs)
super().__init__(data, wcs=wcs, uncertainty=uncertainty, mask=mask, meta=meta,
unit=unit, extra_coords=extra_coords, copy=copy, **kwargs)

# Determine labels and location of each key real world coordinate.
self_extra_coords = self.extra_coords
Expand Down Expand Up @@ -266,9 +266,10 @@ def __getitem__(self, item):
if len(instrument_axes) == 0:
instrument_axes = None

return self.__class__(result.data, result.wcs, extra_coords, result.unit,
result.uncertainty, result.meta, mask=result.mask,
missing_axes=result.missing_axes, instrument_axes=instrument_axes)
return self.__class__(result.data, wcs=result.wcs, uncertainty=result.uncertainty,
mask=result.mask, meta=result.meta, unit=result.unit,
extra_coords=extra_coords, missing_axes=result.missing_axes,
instrument_axes=instrument_axes)

@property
def spectral_axis(self):
Expand Down Expand Up @@ -338,7 +339,7 @@ def apply_exposure_time_correction(self, undo=False, force=False):
# Return new instance of SpectrogramCube with correction applied/undone.

return self.__class__(
new_data, self.wcs,
new_data, wcs=self.wcs,
extra_coords=convert_extra_coords_dict_to_input_format(self.extra_coords,
self.missing_axes),
unit=new_unit, uncertainty=new_uncertainty, meta=self.meta, mask=self.mask,
Expand Down
69 changes: 49 additions & 20 deletions sunraster/tests/test_spectrogram.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
SOURCE_DATA_DN = np.array([[[0.563, 1.132, -1.343], [-0.719, 1.441, 1.566]],
[[0.563, 1.132, -1.343], [-0.719, 1.441, 1.566]]])
SOURCE_UNCERTAINTY_DN = np.sqrt(SOURCE_DATA_DN)
MASK = SOURCE_DATA_DN > 1

TIME_DIM_LEN = SOURCE_DATA_DN.shape[0]
SINGLES_EXPOSURE_TIME = 2.
Expand All @@ -45,48 +46,51 @@

# Define SpectrogramCubes in various units.
spectrogram_DN0 = SpectrogramCube(
SOURCE_DATA_DN, WCS0, EXTRA_COORDS0, u.ct, SOURCE_UNCERTAINTY_DN)
SOURCE_DATA_DN, wcs=WCS0, extra_coords=EXTRA_COORDS0, unit=u.ct,
uncertainty=SOURCE_UNCERTAINTY_DN)
spectrogram_DN_per_s0 = SpectrogramCube(
SOURCE_DATA_DN / SINGLES_EXPOSURE_TIME, WCS0, EXTRA_COORDS0, u.ct / u.s,
SOURCE_UNCERTAINTY_DN / SINGLES_EXPOSURE_TIME)
SOURCE_DATA_DN / SINGLES_EXPOSURE_TIME, wcs=WCS0, extra_coords=EXTRA_COORDS0, unit=u.ct / u.s,
uncertainty=SOURCE_UNCERTAINTY_DN / SINGLES_EXPOSURE_TIME)
spectrogram_DN_per_s_per_s0 = SpectrogramCube(
SOURCE_DATA_DN /
SINGLES_EXPOSURE_TIME /
SINGLES_EXPOSURE_TIME,
WCS0,
EXTRA_COORDS0,
u.ct /
wcs=WCS0,
extra_coords=EXTRA_COORDS0,
unit=u.ct /
u.s /
u.s,
SOURCE_UNCERTAINTY_DN /
uncertainty=SOURCE_UNCERTAINTY_DN /
SINGLES_EXPOSURE_TIME /
SINGLES_EXPOSURE_TIME)
spectrogram_DN_s0 = SpectrogramCube(
SOURCE_DATA_DN * SINGLES_EXPOSURE_TIME, WCS0, EXTRA_COORDS0, u.ct * u.s,
SOURCE_UNCERTAINTY_DN * SINGLES_EXPOSURE_TIME)
SOURCE_DATA_DN * SINGLES_EXPOSURE_TIME, wcs=WCS0, extra_coords=EXTRA_COORDS0, unit=u.ct * u.s,
uncertainty=SOURCE_UNCERTAINTY_DN * SINGLES_EXPOSURE_TIME)
spectrogram_DN1 = SpectrogramCube(
SOURCE_DATA_DN, WCS0, EXTRA_COORDS1, u.ct, SOURCE_UNCERTAINTY_DN)
SOURCE_DATA_DN, wcs=WCS0, extra_coords=EXTRA_COORDS1, unit=u.ct,
uncertainty=SOURCE_UNCERTAINTY_DN)
spectrogram_DN_per_s1 = SpectrogramCube(
SOURCE_DATA_DN / SINGLES_EXPOSURE_TIME, WCS0, EXTRA_COORDS1, u.ct / u.s,
SOURCE_UNCERTAINTY_DN / SINGLES_EXPOSURE_TIME)
SOURCE_DATA_DN / SINGLES_EXPOSURE_TIME, wcs=WCS0, extra_coords=EXTRA_COORDS1, unit=u.ct / u.s,
uncertainty=SOURCE_UNCERTAINTY_DN / SINGLES_EXPOSURE_TIME)
spectrogram_DN_per_s_per_s1 = SpectrogramCube(
SOURCE_DATA_DN /
SINGLES_EXPOSURE_TIME /
SINGLES_EXPOSURE_TIME,
WCS0,
EXTRA_COORDS1,
u.ct /
wcs=WCS0,
extra_coords=EXTRA_COORDS1,
unit=u.ct /
u.s /
u.s,
SOURCE_UNCERTAINTY_DN /
uncertainty=SOURCE_UNCERTAINTY_DN /
SINGLES_EXPOSURE_TIME /
SINGLES_EXPOSURE_TIME)
spectrogram_DN_s1 = SpectrogramCube(
SOURCE_DATA_DN * SINGLES_EXPOSURE_TIME, WCS0, EXTRA_COORDS1, u.ct * u.s,
SOURCE_UNCERTAINTY_DN * SINGLES_EXPOSURE_TIME)
SOURCE_DATA_DN * SINGLES_EXPOSURE_TIME, wcs=WCS0, extra_coords=EXTRA_COORDS1, unit=u.ct * u.s,
uncertainty=SOURCE_UNCERTAINTY_DN * SINGLES_EXPOSURE_TIME)
spectrogram_NO_COORDS = SpectrogramCube(SOURCE_DATA_DN, WCS_NO_COORDS)
spectrogram_instrument_axes = SpectrogramCube(
SOURCE_DATA_DN, WCS0, EXTRA_COORDS0, u.ct, SOURCE_UNCERTAINTY_DN, instrument_axes=("a", "b", "c"))
SOURCE_DATA_DN, wcs=WCS0, extra_coords=EXTRA_COORDS0, unit=u.ct,
uncertainty=SOURCE_UNCERTAINTY_DN, mask=MASK, instrument_axes=("a", "b", "c"))

def test_spectral_axis():
assert all(spectrogram_DN0.spectral_axis == spectrogram_DN0.axis_world_coords("em.wl"))
Expand Down Expand Up @@ -164,5 +168,30 @@ def test_uncalculate_exposure_time_correction_error():
def test_instrument_axes_slicing(item, expected):
sliced_cube = spectrogram_instrument_axes[item]
output = sliced_cube.instrument_axes
print(output, output.shape, expected, expected.shape)
assert all(output == expected)


def test_ndcube_components_after_slicing():
"""Tests all cube components are correctly propagated by slicing."""
# Slice test object
item = tuple([slice(0, 1)] * 3)
sliced_cube = spectrogram_instrument_axes[item]
# Generate expected result.
data = spectrogram_instrument_axes.data[item]
uncertainty = spectrogram_instrument_axes.uncertainty[item]
mask = spectrogram_instrument_axes.mask[item]
extra_coords = list(EXTRA_COORDS0)
ec_axis = 0
ec0 = list(extra_coords[0])
ec0[-1]= ec0[-1][item[ec_axis]]
ec1 = list(extra_coords[1])
ec1[-1]= ec1[-1][item[ec_axis]]
extra_coords = (tuple(ec0), tuple(ec1))
wcs = spectrogram_instrument_axes.wcs[item]
expected_cube = SpectrogramCube(data=data, wcs=wcs, uncertainty=uncertainty, mask=mask,
meta=spectrogram_instrument_axes.meta,
unit=spectrogram_instrument_axes.unit,
extra_coords=extra_coords,
missing_axes=spectrogram_instrument_axes.missing_axes,
instrument_axes=spectrogram_instrument_axes.instrument_axes)
assert_cubes_equal(sliced_cube, expected_cube)

0 comments on commit b6cbaf3

Please sign in to comment.