Source code for turbo_seti.find_doppler.seti_event

#!/usr/bin/env python
'''
Main program module for executable turboSETI
'''

import sys
import os
import logging
import time
import cProfile
import pstats
from argparse import ArgumentParser

from blimpy import __version__ as BLIMPY_VERSION
from .find_doppler import FindDoppler
from .kernels import Kernels
from .turbo_seti_version import TURBO_SETI_VERSION


[docs]def main(args=None): r""" This is the entry-point to turboSETI. Parameters ---------- args : dict """ # Create an option parser to get command-line input/arguments p = ArgumentParser(description='turboSETI doppler drift narrowband search utility version {}.' .format(TURBO_SETI_VERSION)) p.add_argument('filename', type=str, default='', nargs="?", help='Name of filename to open (h5 or fil)') p.add_argument('-v', '--version', dest='show_version', default=False, action='store_true', help='show the turbo_seti and blimpy versions and exit') p.add_argument('-M', '--max_drift', dest='max_drift', type=float, default=10.0, help='Set the maximum drift rate threshold. Unit: Hz/sec. Default: 10.0') p.add_argument('-m', '--min_drift', dest='min_drift', type=float, default=0.00001, help='Set the minimum drift rate threshold. Unit: Hz/sec. Default: 0.00001') p.add_argument('-s', '--snr', dest='snr', type=float, default=25.0, help='Set the minimum SNR threshold. Default: 25.0') p.add_argument('-o', '--out_dir', dest='out_dir', type=str, default='./', help='Location for output files. Default: local dir. ') p.add_argument('-l', '--loglevel', dest='log_level', type=str, default='info', help='Specify log level (info, debug, warning)') p.add_argument('-c', '--coarse_chans', dest='coarse_chans', type=str, default=None, help='Comma separated string list of coarse channels to analyze. E.g. 7,12 to search channels 7 and 12 only.') p.add_argument('-n', '--n_coarse_chan', dest='n_coarse_chan', type=int, default=None, help='Number of coarse channels to use.') p.add_argument('-p', '--n_parallel', dest='n_parallel', type=int, default=1, help='Number of dask partitions to run in parallel. Default to 1 (dask not in use)') p.add_argument('-b', '--progress_bar', dest='flag_progress_bar', type=str, default='n', help='Use a progress bar with dask? (y/n)') p.add_argument('-g', '--gpu', dest='flag_gpu', type=str, default='n', help='Compute on the GPU? (y/n)') p.add_argument('-z', '--blank_dc', dest='flag_blank_dc', type=str, default='y', help='Smooth out the DC spike? (y/n)') p.add_argument('-d', '--gpu_id', dest='gpu_id', type=int, default=0, help='Use which GPU device? (0,1,...)') p.add_argument('-P', '--profile', dest='flag_profile', type=str, default='n', help='Profile execution? (y/n)') p.add_argument('-S', '--single_precision', dest='flag_single_precision', type=str, default='y', help='Use single precision (float32)? (y/n)') p.add_argument('-a', '--append_output', dest='flag_append_output', type=str, default='n', help='Append output DAT & LOG files? (y/n)') if args is None: args = p.parse_args() else: args = p.parse_args(args) if args.show_version: print('turbo_seti: {}'.format(TURBO_SETI_VERSION)) print('blimpy: {}'.format(BLIMPY_VERSION)) sys.exit(0) if args.filename == '': os.system('turboSETI -h') sys.exit(0) if not os.path.exists(args.filename): print("\nInput file {} does not exist!\n".format(args.filename)) sys.exit(86) if args.flag_profile == "y": cProfile.runctx('exec(args)', {'args': args, 'exec': exec_proc}, {}, filename='stats_file.bin') p = pstats.Stats('stats_file.bin') p.strip_dirs().sort_stats('time').print_stats(16) else: exec_proc(args)
[docs]def exec_proc(args): r""" Interface to FindDoppler class, called by main(). Parameters ---------- args : dict """ if args.coarse_chans is None: coarse_chans = '' else: coarse_chans = map(int, args.coarse_chans.split(',')) # Setting log level if args.log_level == 'info': log_level_int = logging.INFO elif args.log_level == 'debug': log_level_int = logging.DEBUG elif args.log_level == 'warning': log_level_int = logging.WARNING else: raise ValueError('Need valid loglevel value (info, debug, warning).') fmt = '%(name)-15s %(levelname)-8s %(message)s' logging.basicConfig(format=fmt, level=logging.WARNING) if Kernels.has_gpu() and args.flag_gpu == "n": print("Info: Your system is compatible with GPU-mode. Use the `-g y` argument to enable it.") #Doing search t0 = time.time() find_seti_event = FindDoppler(args.filename, max_drift=args.max_drift, min_drift=args.min_drift, snr=args.snr, out_dir=args.out_dir, append_output=(args.flag_append_output == "y"), coarse_chans=coarse_chans, obs_info=None, n_coarse_chan=args.n_coarse_chan, gpu_backend=(args.flag_gpu == "y"), gpu_id=args.gpu_id, blank_dc=(args.flag_blank_dc == "y"), precision=1 if args.flag_single_precision == "y" else 2, log_level_int=log_level_int) find_seti_event.search(n_partitions=args.n_parallel, progress_bar=args.flag_progress_bar) t1 = time.time() print('Search time: %5.2f min' % ((t1-t0)/60.))
if __name__ == '__main__': main()