def updateObsTable(image, msName, minbl, maxbl, aswvl, usedCounts, visCounts, minTime, maxTime, totTime): obstab = pt.table(image.name() + "/LOFAR_OBSERVATION", readonly=False, ack=False) oritab = pt.table(image.name() + "/LOFAR_ORIGIN", ack=False) minfreq = pt.taql("calc min([select FREQUENCY_MIN from '" + oritab.name() + "'])") maxfreq = pt.taql("calc max([select FREQUENCY_MAX from '" + oritab.name() + "'])") obstab.putcell("OBSERVATION_FREQUENCY_MIN", 0, minfreq[0]) obstab.putcell("OBSERVATION_FREQUENCY_MAX", 0, maxfreq[0]) obstab.putcell("OBSERVATION_FREQUENCY_CENTER", 0, (minfreq[0] + maxfreq[0]) / 2) obstab.putcell("OBSERVATION_INTEGRATION_TIME", 0, totTime) obstab.putcell("OBSERVATION_START", 0, minTime) obstab.putcell("OBSERVATION_END", 0, maxTime) obstab.putcell("TIME_RANGE", 0, (minTime, maxTime)) obstab.putcell("FILENAME", 0, os.path.basename(image.name())) obstab.putcell("FILETYPE", 0, "sky") pt.taql("update '" + obstab.name() + "' set FILEDATE = mjd(date()), " + "RELEASE_DATE = mjd(date()+365)") # Determine minimum and maximum baseline length # If needed, convert from wavelengths to meters. mstab = pt.table(msName, ack=False) if aswvl: minbl *= 2.99792e8 / maxfreq[0] maxbl *= 2.99792e8 / minfreq[0] if minbl <= 0: mbl = pt.taql("calc sqrt(min([select sumsqr(UVW[:2]) from " + msName + "]))") minbl = max(mbl[0], abs(minbl)) if maxbl <= 0: mbl = pt.taql("calc sqrt(max([select sumsqr(UVW[:2]) from " + msName + "]))") if maxbl == 0: maxbl = mbl[0] else: maxbl = min(mbl[0], abs(maxbl)) mstab.close() # Add and fill a few extra columns. col1 = pt.makescacoldesc("MIN_BASELINE_LENGTH", 0, valuetype='double') col2 = pt.makescacoldesc("MAX_BASELINE_LENGTH", 0, valuetype='double') col3 = pt.makearrcoldesc("NVIS_USED", 0, valuetype='int') col4 = pt.makearrcoldesc("NVIS_TOTAL", 0, valuetype='int') obstab.addcols(pt.maketabdesc([col1, col2, col3, col4])) obstab.putcolkeyword("MIN_BASELINE_LENGTH", "QuantumUnits", ["m"]) obstab.putcolkeyword("MAX_BASELINE_LENGTH", "QuantumUnits", ["m"]) obstab.putcell("MIN_BASELINE_LENGTH", 0, minbl) obstab.putcell("MAX_BASELINE_LENGTH", 0, maxbl) # Get sum for all MSs. tusedCounts = usedCounts.sum(axis=0) tvisCounts = visCounts.sum(axis=0) obstab.putcell("NVIS_USED", 0, tusedCounts) obstab.putcell("NVIS_TOTAL", 0, tvisCounts) obstab.close() oritab.close() print "Updated subtable LOFAR_OBSERVATION"
def updateObsTable (image, msName, minbl, maxbl, aswvl, usedCounts, visCounts, minTime, maxTime, totTime): obstab = pt.table (image.name() + "/LOFAR_OBSERVATION", readonly=False, ack=False) oritab = pt.table (image.name() + "/LOFAR_ORIGIN", ack=False) minfreq = pt.taql ("calc min([select FREQUENCY_MIN from '" + oritab.name() + "'])") maxfreq = pt.taql ("calc max([select FREQUENCY_MAX from '" + oritab.name() + "'])") obstab.putcell ("OBSERVATION_FREQUENCY_MIN", 0, minfreq[0]); obstab.putcell ("OBSERVATION_FREQUENCY_MAX", 0, maxfreq[0]); obstab.putcell ("OBSERVATION_FREQUENCY_CENTER", 0, (minfreq[0]+maxfreq[0])/2); obstab.putcell ("OBSERVATION_INTEGRATION_TIME", 0, totTime); obstab.putcell ("OBSERVATION_START", 0, minTime); obstab.putcell ("OBSERVATION_END", 0, maxTime); obstab.putcell ("TIME_RANGE", 0, (minTime, maxTime)); obstab.putcell ("FILENAME", 0, os.path.basename(image.name())) obstab.putcell ("FILETYPE", 0, "sky") pt.taql ("update '" + obstab.name() + "' set FILEDATE = mjd(date()), " + "RELEASE_DATE = mjd(date()+365)") # Determine minimum and maximum baseline length # If needed, convert from wavelengths to meters. mstab = pt.table(msName, ack=False) if aswvl: minbl *= 2.99792e8 / maxfreq[0] maxbl *= 2.99792e8 / minfreq[0] if minbl <= 0: mbl = pt.taql ("calc sqrt(min([select sumsqr(UVW[:2]) from " + msName + "]))") minbl = max(mbl[0], abs(minbl)) if maxbl <= 0: mbl = pt.taql ("calc sqrt(max([select sumsqr(UVW[:2]) from " + msName + "]))") if maxbl == 0: maxbl = mbl[0] else: maxbl = min(mbl[0], abs(maxbl)) mstab.close() # Add and fill a few extra columns. col1 = pt.makescacoldesc ("MIN_BASELINE_LENGTH", 0, valuetype='double') col2 = pt.makescacoldesc ("MAX_BASELINE_LENGTH", 0, valuetype='double') col3 = pt.makearrcoldesc ("NVIS_USED", 0, valuetype='int') col4 = pt.makearrcoldesc ("NVIS_TOTAL", 0, valuetype='int') obstab.addcols (pt.maketabdesc ([col1, col2, col3, col4])) obstab.putcolkeyword ("MIN_BASELINE_LENGTH", "QuantumUnits", ["m"]) obstab.putcolkeyword ("MAX_BASELINE_LENGTH", "QuantumUnits", ["m"]) obstab.putcell ("MIN_BASELINE_LENGTH", 0, minbl) obstab.putcell ("MAX_BASELINE_LENGTH", 0, maxbl) # Get sum for all MSs. tusedCounts = usedCounts.sum (axis=0) tvisCounts = visCounts.sum (axis=0) obstab.putcell ("NVIS_USED", 0, tusedCounts) obstab.putcell ("NVIS_TOTAL", 0, tvisCounts) obstab.close() oritab.close() print "Updated subtable LOFAR_OBSERVATION"
def addcol(msname='$MS',colname=None,shape=None, data_desc_type='array',valuetype=None,init_with=0,**kw): """ add column to MS msanme : MS to add colmn to colname : column name shape : shape valuetype : data type data_desc_type : 'scalar' for scalar elements and array for 'array' elements init_with : value to initialise the column with """ msname, colname = interpolate_locals('msname colname') tab = pyrap.tables.table(msname,readonly=False) try: tab.getcol(colname) info('Column already exists') except RuntimeError: info('Attempting to add %s column to %s'%(colname,msname)) from pyrap.tables import maketabdesc valuetype = valuetype or 'complex' if shape is None: dshape = list(tab.getcol('DATA').shape) shape = dshape[1:] if data_desc_type=='array': from pyrap.tables import makearrcoldesc coldmi = tab.getdminfo('DATA') # God forbid this (or the TIME) column doesn't exist coldmi['NAME'] = colname.lower() tab.addcols(maketabdesc(makearrcoldesc(colname,init_with,shape=shape,valuetype=valuetype)),coldmi) elif data_desc_type=='scalar': from pyrap.tables import makescacoldesc coldmi = tab.getdminfo('TIME') coldmi['NAME'] = colname.lower() tab.addcols(maketabdesc(makescacoldesc(colname,init_with,valuetype=valuetype)),coldmi) info('Column added successfuly.') if init_with: nrows = dshape[0] rowchunk = nrows//10 if nrows > 1000 else nrows for row0 in range(0,nrows,rowchunk): nr = min(rowchunk,nrows-row0) dshape[0] = nr tab.putcol(colname,numpy.ones(dshape,dtype=valuetype)*init_with,row0,nr) tab.close()
def export_ms(hdf_file, ms_file, verbosity=1): """ Convert an HDF file to MS :param hdf_file: Input HDF-MS filename :param ms_file: Output MS filename TODO: Get this working properly. """ pp = PrintLog(verbosity=verbosity) hdul = IdiHdulist(verbosity=1) hdul.read_hdf("testms.h5") main_hdu = hdul["MAIN"] vdict = { 'float32': 'float', 'float64': 'double', 'complex64': 'complex', 'complex128': 'dcomplex', 'int32': 'int', 'uint32': 'uint', 'str': 'string', 'bool': 'bool' } col_descs = [] for col, cdata in main_hdu.data.items(): col = str(col) pp.pp("%16s %s %s" % (col, cdata.shape, cdata.dtype)) if cdata.ndim == 1: vt = vdict[str(cdata.dtype)] cdesc = pt.makescacoldesc(col, cdata[0], valuetype=vt) else: cdesc = pt.makearrcoldesc(col, cdata[0], valuetype=vt) col_descs.append(cdesc) tdesc = pt.maketabdesc(col_descs) t = pt.table("table.ms", tdesc, nrow=main_hdu.n_rows)
def export_ms(hdf_file, ms_file, verbosity=1): """ Convert an HDF file to MS :param hdf_file: Input HDF-MS filename :param ms_file: Output MS filename TODO: Get this working properly. """ pp = PrintLog(verbosity=verbosity) hdul = IdiHdulist(verbosity=1) hdul.read_hdf("testms.h5") main_hdu = hdul["MAIN"] vdict = {'float32' : 'float', 'float64' : 'double', 'complex64' : 'complex', 'complex128' : 'dcomplex', 'int32' : 'int', 'uint32' : 'uint', 'str' : 'string', 'bool' : 'bool' } col_descs = [] for col, cdata in main_hdu.data.items(): col = str(col) pp.pp("%16s %s %s" % (col, cdata.shape, cdata.dtype)) if cdata.ndim == 1: vt = vdict[str(cdata.dtype)] cdesc = pt.makescacoldesc(col, cdata[0], valuetype=vt) else: cdesc = pt.makearrcoldesc(col, cdata[0], valuetype=vt) col_descs.append(cdesc) tdesc = pt.maketabdesc(col_descs) t = pt.table("table.ms", tdesc, nrow=main_hdu.n_rows)