from taskinit import *
from ialib import write_image_history

def specsmooth(
    imagename, outfile, box, chans, stokes, region,  mask,
    overwrite, stretch, axis, function, width, dmethod
):
    casalog.origin('specsmooth')
    myia = iatool()
    myia.dohistory(False)
    outia = None
    try:
        if (not myia.open(imagename)):
            raise Exception, "Cannot create image analysis tool using " + imagename
        if (len(outfile) == 0):
            raise Exception, "outfile must be specified."
        function = function.lower()
        drop = len(dmethod) > 0
        if (function.startswith("b")):
            outia = myia.boxcar(
                outfile=outfile, region=region, mask=mask, overwrite=overwrite,
                stretch=stretch, axis=axis, width=width, drop=drop, dmethod=dmethod
            )
        elif (function.startswith("h")):
            outia = myia.hanning(
                outfile=outfile, region=region, mask=mask, overwrite=overwrite,
                stretch=stretch, axis=axis, drop=drop, dmethod=dmethod
            )
        else:
            raise Exception("Unsupported convolution function " + function)
        try:
            param_names = specsmooth.func_code.co_varnames[:specsmooth.func_code.co_argcount]
            param_vals = [eval(p) for p in param_names]   
            write_image_history(
                outia, sys._getframe().f_code.co_name,
                param_names, param_vals, casalog
            )
        except Exception, instance:
            casalog.post("*** Error \'%s\' updating HISTORY" % (instance), 'WARN')
        return True
    except Exception, instance:
        casalog.post( str( '*** Error ***') + str(instance), 'SEVERE')
        raise
    finally:
        if myia:
            myia.done()
        if outia:
            outia.done()