|
|||
NRAO Home > CASA > CASA Cookbook and User Reference Manual |
|
F.1 NGC 5921 — VLA red-shifted HI emission
This script demonstates basic spectral calibration and imaging, but does not include any self-calibration steps.
The latest version of this script can be found at:
# #
# Use Case Script for NGC 5921 #
# #
# Converted by STM 2007-05-26 #
# Updated STM 2007-06-15 (Alpha Patch 1) #
# Updated STM 2007-09-05 (Alpha Patch 2+) #
# Updated STM 2007-09-18 (Alpha Patch 2+) #
# Updated STM 2007-09-18 (Pre-Beta) add immoments #
# Updated STM 2007-10-04 (Beta) update #
# Updated STM 2007-10-10 (Beta) add export #
# Updated STM 2007-11-08 (Beta Patch 0.5) add RRusk stuff #
# Updated STM 2008-03-25 (Beta Patch 1.0) #
# Updated STM 2008-05-23 (Beta Patch 2.0) new tasking/clean/cal #
# Updated STM 2008-06-11 (Beta Patch 2.0) #
# Updated STM 2008-06-13 (Beta Patch 2.0) demo version #
# Updated STM 2008-06-14 (Beta Patch 2.0) post-school update #
# Updated STM 2008-07-06 (Beta Patch 2.0) regression version #
# Updated STM 2009-05-26 (Beta Patch 4.0) McMaster demo #
# Updated STM 2009-12-02 (Release 0) #
# Revised JO 2010-04-13 (Release 3.0.1) edit viewer call #
# Checked JO 2010-10-07 (Release 3.1.0) #
# Updated JO 2012-05-10 (Release 3.4.0) #
# #
# Features Tested: #
# The script illustrates end-to-end processing with CASA #
# as depicted in the following flow-chart. #
# #
# Filenames will have the <prefix> = ’ngc5921.demo’ #
# #
# Input Data Process Output Data #
# #
# NGC5921.fits --> importuvfits --> <prefix>.ms + #
# (1.4GHz, | <prefix>.ms.flagversions #
# 63 sp chan, v #
# D-array) listobs --> casapy.log #
# | #
# v #
# flagautocorr #
# | #
# v #
# setjy #
# | #
# v #
# bandpass --> <prefix>.bcal #
# | #
# v #
# gaincal --> <prefix>.gcal #
# | #
# v #
# fluxscale --> <prefix>.fluxscale #
# | #
# v #
# applycal --> <prefix>.ms #
# | #
# v #
# split --> <prefix>.cal.split.ms #
# | #
# v #
# split --> <prefix>.src.split.ms #
# | #
# v #
# exportuvfits --> <prefix>.split.uvfits #
# | #
# v #
# uvcontsub --> <prefix>.ms.cont + #
# | <prefix>.ms.contsub #
# v #
# clean --> <prefix>.clean.image + #
# | <prefix>.clean.model + #
# | <prefix>.clean.residual #
# v #
# exportfits --> <prefix>.clean.fits #
# | #
# v #
# imhead --> casapy.log #
# | #
# v #
# imstat --> xstat (parameter) #
# | #
# v #
# immoments --> <prefix>.moments.integrated + #
# | <prefix>.moments.weighted_coord #
# v #
##########################################################################
print ’Demo Script for NGC5921 VLA HI observation’
print ’Version for Release 0 (3.4.0) May-2012’
print ’’
import time
import os
scriptmode = True
#
# The prefix to use for all output files
prefix=’ngc5921.demo’
# Set up some useful variables (these will also be set later on)
msfile = prefix + ’.ms’
btable = prefix + ’.bcal’
gtable = prefix + ’.gcal’
ftable = prefix + ’.fluxscale’
splitms = prefix + ’.src.split.ms’
imname = prefix + ’.cleanimg’
#
# Get to path to the CASA home and stip off the name
pathname=os.environ.get(’CASAPATH’).split()[0]
# This is where the NGC5921 UVFITS data will be
fitsdata=pathname+’/data/demo/NGC5921.fits’
#
# Or uncomment the following to use data in current directory
#fitsdata=’NGC5921.fits’
# Clean up old files
# Use rmtables on ms and cal tables to clear cache
# (not working on multiple runs for 2.4.0 release)
#rmtables(msfile)
#rmtables(btable)
#rmtables(gtable)
#rmtables(ftable)
#rmtables(ftable)
#rmtables(splitms+’*’)
#rmtables(imname+’.*’)
#rmtables(prefix+’.moments*’)
# Final clean up of auxiliary files
os.system(’rm -rf ’+prefix+’*’)
#
#=====================================================================
#
# Import the data from FITS to MS
#
print ’--Import--’
# Safest to start from task defaults
default(’importuvfits’)
# Set up the MS filename and save as new global variable
msfile = prefix + ’.ms’
# Use task importuvfits
fitsfile = fitsdata
vis = msfile
saveinputs(’importuvfits’,prefix+’.importuvfits.saved’)
importuvfits()
#
# Note that there will be a ngc5921.demo.ms.flagversions
# there containing the initial flags as backup for the main ms
# flags.
#
#=====================================================================
#
# List a summary of the MS
#
print ’--Listobs--’
# Don’t default this one and make use of the previous setting of
# vis. Remember, the variables are GLOBAL!
# You may wish to see more detailed information, like the scans.
# In this case use the verbose = True option
verbose = True
listobs()
# You should get in your logger window and in the casapy.log file
# something like:
#
# MeasurementSet Name: /home/sandrock2/smyers/Testing2/Sep07/ngc5921.demo.ms
# MS Version 2
#
# Observer: TEST Project:
# Observation: VLA
#
# Data records: 22653 Total integration time = 5280 seconds
# Observed from 09:19:00 to 10:47:00
#
# ObservationID = 0 ArrayID = 0
# Date Timerange Scan FldId FieldName SpwIds
# 13-Apr-1995/09:19:00.0 - 09:24:30.0 1 0 1331+30500002_0 [0]
# 09:27:30.0 - 09:29:30.0 2 1 1445+09900002_0 [0]
# 09:33:00.0 - 09:48:00.0 3 2 N5921_2 [0]
# 09:50:30.0 - 09:51:00.0 4 1 1445+09900002_0 [0]
# 10:22:00.0 - 10:23:00.0 5 1 1445+09900002_0 [0]
# 10:26:00.0 - 10:43:00.0 6 2 N5921_2 [0]
# 10:45:30.0 - 10:47:00.0 7 1 1445+09900002_0 [0]
#
# Fields: 3
# ID Code Name Right Ascension Declination Epoch
# 0 C 1331+30500002_013:31:08.29 +30.30.32.96 J2000
# 1 A 1445+09900002_014:45:16.47 +09.58.36.07 J2000
# 2 N5921_2 15:22:00.00 +05.04.00.00 J2000
#
# Spectral Windows: (1 unique spectral windows and 1 unique polarization setups)
# SpwID #Chans Frame Ch1(MHz) Resoln(kHz) TotBW(kHz) Ref(MHz) Corrs
# 0 63 LSRK 1412.68608 24.4140625 1550.19688 1413.44902 RR LL
#
# Feeds: 28: printing first row only
# Antenna Spectral Window # Receptors Polarizations
# 1 -1 2 [ R, L]
#
# Antennas: 27:
# ID Name Station Diam. Long. Lat.
# 0 1 VLA:N7 25.0 m -107.37.07.2 +33.54.12.9
# 1 2 VLA:W1 25.0 m -107.37.05.9 +33.54.00.5
# 2 3 VLA:W2 25.0 m -107.37.07.4 +33.54.00.9
# 3 4 VLA:E1 25.0 m -107.37.05.7 +33.53.59.2
# 4 5 VLA:E3 25.0 m -107.37.02.8 +33.54.00.5
# 5 6 VLA:E9 25.0 m -107.36.45.1 +33.53.53.6
# 6 7 VLA:E6 25.0 m -107.36.55.6 +33.53.57.7
# 7 8 VLA:W8 25.0 m -107.37.21.6 +33.53.53.0
# 8 9 VLA:N5 25.0 m -107.37.06.7 +33.54.08.0
# 9 10 VLA:W3 25.0 m -107.37.08.9 +33.54.00.1
# 10 11 VLA:N4 25.0 m -107.37.06.5 +33.54.06.1
# 11 12 VLA:W5 25.0 m -107.37.13.0 +33.53.57.8
# 12 13 VLA:N3 25.0 m -107.37.06.3 +33.54.04.8
# 13 14 VLA:N1 25.0 m -107.37.06.0 +33.54.01.8
# 14 15 VLA:N2 25.0 m -107.37.06.2 +33.54.03.5
# 15 16 VLA:E7 25.0 m -107.36.52.4 +33.53.56.5
# 16 17 VLA:E8 25.0 m -107.36.48.9 +33.53.55.1
# 17 18 VLA:W4 25.0 m -107.37.10.8 +33.53.59.1
# 18 19 VLA:E5 25.0 m -107.36.58.4 +33.53.58.8
# 19 20 VLA:W9 25.0 m -107.37.25.1 +33.53.51.0
# 20 21 VLA:W6 25.0 m -107.37.15.6 +33.53.56.4
# 21 22 VLA:E4 25.0 m -107.37.00.8 +33.53.59.7
# 23 24 VLA:E2 25.0 m -107.37.04.4 +33.54.01.1
# 24 25 VLA:N6 25.0 m -107.37.06.9 +33.54.10.3
# 25 26 VLA:N9 25.0 m -107.37.07.8 +33.54.19.0
# 26 27 VLA:N8 25.0 m -107.37.07.5 +33.54.15.8
# 27 28 VLA:W7 25.0 m -107.37.18.4 +33.53.54.8
#
# Tables:
# MAIN 22653 rows
# ANTENNA 28 rows
# DATA_DESCRIPTION 1 row
# DOPPLER <absent>
# FEED 28 rows
# FIELD 3 rows
# FLAG_CMD <empty>
# FREQ_OFFSET <absent>
# HISTORY 273 rows
# OBSERVATION 1 row
# POINTING 168 rows
# POLARIZATION 1 row
# PROCESSOR <empty>
# SOURCE 3 rows
# SPECTRAL_WINDOW 1 row
# STATE <empty>
# SYSCAL <absent>
# WEATHER <absent>
#
#
#=====================================================================
#
# Get rid of the autocorrelations from the MS
#
print ’--Flagautocorr--’
# Don’t default this one either, there is only one parameter (vis)
flagautocorr()
#
#=====================================================================
#
# Set the fluxes of the primary calibrator(s)
#
print ’--Setjy--’
default(’setjy’)
vis = msfile
#
# 1331+305 = 3C286 is our primary calibrator
# Use the wildcard on the end of the source name
# since the field names in the MS have inherited the
# AIPS qualifiers
field = ’1331+305*’
# This is 1.4GHz D-config and 1331+305 is sufficiently unresolved
# that we dont need a model image. For higher frequencies
# (particularly in A and B config) you would want to use one.
modimage = ’’
# Setjy knows about this source so we dont need anything more
saveinputs(’setjy’,prefix+’.setjy.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
setjy()
#
# You should see something like this in the logger and casapy.log file:
#
# 1331+30500002_0 spwid= 0 [I=14.76, Q=0, U=0, V=0] Jy, (Perley-Taylor 99)
#
# So its using 14.76Jy as the flux of 1331+305 in the single Spectral Window
# in this MS.
#
#=====================================================================
#
# Bandpass calibration
#
print ’--Bandpass--’
default(’bandpass’)
# We can first do the bandpass on the single 5min scan on 1331+305
# At 1.4GHz phase stablility should be sufficient to do this without
# a first (rough) gain calibration. This will give us the relative
# antenna gain as a function of frequency.
vis = msfile
# set the name for the output bandpass caltable
btable = prefix + ’.bcal’
caltable = btable
# No gain tables yet
gaintable = ’’
gainfield = ’’
interp = ’’
# Use flux calibrator 1331+305 = 3C286 (FIELD_ID 0) as bandpass calibrator
field = ’0’
# all channels
spw = ’’
# No other selection
selectdata = False
# In this band we do not need a-priori corrections for
# antenna gain-elevation curve or atmospheric opacity
# (at 8GHz and above you would want these)
gaincurve = False
opacity = 0.0
# Choose bandpass solution type
# Pick standard time-binned B (rather than BPOLY)
bandtype = ’B’
# set solution interval arbitrarily long (get single bpass)
solint = ’inf’
combine = ’scan’
# reference antenna Name 15 (15=VLA:N2) (Id 14)
refant = ’15’
saveinputs(’bandpass’,prefix+’.bandpass.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
bandpass()
#
#=====================================================================
#
# Use plotcal to examine the bandpass solutions
#
print ’--Plotcal (bandpass)--’
default(’plotcal’)
caltable = btable
field = ’0’
# Set up 2x1 panels - upper panel amp vs. channel
subplot = 211
yaxis = ’amp’
# No output file yet (wait to plot next panel)
saveinputs(’plotcal’,prefix+’.plotcal.b.amp.saved’)
if scriptmode:
showgui = True
else:
showgui = False
plotcal()
#
# Set up 2x1 panels - lower panel phase vs. channel
subplot = 212
yaxis = ’phase’
saveinputs(’plotcal’,prefix+’.plotcal.b.phase.saved’)
#
# Note the rolloff in the start and end channels. Looks like
# channels 6-56 (out of 0-62) are the best
# Pause script if you are running in scriptmode
if scriptmode:
# If you want to do this interactively and iterate over antenna, set
# iteration = ’antenna’
showgui = True
plotcal()
user_check=raw_input(’Return to continue script\n’)
else:
# No GUI for this script
showgui = False
# Now send final plot to file in PNG format (via .png suffix)
figfile = caltable + ’.plotcal.png’
plotcal()
#=====================================================================
#
# Gain calibration
#
print ’--Gaincal--’
default(’gaincal’)
# Armed with the bandpass, we now solve for the
# time-dependent antenna gains
vis = msfile
# set the name for the output gain caltable
gtable = prefix + ’.gcal’
caltable = gtable
# Use our previously determined bandpass
# Note this will automatically be applied to all sources
# not just the one used to determine the bandpass
gaintable = btable
gainfield = ’’
# Use nearest (there is only one bandpass entry)
interp = ’nearest’
# Gain calibrators are 1331+305 and 1445+099 (FIELD_ID 0 and 1)
field = ’0,1’
# We have only a single spectral window (SPW 0)
# Choose 51 channels 6-56 out of the 63
# to avoid end effects.
# Channel selection is done inside spw
spw = ’0:6~56’
# No other selection
selectdata = False
# In this band we do not need a-priori corrections for
# antenna gain-elevation curve or atmospheric opacity
# (at 8GHz and above you would want these)
gaincurve = False
opacity = 0.0
# scan-based G solutions for both amplitude and phase
gaintype = ’G’
solint = ’inf’
combine = ’’
calmode = ’ap’
# minimum SNR allowed
minsnr = 1.0
# reference antenna 15 (15=VLA:N2)
refant = ’15’
saveinputs(’gaincal’,prefix+’.gaincal.saved’)
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
gaincal()
#
#=====================================================================
#
# Bootstrap flux scale
#
print ’--Fluxscale--’
default(’fluxscale’)
vis = msfile
# set the name for the output rescaled caltable
ftable = prefix + ’.fluxscale’
fluxtable = ftable
# point to our first gain cal table
caltable = gtable
# we will be using 1331+305 (the source we did setjy on) as
# our flux standard reference - note its extended name as in
# the FIELD table summary above (it has a VLA seq number appended)
reference = ’1331*’
# we want to transfer the flux to our other gain cal source 1445+099
transfer = ’1445*’
saveinputs(’fluxscale’,prefix+’.fluxscale.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
fluxscale()
# In the logger you should see something like:
# Flux density for 1445+09900002_0 in SpW=0 is:
# 2.48576 +/- 0.00123122 (SNR = 2018.94, nAnt= 27)
# If you run plotcal() on the tablein = ’ngc5921.demo.fluxscale’
# you will see now it has brought the amplitudes in line between
# the first scan on 1331+305 and the others on 1445+099
#
#=====================================================================
#
# Now use plotcal to examine the gain solutions
#
print ’--Plotcal (fluxscaled gains)--’
default(’plotcal’)
caltable = ftable
field = ’0,1’
# Set up 2x1 panels - upper panel amp vs. time
subplot = 211
yaxis = ’amp’
# No output file yet (wait to plot next panel)
saveinputs(’plotcal’,prefix+’.plotcal.gscaled.amp.saved’)
if scriptmode:
showgui = True
else:
showgui = False
plotcal()
#
# Set up 2x1 panels - lower panel phase vs. time
subplot = 212
yaxis = ’phase’
saveinputs(’plotcal’,prefix+’.plotcal.gscaled.phase.saved’)
#
# The amp and phase coherence looks good
# Pause script if you are running in scriptmode
if scriptmode:
# If you want to do this interactively and iterate over antenna, set
#iteration = ’antenna’
showgui = True
plotcal()
user_check=raw_input(’Return to continue script\n’)
else:
# No GUI for this script
showgui = False
# Now send final plot to file in PNG format (via .png suffix)
figfile = caltable + ’.plotcal.png’
plotcal()
#=====================================================================
#
# Apply our calibration solutions to the data
# (This will put calibrated data into the CORRECTED_DATA column)
#
print ’--ApplyCal--’
default(’applycal’)
vis = msfile
# We want to correct the calibrators using themselves
# and transfer from 1445+099 to itself and the target N5921
# Start with the fluxscale/gain and bandpass tables
gaintable = [ftable,btable]
# pick the 1445+099 out of the gain table for transfer
# use all of the bandpass table
gainfield = [’1’,’*’]
# interpolation using linear for gain, nearest for bandpass
interp = [’linear’,’nearest’]
# only one spw, do not need mapping
spwmap = []
# all channels
spw = ’’
selectdata = False
# as before
gaincurve = False
opacity = 0.0
# select the fields for 1445+099 and N5921
field = ’1,2’
applycal()
# Now for completeness apply 1331+305 to itself
field = ’0’
gainfield = [’0’,’*’]
# The CORRECTED_DATA column now contains the calibrated visibilities
saveinputs(’applycal’,prefix+’.applycal.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
applycal()
#
#=====================================================================
#
# Now use plotms to plot the calibrated target data (before contsub)
#
print ’--Plotms (NGC5921)--’
default(’plotms’)
vis = msfile
field = ’2’
# Edge channels are bad
spw = ’0:4~59’
# Time average across scans
timebin = ’86000.’
averagedata=T
averagescans=T
xaxis = ’channel’
yaxis = ’amp’
ydatacolumn = ’corrected’
# No output file yet (wait to plot next panel)
saveinputs(’plotms’,prefix+’.plotms.final.amp.saved’)
print "Amp averaged across time and baseline (upper)"
plotms()
#
yaxis = ’phase’
ydatacolumn = ’corrected’
# Time average across scans and baselines
timebin = ’86000.’
averagedata=T
averagescans=T
averagebaselines=T
saveinputs(’plotms’,prefix+’.plotms.final.phase.saved’)
print "Phase averaged across time and baseline (lower)"
print "Final calibrated data"
#=====================================================================
#
# Split the sources out, pick off the CORRECTED_DATA column
#
#
# Split NGC5921 data (before continuum subtraction)
#
print ’--Split NGC5921 Data--’
default(’split’)
vis = msfile
splitms = prefix + ’.src.split.ms’
outputvis = splitms
field = ’N5921*’
spw = ’’
datacolumn = ’corrected’
saveinputs(’split’,prefix+’.split.n5921.saved’)
split()
print "Created "+splitms
# If you want, split out the calibrater 1445+099 field, all chans
#print ’--Split 1445+099 Data--’
#
#calsplitms = prefix + ’.cal.split.ms’
#outputvis = calsplitms
#field = ’1445*’
#
#saveinputs(’split’,prefix+’.split.1445.saved’)
#
#split()
#=====================================================================
#
# Here is how to export the NGC5921 data as UVFITS
# Start with the split file.
# Since this is a split dataset, the calibrated data is
# in the DATA column already.
# Write as a multisource UVFITS (with SU table)
# even though it will have only one field in it
# Run asynchronously so as not to interfere with other tasks
# (BETA: also avoids crash on next importuvfits)
#
#print ’--Export UVFITS--’
#default(’exportuvfits’)
#
#srcuvfits = prefix + ’.split.uvfits’
#
#vis = splitms
#fitsfile = srcuvfits
#datacolumn = ’data’
#multisource = True
#async = True
#
#saveinputs(’exportuvfits’,prefix+’.exportuvfits.saved’)
#
#myhandle = exportuvfits()
#
#print "The return value for this exportuvfits async task for tm is "+str(myhandle)
#=====================================================================
#
# UV-plane continuum subtraction on the target
# use the split ms
# (this will update the CORRECTED_DATA column)
#
print ’--UV Continuum Subtract--’
default(’uvcontsub’)
vis = splitms
field = ’N5921*’
# Use channels 4-6 and 50-59 for continuum
fitspw=’0:4~6;50~59’
# Output all of spw 0
spw = ’0’
# Averaging time (none)
solint = 0.0
# Fit only a mean level
fitorder = 0
# Do the uv-plane subtraction
fitmode = ’subtract’
# Let it split out the data automatically for us
splitdata = True
saveinputs(’uvcontsub’,prefix+’.uvcontsub.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
uvcontsub()
# You will see it made two new MS:
# <vis>.cont
# <vis>.contsub
srcsplitms = splitms + ’.contsub’
# Note that ngc5921.demo.ms.contsub contains the uv-subtracted
# visibilities (in its DATA column), and ngc5921.demo.ms.cont
# the pseudo-continuum visibilities (as fit).
# The original ngc5921.demo.ms now contains the uv-continuum
# subtracted vis in its CORRECTED_DATA column and the continuum
# in its MODEL_DATA column as per the fitmode=’subtract’
# Done with calibration
#=====================================================================
#
# Here is how to make a dirty image cube
#
#print ’--Clean (dirty image)--’
#default(’clean’)
# Pick up our split source continuum-subtracted data
#vis = srcsplitms
#dirtyname = prefix + ’.dirtyimg’
#imagename = dirtyname
#
#mode = ’channel’
#nchan = 46
#start = 5
#width = 1
#
#field = ’0’
#spw = ’’
#imsize = [256,256]
#cell = [15.,15.]
#weighting = ’briggs’
#robust = 0.5
# No cleaning
#niter = 0
#saveinputs(’clean’,prefix+’.invert.saved’)
# Pause script if you are running in scriptmode
#if scriptmode:
# inp()
# user_check=raw_input(’Return to continue script\n’)
#
#clean()
#dirtyimage = dirtyname+’.image’
# Get the dirty image cube statistics
#dirtystats = imstat(dirtyimage)
#=====================================================================
#
# Now clean an image cube of N5921
#
print ’--Clean (clean)--’
default(’clean’)
# Pick up our split source continuum-subtracted data
vis = srcsplitms
# Make an image root file name
imname = prefix + ’.cleanimg’
imagename = imname
# Set up the output image cube
mode = ’channel’
nchan = 46
start = 5
width = 1
# This is a single-source MS with one spw
field = ’0’
spw = ’’
# Standard gain factor 0.1
gain = 0.1
# Set the output image size and cell size (arcsec)
imsize = [256,256]
# Do a simple Clark clean
psfmode = ’clark’
# No Cotton-Schwab iterations
csclean = False
# If desired, you can do a Cotton-Schwab clean
# but will have only marginal improvement for this data
#csclean = True
# Twice as big for Cotton-Schwab (cleans inner quarter)
#imsize = [512,512]
# Pixel size 15 arcsec for this data (1/3 of 45" beam)
# VLA D-config L-band
cell = [15.,15.]
# Fix maximum number of iterations
niter = 6000
# Also set flux residual threshold (in mJy)
threshold=8.0
# Set up the weighting
# Use Briggs weighting (a moderate value, on the uniform side)
weighting = ’briggs’
robust = 0.5
# Set a cleanbox +/-20 pixels around the center 128,128
mask = [108,108,148,148]
# But if you had a cleanbox saved in a file, e.g. "regionfile.txt"
# you could use it:
#mask=’regionfile.txt’
#
# If you don’t want any clean boxes or masks, then
#mask = ’’
# If you want interactive clean set to True
#interactive=True
interactive=False
saveinputs(’clean’,prefix+’.clean.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
clean()
# Should find stuff in the logger like:
#
# Fitted beam used in restoration: 51.5643 by 45.6021 (arcsec)
# at pa 14.5411 (deg)
#
# It will have made the images:
# -----------------------------
# ngc5921.demo.cleanimg.flux
# ngc5921.demo.cleanimg.image
# ngc5921.demo.cleanimg.mask
# ngc5921.demo.cleanimg.model
# ngc5921.demo.cleanimg.psf
# ngc5921.demo.cleanimg.residual
clnimage = imname+’.image’
#=====================================================================
#
# Done with imaging
# Now view the image cube of N5921
#
if scriptmode:
print ’--View image--’
print "Use Spectral Profile Tool to get line profile in box in center"
viewer(clnimage)
user_check=raw_input(’Return to continue script\n’)
#=====================================================================
#
# Here is how to export the Final CLEAN Image as FITS
# Run asynchronously so as not to interfere with other tasks
# (BETA: also avoids crash on next importfits)
#
#print ’--Final Export CLEAN FITS--’
#default(’exportfits’)
#
#clnfits = prefix + ’.cleanimg.fits’
#
#imagename = clnimage
#fitsimage = clnfits
#async = True
#
#saveinputs(’exportfits’,prefix+’.exportfits.saved’)
#
#myhandle2 = exportfits()
#
#print "The return value for this exportfits async task for tm is "+str(myhandle2)
#=====================================================================
#
# Print the image header
#
print ’--Imhead--’
default(’imhead’)
imagename = clnimage
mode = ’summary’
imhead()
# A summary of the cube will be seen in the logger
#=====================================================================
#
# Get the cube statistics
#
print ’--Imstat (cube)--’
default(’imstat’)
imagename = clnimage
# Do whole image
box = ’’
# or you could stick to the cleanbox
#box = ’108,108,148,148’
cubestats = imstat()
# Statistics will printed to the terminal, and the output
# parameter will contain a dictionary of the statistics
#=====================================================================
#
# Get some image moments
#
print ’--ImMoments--’
default(’immoments’)
imagename = clnimage
# Do first and second moments
moments = [0,1]
# Need to mask out noisy pixels, currently done
# using hard global limits
excludepix = [-100,0.009]
# Collapse along the spectral (channel) axis
axis = ’spectral’
# Include all planes
chans = ’’
# Output root name
momfile = prefix + ’.moments’
outfile = momfile
saveinputs(’immoments’,prefix+’.immoments.saved’)
# Pause script if you are running in scriptmode
if scriptmode:
inp()
user_check=raw_input(’Return to continue script\n’)
immoments()
momzeroimage = momfile + ’.integrated’
momoneimage = momfile + ’.weighted_coord’
# It will have made the images:
# --------------------------------------
# ngc5921.demo.moments.integrated
# ngc5921.demo.moments.weighted_coord
#
#=====================================================================
#
# Get some statistics of the moment images
#
print ’--Imstat (moments)--’
default(’imstat’)
imagename = momzeroimage
momzerostats = imstat()
imagename = momoneimage
momonestats = imstat()
#=====================================================================
#
# Now view the moments
#
if scriptmode:
print ’--View image (Moments)--’
viewer(momzeroimage)
print "You can add mom-1 image "+momoneimage
print "as a contour plot"
user_check=raw_input(’Return to continue script\n’)
#=====================================================================
#
# Set up an output logfile
import datetime
datestring=datetime.datetime.isoformat(datetime.datetime.today())
outfile = ’out.’+prefix+’.’+datestring+’.log’
logfile=open(outfile,’w’)
print >>logfile,’Results for ’+prefix+’ :’
print >>logfile,""
#=====================================================================
#
# Can do some image statistics if you wish
# Treat this like a regression script
# WARNING: currently requires toolkit
#
print ’ NGC5921 results ’
print ’ =============== ’
print >>logfile,’ NGC5921 results ’
print >>logfile,’ =============== ’
#
# Use the ms tool to get max of the MSs
# Eventually should be available from a task
#
# Pull the max cal amp value out of the MS (if you split this)
#ms.open(calsplitms)
#thistest_cal = max(ms.range(["amplitude"]).get(’amplitude’))
#ms.close()
#oldtest_cal = 34.0338668823
#diff_cal = abs((oldtest_cal-thistest_cal)/oldtest_cal)
#
#print ’ Calibrator data ampl max = ’,thistest_cal
#print ’ Previous: cal data max = ’,oldtest_cal
#print ’ Difference (fractional) = ’,diff_cal
#print ’’
#
#print >>logfile,’ Calibrator data ampl max = ’,thistest_cal
#print >>logfile,’ Previous: cal data max = ’,oldtest_cal
#print >>logfile,’ Difference (fractional) = ’,diff_cal
#print >>logfile,’’
# Pull the max src amp value out of the MS
ms.open(srcsplitms)
thistest_src = max(ms.range(["amplitude"]).get(’amplitude’))
ms.close()
oldtest_src = 46.2060050964 # now in all chans
diff_src = abs((oldtest_src-thistest_src)/oldtest_src)
print ’ Target Src data ampl max = ’,thistest_src
print ’ Previous: src data max = ’,oldtest_src
print ’ Difference (fractional) = ’,diff_src
print ’’
print >>logfile,’ Target Src data ampl max = ’,thistest_src
print >>logfile,’ Previous: src data max = ’,oldtest_src
print >>logfile,’ Difference (fractional) = ’,diff_src
print >>logfile,’’
#
# Now use the stats produced by imstat above
#
# DIRTY IMAGE MAX & RMS (IF YOU MADE A DIRTY IMAGE)
#
#thistest_dirtymax=dirtystats[’max’][0]
#oldtest_dirtymax = 0.0515365377069
#diff_dirtymax = abs((oldtest_dirtymax-thistest_dirtymax)/oldtest_dirtymax)
#
#print ’ Dirty image max = ’,thistest_dirtymax
#print ’ Previous: max = ’,oldtest_dirtymax
#print ’ Difference (fractional) = ’,diff_dirtymax
#print ’’
#
#print >>logfile,’ Dirty Image max = ’,thistest_dirtymax
#print >>logfile,’ Previous: max = ’,oldtest_dirtymax
#print >>logfile,’ Difference (fractional) = ’,diff_dirtymax
#print >>logfile,’’
#
#thistest_dirtyrms=dirtystats[’rms’][0]
#oldtest_dirtyrms = 0.00243866862729
#diff_dirtyrms = abs((oldtest_dirtyrms-thistest_dirtyrms)/oldtest_dirtyrms)
#
#print ’ Dirty image rms = ’,thistest_dirtyrms
#print ’ Previous: rms = ’,oldtest_dirtyrms
#print ’ Difference (fractional) = ’,diff_dirtyrms
#print ’’
#
#print >>logfile,’ Dirty Image rms = ’,thistest_dirtyrms
#print >>logfile,’ Previous: rms = ’,oldtest_dirtyrms
#print >>logfile,’ Difference (fractional) = ’,diff_dirtyrms
#print >>logfile,’’
# Now the clean image
#
thistest_immax=cubestats[’max’][0]
oldtest_immax = 0.052414759993553162
diff_immax = abs((oldtest_immax-thistest_immax)/oldtest_immax)
print ’ Clean image max = ’,thistest_immax
print ’ Previous: max = ’,oldtest_immax
print ’ Difference (fractional) = ’,diff_immax
print ’’
print >>logfile,’ Clean Image max = ’,thistest_immax
print >>logfile,’ Previous: max = ’,oldtest_immax
print >>logfile,’ Difference (fractional) = ’,diff_immax
print >>logfile,’’
thistest_imrms=cubestats[’rms’][0]
oldtest_imrms = 0.0020218724384903908
diff_imrms = abs((oldtest_imrms-thistest_imrms)/oldtest_imrms)
print ’ Clean image rms = ’,thistest_imrms
print ’ Previous: rms = ’,oldtest_imrms
print ’ Difference (fractional) = ’,diff_imrms
print ’’
print >>logfile,’ Clean image rms = ’,thistest_imrms
print >>logfile,’ Previous: rms = ’,oldtest_imrms
print >>logfile,’ Difference (fractional) = ’,diff_imrms
print >>logfile,’’
# Now the moment images
#
thistest_momzeromax=momzerostats[’max’][0]
oldtest_momzeromax = 1.40223777294
diff_momzeromax = abs((oldtest_momzeromax-thistest_momzeromax)/oldtest_momzeromax)
print ’ Moment 0 image max = ’,thistest_momzeromax
print ’ Previous: m0 max = ’,oldtest_momzeromax
print ’ Difference (fractional) = ’,diff_momzeromax
print ’’
print >>logfile,’ Moment 0 image max = ’,thistest_momzeromax
print >>logfile,’ Previous: m0 max = ’,oldtest_momzeromax
print >>logfile,’ Difference (fractional) = ’,diff_momzeromax
print >>logfile,’’
thistest_momoneavg=momonestats[’mean’][0]
oldtest_momoneavg = 1479.77119646
diff_momoneavg = abs((oldtest_momoneavg-thistest_momoneavg)/oldtest_momoneavg)
print ’ Moment 1 image mean = ’,thistest_momoneavg
print ’ Previous: m1 mean = ’,oldtest_momoneavg
print ’ Difference (fractional) = ’,diff_momoneavg
print ’’
print ’--- Done ---’
print >>logfile,’ Moment 1 image mean = ’,thistest_momoneavg
print >>logfile,’ Previous: m1 mean = ’,oldtest_momoneavg
print >>logfile,’ Difference (fractional) = ’,diff_momoneavg
print >>logfile,’’
print >>logfile,’--- Done ---’
# Should see output like:
#
# Clean image max should be 0.0524147599936
# Found : Image Max = 0.0523551553488
# Difference (fractional) = 0.00113717290288
#
# Clean image rms should be 0.00202187243849
# Found : Image rms = 0.00202226242982
# Difference (fractional) = 0.00019288621809
#
# Moment 0 image max should be 1.40223777294
# Found : Moment 0 Max = 1.40230333805
# Difference (fractional) = 4.67574844349e-05
#
# Moment 1 image mean should be 1479.77119646
# Found : Moment 1 Mean = 1479.66974528
# Difference (fractional) = 6.85586935973e-05
#
#=====================================================================
# Done
#
logfile.close()
print "Results are in "+outfile
More information about CASA may be found at the
CASA web page
Copyright © 2010 Associated Universities Inc., Washington, D.C.
This code is available under the terms of the GNU General Public Lincense
Home |
Contact Us |
Directories |
Site Map |
Help |
Privacy Policy |
Search