Source code for hveto.cli.trace

# -*- coding: utf-8 -*-
# Copyright (C) Joshua Smith (2016-)
#
# This file is part of the hveto python package.
#
# hveto 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 3 of the License, or
# (at your option) any later version.
#
# hveto 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 hveto.  If not, see <http://www.gnu.org/licenses/>.

"""Check whether a specified trigger time was vetoed by an hveto analysis
"""

import os
import sys
import json

from gwpy.segments import SegmentList

from gwdetchar import cli

from .. import __version__

__author__ = 'Joshua Smith <joshua.smith@ligo.org>'

PROG = ('python -m hveto.cli.trace' if sys.argv[0].endswith('.py')
        else os.path.basename(sys.argv[0]))


# -- parse command line -------------------------------------------------------

def _abs_path(p):
    return os.path.abspath(os.path.expanduser(p))


[docs]def create_parser(): """Create a command-line parser for this entry point """ parser = cli.create_parser( prog=PROG, description=__doc__, version=__version__, ) parser.add_argument( '-t', '--trigger-time', required=True, help='GPS time of the trigger', ) parser.add_argument( '-d', '--directory', required=True, type=_abs_path, help=('path to the hveto output directory containing ' 'a summary-stats.json file'), ) parser.add_argument( '-v', '--verbose', action='store_const', dest='loglevel', const='DEBUG', default='INFO', help='Log verbose output', ) return parser
# -- main code block ----------------------------------------------------------
[docs]def main(args=None): """Run the hveto-trace command-line tool """ parser = create_parser() args = parser.parse_args(args=args) # initialize variables time = float(args.trigger_time) segment = None # initialize logger logger = cli.logger(name=PROG.split('python -m ').pop(), level=args.loglevel) logger.debug('Running in verbose mode') logger.debug('Search directory: {}'.format(args.directory)) try: # read veto segment statistics segment_stats = json.load(open(os.path.join( args.directory, 'summary-stats.json'))) except IOError: logger.critical("'summary-stats.json' was not found " "in the input directory") raise # loop over and log results to output for (i, cround) in enumerate(segment_stats['rounds']): seg_files = filter( lambda f_name: '.txt' in f_name, cround[u'files'][u'VETO_SEGS']) for f in seg_files: segments = SegmentList.read(os.path.join(args.directory, f)) if time in segments: segment = segments[segments.find(time)] logger.info('Trigger time {0} was vetoed in round {1} by ' 'segment {2}'.format(time, (i + 1), segment)) logger.debug('Round winner: {}'.format(cround['name'])) logger.debug('Significance: {}'.format(cround['significance'])) logger.debug('SNR: {}'.format(cround['snr'])) logger.debug('Window: {}'.format(cround['window'])) if segment is None: # if we got here, the signal was not vetoed logger.info('Trigger time {} was not vetoed'.format(time))
# -- run from command-line ---------------------------------------------------- if __name__ == "__main__": main()