""" Code to derive basic statistics on FITS frames

Context : SRP
Module  : SRPFitsStats.py
Version : 1.0.1
Author  : Stefano Covino
Date    : 26/08/2011
E-mail  : stefano.covino@brera.inaf.it
URL:    : http://www.merate.mi.astro.it/utenti/covino

Usage   : SRPFitsStats -i arg1 [-h] [-v]
            -i Input FITS file list or single FITS file
            Returns mean, stnadard deviation, median and maximum value

History : (26/10/2003) First version.
        : (26/08/2011) Better cosmetics.
"""



import os, os.path
from optparse import OptionParser
from SRP.SRPFits.FitsImageClass import FitsImage
from SRP.SRPFits.IsFits import IsFits


parser = OptionParser(usage="usage: %prog -i arg1 [-h] [-v]", version="%prog 1.0.1")
parser.add_option("-i", "--inputlist", action="store", nargs=1, type="string", dest="fitsfilelist", help="Input FITS file list or single FITS file")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Fully describe operations")
(options, args) = parser.parse_args()


if options.fitsfilelist:
    # Input files
    if os.path.isfile(options.fitsfilelist):
        # FITS file
        if IsFits(options.fitsfilelist):
            if options.verbose:
                print "Input FITS file is: %s" % options.fitsfilelist
            FITSfileflag = True
        # FITS file list
        else:
            try:
                f = open(options.fitsfilelist)
            except IOError:
                parser.error("FITS file list not readable.")
            #
            if options.verbose:
                print "Input FITS file list is: %s" % options.fitsfilelist
            FITSfileflag = False
        #                        
        flist = []
        nentr = 0
        while True:
            if FITSfileflag:
                flist.append(options.fitsfilelist)
                nentr = 1
                break
            else:
                try:
                    dt = f.readline()
                except IOError:
                    parser.error("FITS file list not readable.")
                if dt != '':
                    flist.append(dt.split()[0])
                    nentr = nentr + 1
                    if not IsFits(flist[nentr-1]):
                        parser.error("Input FITS file %s not found" % flist[nentr-1])
                    if options.verbose:
                        print "FITS file selected: %s" % flist[nentr-1]    
                else:
                    break
        if not FITSfileflag:
            f.close()
        #
        # Begin analysis
        for fr in flist:
            ffits = FitsImage(fr)
            res = ffits.GetStats()
            if options.verbose:
                print "Fits file %(ffile)s: mean = %(mean).1f, std = %(std).1f, median = %(median).1f, maximum = %(max).1f" % {'ffile':ffits.Name, 
                    'mean':res[0], 'std':res[1], 'median':res[2], 'max':res[3]}
            else:
                print "%(ffile)s %(mean).1f %(std).1f %(median).1f %(max).1f" % {'ffile':ffits.Name, 'mean':res[0], 'std':res[1], 'median':res[2], 
                    'max':res[3]}
    else:
        parser.error("Input file or file list does not exist.")
else:
    parser.print_help()
