diff --git a/gstlal/bin/gstlal_psd_polyfit b/gstlal/bin/gstlal_psd_polyfit new file mode 100755 index 0000000000000000000000000000000000000000..8f1eb792f954bde5cc1ea442d2dc20b13c9b51de --- /dev/null +++ b/gstlal/bin/gstlal_psd_polyfit @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# +# Copyright (C) 2013 Chad Hanna +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import numpy +import scipy +import sys +from gstlal import reference_psd +from pylal.xlal import datatypes +from pylal.xlal.datatypes import lalunit +from optparse import OptionParser +from glue.ligolw import ligolw +from glue.ligolw import array +from glue.ligolw import param +array.use_in(ligolw.LIGOLWContentHandler) +param.use_in(ligolw.LIGOLWContentHandler) +from glue.ligolw import utils +from pylal import series as lalseries +from pylal import datatypes as laltypes + +## @file +# gstlal_psd_polyfit + +## @package gstlal_psd_polyfit +# + +parser = OptionParser(description = __doc__) +parser.add_option("--median-window", type = int, default = 8, help="Median window in sample points to apply running median for removing sharp features. Default 8. Setting it to 1 effectively disables this filter.") +parser.add_option("--output", metavar = "filename", help = "Set the name of the LIGO light-weight XML file to output") +parser.add_option("--poly-order", type = int, default = 10, help = "Set the order of the fitting polynomial. default 10") +parser.add_option("--low-fit-freq", type = int, default = 30, help = "Set the low frequency at which to begin fitting in Hz. default 30") +parser.add_option("--high-fit-freq", type = int, default = 6500, help = "Set the high frequency at which to stop fitting in Hz. default 6500") + +options, filenames = parser.parse_args() + +psds = lalseries.read_psd_xmldoc(utils.load_filename(filenames[0], verbose = True, contenthandler = ligolw.LIGOLWContentHandler)) + +# FIXME Don't assume all psds have same resolution +psd = psds.values()[0] +minsample = int(options.low_fit_freq / psd.deltaF) +maxsample = int(options.high_fit_freq / psd.deltaF) + + +for ifo, psd in psds.items(): + psd = reference_psd.movingmedian(psd, options.median_window) + psd = reference_psd.polyfit(psd, minsample, maxsample, options.poly_order, True) + psds[ifo] = psd + +reference_psd.write_psd(options.output, psds)