#!/usr/bin/env python
""" Plot the log likelihood percentiles for a DQ bin
"""
import sys
import argparse
import numpy
import pycbc
import h5py
from matplotlib import use; use('Agg')
from matplotlib import pyplot
from pycbc.version import git_verbose_msg as version
import pycbc.results

parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--version', action='version', version=version)
parser.add_argument('--verbose', action="store_true")
parser.add_argument("--dq-file", required=True)
parser.add_argument("--ifo", type=str, required=True)
parser.add_argument("--output-file", required=True)
args = parser.parse_args()

pycbc.init_logging(args.verbose)

ifo = args.ifo

f = h5py.File(args.dq_file, 'r')
dq_name = f.attrs['stat'].split('-')[1]
logrates_grp = f[ifo + '/dq_percentiles']
bin_names = logrates_grp.keys()

# when using a flag, times when the flag was on go to the last dq bin
logrates = [logrates_grp[b][-1] for b in bin_names]
x = numpy.arange(len(logrates))

ymax = 1.2 * max(logrates)
color = pycbc.results.ifo_color(ifo)

fig = pyplot.figure(0)
ax = fig.add_subplot(111)
ax.bar(x, height=logrates, label=f'{ifo} DQ Flag Trigger Rates',
       color=color)
ax.set_xlabel('Template Bin Number')
ax.set_ylabel('Data Quality Log Likelihood')
ax.set_xticks(x)
ax.legend(loc='upper left', markerscale=5)
ax.set_ylim(0, ymax)
ax.grid()

yticks = ax.get_yticks()

ax2 = ax.twinx()
ax2_ymax = numpy.exp(ymax)
ax2.set_ylim(1, ax2_ymax)
new_ticks = range(0, int(numpy.ceil(numpy.log10(ax2_ymax))))
ax2.set_yticks([10**t for t in new_ticks])
ax2.set_ylabel('Relative Trigger Rate')
ax2.set_yscale('log')

# add meta data and save figure
plot_title = f'{ifo}: {dq_name} flag log likelihood'
plot_caption = f'The log likelihood correction during during times flagged \
                by the {dq_name} flag'
pycbc.results.save_fig_with_metadata(fig, args.output_file, title=plot_title,
                                     caption=plot_caption, cmd=' '.join(sys.argv))
