예제 #1
0
 def test_invalid_method(self):
     n = 10
     d = np.ones((10, 10))
     l = [FrameData(d, unit='adu') for i in range(n)]
     comb = ImCombiner()
     with pytest.raises(ValueError,
                        match='hulk-smash is not a valid '
                        'combining method.'):
         comb.combine(l, method='hulk-smash')
예제 #2
0
    def test_mergeheaders_no_merge(self):
        images = self.create_images()
        comb = ImCombiner(merge_header='no_merge')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, {
            'astropop imcombine nimages': 30,
            'astropop imcombine method': 'sum'
        })

        # explicit setting
        comb = ImCombiner()
        comb.set_merge_header('no_merge')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, {
            'astropop imcombine nimages': 30,
            'astropop imcombine method': 'sum'
        })
예제 #3
0
    def test_mergeheaders_first(self):
        images = self.create_images()
        expect = images[0].meta
        expect.update({
            'astropop imcombine nimages': 30,
            'astropop imcombine method': 'sum'
        })

        comb = ImCombiner(merge_header='first')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)

        # explicit setting
        comb = ImCombiner()
        comb.set_merge_header('first')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)
예제 #4
0
 def test_mergeheaders_default(self):
     # default is 'no_merge'
     images = self.create_images()
     comb = ImCombiner()
     res = comb.combine(images, method='sum')
     assert_equal(res.meta, {
         'astropop imcombine nimages': 30,
         'astropop imcombine method': 'sum'
     })
예제 #5
0
    def test_mergeheaders_only_equal(self):
        images = self.create_images()
        expect = {
            'astropop imcombine nimages': 30,
            'astropop imcombine method': 'sum',
            'first_equal': 1,
            'second_equal': 2
        }

        comb = ImCombiner(merge_header='only_equal')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)

        # explicit setting
        comb = ImCombiner()
        comb.set_merge_header('only_equal')
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)
예제 #6
0
    def test_mergeheaders_selected_keys(self):
        images = self.create_images()
        keys = ['first_equal', 'third_differ', 'first_differ']
        expect = {
            'astropop imcombine nimages': 30,
            'astropop imcombine method': 'sum',
            'first_equal': 1,
            'third_differ': 0,
            'first_differ': 0
        }

        comb = ImCombiner(merge_header='selected_keys', merge_header_keys=keys)
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)

        # explicit setting
        comb = ImCombiner()
        comb.set_merge_header('selected_keys', keys=keys)
        res = comb.combine(images, method='sum')
        assert_equal(res.meta, expect)
예제 #7
0
    def test_combine_median_simple(self):
        arr, base = self.create_framedata_array([0.8, 1.0, 1.2, 1.0, 1.2],
                                                size=[1024, 1024],
                                                unct=0.1)

        comb = ImCombiner()

        # the unclipped median of [0.8, 1.0, 1.2, 1.0, 1.2] is 1.0
        # std([0.8, 1.0, 1.2, 1.0, 1.2])/sqrt(5) = 0.06693280212272602
        res = comb.combine(arr, method='median')
        assert_equal(res.data, base)
        assert_almost_equal(res.uncertainty, 0.06693280212272602 * base)
        assert_equal(res.meta['astropop imcombine nimages'], 5)
        assert_equal(res.meta['astropop imcombine method'], 'median')

        # same for 3 sigma clipping
        comb.set_sigma_clip(3, 'median', 'mad_std')
        res = comb.combine(arr, method='median')
        assert_equal(res.data, base)
        assert_almost_equal(res.uncertainty, 0.06693280212272602 * base)
        assert_equal(res.meta['astropop imcombine nimages'], 5)
        assert_equal(res.meta['astropop imcombine method'], 'median')
예제 #8
0
    def test_combine_mask_mean(self):
        comb = ImCombiner()
        images = [None] * 10
        shape = (10, 10)
        for i in range(10):
            mask = np.zeros(shape)
            # all (2, 5) elements are masked, so the result must be
            mask[2, 5] = 1
            images[i] = FrameData(np.ones(shape), unit='adu', mask=mask)
        # these points in result must no be masked
        images[5].mask[7, 7] = 1
        images[2].mask[7, 7] = 1
        images[8].mask[8, 8] = 1
        expect = np.zeros(shape)
        expect[2, 5] = 1

        res = comb.combine(images, 'mean')
        assert_equal(res.mask, expect)