From e037065ffc12891a55103414f85d9062ca608296 Mon Sep 17 00:00:00 2001 From: ChiWai Chan <chiwai.chan@ligo.org> Date: Sun, 3 Mar 2019 17:50:37 -0800 Subject: [PATCH] add gstlal_inspiral_plot_psd_horizon --- gstlal-inspiral/bin/Makefile.am | 1 + .../bin/gstlal_inspiral_plot_psd_horizon | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100755 gstlal-inspiral/bin/gstlal_inspiral_plot_psd_horizon diff --git a/gstlal-inspiral/bin/Makefile.am b/gstlal-inspiral/bin/Makefile.am index 40d81e7b45..98a494879d 100644 --- a/gstlal-inspiral/bin/Makefile.am +++ b/gstlal-inspiral/bin/Makefile.am @@ -35,6 +35,7 @@ dist_bin_SCRIPTS = \ gstlal_inspiral_plot_banks \ gstlal_inspiral_plot_extrinsic_params \ gstlal_inspiral_plot_kernels \ + gstlal_inspiral_plot_psd_horizon \ gstlal_inspiral_plot_sensitivity \ gstlal_inspiral_plotsummary \ gstlal_inspiral_plot_svd_bank \ diff --git a/gstlal-inspiral/bin/gstlal_inspiral_plot_psd_horizon b/gstlal-inspiral/bin/gstlal_inspiral_plot_psd_horizon new file mode 100755 index 0000000000..99af702d11 --- /dev/null +++ b/gstlal-inspiral/bin/gstlal_inspiral_plot_psd_horizon @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +""" Plot horizon history from ranking statistics""" + +import sys +import os +import itertools +import matplotlib +matplotlib.use("Agg") +from matplotlib import pyplot +from optparse import OptionParser +import numpy + +from gstlal import far, plotutil +from lal.utils import CacheEntry + + +def parse_command_line(): + parser = OptionParser(description = __doc__) + + parser.add_option("-o", "--outdir", default = ".", help = "output directory for plots (Default: current directory)" ) + parser.add_option("-v", "--verbose", action = "store_true", help = "be verbose") + + options, args = parser.parse_args() + + if len(args) == 0: + raise ValueError("Ranking statistics cannot be empty.") + + return options, args + +options, caches = parse_command_line() + +urls = [CacheEntry(line).url for cache in caches for line in open(cache)] + +for key, group in itertools.groupby(sorted(urls,key = lambda x: CacheEntry.from_T050017(x).description), lambda x: CacheEntry.from_T050017(x).description): + rankingstat = far.marginalize_pdf_urls(list(group), "RankingStat", verbose = options.verbose) + horizon_history_dict = rankingstat.numerator.horizon_history + + fig, ax = pyplot.subplots(1, 2, figsize=(12,4)) + pyplot.tight_layout(pad = 2.5, w_pad = 2.5, h_pad = 2.5) + + gmint = [] + for detector, horizon_history in horizon_history_dict.items(): + GPSTime = numpy.array(horizon_history.keys()) + horizon_dist = horizon_history.values() + + minh, maxh = (float("inf"), 0) + maxh = max(maxh, max(horizon_dist)) + minh = min(minh, min(horizon_dist)) + mint = int(GPSTime.min()) + SinceGPSTime = (GPSTime - mint)/1000. + binvec = numpy.linspace(minh, maxh, 25) + gmint.append(mint) + + ax[0].semilogy(SinceGPSTime, horizon_dist, "x", color = plotutil.colour_from_instruments([detector]), label = detector) + ax[1].hist(horizon_dist, binvec, alpha = 0.5, color = plotutil.colour_from_instruments([detector]), label = detector) + + if options.verbose: + sys.stderr.write("plotting " + key + ".png\n") + + #pyplot.suptitle("%s : Horizon Distance" % detector) + ax[0].set_xlabel("Time (ks) from GPS {:d}".format(min(gmint))) + ax[0].set_ylabel("Mpc") + ax[0].legend(loc = "best") + ax[0].grid() + + ax[1].set_xlabel("Mpc") + ax[1].set_ylabel("Count") + ax[1].legend(loc = "best") + fig.savefig(os.path.join(options.outdir, key + ".png")) + pyplot.close() + +if options.verbose: + sys.stderr.write("done\n") -- GitLab