VLACalibration.py
VLACalibration.py
—
Python Source,
6 KB (6577 bytes)
File contents
import os
visfile = os.getenv('MS_FILE')
workDir = os.getenv('WORK_DIR')
imageDir = os.getenv('IMAGE_DIR')
infoDir = os.getenv('INFO_DIR')
imageID = os.getenv('IMAGE_ID')
# to name the data reduction products with the same name of the ms file
basename = visfile.partition('.')[0]
# If the name of the ms file starts with the source name, this is a convenient way to extract
sourcename = basename.partition('_')[0]
# in this example, image products and data reduction information will be stored in subdirectories
infoName = infoDir + '/' + basename
basename = workDir + '/' + basename
splitfile = basename + '.split'
SourceImage = imageDir + '/' + sourcename + '_' + imageID
# Calibration parameters
REFANT = 'ea21'
SPW = '0:5~58'
GainTables = []
# Data processing begins
listobs(vis = visfile,
listfile = infoName + '.list')
plotants(vis = visfile,
figfile = infoName + '_antenna_layout.png')
clearstat()
flagdata(vis = visfile,
flagbackup = True,
mode = 'manual',
scan = '1')
flagdata(vis = visfile,
flagbackup = True,
mode = 'manual',
antenna = 'ea13,ea15')
flagdata(vis = visfile,
mode = 'quack',
quackinterval = 10.0,
quackmode = 'beg')
clearstat()
plotms(vis = visfile,
selectdata = True,
correlation = 'RR,LL',
averagedata = True,
avgchannel = '64',
coloraxis = 'field',
showgui = False,
plotfile = infoName + '_plotms_allscans.png')
plotms(vis = visfile,
field = '',
correlation = 'RR,LL',
timerange = '',
antenna = 'ea01',
spw = '0:31',
xaxis = 'time',
yaxis = 'antenna2',
plotrange = [-1,-1,0,26],
coloraxis = 'field',
showgui = False,
plotfile = infoName + '_plotms_datastream.png')
caltable = basename + '.antpos'
gencal(vis = visfile,
caltable = caltable,
caltype = 'antpos')
GainTables.append(caltable)
setjy(vis = visfile,
listmodels = True)
setjy(vis = visfile,
field = 'J1331+3030',
standard = 'Perley-Butler 2013',
model = '3C286_C.im',
usescratch = False,
scalebychan = True,
spw = '')
caltable = basename + '.G0'
gaincal(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
refant = REFANT,
spw = '0:27~36',
calmode = 'p',
solint = 'int',
minsnr = 5,
gaintable = GainTables)
GainTables.append(caltable)
caltable = basename + '.K0'
gaincal(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
refant = REFANT,
spw = SPW,
gaintype = 'K',
solint = 'inf',
combine = 'scan',
minsnr = 5,
gaintable = GainTables)
GainTables.append(caltable)
caltable = basename + '.B0'
bandpass(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
spw = '',
refant = REFANT,
combine = 'scan',
solint = 'inf',
bandtype = 'B',
gaintable = GainTables)
GainTables.append(caltable)
caltable = basename + '.G1'
G0 = basename + '.G0'
GainTables.remove(G0)
gaincal(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
spw = SPW,
solint = 'inf',
refant = REFANT,
gaintype = 'G',
calmode = 'ap',
solnorm = False,
gaintable = GainTables,
interp = ['linear','linear','nearest'])
gaincal(vis = visfile,
caltable = caltable,
field = 'J1822-0938',
spw = SPW,
solint = 'inf',
refant = REFANT,
gaintype = 'G',
calmode = 'ap',
gaintable = GainTables,
append = True)
gaincal(vis = visfile,
caltable = caltable,
field = 'J0319+4130',
spw = SPW,
solint = 'inf',
refant = REFANT,
gaintype = 'G',
calmode = 'ap',
gaintable = GainTables,
append = True)
GainTables.append(caltable)
alpha = log(7.53261/7.6677)/log(4663.0/4536.0) # Spectral index computed from setjy
i0=7.6677 # Stokes I value for spw 0 ch 0
c0=0.112 # Fractional polarization=11.2%
d0=33*pi/180 # polarization angle of 33 degrees converted to radians
setjy(vis = visfile,
field = 'J1331+3030',
standard = 'manual',
spw = '0',
fluxdensity = [i0,0,0,0],
spix = [alpha,0],
reffreq = '4536.0MHz',
polindex = [c0,0],
polangle = [d0,0],
scalebychan = True,
usescratch = False)
caltable = basename + '.Kcross'
gaincal(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
spw = SPW,
gaintype = 'KCROSS',
solint = 'inf',
combine = 'scan',
refant = REFANT,
gaintable = GainTables,
gainfield = ['','','','J1331+3030'],
parang = True)
GainTables.append(caltable)
caltable = basename + '.D1'
polcal(vis = visfile,
caltable = caltable,
field = 'J0319+4130',
spw = SPW,
refant = REFANT,
poltype = 'Df',
solint = 'inf',
combine = 'scan',
gaintable = GainTables,
gainfield = ['','','','J0319+4130',''])
caltable = basename + '.D2'
polcal(vis = visfile,
caltable = caltable,
field = 'J0319+4130',
spw = SPW,
refant = REFANT,
poltype = 'Df+QU',
solint = 'inf',
combine = 'scan',
gaintable = GainTables,
gainfield = ['','','','J1822-0938',''])
GainTables.append(caltable)
caltable = basename + '.X1'
polcal(vis = visfile,
caltable = caltable,
field = 'J1331+3030',
poltype = 'Xf',
solint = 'inf',
combine = 'scan',
gaintable = GainTables,
gainfield = ['','','','J1331+3030','',''])
GainTables.append(caltable)
caltable = basename + '.G1'
fluxtable = basename + '.fluxscale1'
fluxscale(vis = visfile,
caltable = caltable,
fluxtable = fluxtable,
reference = ['J1331+3030'],
transfer = ['J1822-0938,J0319+4130'],
incremental = False)
GainTables.remove(caltable)
GainTables.insert(1, fluxtable)
fields = ['J1331+3030', 'J0319+4130', 'J1822-0938']
for item in fields:
applycal(vis = visfile,
field = item,
gaintable = GainTables,
gainfield = ['',item,'','','','',''],
interp = ['','nearest','','','','',''],
calwt = [False],
parang = True)
applycal(vis = visfile,
field = '2~8',
gaintable = GainTables,
gainfield = ['','J1822-0938','','','','',''],
interp = ['','linear','','','','',''],
calwt = [False],
parang = True)
split(vis = visfile,
outputvis = splitfile,
datacolumn = 'corrected',
field = '2~8')
statwt(vis = splitfile)
clean(vis = splitfile,
imagename = SourceImage,
field = '',
spw = '',
mode = 'mfs',
niter = 20000,
gain = 0.1,
threshold = '3.0mJy',
psfmode = 'clark',
imagermode = 'mosaic',
ftmachine = 'mosaic',
multiscale = [0],
interactive = False,
mask = 'circle [ [240pix, 240pix], 120pix]',
imsize = [480,480],
cell = ['2.5arcsec','2.5arcsec'],
stokes = 'I',
weighting = 'briggs',
robust = 0.5,
pbcor = False,
usescratch = True)

