Generate keogram at the end of an observing night (fixes #15)

pull/17/head
Cees Bassa 2019-05-05 09:57:33 +02:00
parent 9564d01556
commit a97d2e6a6f
1 changed files with 86 additions and 0 deletions

86
keogram.py 100755
View File

@ -0,0 +1,86 @@
#!/usr/bin/env python3
from __future__ import print_function
import glob
import numpy as np
from stvid.stio import fourframe
import configparser
import argparse
import os
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from astropy.time import Time
def generate_keogram(path):
# Get files
fnames = sorted(glob.glob(os.path.join(path, "processed/2*.fits")))
# Allocate arrays
nx = len(fnames)
ny = cfg.getint('Camera', 'camera_y')
ixmid = cfg.getint('Camera', 'camera_x')//2
keogram = np.zeros(nx*ny).reshape(ny, nx)
mjds = np.zeros(nx)
# Get data
for i, fname in enumerate(fnames):
if i%10==0:
print(i, fname)
# Read file
ff = fourframe(fname)
# Extract data
keogram[:, i] = ff.zavg[:, ixmid]
mjds[i] = ff.mjd
# Save npy arrays
np.save(os.path.join(path, "mjds"), mjds)
np.save(os.path.join(path, "keogram"), keogram)
if __name__ == "__main__":
# Read commandline options
conf_parser = argparse.ArgumentParser(description='Process captured' +
' video frames.')
conf_parser.add_argument("-c", "--conf_file",
help="Specify configuration file. If no file" +
" is specified 'configuration.ini' is used.",
metavar="FILE")
conf_parser.add_argument("-d", "--directory",
help="Specify directory of observations. If no" +
" directory is specified parent will be used.",
metavar='DIR', dest='file_dir', default=".")
args = conf_parser.parse_args()
# Process commandline options and parse configuration
cfg = configparser.ConfigParser(inline_comment_prefixes=('#', ';'))
if args.conf_file:
cfg.read([args.conf_file])
else:
cfg.read('configuration.ini')
# Generate keogram is it does not exist
if not os.path.exists(os.path.join(args.file_dir, "keogram.npy")):
generate_keogram(args.file_dir)
# Load data
keogram = np.load(os.path.join(args.file_dir, "keogram.npy"))
mjds = np.load(os.path.join(args.file_dir, "mjds.npy"))
# Time limits
tmin = mdates.date2num(Time(np.min(mjds), format="mjd").datetime)
tmax = mdates.date2num(Time(np.max(mjds), format="mjd").datetime)
# Plot keogram
fig, ax = plt.subplots(figsize=(15, 5))
ax.imshow(np.log10(keogram), aspect="auto", origin="lower", cmap="magma", extent=[tmin, tmax, 0, 1])
ax.axes.get_yaxis().set_visible(False)
ax.xaxis_date()
date_format = mdates.DateFormatter("%F\n%H:%M:%S")
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate(rotation=0, ha="center")
plt.tight_layout()
plt.savefig(os.path.join(args.file_dir, "keogram.png"))