""" Code to classify SRP FITS file list

Context : SRP
Module  : SRPSClassify.py
Version : 1.1.0
Status  : approved
Author  : Stefano Covino
Date    : 04/06/2011
E-mail  : stefano.covino@brera.inaf.it
URL:    : http://www.merate.mi.astro.it/utenti/covino
Purpose : Manage the classification of a SRP FITS file list

Usage   : SRPClassify [-h] [-v] -i arg1 [-k arg2] [-o arg3]
            -i is a file with a list of FITS file to analyse
            -k is a file with the keyword to read
            -o is the output file.
            The script extracts from a set of FITS files information coded in their headers.

History : (22/05/2003) First version.
        : (30/05/2003) Minor correction to help file.
        : (03/02/2005) Optparse.
        : (07/01/2010) Minor bug.
        : (04/06/2011) Minor re-formatting and remove all eclipse references.
"""



import os.path, string
try:
    from optparse import OptionParser
except:
    from optik import OptionParser
from SRP.SRPFits.GetHeader import GetHeader
import SRP.SRPFiles as SRPFiles
import SRP.SRPConstants as SRPConstants


parser = OptionParser(usage="usage: %prog [-h] [-v] -i arg1 [-k arg2] [-o arg2]", version="%prog 1.1.0")
parser.add_option("-i", "--inputfilelist", action="store", nargs=1, type="string", dest="fitsfilelist", help="Input FITS file list")
parser.add_option("-k", "--keylist", action="store", nargs=1, type="string", dest="keyfilelist", help="FITS keywords file")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Fully describe operations")
parser.add_option("-o", "--output", action="store", nargs=1, type="string", dest="outfilelist", help="Output classification file")
(options, args) = parser.parse_args()


sname = SRPFiles.getSRPSessionName()
if options.verbose:
    print "Session name %s retrieved." % sname


if options.fitsfilelist:
    if os.path.isfile(options.fitsfilelist):
        flist = SRPFiles.getSRPFITSList(options.fitsfilelist)
        for i in range(len(flist)):
            if not os.path.isfile(flist[i]):
                parser.error("FITS file %s not found." % flist[i])
        if options.verbose:
            print "FITS file list is: %s." % options.fitsfilelist
            print "%s %d FITS file to be analyzed." % (SRPConstants.SRPTab, i)
    else:
        parser.error("FITS file list %s not found." % options.fitsfilelist)


if options.keyfilelist:
    keyfile = options.keyfilelist
else:
    keyfile = sname+SRPConstants.SRPKeyFile
if os.path.isfile(keyfile):
    if options.verbose:
        print "Keyword file list is: %s." % keyfile
else:
    parser.error("Keyword file list %s not found." % keyfile)
klist = SRPFiles.getSRPKeyList(keyfile)
if klist == []:
    parser.error("No keywords found in %s." % keyfile)

if options.outfilelist:
    outf = options.outfilelist
else:
    outf = sname+SRPConstants.SRPClassFile


if options.fitsfilelist:
    f = SRPFiles.SRPFile(SRPConstants.SRPLocalDir,outf,SRPFiles.WriteMode)
    f.SRPOpenFile()
    for i in range(len(flist)):
        if options.verbose:
            print "FITS file classified: %s." % flist[i]
        l = []
        h = GetHeader(flist[i])[0]
        if h == None:
            print "File %s with unreadable header" % flist[i]
            sys.exit(SRPConstants.SRPExitFailure)
        for ii in range(len(klist)):
            try:
                valstr = h[klist[ii]]
                l.append(valstr)
            except KeyError:
                l.append(SRPConstants.SRPNoKeyValue)
        del h
        sstr = "%s" % flist[i]+SRPConstants.SRPTab
        for ii in range(len(l)):
            sstr = sstr + "%s" % l[ii]+SRPConstants.SRPTab
        f.SRPWriteFile(sstr+os.linesep)
    f.SRPCloseFile()
else:
    parser.print_help()
