def pimagr (aipsname,aipsclass,docalib,source='',imsize=256,cellsize=0.1,\ nchav=-1,disk=1,gainuse=0,robust=0,niter=100,outname='',\ antennas = [], stokes='I'): imagr = AIPSTask('imagr') imagr.inname = aipsname imagr.inclass = aipsclass imagr.docalib = docalib imagr.indisk = disk imagr.stokes = stokes imagr.imsize[1:] = [imsize, imsize] imagr.cellsize[1:] = [cellsize, cellsize] if len(antennas): imagr.antennas[1:] = antennas # imagr.baseline[1:] = antennas if source == '': try: su = AIPSUVData(aipsname, aipsclass, disk, 1).table('SU', 1) imagr.source[1] = su[0]['source'] except: print 'Unable to extract source from source table' if nchav == -1: try: h = AIPSUVData(aipsname, aipsclass, disk, 1).header imagr.nchav = h['naxis'][h['ctype'].index('FREQ')] except: imagr.nchav = 0 imagr.gainuse = gainuse imagr.robust = robust imagr.niter = niter imagr.outname = outname # imagr.inp() imagr.go()
def peel_source(uvdata, pols, source_no, RA_shift, Dec_shift): for i in range(len(pols)): pol_data = AIPSUVData(uvdata.name,pols[i],uvdata.indisk,uvdata.seq) tasav = AIPSTask('TASAV') tasav.indata = uvdata tasav.outname = 'SC_SN' tasav.outdisk = indisk tasav.go() sntables = AIPSUVData('SC_SN','TASAV',indisk,1) sncor = AIPSTask('SNCOR') sncor.indata = sntables sncor.opcode = 'PNEG' for i in range(5): sncor.snver = i+1 sncor.go() split = AIPSTask('SPLIT') split.indata = uvdata split.sources[1] = sourceID split.docalib = 2 split.outdisk = indisk split.go() uvdata.zap()
def ptacop(name1, class1, name2, class2, ttype, innum, outnum, disk): tacop = AIPSTask('TACOP') tacop.indata = AIPSUVData(name1, class1, disk, 1) tacop.outdata = AIPSUVData(name2, class2, disk, 1) tacop.inext = ttype tacop.invers = innum tacop.outvers = outnum tacop.go()
def runuvfix(datafile, inname, indisk, thisdir): uvfix = AIPSTask('UVFIX') klass = datafile.klass uvfix.indata = datafile uvfix.outdata = AIPSUVData(datafile.name, 'UVFIX', indisk, thisdir) uvfix.go() datafile.zap() datafile = AIPSUVData(inname, 'UVFIX', indisk, thisdir) datafile.rename(inname, klass, thisdir)
def zapexisting(inna, incl, indisk=1): for i in AIPSCat()[indisk]: if i['name'] == inna and i['klass'] == incl: if i['type'] == 'MA': AIPSImage(inna, incl, indisk, i['seq']).clrstat() AIPSImage(inna, incl, indisk, i['seq']).zap() else: AIPSUVData(inna, incl, indisk, i['seq']).clrstat() AIPSUVData(inna, incl, indisk, i['seq']).zap()
def runuvsrt(datafile, inname, indisk, thisdir): uvsrt = AIPSTask('UVSRT') klass = datafile.klass uvsrt.indata = datafile uvsrt.outdata = AIPSUVData(datafile.name, 'UVSRT', indisk, datafile.seq) uvsrt.sort = 'TB' uvsrt.go() datafile.zap() datafile = AIPSUVData(inname, 'UVSRT', indisk, thisdir) datafile.rename(inname, klass, thisdir)
def psplit (aipsname,source,indisk,logdir='./'): uvdata = AIPSUVData (aipsname,'FITS',indisk,1) split = AIPSTask ('split') split.indata = uvdata split.outclass = 'SPLIT' split.docalib = 1 stdout = sys.stdout; sys.stdout = open(logdir+aipsname+'.log','a') split.go() sys.stdout.close(); sys.stdout = stdout uvdata = AIPSUVData(source,'SPLIT',indisk,1) uvdata.rename(aipsname,'SPLIT',1)
def __split_and_fittp(self, startTime, endTime, partNumber, scanNumber): # temporary UVData to store the split, destroyed in the end tempDiskNo = 1 tempSeqNo = 3 tempUVData = AIPSUVData('PSRALL', 'SPLIT ', tempDiskNo, tempSeqNo) self.__clear(tempUVData) splitTask = AIPSTask('SPLIT') splitTask.indata = self.allUVData splitTask.timerang = AIPSList([ 0, startTime.hour, startTime.minute, startTime.second, 0, endTime.hour, endTime.minute, endTime.second ]) splitTask.outdisk = tempDiskNo splitTask.outseq = tempSeqNo try: splitTask.go() except RuntimeError: print("!!!!Warning: SPLIT failed at " + startTime.isoformat() + " - " + endTime.isoformat() + " possibly no data") # if SPLIT is successful, start FITTP if tempUVData.exists(): fittpTask = AIPSTask('FITTP') fittpTask.dataout = ( '/jop87_2/scratch/huang/rp024c/grid_trial/pulses/' + self.prefix + '.PART' + str(partNumber) + '.UVFITS') fittpTask.indata = tempUVData fittpTask.go()
def self_calibration(uvdata, source_no, RA_shift, Dec_shift, solints, sc_type, pols, imsize, niter,refant): nchan = uvdata.header.naxis[2] sutable = uvdata.table('SU',1) sourceID = str(sutable[0].source) for i in range(len(solints)): print('Self calibration iteration %d' % i) for j in range(len(pols)): print('Iteration %d: Imaging source number %d' % (i,source_no)) imagr = AIPSTask('IMAGR') pol_data = AIPSUVData(uvdata.name,pols[j],indisk,uvdata.seq) print pol_data.klass print pols[j] imagr.indata = pol_data imagr.sources[1] = sourceID #imagr.cellsize = AIPSList([findmaxb(uvdata)[0],findmaxb(uvdata)[1]]) imagr.cellsize = AIPSList([0.2,0.2]) imagr.imsize = AIPSList(imsize) imagr.docalib = 2 imagr.gainuse = i+1 imagr.stokes = pols[j] imagr.rashift[1] = RA_shift imagr.decshift[1] = Dec_shift imagr.niter = niter imagr.nchav = nchan imagr.outname = 'S%s_SC%s' % (source_no,str(i+1)) imagr.outdisk = indisk imagr.go() image = AIPSImage('S%s_SC%s' % (source_no,str(i+1)),'%sCL001'%pols[j][0],indisk,1) print('Iteration %d: Making calibrations soln w/ solint=%.1f min and %s type' % (i,solints[i],sc_type[i])) calib = AIPSTask('CALIB') calib.indata = pol_data calib.calsour[1] = sourceID calib.docalib = 2 calib.in2data = image calib.refant = refant calib.solint = solints[i] calib.aparm[1:] = 3, 0, 0, 0, 0, 0, 3, 0 calib.ncomp[1] = -1000000 calib.soltype = 'L1' calib.solmode = sc_type[i] calib.snver = i+1 calib.go() print('Iteration %d: Applying SN table %d' % (i,i)) clcal = AIPSTask('CLCAL') clcal.indata = pol_data clcal.calsour[1] = sourceID clcal.sources[1] = sourceID clcal.opcode = 'CALP' clcal.interpol = 'AMBG' clcal.snver = i+1 clcal.invers = i+1 clcal.gainver = i+1 clcal.gainuse = i+2 clcal.cutoff = 60 clcal.dobtween = 0 clcal.refant = refant clcal.go()
def zaptabs(inna, incl, indisk, inseq, tabtype, top, bottom): uv = AIPSUVData(inna, incl, indisk, inseq) for i in range(top, bottom - 1, -1): try: uv.table(tabtype, i).zap() except: pass
def imgseq (inna,incl,indisk,inseq): uvdata = AIPSUVData (inna,incl,indisk,inseq) for i in AIPSCat()[1]: if i['name']==inna and i['klass']=='IMGSEQ': AIPSImage(inna,'IMGSEQ',indisk,i['seq']).zap() if i['name']==inna and i['klass']=='ICL001': AIPSImage(inna,'ICL001',indisk,i['seq']).zap() imagr=AIPSTask('imagr') imagr.indata = uvdata imagr.cellsize[1:] = [0.2,0.2] imagr.imsize[1:] = [1024,1024] imagr.uvwtfn = 'NA' imagr.uvrange[1:] = [5.0,100000.0] imagr.source[1] = 'BEAM_1' imagr.outname = inna imagr.niter = 200 imagr.nchav = 54 uvtap = [400.0,200.0,100.0,50.0] beam = [0.5,0.9,1.8,5.0] for i in range(4): imagr.uvtaper[1:] = [uvtap[i],uvtap[i]] imagr.bmaj,imagr.bmin = beam[i],beam[i] imagr.go() AIPSImage(inna,'IBM001',indisk,1).zap() AIPSImage(inna,'ICL001',indisk,1).rename(inna,'IMGSEQ',indisk,0)
def msort(uvdata): sys.stdout.write('Sorting data by runing MSORT.') msort = AIPSTask('msort') msort.outdata = uvdata msort.outclass = 'MSORT' msort.indata = uvdata HF.print_inp_to_log(msort,'MSORT') msort() return AIPSUVData(uvdata.name,'MSORT',uvdata.disk,uvdata.seq)
def pwtmod(aipsname, refant, antennas, supweight=50.0, indisk=1): uvdata = AIPSUVData(aipsname, 'FITS', indisk, 1) wtmod = AIPSTask('WTMOD') wtmod.indata = uvdata wtmod.outdata = uvdata wtmod.antwt[1:] = [1] * len(antennas) wtmod.antwt[antennas.index(refant) + 1] = supweight # wtmod.inp() wtmod.go()
def aipszap(aipsname, aipsclass, indisk=1): pca = AIPSCat() for j in pca[indisk]: if j['name'] == aipsname and j['klass'] == aipsclass: if j['type'] == 'UV': data = AIPSUVData(aipsname, aipsclass, indisk, j['seq']) else: data = AIPSImage(aipsname, aipsclass, indisk, j['seq']) data.zap()
def fullcal(fringe_inna, fcl, indisk, refant): zaptabs(fringe_inna, fcl, indisk, 1, 'SN', 10, 1) zaptabs(fringe_inna, fcl, indisk, 1, 'CL', 10, 2) zapim(fringe_inna, 'ICL001', indisk, 10, 1) zapim(fringe_inna, 'IBM001', indisk, 10, 1) # source = AIPSUVData(fringe_inna,fcl,indisk,1).sources[0] source = 'BEAM_1' pfring (fringe_inna,refant,[0],source,solint=5,\ weightit=1,zero=5,aipsclass=fcl,\ suppress_rate=1) # delay cal -> SN1 psnsmo(fringe_inna, fcl, indisk, 'VLBI') # edited delay -> SN2 pclcal(fringe_inna, indisk, 2, aipsclass=fcl) # SN2 -> CL2 pcalib (fringe_inna,fcl,indisk,0.5,refant,\ docalib=1) # phase cal w/CL2 -> SN3 pclcal(fringe_inna, indisk, 3, aipsclass=fcl) # SN3+CL2 ->CL3 pimagr(fringe_inna, fcl, 1) # image with CL3 -> ICL001.1 pcalib (fringe_inna,fcl,indisk,0.5,refant,\ solmode='A&P',docalib=1,in2name=fringe_inna,\ in2class='ICL001',in2seq=1,calsour=source) # CL3/ICL001.1 -> SN4 pclcal(fringe_inna, indisk, 4, aipsclass=fcl) # SN4 + CL3 -> CL4 pimagr(fringe_inna, fcl, 1) # image with CL4 -> ICL001.2 for i in [4, 3, 2, 1]: AIPSUVData(fringe_inna, fcl, indisk, 1).table('SN', i).zap() for i in [4, 3, 2]: AIPSUVData(fringe_inna, fcl, indisk, 1).table('CL', i).zap() pfring (fringe_inna,refant,[0],source,solint=5,\ weightit=1,zero=5,aipsclass=fcl,\ suppress_rate=1,in2name=fringe_inna,\ in2class='ICL001',in2seq=2,docalib=-1) # delay cal w/ICL001.2 -> SN1 psnsmo(fringe_inna, fcl, indisk, 'VLBI') # edited delay ->SN2 pclcal(fringe_inna, indisk, 2, aipsclass=fcl) # SN2 -> CL2 pcalib (fringe_inna,fcl,indisk,0.5,refant,\ docalib=1,in2name=fringe_inna,\ in2class='ICL001',in2seq=2) # phase cal w/CL2,ICL001.2 -> SN3 pclcal(fringe_inna, indisk, 3, aipsclass=fcl) # SN3+CL2 -> CL3 pimagr(fringe_inna, fcl, 1) # image w/CL3 -> ICL001.3 source = AIPSUVData(fringe_inna, fcl, indisk, 1).sources[0] pcalib (fringe_inna,fcl,indisk,0.5,refant,\ solmode='A&P',docalib=1,\ in2name=fringe_inna, in2class='ICL001', in2seq=3,calsour=source) # CL3/ICL001.3 -> SN4 pclcal(fringe_inna, indisk, 4, aipsclass=fcl) # SN4 + CL3 -> CL4 pimagr(fringe_inna, fcl, 1) # image with CL4 -> ICL001.4
def tasaver(uvdata, name): tasav = AIPSTask('TASAV') tasav.indata = uvdata tasav.outname = name[:8] tasav.go() os.system('rm -r eg078e_%s.TASAV' % name[:8]) fittp = AIPSTask('FITTP') fittp.indata = AIPSUVData(name[:8], 'TASAV', 1, 1) fittp.dataout = 'PWD:eg078e_%s.TASAV' % name[:8] fittp.go()
def pclcal(aipsname, indisk, inver, logfiledir='./'): uvdata = AIPSUVData(aipsname, 'FITS', indisk, 1) clcal = AIPSTask('clcal') clcal.indata = uvdata clcal.inver = inver clcal.snver = inver stdout = sys.stdout sys.stdout = open(logfiledir + aipsname + '.log', 'a') clcal.go() sys.stdout.close() sys.stdout = stdout
def swpol(uvdata,antennas): swpol = AIPSTask('swpol') swpol.indata = uvdata swpol.antennas[1:] = antennas swpol.outname = uvdata.name swpol.outclass = 'SWPOL' swpol.outseq = uvdata.seq swpol.outdisk = uvdata.disk HF.print_inp_to_log(swpol,'SWPOL') swpol() return AIPSUVData(uvdata.name,'SWPOL',uvdata.disk,uvdata.seq)
def runtasav(uvdata, fittpdir, fittpfile, indisk): # Backup the FG tables after flagging tasav = AIPSTask('TASAV') tasavfil = AIPSUVData(uvdata.name, 'TASAV', indisk, uvdata.seq) tasav.indata = uvdata tasav.outdata = tasavfil tasav.outseq = uvdata.seq print "Saving tables for ", uvdata.name, uvdata.klass, uvdata.seq tasav.go() runfittp(tasavfil, fittpdir, fittpfile) tasavfil.zap()
def runfitld(datain, indisk, thisdir): fitld = AIPSTask('FITLD') fitld.datain = datain # "datain" is correct here (use "indata" in most other places) fitld.outdisk = indisk fitld.digicor = -1 fitld.douvcomp = -1 fitld.clint = 8 / 60 fitld.bif = 1 fitld.eif = 0 fitld.outdata = AIPSUVData('TMP', 'UVDATA', indisk, thisdir) fitld.go()
def get_uv(self, e): """Get a AIPSUVData object form the AIPS entry. Args: e: A catalog entry, like what's returned from get_entry() Returns: AIPS UVData object. """ return AIPSUVData(e.name, e.klass, self.DISK_ID, e.seq)
def pclcal (aipsname,indisk,inver,aipsclass='FITS',logdir='./',\ snver=-1,gainver=0,gainuse=0): uvdata = AIPSUVData (aipsname,aipsclass,indisk,1) clcal = AIPSTask ('clcal') clcal.indata = uvdata clcal.inver = inver clcal.snver = inver if snver==-1 else snver clcal.gainver = gainver clcal.gainuse = gainuse stdout = sys.stdout; sys.stdout = open(logdir+aipsname+'.log','a') clcal.go() sys.stdout.close(); sys.stdout = stdout
def pfring (aipsname,refant,antennas,source,indisk=1,delaywin=600,ratewin=20,\ solint=1,snr=2,logdir='./',weightit=3,zero=0,aipsclass='FITS',\ aipsseq=1,suppress_rate=0,in2name='',in2class='',in2seq=1,\ docalib=-1): uvdata = AIPSUVData (aipsname,aipsclass,indisk,aipsseq) fring = AIPSTask ('FRING') fring.refant = refant fring.indata = uvdata fring.calsour[1:] = [source] fring.antennas[1:] = antennas if in2name!='' and in2class=='': uv2data = AIPSUVData (in2name, in2class, indisk, in2seq) fring.in2data = uv2data fring.solint = solint fring.aparm[1:] = [0,0,0,0,0,2,snr,0,0] fring.dparm[1:] = [0,delaywin,ratewin,0,0,0,0,zero,suppress_rate] fring.weightit = weightit fring.docalib = docalib stdout = sys.stdout; sys.stdout = open(logdir+aipsname+'.log','a') # fring.inp() fring.go() sys.stdout.close(); sys.stdout = stdout
def uvcop(uvdata,timer=[0,0,0,0],sources=[],antennas=[],uvcopprm=[1,0,0,1,0,0,0]): uvcop = AIPSTask('uvcop') uvcop.indata = uvdata uvcop.outname = uvdata.name uvcop.outclass = 'UVCOP' uvcop.outseq = uvdata.seq uvcop.outdisk = uvdata.disk uvcop.timer[1:] = timer uvcop.antennas[1:] = antennas uvcop.sources[1:] = sources uvcop.uvcopprm[1:] = uvcopprm uvcop() return AIPSUVData(uvdata.name,'UVCOP',uvdata.disk,uvdata.seq)
def pload (filename,aipsname,indisk,outcl,logdir='./',doindxr=True): fitld = AIPSTask ('FITLD') fitld.datain = str(filename) fitld.outna = aipsname fitld.outcl = outcl fitld.dokeep = 1 fitld.outdisk = indisk stdout = sys.stdout; sys.stdout = open(logdir+aipsname+'.log','a') fitld.go () if doindxr: uvdata = AIPSUVData (aipsname,'FITS',1,1) indxr = AIPSTask ('INDXR') indxr.cparm[1:] = [0,0,0.1,0,0,0,0,0,0,0] indxr.indata = uvdata indxr.go() sys.stdout.close(); sys.stdout = stdout
def pfring (aipsname,refant,antennas,source,indisk,delaywin=600,ratewin=20,\ solint=1,snr=2,logfiledir='./'): uvdata = AIPSUVData(aipsname, 'FITS', indisk, 1) fring = AIPSTask('FRING') fring.refant = refant fring.indata = uvdata fring.calsour[1:] = [source] fring.antennas[1:] = antennas fring.solint = solint fring.aparm[1:] = [0, 0, 0, 0, 0, 2, snr, 0, 0] fring.dparm[1:] = [0, delaywin, ratewin, 0, 0, 0, 0, 0, 0] fring.weightit = 1 stdout = sys.stdout sys.stdout = open(logfiledir + aipsname + '.log', 'a') fring.go() sys.stdout.close() sys.stdout = stdout
def find_difmap_chan(inna, incl, indisk=1, inseq=1): INCR = 1 if incl == '': output = inna.split('/')[-1] if '/' in inna else inna try: AIPSUVData('DIFMAP', 'UVDATA', indisk, inseq).zap() print 'Removed DIFMAP.UVDATA.%d disk %d' % (inseq, indisk) except: pass fitld = AIPSTask('fitld') fitld.datain = inna if '/' in inna else './' + inna fitld.outname = 'DIFMAP' fitld.outclass = 'UVDATA' fitld.outdisk = indisk fitld.outseq = inseq fitld.go() inna, incl = 'DIFMAP', 'UVDATA' else: output = '%s_%s' % (inna, incl) data = WizAIPSUVData(inna, incl, indisk, inseq) for i in data: v = i.visibility na = np.asarray(np.ravel(v[:, :, 0, 0]), dtype='bool') try: a = na | a except: a = np.copy(na) bstart, bend = [], [] for i in range(len(a)): if (i == 0 and a[i]) or (i != 0 and a[i] and not a[i - 1]): bstart.append(i + 1) if (i != 0 and not a[i] and a[i - 1]): bend.append(i) if (a[i] and i == len(a) - 1): bend.append(len(a)) fo = open('dchan_%s' % (output), 'w') fo.write('select I,') for i in range(len(bstart)): fo.write('%d,%d' % (bstart[i], bend[i])) if i != len(bstart) - 1: fo.write(',') fo.write('\n') fo.close()
def fittp(imdata,outfile=''): uvdata=AIPSUVData(*imdata) if outfile=='': outfile=uvdata.header['object'] while os.path.isfile(aips_out+outfile): outname=outfile.split('.')[0] filetype=outfile.split('.')[-1] outname=outname.split('_') try: outname[-1]= str(int(outname[-1])+1) except ValueError: outname.append('2') outfile='_'.join(outname)+'.'+filetype fittp = AIPSTask('fittp') fittp.indata = uvdata fittp.dataout = aips_out+outfile HF.print_inp_to_log(fittp,'FITTP') fittp()
def getuvdata(cno, disk=1): ''' get AIPSUVData object at a specified AIPS Catalogue number and AIPS Disk. Args: cno (int): AIPS Catalogue Number disk (int, default=1): Number of AIPS Disk Returns: AIPSUVData object ''' cat = pcat(output=True, doprint=False, disk=disk) isdata = False for catdata in cat: if catdata["cno"] == cno: isdata = True break if not isdata: raise ValueError("No data at cno=%d and disk=%d" % (cno, disk)) return AIPSUVData(catdata["name"], catdata["klass"], disk, catdata["seq"])
def pfring (aipsname,refant,antennas,source,indisk=1,delaywin=600,ratewin=20,\ solint=1,snr=2,dparm4=0,logdir='./',weightit=1,zero=0,aipsclass='FITS',\ aipsseq=1,suppress_rate=0): uvdata = AIPSUVData(aipsname, aipsclass, indisk, aipsseq) fring = AIPSTask('FRING') fring.refant = refant fring.indata = uvdata fring.calsour[1:] = [source] fring.antennas[1:] = antennas fring.solint = solint fring.aparm[1:] = [0, 0, 0, 0, 0, 2, snr, 0, 0] fring.dparm[1:] = [ 0, delaywin, ratewin, dparm4, 0, 0, 0, zero, suppress_rate ] fring.weightit = weightit stdout = sys.stdout sys.stdout = open(logdir + aipsname + '.log', 'a') # fring.inp() fring.go() sys.stdout.close() sys.stdout = stdout