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)
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)
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)
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)
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()
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