-
Notifications
You must be signed in to change notification settings - Fork 0
/
fits.py
44 lines (39 loc) · 1.86 KB
/
fits.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
from astropy.io import fits
from astropy.table import vstack, Table
from astrometry.util.fits import fits_table
def getdata(hdulist,hdu):
'''returns tuple: data,keys
data: dict of numpy arrays
keys is correctly ordered list for data.keys()'''
data,ordered_keys= np.asarray(hdulist[hdu].data), hdulist[hdu].columns.names
d={}
for key in ordered_keys:
d[key]= data[key]
return d,ordered_keys
def tractor_cat(fn):
'''uses Dustin's fits_table() function to read his tractor catalog then returns it as dictionary of np arrays
his fits_table handles booleans with weird values like 84 for "brick_primary", and converts that to True/False'''
temp = fits_table(fn)
data={}
for key in temp.columns(): data[key]= temp.get(key)
return data
def bricks_near_radec(ra,dec,d_ra=1.,d_dec=1.):
'''given bricks table, return all bricknames with brick centers [ra-d_ra,ra+d_ra],[dec-d_dec,dec+d_dec]'''
b=fits_table('survey-bricks.fits.gz')
ra1,ra2= ra-d_ra, ra+d_ra
dec1,dec2= dec-d_dec, dec+d_dec
ind= np.all((b.get('ra') >= ra1,b.get('ra') <= ra2,b.get('dec') >= dec1,b.get('dec') <= dec2),axis=0)
print 'these bricks have centers between %.1f < ra < %.1f and %.1f < dec < %.1f' % (ra1,ra2,dec1,dec2)
return b.get('brickname')[ind]
def overlap_bricks(bricks_fn,ra,dec,dx):
'''given bricks table, return all bricknames with brick centers [ra-dx,ra+dx],[dec-dx,dec+dx]'''
b=fits_table(bricks_fn)
ra1,ra2= ra-dx, ra+dx
dec1,dec2= dec-dx, dec+dx
ind= np.all((b.get('ra') >= ra1,b.get('ra') <= ra2,b.get('dec') >= dec1,b.get('dec') <= dec2),axis=0)
print 'these bricks have centers between %.1f < ra < %.1f and %.1f < dec < %.1f' % (ra1,ra2,dec1,dec2)
for name,ra,dec in zip(b.get('brickname')[ind],b.get('ra')[ind],b.get('dec')[ind]): print name,ra,dec
def load(name):
'''read in fits table as astropy Table'''
return Table(fits.getdata(name, 1))