diff --git a/astropop/image/processing.py b/astropop/image/processing.py index b6972540..ceeb8d0f 100644 --- a/astropop/image/processing.py +++ b/astropop/image/processing.py @@ -49,6 +49,7 @@ def cosmics_lacosmic(frame, inplace=False, **lacosmic_kwargs): New cosmic-rays corrected `FrameData` instance if not `inplace`, else the `image` `~astropop.framedata.FrameData` instance. """ + frame = check_framedata(frame) # As lacosmic removes and replace the cosmics pixels, no need to # update the mask mask, dat = astroscrappy.detect_cosmics(frame.data, **lacosmic_kwargs) diff --git a/tests/test_processing.py b/tests/test_processing.py new file mode 100644 index 00000000..b03e7b68 --- /dev/null +++ b/tests/test_processing.py @@ -0,0 +1,56 @@ +# Licensed under a 3-clause BSD style license - see LICENSE.rst +# flake8: noqa: F403, F405 + +import pytest +from astropop.image.processing import cosmics_lacosmic +from astropop.framedata import FrameData, PixelMaskFlags +from astropop.math import QFloat +from astropop.testing import * +import numpy as np + + +class TestProcessingCosmics: + @pytest.mark.parametrize('inplace', [True, False]) + def test_lacosmic_numpy(self, inplace): + arr = np.ones((10, 10)) + arr[3, 3] = 100000 + ccd = cosmics_lacosmic(arr, inplace=inplace) + assert_is_instance(ccd, FrameData) + assert_equal(ccd.data, np.ones((10, 10))) + assert_true(ccd.header['astropop lacosmic']) + + @pytest.mark.parametrize('inplace', [True, False]) + def test_lacosmic_qfloat(self, inplace): + arr = np.ones((10, 10)) + arr[3, 3] = 100000 + ccd = cosmics_lacosmic(QFloat(arr, unit='adu'), inplace=inplace) + assert_is_instance(ccd, FrameData) + assert_equal(ccd.data, np.ones((10, 10))) + assert_true(ccd.header['astropop lacosmic']) + + @pytest.mark.parametrize('inplace', [True, False]) + def test_lacosmic_framedata(self, inplace): + arr = np.ones((10, 10)) + arr[3, 3] = 100000 + frame = FrameData(arr, unit='adu') + ccd = cosmics_lacosmic(frame, inplace=inplace) + assert_is_instance(ccd, FrameData) + assert_equal(ccd.data, np.ones((10, 10))) + assert_true(ccd.header['astropop lacosmic']) + if inplace: + assert_is(ccd, frame) + + @pytest.mark.parametrize('inplace', [True, False]) + def test_lacosmic_mask(self, inplace): + arr = np.ones((10, 10)) + arr[3, 3] = 100000 + mask = np.zeros((10, 10), dtype='uint8') + mask[3, 3] |= PixelMaskFlags.COSMIC_RAY.value + mask[3, 3] |= PixelMaskFlags.INTERPOLATED.value + ccd = cosmics_lacosmic(arr, inplace=inplace) + assert_is_instance(ccd, FrameData) + assert_equal(ccd.data, np.ones((10, 10))) + assert_equal(ccd.flags, mask) + assert_equal(ccd.mask, np.zeros((10, 10), dtype=bool)) + assert_true(ccd.header['astropop lacosmic']) +