from casac import casac
import numpy as np
def cl2skycat(componentlist='', skycat=''):
    """
    Converts a componentlist dictionary or componnent list file on disk
    to  a skycatalog to overlay on image in the viewer
    
    """
    qa=casac.quanta()
    cl=casac.componentlist()
    tb=casac.table()
    if(type(componentlist)==str):
        cl.open(componentlist)
    elif(type(componentlist)==dict):
        cl.purge()
        cl.fromrecord(componentlist)
    if(cl.length()==0):
            print "no components found"
            return

    des={}
    des['Type']={'valueType':'string'}
    des['Long']={'valueType':'double'}
    des['Lat']={'valueType':'double'}
    des['COMP_ID']={'valueType':'string'}
    des['RA']={'valueType':'string'}
    des['DEC']={'valueType':'string'}
    des['FluxValue']={'valueType':'double'}
    tb.create(tablename=skycat, tabledesc=des, nrow=cl.length())
    eltype=[]
    nam=[]
    RA=[]
    DEC=[]
    lati=np.zeros((cl.length(),))
    longi=np.zeros((cl.length(),))
    fluxval=np.zeros((cl.length(),))
    for k in range(cl.length()):
        longi[k]=qa.convert(cl.getrefdir(k)['m0'],'deg')['value']
        lati[k]=qa.convert(cl.getrefdir(k)['m1'],'deg')['value']
        fluxval[k]=cl.getfluxvalue(k)[0]
        RA.append(qa.time(cl.getrefdir(k)['m0'], prec=10))
        DEC.append(qa.angle(cl.getrefdir(k)['m1'], prec=10))
        eltype.append(cl.getrefdir(k)['refer'])
        nam.append(str(k))
    tb.putcol('Type', eltype)
    tb.putcol('RA', RA)
    tb.putcol('DEC', DEC)
    tb.putcol('COMP_ID', nam)
    tb.putcol('Long', longi)
    tb.putcol('Lat', lati)
    tb.putcol('FluxValue', fluxval)
    tb.putcolkeyword(columnname='Long', keyword='UNIT', value='deg')
    tb.putcolkeyword(columnname='Lat', keyword='UNIT', value='deg')                     
    tb.putinfo({'type':'Skycatalog'})
    tb.done()