#!/usr/bin/env python

import pyfits
import argparse

def main(outName, inNames):
    sizeList = [pyfits.open(fn)[1].header["NAXIS2"] for fn in inNames]
    num = sum(sizeList)
    first = pyfits.open(inNames[0])
    schema = first[1].columns
    out = pyfits.BinTableHDU.from_columns(schema, nrows=num)
    start = 0
    for fn, size in zip(inNames, sizeList):
        fits = pyfits.open(fn)
        data = fits[1].data
        for col in schema.columns:
            out.data.field(col.name)[start:start + size] = data.field(col.name)
        start += size
    out.writeto(outName, clobber=True)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("outName", help="Output filename")
    parser.add_argument("inNames", nargs="+", help="Input filenames")
    args = parser.parse_args()
    main(args.outName, args.inNames)

