#!/usr/bin/env python
###############################################################################
# Copyright (c) 2018, GNOME Collaboration.
#
# Produced at the University of California at Berkeley.
#
# Written by V. Dumont (vincentdumont11@gmail.com).
#
# All rights reserved.
#
# This file is part of GDAS.
#
# For details, see github.com/vincentdumont/gdas.
#
# For details about use and distribution, please read GDAS/LICENSE .
###############################################################################
import gdas,argparse
parser = argparse.ArgumentParser(prog='gdas',description="GNOME Data Analysis Software")
parser.add_argument("operation",help="Operation to perform",choices=['excesspower','triggermap','faketrigger'])
parser.add_argument("--station",metavar='',help="Station name")
parser.add_argument("--start-time",metavar='',help="Start time in format YYYY-M-D-H-M")
parser.add_argument("--end-time",metavar='',help="End time in format YYYY-M-D-H-M")
parser.add_argument("--data-path",metavar='',default="/GNOMEDrive/gnome/serverdata/",help="Custom path where data are stored")
parser.add_argument("--resample",metavar='',help="New sampling rate for real data resampling")
parser.add_argument("--band",metavar='', help="Bandwidth of the finest filters. Default is None, and would be inferred from the data bandwidth and number of channels.")
parser.add_argument("--filename",metavar='',help="Input filename.")
parser.add_argument("--fmin",metavar='',default=0,help="Lowest frequency of the filter bank, default is 0 Hz.")
parser.add_argument("--fmax",metavar='',help="Highest frequency of the filter bank, default is None, meaning use Nyquist.")
parser.add_argument("--max-duration",metavar='', help="Longest duration tile to compute.")
parser.add_argument("--nchans",metavar='',default=256,help="Number of frequency channels to use.")
parser.add_argument("--output",metavar='',help="Output filename of the trigger map.")
parser.add_argument("--psd-estimation",metavar='',default='median-mean',help="Average method")
parser.add_argument("--sample-rate",metavar='',default=512,help="Sampling rate")
parser.add_argument("--segment-length",metavar='',default=60,help="Length of each segment in seconds")
parser.add_argument("--segment-stride",metavar='',default=30,help="Separation between 2 consecutive segments in seconds")
parser.add_argument("--segments",metavar='',default=10,help="Number of segments to be created.")
parser.add_argument("--simulation",default=False,action="store_true",help="Use artificial data")
parser.add_argument("--tile-fap",metavar='',default=1e-7,help="Tile false alarm probability threshold in Gaussian noise.")
parser.add_argument("--window-fraction",metavar='',default=0,help="Withening window fraction")
parser.add_argument("--wtype",metavar='',default='tukey',help="Whitening type, can tukey or hann")
args = parser.parse_args()
if args.operation=='excesspower':
    if args.simulation:
        ts_data = gdas.fake_data(sample_rate=args.sample_rate,psd_segment_length=args.segment_length,nsegs=args.segments)
    else:
        ts_data = gdas.get_data(args.station,args.start_time,args.end_time,args.data_path,args.resample)[0]
    gdas.excess_power(ts_data,band=args.band,fmin=args.fmin,fmax=args.fmax,max_duration=args.max_duration,
                      nchans=args.nchans,output=args.output,psd_estimation=args.psd_estimation,
                      segment_length=args.segment_length,segment_stride=args.segment_stride,
                      station=args.station,tile_fap=args.tile_fap,window_fraction=args.window_fraction,
                      wtype=args.wtype)
if args.operation=='triggermap':
    gdas.trigger_map(args.filename,args.output)
if args.operation=='faketrigger':
    gdas.fake_trigger_generator()
