-
Notifications
You must be signed in to change notification settings - Fork 0
/
mwrfits.py
39 lines (37 loc) · 1.26 KB
/
mwrfits.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
import numpy, pyfits, types, itertools
def mwrfits(filename, arraylist, namelist=None, header=None):
"""
Writes the list of numpy.arrays arraylist as a FITS table filename
using namelist as list of names.
Arraylist can be dictionary with arrays as values and names as keys.
Also Arraylist can be numpy-record-array
"""
tmplist=[]
if isinstance(arraylist,numpy.ndarray):
if arraylist.dtype.type is numpy.void:
iter=itertools.izip(arraylist.dtype.names, itertools.imap (arraylist.__getitem__ , arraylist.dtype.names))
else:
if isinstance(arraylist,types.ListType):
iter= zip(namelist, arraylist)
elif isinstance(arraylist,types.DictType):
iter= arraylist.iteritems()
for name, arr in iter:
if arr.dtype.type==numpy.int8:
format='I'
elif arr.dtype.type==numpy.int16:
format='I'
elif arr.dtype.type==numpy.int32:
format='J'
elif arr.dtype.type==numpy.int64:
format='K'
elif arr.dtype.type==numpy.float32:
format='E'
elif arr.dtype.type==numpy.float64:
format='D'
elif arr.dtype.type==numpy.string_:
format='%dA'%arr.dtype.itemsize
else:
raise Exception("Oops unknown datatype %s"%arr.dtype)
tmplist.append(pyfits.Column(name=name, array=arr, format=format))
hdu = pyfits.new_table(tmplist)
hdu.writeto(filename,clobber=True)