def test_image_store(self): fits_object = fits.open(FITS_FILE) expected_data = cPickle.dumps(fits_object[0].data) expected_header = fits_object[0].header store_fits([self.image], [expected_data], [str(expected_header)]) fetched_image = self.db.session.query(Image).filter(Image.id==self.image.id).first() returned_data = cPickle.loads(fetched_image.data.fits_data) returned_header = Header.fromstring(fetched_image.data.fits_header) self.assertTrue((returned_data, expected_data)) self.assertEqual(returned_header, expected_header)
def test_image_store(self): fits_object = fits.open(FITS_FILE) expected_data = cPickle.dumps(fits_object[0].data) expected_header = fits_object[0].header store_fits([self.image], [expected_data], [str(expected_header)]) fetched_image = self.db.session.query(Image).filter( Image.id == self.image.id).first() returned_data = cPickle.loads(fetched_image.data.fits_data) returned_header = Header.fromstring(fetched_image.data.fits_header) self.assertTrue((returned_data, expected_data)) self.assertEqual(returned_header, expected_header)
def reconstruct_fits(db_image): try: if not db_image.data.fits_header or not db_image.data.fits_data: return None except Imagedata.DoesNotExist as e: return None hdu_header = Header.fromstring(db_image.data.fits_header) data = cPickle.loads(str(db_image.data.fits_data)) hdu = fits.PrimaryHDU(data) hdu.header = hdu_header hdulist = fits.HDUList([hdu]) return hdulist
# load previously extracted data from file ext = SlotModeExtract.fileExtensionHeaderInfo try: info_file = next(out_path.glob(f'*{ext}')) except StopIteration as err: raise IOError( 'Previously extracted header info file (extension %r) ' 'could not be found at location: %r' % (str(ext), out_path)) from err # noinspection PyTypeChecker info = np.rec.array(np.load(info_file, 'r')) else: # Extract the data subset = slice(*args.subset) data, header, info = fx.to_fits(args.channels, start=subset.start, stop=subset.stop) # Object coordinates (for barycentrization) header = Header.fromstring(fx.headers[0].decode()) ra, dec, equinox = map(header.get, ('ra', 'dec', 'equinox')) coords = SkyCoord(ra, dec, unit=('h', 'deg')) # equinox=equinox # fix timestamps time_file = str(fx.basename.with_suffix('.time')) t, ui = fix_timing(info, coords, time_file, args.plot) if ui: ui[0].show() plt.show()
path = sys.argv[1] obsdur = defaultdict(list) obsdates = defaultdict(list) for root, dirs, files in os.walk(path): fitsfinder = lambda f: (f.startswith('bxgp') & f.endswith('.fits')) fitsfiles = sorted(filter(fitsfinder, files)) if len(fitsfiles) > 1 and not root.endswith(('raw', 'finders', 'new')): try: first, last = [os.path.join(root, f) for f in (fitsfiles[0], fitsfiles[-1])] nfiles = len(fitsfiles) ext_start, mhead, ext1head, header_size = _parse_head(first) header = Header.fromstring(mhead) n_ex = header['NEXTEND'] texp = header['EXPTIME'] nframes = nfiles * n_ex / 4 tot_time = texp * nframes print() print('-' * 100) print('OBJECT', motley.green(header['OBJECT'])) print('DATE-OBS', header['DATE-OBS']) print('EXPTIME', texp) print('NFRAMES', nframes) print('TOT TIME:', tot_time) print('-' * 100) print()