def test_to_spectrum1d(): # Set up simple spectral WCS wcs = WCS(naxis=1) wcs.wcs.ctype = ['VELO-LSR'] wcs.wcs.set() coords = WCSCoordinates(wcs=wcs) data = Data(label='spectrum', coords=coords) data.add_component(Component(np.array([3.4, 2.3, -1.1, 0.3]), units='Jy'), 'x') spec = data.get_object(Spectrum1D, attribute=data.id['x']) assert_quantity_allclose(spec.spectral_axis, [1, 2, 3, 4] * u.m / u.s) assert_quantity_allclose(spec.flux, [3.4, 2.3, -1.1, 0.3] * u.Jy) data.add_subset(data.id['x'] > 1, label='bright') spec_subset = data.get_subset_object(cls=Spectrum1D, subset_id=0, attribute=data.id['x']) assert_quantity_allclose(spec_subset.spectral_axis, [1, 2, 3, 4] * u.m / u.s) assert_quantity_allclose(spec_subset.flux, [3.4, 2.3, np.nan, np.nan] * u.Jy) assert_equal(spec_subset.mask, [1, 1, 0, 0])
def test_to_ccddata(with_wcs): if with_wcs: coords = WCS_CELESTIAL else: coords = None data = Data(label='image', coords=coords) data.add_component( Component(np.array([[3.4, 2.3], [-1.1, 0.3]]), units='Jy'), 'x') image = data.get_object(CCDData, attribute=data.id['x']) assert image.wcs is (WCS_CELESTIAL if with_wcs else None) assert_allclose(image.data, [[3.4, 2.3], [-1.1, 0.3]]) assert image.unit is u.Jy data.add_subset(data.id['x'] > 1, label='bright') image_subset = data.get_subset_object(cls=CCDData, subset_id=0, attribute=data.id['x']) assert image_subset.wcs is (WCS_CELESTIAL if with_wcs else None) assert_allclose(image_subset.data, [[3.4, 2.3], [-1.1, 0.3]]) assert image_subset.unit is u.Jy assert_equal(image_subset.mask, [[0, 0], [1, 1]])
def test_translator_from_subset(): # Case where we convert a subset to a DataFrame data = Data() data['a'] = [3, 5, 6, 7] data['b'] = [1.5, 2.2, 1.3, 3.3] data['c'] = ['r', 'd', 'w', 'q'] dc = DataCollection([data]) dc.new_subset_group(label='test subset', subset_state=data.id['b'] > 2) df = data.get_subset_object(cls=DataFrame) assert_equal(list(df.columns), ['a', 'b', 'c']) assert_equal(df['a'].values, [5, 7]) assert_equal(df['b'].values, [2.2, 3.3]) assert_equal(df['c'].values, ['d', 'q'])
def test_to_spectral_cube(spectral_cube_wcs): data = Data(label='spectral_cube', coords=spectral_cube_wcs) values = np.random.random((4, 5, 3)) data.add_component(Component(values, units='Jy'), 'x') spec = data.get_object(SpectralCube, attribute=data.id['x']) assert_quantity_allclose(spec.spectral_axis, [1, 2, 3, 4] * u.m / u.s) assert_quantity_allclose(spec.filled_data[...], values * u.Jy) data.add_subset(data.id['x'] > 0.5, label='bright') spec_subset = data.get_subset_object(cls=SpectralCube, subset_id=0, attribute=data.id['x']) assert_quantity_allclose(spec_subset.spectral_axis, [1, 2, 3, 4] * u.m / u.s) expected = values.copy() expected[expected <= 0.5] = np.nan assert_quantity_allclose(spec_subset.filled_data[...], expected * u.Jy) assert_equal(spec_subset.mask.include(), values > 0.5)