Exemple #1
0
    def testBasic4(self):
        '''Test complex fractional rejections'''
        data = [numpy.array([i]) for i in range(10)]

        r = quantileclip(data, fclip=0.0)
        for v in r[0].flat:
            self.assertAlmostEqual(v, 4.5)
        # for v in r[1].flat:
        #    self.assertAlmostEqual(v, 0.9166666666)
        for v in r[2].flat:
            self.assertAlmostEqual(v, 10)

        r = quantileclip(data, fclip=0.1)
        for v in r[0].flat:
            self.assertAlmostEqual(v, 4.5)
        # for v in r[1].flat:
        #    self.assertAlmostEqual(v, 0.75)
        for v in r[2].flat:
            self.assertAlmostEqual(v, 8)

        r = quantileclip(data, fclip=0.2)
        for v in r[0].flat:
            self.assertAlmostEqual(v, 4.5)
        # for v in r[1].flat:
        #    self.assertAlmostEqual(v, 0.58333333333333337)
        for v in r[2].flat:
            self.assertAlmostEqual(v, 6)

        r = quantileclip(data, fclip=0.09)
        for v in r[0].flat:
            self.assertAlmostEqual(v, 4.5)
        # for v in r[1].flat:
        #    self.assertAlmostEqual(v, 0.76666666666666672)
        for v in r[2].flat:
            self.assertAlmostEqual(v, 8.2)
Exemple #2
0
    def testBasic2(self):
        '''Test integer rejections'''
        r = quantileclip(self.data, fclip=0.0)
        for v in r[0].flat:
            self.assertEqual(v, 1)
        for v in r[1].flat:
            self.assertEqual(v, 0)
        for v in r[2].flat:
            self.assertEqual(v, 10)

        r = quantileclip(self.data, fclip=0.1)
        for v in r[0].flat:
            self.assertEqual(v, 1)
        for v in r[1].flat:
            self.assertEqual(v, 0)
        for v in r[2].flat:
            self.assertEqual(v, 8)

        r = quantileclip(self.data, fclip=0.2)
        for v in r[0].flat:
            self.assertEqual(v, 1)
        for v in r[1].flat:
            self.assertEqual(v, 0)
        for v in r[2].flat:
            self.assertEqual(v, 6)
Exemple #3
0
 def testBasic3(self):
     '''Test simple fractional rejections'''
     r = quantileclip(self.data, fclip=0.23)
     for v in r[0].flat:
         self.assertEqual(v, 1)
     for v in r[1].flat:
         self.assertEqual(v, 0)
     for v in r[2].flat:
         self.assertAlmostEqual(v, 5.4)
Exemple #4
0
    def testResults5(self):
        '''Test deviant points are ignored'''
        data = [numpy.array([1.0]) for _ in range(22)]
        data[0][0] = 89
        data[12][0] = -89

        r = quantileclip(data, fclip=0.15)
        for v in r[0].flat:
            self.assertAlmostEqual(v, 1.0)
        for v in r[1].flat:
            self.assertAlmostEqual(v, 0.0)
        for v in r[2].flat:
            self.assertAlmostEqual(v, 15.4)
Exemple #5
0
    def combine_frames(self, frames, extinction, out=None, step=0):
        _logger.debug('Step %d, opening sky-subtracted frames', step)

        def fits_open(name):
            '''Open FITS with memmap in readonly mode'''
            return fits.open(name, mode='readonly', memmap=True)

        frameslll = [
            fits_open(frame.lastname) for frame in frames if frame.valid_target
        ]
        _logger.debug('Step %d, opening mask frames', step)
        mskslll = [
            fits_open(frame.resized_mask) for frame in frames
            if frame.valid_target
        ]
        _logger.debug('Step %d, combining %d frames', step, len(frameslll))
        try:
            extinc = [
                pow(10, -0.4 * frame.airmass * extinction) for frame in frames
                if frame.valid_target
            ]
            data = [i['primary'].data for i in frameslll]
            masks = [i['primary'].data for i in mskslll]

            out = quantileclip(data,
                               masks,
                               scales=extinc,
                               dtype='float32',
                               out=out,
                               fclip=0.1)

            # saving the three extensions
            fits.writeto('result_i%0d.fits' % step, out[0], clobber=True)
            fits.writeto('result_var_i%0d.fits' % step, out[1], clobber=True)
            fits.writeto('result_npix_i%0d.fits' % step, out[2], clobber=True)

            return out

        finally:
            _logger.debug('Step %d, closing sky-subtracted frames', step)
            for f in frameslll:
                f.close()
            _logger.debug('Step %d, closing mask frames', step)
            for f in mskslll:
                f.close()
Exemple #6
0
    def combine2(self, data, masks, data_hdul, offsetsp, use_errors):
        baseimg = data_hdul[0]
        base_header = baseimg[0].header

        self.logger.info('Combine target images (final)')
        method = combine.median
        out = method(data, masks=masks, dtype='float32')

        out = quantileclip(data, masks,
                           dtype='float32', out=out, fclip=0.1)

        self.logger.debug('create result image')
        hdu = fits.PrimaryHDU(out[0], header=base_header)
        self.logger.debug('update result header')
        hdr = hdu.header
        self.set_base_headers(hdr)

        hdr['TSUTC2'] = data_hdul[-1][0].header['TSUTC2']
        # Update obsmode in header

        hdu.header['history'] = "Combined %d images using '%s'" % (
            len(data_hdul),
            method.__name__
        )
        hdu.header['history'] = 'Combination time {}'.format(
            datetime.datetime.utcnow().isoformat()
        )
        # Update NUM-NCOM, sum of individual images
        ncom = 0
        for img in data_hdul:
            hdu.header['history'] = "Image {}".format(self.datamodel.get_imgid(img))
            ncom += img[0].header.get('NUM-NCOM', 1)
        hdr['NUM-NCOM'] = ncom
        # Update WCS, approximate solution
        hdr['CRPIX1'] += offsetsp[0][0]
        hdr['CRPIX2'] += offsetsp[0][1]

        #
        if use_errors:
            varhdu = fits.ImageHDU(out[1], name='VARIANCE')
            num = fits.ImageHDU(out[2], name='MAP')
            hdulist = fits.HDUList([hdu, varhdu, num])
        else:
            hdulist = fits.HDUList([hdu])
        return hdulist