import time
import matplotlib
import matplotlib.pyplot as plt
from astropy.io import fits
import numpy as np
from glob import glob
import argparse
from collections import Counter
cmap = plt.get_cmap('Greys')
[docs]def cofes_plots(ifunums, filename_array, outfile_name, vmin=-15,
vmax=25, logging=None):
"""
filename_array is an array-like object that contains the filenames
of fits files to plot. The output plot will be the shape of the
input array.
outfile is the output file name including the extension, such as out.fits.
vmin and vmax set the stretch for the images. They are in units of counts;
Pixels with vmin and below counts are black. Pixels with vmax and above
counts are white.
"""
filename_array = np.array(filename_array)
assert filename_array.ndim < 3, "filename_array has more than two" \
" dimensions. I can't plot that!"
assert filename_array.size > 0, "filename_array has size zero. " \
"There's nothing there to plot!"
rows = 10
cols = 10
fig = plt.figure(figsize=(8, 8))
# for i, f in zip(ifunums, filename_array):
for i in np.arange(10):
for j in np.arange(1, 11):
ifuname = '%02d%01d' % (j, i)
index = [ind for ind,
v in enumerate(ifunums) if ifuname == v]
if len(index):
f = filename_array[index[0]]
ax = plt.subplot(rows, cols, i*cols+j)
ax.set_xticks([])
ax.set_yticks([])
try:
data = fits.open(f)[0].data
ax.imshow(data, vmin=vmin, vmax=vmax,
interpolation='nearest', origin='lower',
cmap=cmap)
except IOError:
msg = "cofes_plots: File {} not found. " \
"Skipping...".format(f)
if logging is not None:
logging.warning(msg)
else:
print(msg)
ax.imshow(np.zeros((49, 49)), vmin=1, vmax=2,
interpolation='nearest', origin='lower',
cmap=cmap)
plt.text(-335, -11.0, "01", weight='bold')
plt.text(-285, -11.0, "02", weight='bold')
plt.text(-235, -11.0, "03", weight='bold')
plt.text(-185, -11.0, "04", weight='bold')
plt.text(-135, -11.0, "05", weight='bold')
plt.text(-85, -11.0, "06", weight='bold')
plt.text(-35, -11.0, "07", weight='bold')
plt.text(15, -11.0, "08", weight='bold')
plt.text(65, -11.0, "09", weight='bold')
plt.text(115, -11.0, "10", weight='bold')
plt.text(-366, 470, "0", weight='bold')
plt.text(-366, 420, "1", weight='bold')
plt.text(-366, 370, "2", weight='bold')
plt.text(-366, 320, "3", weight='bold')
plt.text(-366, 270, "4", weight='bold')
plt.text(-366, 220, "5", weight='bold')
plt.text(-366, 170, "6", weight='bold')
plt.text(-366, 120, "7", weight='bold')
plt.text(-366, 70, "8", weight='bold')
plt.text(-366, 20, "9", weight='bold')
plt.subplots_adjust(wspace=0.025, hspace=0.025)
fig.savefig(outfile_name)
[docs]def cofes_4x4_plots(prefix="", outfile_name='CoFeS_plots.png',
vmin=-15, vmax=25, logging=None):
"""
dir is a string containing the directory with the CoFeS files you wish
to plot. If its the local directory you can leave it as an empty string
outfile_name is a string with the output file name. This will be placed
in the dir directory
the ifu order is
073 083 093 103
074 084 094 104
075 085 095 105
076 086 096 106
"""
# t1 = time.time()
ifunums = \
np.array([['012', '022', '032', '042', '052', '062', '072', '082', '092', '102'],
['013', '023', '033', '043', '053', '063', '073', '083', '093', '103'],
['014', '024', '034', '044', '054', '064', '074', '084', '094', '104'],
['015', '025', '035', '045', '055', '065', '075', '085', '095', '105'],
['016', '026', '036', '046', '056', '066', '076', '086', '096', '106'],
['017', '027', '037', '047', '057', '067', '077', '087', '097', '107'],
['018', '028', '038', '048', '058', '068', '078', '088', '098', '108']])
ifunums = ['%02d%01d' % (j, i) for i in np.arange(10)
for j in np.arange(1, 11)]
ifunums.remove('010')
ifunums.remove('011')
ifunums.remove('012')
ifunums.remove('017')
ifunums.remove('018')
ifunums.remove('019')
ifunums.remove('020')
ifunums.remove('029')
ifunums.remove('090')
ifunums.remove('099')
ifunums.remove('100')
ifunums.remove('101')
ifunums.remove('102')
ifunums.remove('107')
ifunums.remove('108')
ifunums.remove('109')
ifunums.remove('054')
ifunums.remove('055')
ifunums.remove('056')
ifunums.remove('064')
ifunums.remove('065')
ifunums.remove('066')
cofes_files = glob(prefix + "*.fits")
assert len(cofes_files) > 0, \
"There are no fits files that begin with " + "'" + \
prefix + "'" + ". Please fix your typo."
prefixes = [i.split('_')[0] for i in cofes_files]
prefixes_dict = Counter(prefixes)
assert len(prefixes) == prefixes.count(prefixes[0]), \
"The prefix you specified, " + \
"'" + prefix + "'" + ", is not unique. It matches to " + \
"".join(i + " and " for i in prefixes_dict.keys()) + \
". Please enter a unique prefix."
prefix = cofes_files[0].split('_')[0]
filename_list = []
for i in ifunums:
filename_list.append(prefix + '_' + i + '.fits')
filename_array = np.array(filename_list)
# filename_array = filename_array.reshape(ifunums.shape[0],
# ifunums.shape[1])
cofes_plots(ifunums, filename_array, outfile_name, vmin, vmax,
logging=logging)
[docs]def main():
"""
"""
parser = argparse.ArgumentParser()
parser.add_argument('prefix', type=str,
help='Prefix for the CoFeS files you wish to plot. '
'For example CoFeS20170202T061644.8')
parser.add_argument('--output', default=None,
help='Output file name. By default this is '
'the given prefix.png')
parser.add_argument('--vmin', type=float, default=-15,
help='Sets the lower level of stretch for '
'the output images.')
parser.add_argument('--vmax', type=float, default=25,
help='Sets the upper level of stretch for '
'the output images.')
args = parser.parse_args()
if args.output is None:
args.output = args.prefix + '.png'
cofes_4x4_plots(prefix=args.prefix, outfile_name=args.output,
vmin=args.vmin, vmax=args.vmax)
if __name__ == '__main__':
main()