from casac import casac import numpy as np import re; def field2skycat(msname='', skycat='',fieldpattern=''): """ Converts field table in ms to skycatalog allow overlay on image in the viewer """ enumTypes =['J2000','JMEAN','JTRUE','APP','B1950', 'B1950_VLA','BMEAN','BTRUE','GALACTIC','HADEC','AZEL','AZELSW', 'AZELGEO','AZELSWGEO','JNAT','ECLIPTIC','MECLIPTIC','TECLIPTIC','SUPERGAL', 'ITRF','TOPO','ICRS'] qa=casac.quanta() tb=casac.table() tb.open(msname+'/FIELD') dir=tb.getcol('PHASE_DIR') nam=tb.getcol('NAME') nfield=tb.nrows() n=0; for k in range(nfield): if (re.match(fieldpattern,nam[k]) != None): n=n+1 eltype=[] if(tb.getcolkeyword('PHASE_DIR', 'MEASINFO').has_key('VarRefCol')): typeid=tb.getcol(tb.getcolkeyword('PHASE_DIR', 'MEASINFO')['VarRefCol']) for k in range(nfield): if (re.match(fieldpattern,nam[k]) != None): eltype.append(enumTypes[typeid[k]]) else: eltype=[tb.getcolkeyword('PHASE_DIR', 'MEASINFO')['Ref']]*nfield unitra=tb.getcolkeyword('PHASE_DIR', 'QuantumUnits')[0] unitdec=tb.getcolkeyword('PHASE_DIR', 'QuantumUnits')[1] tb.done() des={} des['Type']={'valueType':'string'} des['Long']={'valueType':'double'} des['Lat']={'valueType':'double'} des['FIELD_NAME']={'valueType':'string'} des['FIELD_ID']={'valueType':'string'} des['RA']={'valueType':'string'} des['DEC']={'valueType':'string'} tb.create(tablename=skycat, tabledesc=des, nrow=n); tb.putcol('Type', eltype) lati=np.zeros((n,)) longi=np.zeros((n,)) RA=[] DEC=[] fid=[] fieldname=[] n=0; for k in range(nfield): if (re.match(fieldpattern,nam[k]) != None): longi[n]=qa.convert(qa.quantity(dir[0,0,k], unitra),'deg')['value'] lati[n]=qa.convert(qa.quantity(dir[1,0,k], unitdec), 'deg')['value'] RA.append(qa.time(qa.quantity(dir[0,0,k], unitra), prec=10)) DEC.append(qa.angle(qa.quantity(dir[1,0,0], unitdec), prec=10)) fid.append(str(k)) fieldname.append(nam[k]); n=n+1; tb.putcol('RA', RA) tb.putcol('DEC', DEC) # tb.putcol('FIELD_NAME', nam) tb.putcol('FIELD_NAME', fieldname); tb.putcol('FIELD_ID', fid) tb.putcol('Long', longi) tb.putcol('Lat', lati) tb.putcolkeyword(columnname='Long', keyword='UNIT', value='deg') tb.putcolkeyword(columnname='Lat', keyword='UNIT', value='deg') tb.putinfo({'type':'Skycatalog'}) tb.done()