Skip to content

Instantly share code, notes, and snippets.

@k-sriram
Created December 19, 2018 17:33
Show Gist options
  • Save k-sriram/fa3f103ba94fe112650b1cd5d41d2bfa to your computer and use it in GitHub Desktop.
Save k-sriram/fa3f103ba94fe112650b1cd5d41d2bfa to your computer and use it in GitHub Desktop.
Code to find the differences in FITS headers and tabulate them in markdown table
from itertools import product
import argparse
import numpy as np
from astropy.io import fits
parser = argparse.ArgumentParser()
parser.add_argument('files',nargs='+')
parser.add_argument('-e','--ext',default='0')
parser.add_argument('-o',default='hdrdiff.md')
args = parser.parse_args()
def parse_tsi(s):
s = s.strip()
if s[0] == '(' and s[-1] == ')':
return tuple(parse_tsi(i) for i in s[1:-1].split(',') if i != '')
if s[0] == '\'' and s[-1] == '\'':
return s[1:-1]
try:
return int(s)
except ValueError:
raise ValueError('\'{}\' can\'t be parsed as str, int or tuple'.format(s))
ext = parse_tsi(args.ext)
hdrs = [fits.getheader(fn,ext) for fn in args.files]
nhdrs = len(hdrs)
diffkeys = []
for i in range(nhdrs-1):
for j in range(i+1,nhdrs):
diffkeysij = fits.HeaderDiff(hdrs[i],hdrs[j],ignore_keywords=diffkeys)
diffkeys.extend(diffkeysij.diff_keyword_values.keys())
diffkeys.extend(diffkeysij.diff_keywords)
diffkeys = [key for key in diffkeys if key not in ('HISTORY','COMMENT','HIERARCH')]
nkeys = len(diffkeys)
vals = [['' if key not in hdr else str(hdr[key]) for hdr in hdrs] for key in diffkeys]
with open(args.o,'w') as f:
f.write('| | ' + ' | '.join([file_.split('.')[0] for file_ in args.files]) + ' |\n')
f.write('| ---- |' + ' ---: |'*nhdrs + '\n')
for i in range(nkeys):
f.write('| ' + diffkeys[i] + ' | ' + ' | '.join([vals[i][j] for j in range(nhdrs)]) +' |\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment