"""
This produces some sets of test plates for Milan Spasovic to evaluate
the effect of lossy compression on the usefulness of the scans.

Ref: milan.spasovic@physik.uni-marburg.de Wed, 20 Sep 2017 18:30:12 +0200
"""

import os

import pyfits

BASEDIR = "data/part1/Bruceplatten/FITS"
BASEDIR2 = "data/part2/Bruceplatten"

# plates requested by Milan because he's already analysed them.
FNAMES = """B8155b.fits B8158b.fits B8161b.fits B8162b.fits
B8163b.fits B8164b.fits B8165b.fits B8166b.fits B8167b.fits
B8170b.fits B8175b.fits B8176b.fits B8177b.fits B8178b.fits
B8181b.fits B8183b.fits B8184b.fits B8185b.fits B8186b.fits
B8188b.fits B8190b.fits B8191b.fits B8193b.fits B8194b.fits
B8196b.fits B8197b.fits B8198b.fits B8201b.fits B8202b.fits
B8203b.fits B8206b.fits B8207b.fits B8208b.fits B8211b.fits
B8212b.fits B8214b.fits B8215b.fits B8216b.fits B8217b.fits
B8224b.fits B8225a.fits B8226b.fits B8227b.fits B8230b.fits
B8231a.fits B8232b.fits B8243b.fits B8244b.fits B8247a.fits
B8248b.fits B8249b.fits B8250b.fits B8251b.fits B8252b.fits
B8253b.fits B8254b.fits B8255b.fits B8258b.fits B8259b.fits
B8260a.fits B8261b.fits""".split()

def recompress(src, dest, scale):
	"""reads the HDAP file src and writes a compressed version to dest.
	"""
	if os.path.exists(dest):
		return
	hdus = pyfits.open(src)
	hdr, data = hdus[0].header, hdus[0].data.astype('float')
	del hdr["BZERO"]
	newhdus = pyfits.CompImageHDU(data, header=hdr,
		compression_type="HCOMPRESS_1", hcomp_scale=scale)
	newhdus.writeto(dest, clobber=True)


def recompress_all(dest_dir, scale):
	try:
		os.makedirs(dest_dir)
	except os.error:
		pass

	for fname in FNAMES:
		try:
			recompress(
				os.path.join(BASEDIR, fname),
				os.path.join(dest_dir, fname),
				scale)
		except IOError:
			recompress(
				os.path.join(BASEDIR2, fname),
				os.path.join(dest_dir, fname),
				scale)


if __name__=="__main__":
	recompress_all("tmp/scale2", 2)
	recompress_all("tmp/scale4", 4)
