#!/usr/bin/env python
# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""Compute filtered image using Continuous Wavelet Transform (CWT).

TODO: add example and explain output.
"""

# Parse command line arguments

from gammapy.utils.scripts import argparse, GammapyFormatter
parser = argparse.ArgumentParser(description=__doc__,
                                 formatter_class=GammapyFormatter)
parser.add_argument('infile', action="store",
                    help='Input FITS file name')
parser.add_argument('outfile', action="store",
                    help='Output FITS file name')
parser.add_argument('--clobber', action='store_true', default=False,
                    help='Clobber output file?')
# Wavelet scales to be used
parser.add_argument('--min_scale', default=6.0, type=float,
                    help='Minimum wavelet scale')
parser.add_argument('--nscales', default=6, type=int,
                    help='Number of wavelet scales')
parser.add_argument('--scale_step', default=1.3, type=float,
                    help='Geometric step between wavelet scales')
# Detection thresholds
parser.add_argument('--thresh', default=3.0, type=float,
                    help='Significance threshold for pixel detection')
parser.add_argument('--detect', default=5.0, type=float,
                    help='Significance threshold for source detection')
parser.add_argument('--niter', default=5, type=int,
                    help='Maximum number of iterations')
parser.add_argument('--convergence', default=1e-5, type=float,
                    help='Convergence parameter')

args = parser.parse_args()

import os.path
import sys
import logging
logging.basicConfig(level=logging.DEBUG, format='%(levelname)s - %(message)s')

if  os.path.isfile(args.outfile) and not args.clobber:
    logging.error("Output file exists and clobber is False")
    sys.exit()

# Execute script

from gammapy.detect.cwt import CWT

cwt = CWT(args.min_scale, args.nscales, args.scale_step)
cwt.set_file(args.infile)
cwt.iterative_filter_peak(args.thresh, args.detect, args.niter, args.convergence)
cwt.save_filter(args.outfile, args.clobber)
