Created
December 19, 2018 17:33
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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