###################################################################### # # flagxml: runs flagdata using Antenna.xml and Flag.xml SDM tables # # S.T. Myers 2010-03-04 # # Usage: # sdmfile = '62_1_sb166824_1_000.55257.37544340278' # msfile = '62_1_sb166824_1_000.55257.37544340278.ms' # flagant = flagxml(sdmfile,msfile) # # Notes: # Returns a dictionary with the 'antenna' and 'timerange' parameters # used. # # The tbuff parameter pads the timeranges by 1sec # ###################################################################### def flagxml(sdmfile,msfile): from xml.dom import minidom tbuff = 1.0 # construct look-up dictionary of name vs. id from Antenna.xml xmlants = minidom.parse(sdmfile+'/Antenna.xml') antdict = {} rowlist = xmlants.getElementsByTagName("row") for rownode in rowlist: rowname = rownode.getElementsByTagName("name") ant = str(rowname[0].childNodes[0].nodeValue) rowid = rownode.getElementsByTagName("antennaId") id = str(rowid[0].childNodes[0].nodeValue) antdict[id] = ant print ' Found ',rowlist.length,' antennas in Antenna.xml' # now read Flag.xml into dictionary also and make a list xmlflags = minidom.parse(sdmfile+'/Flag.xml') flagdict = {} flaglist = [] flagants = {} rowlist = xmlflags.getElementsByTagName("row") for rownode in rowlist: rowfid = rownode.getElementsByTagName("flagId") fid = str(rowfid[0].childNodes[0].nodeValue) flagdict[fid] = {} flaglist.append(fid) rowid = rownode.getElementsByTagName("antennaId") id = str(rowid[0].childNodes[0].nodeValue) # start and end times in mjd ns rowstart = rownode.getElementsByTagName("startTime") start = int(rowstart[0].childNodes[0].nodeValue) startmjd = (float(start)*1.0E-9 - tbuff)/86400.0 t = qa.quantity(startmjd,'d') starttime = qa.time(t,form="ymd") rowend = rownode.getElementsByTagName("endTime") end = int(rowend[0].childNodes[0].nodeValue) endmjd = (float(end)*1.0E-9 + tbuff)/86400.0 t = qa.quantity(endmjd,'d') endtime = qa.time(t,form="ymd") # Construct antenna name and timerange strings also antname = antdict[id] flagdict[fid]['antname'] = antname cmd = starttime+'~'+endtime flagdict[fid]['timerange'] = cmd # Also build a per antenna string if flagants.has_key(antname): flagants[antname] += ','+cmd else: flagants[antname] = cmd print ' Found ',rowlist.length,' flags in Flag.xml' flags = {} flags['antenna'] = [] flags['timerange'] = [] if rowlist.length > 0: # # Now flag the data # keylist = flagants.keys() keylist.sort() antenna = [] timerange = [] for ant in keylist: antenna.append(ant) timerange.append(flagants[ant]) print 'Flagging data using Flag.xml entries' flagdata(vis=msfile,mode='manualflag',antenna=antenna,timerange=timerange) # save the params in a dictionary flags['antenna'] = antenna flags['timerange'] = timerange else: print 'No flagging found in Flag.xml' # return the dictionary for later use if desired return flags # Done