HI 21cm (1.4 GHz) spectral line data reduction: LEDA 44055
Overview
This tutorial describes the data reduction of the HI spectral line observed of the nearby (4.8 Mpc), gas-rich dwarf galaxy LEDA44055 (Figure 1: grab HST image). For its gas-rich nature, LEDA44055 is quiescent and is an Hα non-detection. Observations by the HST show a weak blue plume structure, and further inspection of GALEX archival images show some faint emission in the optical body, which taken together suggest that LEDA44055 may be in a "post-starburst" phase.
In this 1.4 GHz observation, a 16 MHz wide subband (spectral window, abbreviated as spw in CASA) using 4096 channels was observed, each channel providing ~ 1700 km/s of velocity coverage that results in a channel width of 3.906 kHz per channel. The second IF subband is used to acquire 1-2 GHz continuum imaging of the field; if LEDA44055 is in post-starbust phase, then it may display significant synchotron emission.
The TDEM0025 observation at the VLA was done during C-configuration and spanned 2 hours on the instrument from 31 July 2017 at 12:39 UT to 1 August 2017 at 14:39 UT. Information about the observation can be found on the corresponding VLA Observing Log and the continuation log (the observing log was split at the monthly boundary). This observing log is a record of events that transpired during the observation of the project, including weather conditions and any loss of antenna(s) and/or components that could affect the outcome of the observation.
This observation of LEDA44055 was taken as part of the Observing for University Classes program. The project code for this VLA observation is TDEM0025. This paper by Cannon et. al is the result of the observation.
How to use this CASA guide
Please use CASA 5.4.0 for this tutorial (typing casa -ls in a linux window shows the available versions and the current version; to explicitly change the current version type, e.g., casa -r 5.4.0-68)
There are at least three different ways to interact with CASA, described in more detail in Getting Started in CASA. In this guide we provide the pseudo-interactive method for every step and the interactive method for some of the steps. Since it is possible to use both methods, take care not to run the same task with identical parameters twice using both methods.
- Interactively examining task inputs. In this mode, one types taskname to load the task, inp to examine the inputs (see Figure 2), and go once those inputs have been set to your satisfaction. Allowed inputs are shown in blue and bad inputs are colored red. The input parameters themselves are changed one by one, e.g., selectdata=True. Summaries of the inputs to various tasks used in the data reduction below are provided, to illustrate which parameters need to be set. More detailed help can be obtained on any task by typing help taskname. Once a task is run, the set of inputs are stored and can be retrieved via tget taskname; subsequent runs will overwrite the previous tget file. To reset a task to its default settings type, default taskname.
# Interactive CASA <default|tget> taskname inp parameter1 = value1 parameter2 = value2 (etc) inp (Always double check the input parameters before running the task.) go
- Pseudo-interactively via task function calls. In this case, all of the desired inputs to a task are provided at once on the CASA command line. This tutorial is made up of such calls, which were developed by looking at the inputs for each task and deciding what needed to be changed from default values. For task function calls, only parameters that you want to be different from their defaults need to be set.
# Pseudo-interactive CASA
taskname('input parameters')
- Non-interactively via a script. A series of task function calls can be combined together into a script, and run from within CASA via execfile('scriptname.py'). This and other CASA Tutorial Guides have been designed to be extracted into a script via the script extractor by using the method described within the Extracting scripts from these tutorials page. Should you use the script generated by the script extractor for this CASA Guide, be aware that it will require some small amount of interaction related to the plotting, occasionally suggesting that you close the graphics window and hitting return in the terminal to proceed. It is in fact unnecessary to close the graphics windows (it is suggested that you do so purely to keep your desktop uncluttered).
Step 1: Obtain the Dataset
From the NRAO Data Archive enter TDEM0025 in the Project Code field and select the data set TDEM0025.sb34039638.eb34043648.57965.965492013886. (This should be the only dataset for the project). The dataset on the archive is around 85 GB in size.
You will download the dataset as an SDM file, either as a .tar file or as an uncompressed file. Under the Jansky VLA datasets options, check the "SDM-BDF dataset (all files)" button and, if you want the dataset downloaded as a .tar file, check the "Create tar file" box.
Once you have your dataset, copy it into a directory where you can launch CASA to begin the data reduction steps below. If you downloaded the dataset as a .tar file, you need to perform the following extra step to extract the dataset before beginning the data reduction steps.
#In a terminal outside of CASA: tar -xzf TDEM0025.sb34039638.eb34043648.57965.965492013886.tar.gz
Step 2: Import the Dataset into CASA
In earlier versions of CASA, you would import your data using the CASA command importevla. With CASA 5.4.0 and higher this task has been deprecated and, while it is still functional, there will be no further support for this task and you should instead use the CASA task importasdm to import your dataset into CASA. In order to make importasdm duplicate the task importevla, several parameters will need to be set from their default values.
# Interactive CASA default importasdm inp asdm='TDEM0025.sb34039638.eb34043648.57965.965492013886' vis='TDEM0025.ms' ocorr_mode='co' savecmds=True outfile='TDEM0025_onlineflags.txt' applyflags=True inp go
# Psuedo-interactive CASA
importasdm(asdm='TDEM0025.sb34039638.eb34043648.57965.965492013886',vis='TDEM0025.ms',ocorr_mode='co',savecmds=True,outfile='TDEM0025_onlineflags.txt',applyflags=True)
Where: inp # lists the inputs available for this task adsm='SDM-BDF File ID' # this is the filename of the SDM-BDF to use vis='filename.ms' # this is the name of the output measurement set created (.ms) ocorr_mode='co' # the VLA is a cross-correlator savecmds=True # write the online flagging commands to an output file outfile='filename.txt' # name of the file containing the online flags applyflags=True # apply the online flags during creation of the MS go # executes the task with the given inputs
Next we will use flagcmd to look at the table of online flags. This plot will show a graphical view of the online flags, which are antenna and/or time based flags.
From this plot (see Figure 1), we can see that ea22 has a subreflector error during the beginning of the observation. We will flag this in a later step.
# Interactive CASA default flagcmd vis='TDEM0025.ms' inpmode='table' useapplied=True action='plot' savepars=True plotfile='flagcmd-table.png' inp go
flagcmd(vis='TDEM0025.ms', inpmode='table', useapplied=True, action='plot', savepars=True, plotfile='flagcmd-table.png')
Step 3: Flag Antenna Shadowing, Zeros, and Very Bright Values
Next we will use flagdata to flag any antennas that may have been shadowed during the observation. This is a necessary step when observing in D- or C-configuration. Once we set mode='shadow' more parameters become available to edit specific to antenna shadowing, such as tolerance (the amount of shadow allowed (in meters)) and addantenna (file name or dictionary with additional antenna names, positions, and diameters). We will leave those parameters as the default settings of tolerance=0.0 (very conservative) and addantenna (no file or dictionary). Note, if an observation was taken in A- or B-configuration, this step is unnecessary.
# Interactive CASA default flagdata inp vis='TDEM0025.ms' mode='shadow' inp go
# Psuedo-interactive CASA
flagdata(vis='TDEM0025.ms', mode='shadow')
The correlator is known to generate a small number of zeros in the data. We will use flagdata to remove those zeros and to clip the very bright values. Setting mode='clip' in flagdata will reveal new parameters specific to this mode. We will leave most of the parameters as the default settings, however we will set two in particular: correlation='ABS_ALL' will take the absolute value of RR and LL and clip the very bright values and clipzeros=True will clip the zero-value data generated by the correlator.
# Interactive CASA default flagdata inp vis='TDEM0025.ms' mode='clip' correlation='ABS_ALL' clipzeros=True inp go
# Psuedo-interactive CASA
flagdata(vis='TDEM0025.ms', mode='clip', correlation='ABS_ALL', clipzeros=True)
More details regarding the use of flagdata can be found under the importasdm task.
Step 4: Initial Inspection of the Dataset
The next step is to inspect the contents of the MS using listobs. The task listobs provides almost all relevant observational parameters such as correlator setup (frequencies, bandwidths, channel number and widths, polarization products), sources, scans, scan intents, and antenna locations. Setting verbose=True will display all of the contents of the raw data and setting listfile='listobs.txt' will create a text file you can refer to later.
# Interactive CASA default listobs inp vis='TDEM0025.ms' verbose=True listfile='listobs.txt' inp go
# Psuedo-interactive CASA
listobs(vis='TDEM0025.ms', verbose=True, listfile='listobs.txt')
Below is a copy/paste of a portion of the listobs output:
Observer: Dr. John M. Cannon Project: uid://evla/pdb/34039543 Observation: EVLA Data records: 7480512 Total elapsed time = 7176 seconds Observed from 31-Jul-2017/23:10:27.0 to 01-Aug-2017/01:10:03.0 (UTC) ObservationID = 0 ArrayID = 0 Date Timerange (UTC) Scan FldId FieldName nRows SpwIds Average Interval(s) ScanIntent 31-Jul-2017/23:10:27.0 - 23:11:24.0 1 0 1331+305=3C286 60021 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [SYSTEM_CONFIGURATION#UNSPECIFIED] 23:11:27.0 - 23:15:54.0 2 0 1331+305=3C286 281151 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_BANDPASS#UNSPECIFIED,CALIBRATE_FLUX#UNSPECIFIED] 23:15:57.0 - 23:20:21.0 3 0 1331+305=3C286 277992 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_BANDPASS#UNSPECIFIED,CALIBRATE_FLUX#UNSPECIFIED] 23:20:24.0 - 23:22:21.0 4 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 23:22:24.0 - 23:24:21.0 5 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 23:24:24.0 - 23:30:45.0 6 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 23:30:48.0 - 23:37:09.0 7 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 23:37:12.0 - 23:43:30.0 8 2 LEDA44055 398034 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 23:43:33.0 - 23:45:30.0 9 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 23:45:33.0 - 23:51:54.0 10 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 23:51:57.0 - 23:58:15.0 11 2 LEDA44055 398034 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 23:58:18.0 - 00:04:39.0 12 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 01-Aug-2017/00:04:42.0 - 00:06:39.0 13 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 00:06:42.0 - 00:13:03.0 14 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:13:06.0 - 00:19:24.0 15 2 LEDA44055 398034 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:19:27.0 - 00:25:48.0 16 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:25:51.0 - 00:27:48.0 17 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 00:27:51.0 - 00:34:09.0 18 2 LEDA44055 398034 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:34:12.0 - 00:40:33.0 19 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:40:36.0 - 00:46:57.0 20 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:47:00.0 - 00:48:57.0 21 1 J1330+2509 123201 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] 00:49:00.0 - 00:55:18.0 22 2 LEDA44055 398034 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 00:55:21.0 - 01:01:42.0 23 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 01:01:45.0 - 01:08:06.0 24 2 LEDA44055 401193 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [OBSERVE_TARGET#UNSPECIFIED] 01:08:09.0 - 01:10:03.0 25 1 J1330+2509 120042 [0,1,2,3,4,5,6,7,8] [3, 3, 3, 3, 3, 3, 3, 3, 3] [CALIBRATE_AMPLI#UNSPECIFIED,CALIBRATE_PHASE#UNSPECIFIED] (nRows = Total number of rows per scan) Fields: 3 ID Code Name RA Decl Epoch SrcId nRows 0 NONE 1331+305=3C286 13:31:08.287984 +30.30.32.95886 J2000 0 619164 1 NONE J1330+2509 13:30:37.689201 +25.09.10.97800 J2000 1 859248 2 NONE LEDA44055 12:55:41.000000 +19.12.33.00000 J2000 2 6002100 Spectral Windows: (9 unique spectral windows and 2 unique polarization setups) SpwID Name #Chans Frame Ch0(MHz) ChanWid(kHz) TotBW(kHz) CtrFreq(MHz) BBC Num Corrs 0 EVLA_L#A0C0#0 4096 TOPO 1410.330 3.906 16000.0 1418.3276 12 RR LL 1 EVLA_L#B0D0#1 128 TOPO 988.000 1000.000 128000.0 1051.5000 15 RR RL LR LL 2 EVLA_L#B0D0#2 128 TOPO 1116.000 1000.000 128000.0 1179.5000 15 RR RL LR LL 3 EVLA_L#B0D0#3 128 TOPO 1244.000 1000.000 128000.0 1307.5000 15 RR RL LR LL 4 EVLA_L#B0D0#4 128 TOPO 1372.000 1000.000 128000.0 1435.5000 15 RR RL LR LL 5 EVLA_L#B0D0#5 128 TOPO 1500.000 1000.000 128000.0 1563.5000 15 RR RL LR LL 6 EVLA_L#B0D0#6 128 TOPO 1628.000 1000.000 128000.0 1691.5000 15 RR RL LR LL 7 EVLA_L#B0D0#7 128 TOPO 1756.000 1000.000 128000.0 1819.5000 15 RR RL LR LL 8 EVLA_L#B0D0#8 128 TOPO 1884.000 1000.000 128000.0 1947.5000 15 RR RL LR LL Sources: 27 ID Name SpwId RestFreq(MHz) SysVel(km/s) 0 1331+305=3C286 0 1420.405752 419 0 1331+305=3C286 1 1420.405752 419 0 1331+305=3C286 2 1420.405752 419 0 1331+305=3C286 3 1420.405752 419 0 1331+305=3C286 4 1420.405752 419 0 1331+305=3C286 5 1420.405752 419 0 1331+305=3C286 6 1420.405752 419 0 1331+305=3C286 7 1420.405752 419 0 1331+305=3C286 8 1420.405752 419 1 J1330+2509 0 1420.405752 419 1 J1330+2509 1 1420.405752 419 1 J1330+2509 2 1420.405752 419 1 J1330+2509 3 1420.405752 419 1 J1330+2509 4 1420.405752 419 1 J1330+2509 5 1420.405752 419 1 J1330+2509 6 1420.405752 419 1 J1330+2509 7 1420.405752 419 1 J1330+2509 8 1420.405752 419 2 LEDA44055 0 1420.405752 419 2 LEDA44055 1 1420.405752 419 2 LEDA44055 2 1420.405752 419 2 LEDA44055 3 1420.405752 419 2 LEDA44055 4 1420.405752 419 2 LEDA44055 5 1420.405752 419 2 LEDA44055 6 1420.405752 419 2 LEDA44055 7 1420.405752 419 2 LEDA44055 8 1420.405752 419 Antennas: 27: ID Name Station Diam. Long. Lat. Offset from array center (m) ITRF Geocentric coordinates (m) East North Elevation x y z 0 ea01 W12 25.0 m -107.37.37.4 +33.53.44.2 -835.3760 -544.2316 0.5650 -1602044.902600 -5042025.803400 3554427.822700 1 ea02 W04 25.0 m -107.37.10.8 +33.53.59.1 -152.8711 -83.7955 -2.4675 -1601315.900500 -5041985.306670 3554808.309400 2 ea03 W10 25.0 m -107.37.28.9 +33.53.48.9 -619.2934 -398.4403 -0.5229 -1601814.060900 -5042012.886450 3554548.229820
From the listobs output, note the field ID for each of the sources and scan intent(s) (or source type). This information will be used for future calibration tasks and when splitting the data.
Field ID Source Scan Intent 0 3C286 flux density scale and bandpass calibrator 1 J1330+2509 complex gain (amplitude and phase) calibrator 2 LEDA44055 observe target
Since the goal of this tutorial is to find the HI (1.420405752 GHz rest frequency) spectral line in LEDA 44055, note the spw ID containing the spectral line setup. From this particular instrument configuration, the spectral line setup is spw ID 0, while spw ID's 1-8 are continuum. Make note of the spectral line setup for spw 0. This information will be used later.
spw 0 4096 channels TOPO frame indicates Barycentric Optical Doppler setting 3.906 kHz channel width indicates the resolution 16 MHz bandwidth indicates the full width of the spw 1418.3276 MHz center frequency of the spw
Step 5: Split Out the HI Line
Before we begin calibration or flagging of misbehaving antennas or RFI, we will run split to create a new smaller MS containing only the HI line (spw 0).
# Interactive CASA default split inp vis='TDEM0025.ms' outputvis='TDEM0025_HI.ms' spw=0 datacolumn='data' inp go
# Psuedo-interactive CASA
split(vis='TDEM0025.ms', output='TDEM0025_HI.ms', spw=0, datacolumn='data')
Now if we run listobs on this new MS, we can see the output shows everything but the continuum spw's 1-8.
# Psuedo-interactive CASA
listobs(vis='TDEM0025_HI.ms', verbose=True, listfile='listobs_HI.txt')