User talk:Preshanthj: Difference between revisions

From CASA Guides
Jump to navigationJump to search
 
No edit summary
 
(79 intermediate revisions by the same user not shown)
Line 1: Line 1:
== CASA Guide G55.7+3.4 ==
Back to [[Main Page | '''CASA guides''']]


* '''This CASA Guide is designed for CASA v4.3.1 the current casa-release.'''
By [https://www.aoc.nrao.edu/~pjaganna/Site/Home.html Preshanth Jagannathan] & [https://safe.nrao.edu/wiki/bin/view/Main/HuibIntemaWebHome Huib Intema]
 
{{Checked 4.3.1}}


[[EVLA Wide-Band Wide-Field Imaging: G55.7 - CASA4.2]]


== Overview ==
== Overview ==


This CASA Guide describes the imaging of the supernova remnant [http://simbad.u-strasbg.fr/simbad/sim-id?Ident=SNR+G055.7%2B03.4&NbIdent=1&Radius=2&Radius.unit=arcmin&submit=submit+id G55.7+3.4.]. The data were taken on August 23, 2010, in the first D-configuration for which the new wide-band capabilities of the WIDAR correlator were available.  The 8-hour-long observation includes all available 1 GHz of bandwidth in L-band, from 1-2 GHz in frequency.
This webpage provides a basic description on how to use CASA to reduce data from the upper part of the new VLA low-band system, also known as P-band, covering roughly 220-480 MHz. The goal is to make a wide-field continuum stokes I image of a typical blank field using the full effective bandwidth.
 
== Obtaining the raw data ==


== Obtaining the data ==
For this guide we'll use some test data that was taken in B-configuration. To get a copy of the raw data, go to the [https://archive.nrao.edu/archive/advquery.jsp NRAO archive query page], and enter the following search parameters (leave the rest on default):


A copy of the data can be downloaded here: [http://casa.nrao.edu/Data/EVLA/G55/G55.7+3.4_10s.ms.tar.gz http://casa.nrao.edu/Data/EVLA/G55/G55.7+3.4_10s.ms.tar.gz]
<pre style="background-color: #fffacd;">
Telescopes: Jansky VLA (tickbox)
Project Code: TSUB0001
Telescope Config: B (tickbox)
Observing Bands: P (tickbox)
</pre>


<font color=red>Note that this dataset is rather large: ~15GB </font>
The search should return (at least) 19 rows of results. Enter your valid e-mail address, set the download format to SDM-BDF, check the box on the 17th row (data from Dec. 21, 2013, or "13-Dec-21 03:11:18") at the bottom of the page, and click Get My Data. On the next page, click Retrieve over internet. The next page should report that the data staging is in progress. Wait until you receive an e-mail reporting that your archive data is copied, which should take a few minutes. Download the data onto your computer running CASA.


As a start, unzip and untar the data:
== Starting CASA ==


<source lang="bash">
Start CASA by typing
tar -xzvf G55.7+3.4_10s.ms.tar.gz
<source lang='bash'>
casa
</source>
</source>
on the (linux) command line. This should start a CASA interactive python (iPython) session, and open a separate log window. The CASA version is reported at startup, both in the python session and the log window:


This will take a minute, but once it's complete, you will have a directory called <tt>G55.7+3.4_10s.ms</tt> which is the data. Online flags have been applied (which delete known bad data), some uninteresting scans removed, and the data time-averaged to 10 seconds.  (The data were taken in D-configuration, where maximum baselines are 1 km, so one can safely average to 3s or even 10s to reduce data set size.)  This is equivalent to what you would download from the archive if you requested time-averaging, scans 16~313, and application of the online flags.
<i> CASA Version 4.3.1-REL (r32491) </i>


You can also find the dataset [https://archive.nrao.edu/archive/ArchiveQuery?PASSWD=&QUERYTYPE=ARCHIVE&PROTOCOL=HTML&SORT_PARM=Starttime&SORT_ORDER=Asc&MAX_ROWS=NO+LIMIT&SORT_PARM2=Starttime&SORT_ORDER2=Asc&QUERY_ID=9999&QUERY_MODE=Prepare+Download&LOCKMODE=PROJECT&SITE_CODE=AOC&DBHOST=CHEWBACCA&WRITELOG=0&PROJECT_CODE=&SEGMENT=&OBSERVER=&ARCHIVE_VOLUME=AB1345_sb1800808_1.55431.004049953706&TIMERANGE1=&TIMERANGE2=&SOURCE_ID=&SRC_SEARCH_TYPE=SIMBAD+or+NED+Resolver&CALIB_TYPE=ALL+Srcs&CENTER_RA=&LONG_RANGE=&FRAME=Equatorial&CENTER_DEC=&LAT_RANGE=&EQUINOX=J2000&SRAD=10.0%27&MIN_EXPOSURE=&OBS_BANDS=ALL&TELESCOPE=EVLA&OBS_MODE=ALL&CORR_MODE=ALL&TELESCOPE_CONFIG=ALL&OBS_POLAR=ALL&SUBARRAY=ALL&OBSFREQ1=&DATATYPE=ALL&OBSBW1=&ARCHFORMAT=ALL&SUBMIT=Submit+Query| in the NRAO archive].  ''Note that it is 170 GB in raw form.'' 
Note that this guide has been written for CASA release 4.3.1, which is the current stable release at NRAO. Due to ongoing development of CASA, this tutorial may or may not work with other versions. You may want to confirm your version before proceeding.


Averaging to 10 seconds and the removal of some scans which are not used in this tutorial reduces the size of the data set to around 15 GB; the addition of columns for model and corrected data (known as "scratch columns") during calibration will ultimately inflate the MS by a factor of a few in size (to around 45 GB).
== Importing the raw data into CASA ==


== Start and confirm your version of CASA ==
We will begin by importing our data into the measurement sent set format (CASA standard) from the binary format (SDM-BDF) as downloaded from the archive. We do this by means of the importevla task.


Start CASA by typing <tt>casapy</tt> on the command line. If you have not used CASA before, some helpful tips are available on the [[Getting Started in CASA]] page.
<source lang='python'>
importevla(asdm='TSUB0001.sb28588128.eb28590840.56647.13284232639', vis ='TSUB0001_pband.ms', savecmds=T, outfile='importflags.txt')


This guide has been written for CASA release 4.2.0.  Please confirm your version before proceeding.
<source lang="python">
# In CASA
version = casalog.version()
print "You are using " + version
if (int(version.split()[3][1:-1]) < 32490):
    print "\033[91m YOUR VERSION OF CASA IS TOO OLD FOR THIS GUIDE."
    print "\033[91m PLEASE UPDATE IT BEFORE PROCEEDING."
else:
    print "Your version of CASA is appropriate for this guide."
</source>
</source>


== Preliminary data evaluation ==
This task calls the external tool <i>asdm2MS</i> to perform the conversion. Together with the visibility data, also the flag commands from the VLA online system are imported. These flags are not directly applied, but stored in the <i>importflags.txt</i> file and applied later.


As a first step, use {{listobs}} to have a look at the MS:
== Preliminary data inspection ==


<source lang="python">
<source lang='python'>
# In CASA
listobs(vis='TSUB0001_pband.ms', verbose = True, listfile = 'TSUB001_pband_import.listobs')
listobs('G55.7+3.4_10s.ms')
</source>
</source>


Note that throughout this tutorial, we will run tasks using the <i>task</i>(<i>parameter=value</i>) syntax.  When called in this manner, all parameters not explicitly set will use their default values.
Alternatively you can also output to the logger by running the command without the listfile argument. The sample listobs output shown has flag <i>verbose=F</i> for the sake of brevity.
 
<source lang='python'>
listobs(vis='TSUB0001_pband.ms',verbose=F)
</source>


The logger output will look like this:
<pre style="background-color: #ffe4b5;">
================================================================================
          MeasurementSet Name:  /lustre/pjaganna/evla/P_Band/casa_guide/TSUB0001_pband.ms      MS Version 2
================================================================================
  Observer: Frazer Owen    Project: uid://evla/pdb/1695465 
Observation: EVLA(26 antennas)
Data records: 5382000      Total elapsed time = 2076 seconds
  Observed from  21-Dec-2013/03:11:20.0  to  21-Dec-2013/03:45:56.0 (UTC)


Fields: 3
  ID  Code Name                RA              Decl          Epoch  SrcId      nRows
  0    NONE 3C48D              01:37:41.299431 +33.09.35.13299 J2000  0        884000
  1    NONE 3C48                01:37:41.299431 +33.09.35.13299 J2000  1        2168400
  2    NONE 0313-192            03:15:52.039999 -19.06.44.59999 J2000  2        2329600
Spectral Windows:  (16 unique spectral windows and 1 unique polarization setups)
  SpwID  Name          #Chans  Frame  Ch0(MHz)  ChanWid(kHz)  TotBW(kHz) CtrFreq(MHz) BBC Num  Corrs         
  0      EVLA_P#A0C0#0    128  TOPO    222.000      125.000    16000.0    229.9375      12  RR  RL  LR  LL
  1      EVLA_P#A0C0#1    128  TOPO    238.000      125.000    16000.0    245.9375      12  RR  RL  LR  LL
  2      EVLA_P#A0C0#2    128  TOPO    254.000      125.000    16000.0    261.9375      12  RR  RL  LR  LL
  3      EVLA_P#A0C0#3    128  TOPO    270.000      125.000    16000.0    277.9375      12  RR  RL  LR  LL
  4      EVLA_P#A0C0#4    128  TOPO    286.000      125.000    16000.0    293.9375      12  RR  RL  LR  LL
  5      EVLA_P#A0C0#5    128  TOPO    302.000      125.000    16000.0    309.9375      12  RR  RL  LR  LL
  6      EVLA_P#A0C0#6    128  TOPO    318.000      125.000    16000.0    325.9375      12  RR  RL  LR  LL
  7      EVLA_P#A0C0#7    128  TOPO    334.000      125.000    16000.0    341.9375      12  RR  RL  LR  LL
  8      EVLA_P#A0C0#8    128  TOPO    350.000      125.000    16000.0    357.9375      12  RR  RL  LR  LL
  9      EVLA_P#A0C0#9    128  TOPO    366.000      125.000    16000.0    373.9375      12  RR  RL  LR  LL
  10    EVLA_P#A0C0#10    128  TOPO    382.000      125.000    16000.0    389.9375      12  RR  RL  LR  LL
  11    EVLA_P#A0C0#11    128  TOPO    398.000      125.000    16000.0    405.9375      12  RR  RL  LR  LL
  12    EVLA_P#A0C0#12    128  TOPO    414.000      125.000    16000.0    421.9375      12  RR  RL  LR  LL
  13    EVLA_P#A0C0#13    128  TOPO    430.000      125.000    16000.0    437.9375      12  RR  RL  LR  LL
  14    EVLA_P#A0C0#14    128  TOPO    446.000      125.000    16000.0    453.9375      12  RR  RL  LR  LL
  15    EVLA_P#A0C0#15    128  TOPO    462.000      125.000    16000.0    469.9375      12  RR  RL  LR  LL
Antennas: 26 'name'='station'
  ID=  0-3: 'ea01'='N32', 'ea02'='N28', 'ea03'='E28', 'ea04'='E24',
  ID=  4-7: 'ea05'='W08', 'ea07'='N12', 'ea08'='N16', 'ea09'='W28',
  ID=  8-11: 'ea10'='E04', 'ea11'='W24', 'ea12'='E08', 'ea13'='W20',
  ID= 12-15: 'ea14'='N24', 'ea15'='E20', 'ea16'='N08', 'ea18'='E36',
  ID= 16-19: 'ea19'='W16', 'ea20'='N04', 'ea21'='E12', 'ea22'='N20',
  ID= 20-23: 'ea23'='W36', 'ea24'='W04', 'ea25'='W32', 'ea26'='W12',
  ID= 24-25: 'ea27'='N36', 'ea28'='E16'
</pre>
You can inspect the output text file <i>TSUB0001_20131221.listobs</i> in your favorite text editor (e.g., <i>gedit</i>). When taking some time to familiarize yourself with the output format, you will see that:
* The observation consists of 4 scans, namely [1] 3C48D (hardware setup), [2] 3C48 (primary calibrator), [3] 0313-192 (target), and [4] again 3C48 (primary calibrator).
* The frequency coverage is 224 - 480 MHz, divided into 16 x 16 MHz spectral windows, each having 128 x 0.125 MHz channels
* Visibilities are recorded every 2 seconds in full polarization (4 polarization products, (wrongly!) labelled RR,RL,LR,LL).
* Of the 28 VLA antennas labelled ea01 - ea028, antennas ea06 and ea17 are not participating in this observation.
* Source, antenna and spectral window IDs start at zero, but scan IDs start at one.
[[File:Pband_plotants.png|200px|thumb|right]]
The array configuration can be inspected using:
<source lang='python'>
plotants(vis='TSUB0001_pband.ms', figfile='TSUB0001_pband_plotants.png')
</source>
As noted above, the polarizations of P-band in this data set are wrongly labelled as circular rather than linear. This may seem mostly harmless, but does make a difference for polarization calibration (which we will do later). The following (non-standard) task will check and fix this (and another related problem; see appendix on P-band data issues):
<source lang='python'>
execfile( '/lustre/hintema/cspam/mytasks.py' )
fixlowband(vis='TSUB0001_pband.ms')
</source>
Re-run the <i>listobs()</i> task to check if the fix was correctly applied.
Addendum: If you're not working on the NRAO DSOC network, you won't have access to the lustre file system. In that case, download [ftp://ftp.aoc.nrao.edu/NRAO-staff/hintema/casa/casa_vla_lowband.tar.gz this tarball] in your CASA working directory, open a shell there, and type the following commands:
<source lang='bash'>
tar -xzvf casa_vla_lowband.tar.gz
buildmytasks
</source>
Now go back to your CASA session and type:
<source lang='python'>
execfile('mytasks.py')
fixlowband(vis='TSUB0001_pband.ms')
</source>


<pre>
The re-run listobs output will show the correct polarization.


<pre style="background-color: #ffe4b5;">
================================================================================
================================================================================
           MeasurementSet Name:  /lustre/pjaganna/evla/casa_guide_g55/G55.7+3.4_10s.ms      MS Version 2
           MeasurementSet Name:  /lustre/pjaganna/evla/P_Band/casa_guide/TSUB0001_pband.ms      MS Version 2
================================================================================
================================================================================
   Observer: Dr. Sanjay Sanjay Bhatnagar     Project: T.B.D. 
   Observer: Frazer Owen     Project: uid://evla/pdb/1695465
Observation: EVLA
Observation: EVLA(26 antennas)
Data records: 7343848       Total elapsed time = 26697 seconds
Data records: 5382000       Total elapsed time = 2076 seconds
   Observed from  23-Aug-2010/01:00:24.0  to  23-Aug-2010/08:25:21.0 (UTC)
   Observed from  21-Dec-2013/03:11:20.0  to  21-Dec-2013/03:45:56.0 (UTC)


  ObservationID = 0        ArrayID = 0
  Date        Timerange (UTC)          Scan  FldId FieldName            nRows    SpwIds  Average Interval(s)    ScanIntent
  23-Aug-2010/01:00:24.0 - 01:01:05.0    16      1 J1925+2106                8008  [0,1,2,3,4,5,6,7]  [9.64, 9.64, 9.64, 9.64, 9.64, 9.64, 9.64, 9.64] [CALIBRATE_PHASE.UNSPECIFIED]
              01:01:05.0 - 01:02:35.0    17      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              01:02:35.0 - 01:04:05.0    18      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              01:04:05.0 - 01:05:34.0    19      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              01:05:34.0 - 01:07:04.0    20      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              01:07:10.0 - 01:08:34.0    21      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              01:08:34.0 - 01:10:04.0    22      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:10:04.0 - 01:11:34.0    23      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:11:34.0 - 01:13:03.0    24      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:13:03.0 - 01:14:33.0    25      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:14:33.0 - 01:16:03.0    26      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:16:03.0 - 01:17:33.0    27      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:17:33.0 - 01:19:02.0    28      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:19:02.0 - 01:20:32.0    29      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:20:32.0 - 01:22:02.0    30      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:22:02.0 - 01:23:32.0    31      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:23:32.0 - 01:25:01.0    32      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:25:01.0 - 01:26:31.0    33      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:26:31.0 - 01:28:01.0    34      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:28:01.0 - 01:29:31.0    35      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:29:31.0 - 01:31:00.0    36      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:31:00.0 - 01:32:30.0    37      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:32:30.0 - 01:34:00.0    38      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:34:00.0 - 01:35:30.0    39      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:35:30.0 - 01:36:59.0    40      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:37:05.0 - 01:38:29.0    41      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              01:38:29.0 - 01:39:59.0    42      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              01:39:59.0 - 01:41:28.0    43      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              01:41:34.0 - 01:42:58.0    44      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.37, 9.37, 9.37, 9.37, 9.37, 9.37, 9.37, 9.37] [OBSERVE_TARGET.UNSPECIFIED]
              01:42:58.0 - 01:44:28.0    45      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:44:28.0 - 01:45:58.0    46      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:45:58.0 - 01:47:28.0    47      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:47:28.0 - 01:48:57.0    48      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:48:57.0 - 01:50:27.0    49      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:50:27.0 - 01:51:57.0    50      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:51:57.0 - 01:53:27.0    51      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:53:27.0 - 01:54:56.0    52      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              01:54:56.0 - 01:56:26.0    53      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:56:26.0 - 01:57:56.0    54      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:57:56.0 - 01:59:26.0    55      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              01:59:26.0 - 02:00:55.0    56      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:00:55.0 - 02:02:25.0    57      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:02:25.0 - 02:03:55.0    58      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:03:55.0 - 02:05:25.0    59      2 G55.7+3.4                24648  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:05:25.0 - 02:06:54.0    60      2 G55.7+3.4                24440  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:06:54.0 - 02:08:24.0    61      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:08:24.0 - 02:09:54.0    62      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:09:54.0 - 02:11:23.0    63      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:11:30.0 - 02:12:53.0    64      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27] [CALIBRATE_PHASE.UNSPECIFIED]
              02:12:53.0 - 02:14:23.0    65      1 J1925+2106              24024  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              02:14:23.0 - 02:15:52.0    66      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              02:15:59.0 - 02:17:23.0    67      2 G55.7+3.4                23200  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              02:17:23.0 - 02:18:52.0    68      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:18:52.0 - 02:20:22.0    69      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:20:22.0 - 02:21:52.0    70      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:21:52.0 - 02:23:22.0    71      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:23:22.0 - 02:24:52.0    72      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:24:52.0 - 02:26:21.0    73      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:26:21.0 - 02:27:51.0    74      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:27:51.0 - 02:29:21.0    75      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:29:21.0 - 02:30:51.0    76      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:30:51.0 - 02:32:20.0    77      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:32:20.0 - 02:33:50.0    78      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:33:50.0 - 02:35:20.0    79      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:35:20.0 - 02:36:50.0    80      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:36:50.0 - 02:38:19.0    81      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:38:19.0 - 02:39:49.0    82      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:39:49.0 - 02:41:19.0    83      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:41:19.0 - 02:42:49.0    84      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:42:49.0 - 02:44:18.0    85      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:44:18.0 - 02:45:47.0    86      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:45:54.0 - 02:47:18.0    87      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              02:47:18.0 - 02:48:48.0    88      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              02:48:48.0 - 02:50:17.0    89      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              02:50:23.0 - 02:51:47.0    90      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              02:51:47.0 - 02:53:17.0    91      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:53:17.0 - 02:54:47.0    92      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:54:47.0 - 02:56:16.0    93      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              02:56:16.0 - 02:57:46.0    94      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:57:46.0 - 02:59:16.0    95      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              02:59:16.0 - 03:00:46.0    96      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:00:46.0 - 03:02:15.0    97      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:02:15.0 - 03:03:45.0    98      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:03:45.0 - 03:05:15.0    99      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:05:15.0 - 03:06:45.0  100      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:06:45.0 - 03:08:14.0  101      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:08:14.0 - 03:09:44.0  102      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:09:44.0 - 03:11:14.0  103      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:11:14.0 - 03:12:44.0  104      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:12:44.0 - 03:14:13.0  105      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:14:13.0 - 03:15:43.0  106      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:15:43.0 - 03:17:13.0  107      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:17:13.0 - 03:18:43.0  108      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:18:43.0 - 03:20:12.0  109      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:20:18.0 - 03:21:42.0  110      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              03:21:42.0 - 03:23:12.0  111      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              03:23:12.0 - 03:24:41.0  112      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              03:24:47.0 - 03:26:11.0  113      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.37, 9.37, 9.37, 9.37, 9.37, 9.37, 9.37, 9.37] [OBSERVE_TARGET.UNSPECIFIED]
              03:26:11.0 - 03:27:41.0  114      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:27:41.0 - 03:29:11.0  115      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:29:11.0 - 03:30:41.0  116      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:30:41.0 - 03:32:10.0  117      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:32:10.0 - 03:33:40.0  118      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:33:40.0 - 03:35:10.0  119      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:35:10.0 - 03:36:40.0  120      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:36:40.0 - 03:38:09.0  121      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:38:09.0 - 03:39:39.0  122      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:39:39.0 - 03:41:09.0  123      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:41:09.0 - 03:42:39.0  124      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:42:39.0 - 03:44:08.0  125      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:44:08.0 - 03:45:38.0  126      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:45:38.0 - 03:47:08.0  127      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:47:08.0 - 03:48:38.0  128      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:48:38.0 - 03:50:07.0  129      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:50:07.0 - 03:51:37.0  130      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:51:37.0 - 03:53:07.0  131      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              03:53:07.0 - 03:54:36.0  132      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              03:54:43.0 - 03:56:07.0  133      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              03:56:07.0 - 03:57:36.0  134      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              03:57:36.0 - 03:59:05.0  135      1 J1925+2106              24440  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              03:59:12.0 - 04:00:36.0  136      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              04:00:36.0 - 04:02:06.0  137      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:02:06.0 - 04:03:35.0  138      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:03:35.0 - 04:05:05.0  139      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:05:05.0 - 04:06:35.0  140      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:06:35.0 - 04:08:05.0  141      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:08:05.0 - 04:09:34.0  142      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:09:34.0 - 04:11:04.0  143      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:11:04.0 - 04:12:34.0  144      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:12:34.0 - 04:14:04.0  145      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:14:04.0 - 04:15:33.0  146      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:15:33.0 - 04:17:03.0  147      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:17:03.0 - 04:18:33.0  148      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:18:33.0 - 04:20:03.0  149      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:20:03.0 - 04:21:32.0  150      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:21:32.0 - 04:23:02.0  151      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:23:02.0 - 04:24:32.0  152      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:24:32.0 - 04:26:02.0  153      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:26:02.0 - 04:27:31.0  154      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:27:31.0 - 04:29:00.0  155      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:29:10.0 - 04:30:31.0  156      1 J1925+2106              22512  [0,1,2,3,4,5,6,7]  [9.98, 9.98, 9.98, 9.98, 9.98, 9.98, 9.98, 9.98] [CALIBRATE_PHASE.UNSPECIFIED]
              04:30:31.0 - 04:32:01.0  157      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              04:32:01.0 - 04:33:30.0  158      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              04:33:40.0 - 04:35:00.0  159      2 G55.7+3.4                22464  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:35:00.0 - 04:36:30.0  160      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:36:30.0 - 04:38:00.0  161      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:38:00.0 - 04:39:29.0  162      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:39:29.0 - 04:40:59.0  163      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:40:59.0 - 04:42:29.0  164      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:42:29.0 - 04:43:59.0  165      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:43:59.0 - 04:45:28.0  166      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:45:28.0 - 04:46:58.0  167      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:46:58.0 - 04:48:28.0  168      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:48:28.0 - 04:49:58.0  169      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:49:58.0 - 04:51:27.0  170      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:51:27.0 - 04:52:57.0  171      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:52:57.0 - 04:54:27.0  172      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:54:27.0 - 04:55:57.0  173      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:55:57.0 - 04:57:26.0  174      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              04:57:26.0 - 04:58:56.0  175      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              04:58:56.0 - 05:00:26.0  176      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:00:26.0 - 05:01:56.0  177      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:01:56.0 - 05:03:25.0  178      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:03:35.0 - 05:04:55.0  179      1 J1925+2106              22464  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              05:04:55.0 - 05:06:25.0  180      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              05:06:25.0 - 05:07:54.0  181      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              05:08:04.0 - 05:09:24.0  182      2 G55.7+3.4                22752  [0,1,2,3,4,5,6,7]  [9.76, 9.76, 9.76, 9.76, 9.76, 9.76, 9.76, 9.76] [OBSERVE_TARGET.UNSPECIFIED]
              05:09:24.0 - 05:10:54.0  183      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:10:54.0 - 05:12:24.0  184      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:12:24.0 - 05:13:54.0  185      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:13:54.0 - 05:15:23.0  186      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:15:23.0 - 05:16:53.0  187      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:16:53.0 - 05:18:23.0  188      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:18:23.0 - 05:19:53.0  189      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:19:53.0 - 05:21:22.0  190      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:21:22.0 - 05:22:52.0  191      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:22:52.0 - 05:24:22.0  192      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:24:22.0 - 05:25:52.0  193      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:25:52.0 - 05:27:22.0  194      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:27:22.0 - 05:28:51.0  195      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:28:51.0 - 05:30:21.0  196      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:30:21.0 - 05:31:51.0  197      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:31:51.0 - 05:33:21.0  198      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:33:21.0 - 05:34:50.0  199      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:34:50.0 - 05:36:20.0  200      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:36:20.0 - 05:37:49.0  201      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:37:58.0 - 05:39:20.0  202      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.11, 9.11, 9.11, 9.11, 9.11, 9.11, 9.11, 9.11] [CALIBRATE_PHASE.UNSPECIFIED]
              05:39:20.0 - 05:40:49.0  203      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              05:40:49.0 - 05:42:18.0  204      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              05:42:27.0 - 05:43:49.0  205      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.11, 9.11, 9.11, 9.11, 9.11, 9.11, 9.11, 9.11] [OBSERVE_TARGET.UNSPECIFIED]
              05:43:49.0 - 05:45:19.0  206      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:45:19.0 - 05:46:48.0  207      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:46:48.0 - 05:48:18.0  208      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:48:18.0 - 05:49:48.0  209      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:49:48.0 - 05:51:18.0  210      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:51:18.0 - 05:52:47.0  211      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:52:47.0 - 05:54:17.0  212      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:54:17.0 - 05:55:47.0  213      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:55:47.0 - 05:57:17.0  214      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              05:57:17.0 - 05:58:46.0  215      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              05:58:46.0 - 06:00:16.0  216      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:00:16.0 - 06:01:46.0  217      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:01:46.0 - 06:03:16.0  218      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:03:16.0 - 06:04:45.0  219      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:04:45.0 - 06:06:15.0  220      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:06:15.0 - 06:07:45.0  221      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:07:45.0 - 06:09:15.0  222      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:09:15.0 - 06:10:44.0  223      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:10:44.0 - 06:12:13.0  224      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:12:21.0 - 06:13:44.0  225      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.22, 9.22, 9.22, 9.22, 9.22, 9.22, 9.22, 9.22] [CALIBRATE_PHASE.UNSPECIFIED]
              06:13:44.0 - 06:15:14.0  226      1 J1925+2106              24856  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              06:15:14.0 - 06:16:43.0  227      1 J1925+2106              23608  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              06:16:50.0 - 06:18:13.0  228      2 G55.7+3.4                23200  [0,1,2,3,4,5,6,7]  [9.28, 9.28, 9.28, 9.28, 9.28, 9.28, 9.28, 9.28] [OBSERVE_TARGET.UNSPECIFIED]
              06:18:13.0 - 06:19:43.0  229      2 G55.7+3.4                24640  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:19:43.0 - 06:21:13.0  230      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:21:13.0 - 06:22:42.0  231      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:22:42.0 - 06:24:12.0  232      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:24:12.0 - 06:25:42.0  233      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:25:42.0 - 06:27:12.0  234      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:27:12.0 - 06:28:41.0  235      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:28:41.0 - 06:30:11.0  236      2 G55.7+3.4                23600  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:30:11.0 - 06:31:41.0  237      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:31:41.0 - 06:33:11.0  238      2 G55.7+3.4                23600  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:33:11.0 - 06:34:40.0  239      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:34:40.0 - 06:36:10.0  240      2 G55.7+3.4                23608  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:36:10.0 - 06:37:40.0  241      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:37:40.0 - 06:39:10.0  242      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:39:10.0 - 06:40:39.0  243      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:40:39.0 - 06:42:09.0  244      2 G55.7+3.4                22008  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:42:09.0 - 06:43:39.0  245      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:43:39.0 - 06:45:09.0  246      2 G55.7+3.4                21800  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:45:09.0 - 06:46:38.0  247      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              06:46:45.0 - 06:48:08.0  248      1 J1925+2106              23632  [0,1,2,3,4,5,6,7]  [9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27, 9.27] [CALIBRATE_PHASE.UNSPECIFIED]
              06:48:08.0 - 06:49:38.0  249      1 J1925+2106              24232  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              06:49:38.0 - 06:51:07.0  250      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              06:51:14.0 - 06:52:37.0  251      2 G55.7+3.4                24856  [0,1,2,3,4,5,6,7]  [9.26, 9.26, 9.26, 9.26, 9.26, 9.26, 9.26, 9.26] [OBSERVE_TARGET.UNSPECIFIED]
              06:52:37.0 - 06:54:07.0  252      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:54:07.0 - 06:55:37.0  253      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:55:37.0 - 06:57:07.0  254      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:57:07.0 - 06:58:37.0  255      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              06:58:37.0 - 07:00:06.0  256      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:00:06.0 - 07:01:36.0  257      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:01:36.0 - 07:03:06.0  258      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:03:06.0 - 07:04:36.0  259      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:04:36.0 - 07:06:05.0  260      2 G55.7+3.4                23400  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:06:05.0 - 07:07:35.0  261      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:07:35.0 - 07:09:05.0  262      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:09:05.0 - 07:10:35.0  263      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:10:35.0 - 07:12:04.0  264      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:12:04.0 - 07:13:34.0  265      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:13:34.0 - 07:15:04.0  266      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:15:04.0 - 07:16:34.0  267      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:16:34.0 - 07:18:03.0  268      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:18:03.0 - 07:19:33.0  269      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:19:33.0 - 07:21:02.0  270      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:21:09.0 - 07:22:33.0  271      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              07:22:33.0 - 07:24:02.0  272      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              07:24:02.0 - 07:25:31.0  273      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              07:25:38.0 - 07:27:02.0  274      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              07:27:02.0 - 07:28:32.0  275      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:28:32.0 - 07:30:01.0  276      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:30:01.0 - 07:31:31.0  277      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:31:31.0 - 07:33:01.0  278      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:33:01.0 - 07:34:31.0  279      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:34:31.0 - 07:36:00.0  280      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:36:00.0 - 07:37:30.0  281      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:37:30.0 - 07:39:00.0  282      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:39:00.0 - 07:40:30.0  283      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:40:30.0 - 07:41:59.0  284      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:41:59.0 - 07:43:29.0  285      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:43:29.0 - 07:44:59.0  286      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:44:59.0 - 07:46:29.0  287      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:46:29.0 - 07:47:58.0  288      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:47:58.0 - 07:49:28.0  289      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:49:28.0 - 07:50:58.0  290      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:50:58.0 - 07:52:28.0  291      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              07:52:28.0 - 07:53:57.0  292      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:53:57.0 - 07:55:26.0  293      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              07:55:33.0 - 07:56:57.0  294      1 J1925+2106              25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [CALIBRATE_PHASE.UNSPECIFIED]
              07:56:57.0 - 07:58:27.0  295      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_PHASE.UNSPECIFIED]
              07:58:27.0 - 07:59:56.0  296      1 J1925+2106              25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_PHASE.UNSPECIFIED]
              08:00:02.0 - 08:01:26.0  297      2 G55.7+3.4                25064  [0,1,2,3,4,5,6,7]  [9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38, 9.38] [OBSERVE_TARGET.UNSPECIFIED]
              08:01:26.0 - 08:02:56.0  298      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:02:56.0 - 08:04:26.0  299      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:04:26.0 - 08:05:55.0  300      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              08:05:55.0 - 08:07:25.0  301      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:07:25.0 - 08:08:55.0  302      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:08:55.0 - 08:10:25.0  303      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:10:25.0 - 08:11:54.0  304      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              08:11:54.0 - 08:13:24.0  305      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [OBSERVE_TARGET.UNSPECIFIED]
              08:13:24.0 - 08:14:53.0  306      2 G55.7+3.4                25272  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [OBSERVE_TARGET.UNSPECIFIED]
              08:17:47.0 - 08:17:54.0  308      3 0542+498=3C147              80  [0,1,2,3,4,5,6,7]  [7, 7, 7, 7, 7, 7, 7, 7] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
              08:17:54.0 - 08:19:23.0  309      3 0542+498=3C147          17152  [0,1,2,3,4,5,6,7]  [9.88, 9.88, 9.88, 9.88, 9.88, 9.88, 9.88, 9.88] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
              08:19:23.0 - 08:20:53.0  310      3 0542+498=3C147          18216  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
              08:20:53.0 - 08:22:23.0  311      3 0542+498=3C147          18216  [0,1,2,3,4,5,6,7]  [10, 10, 10, 10, 10, 10, 10, 10] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
              08:22:23.0 - 08:23:52.0  312      3 0542+498=3C147          18216  [0,1,2,3,4,5,6,7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
              08:23:52.0 - 08:25:21.0  313      3 0542+498=3C147          18216  [0, 1, 2, 3, 4, 5, 6, 7]  [9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89, 9.89] [CALIBRATE_AMPLI.UNSPECIFIED,CALIBRATE_BANDPASS.UNSPECIFIED,UNSPECIFIED.UNSPECIFIED]
          (nRows = Total number of rows per scan)
Fields: 3
Fields: 3
   ID  Code Name                RA              Decl          Epoch  SrcId      nRows
   ID  Code Name                RA              Decl          Epoch  SrcId      nRows
   1   D    J1925+2106          19:25:59.605371 +21.06.26.16218 J2000  1        1004816
   0   NONE 3C48D              01:37:41.299431 +33.09.35.13299 J2000  0        884000
   2   NONE G55.7+3.4          19:21:40.000000 +21.45.00.00000 J2000  2       6248936
   1   NONE 3C48                01:37:41.299431 +33.09.35.13299 J2000  1       2168400
   3   N    0542+498=3C147      05:42:36.137916 +49.51.07.23356 J2000  3          90096
   2   NONE 0313-192            03:15:52.039999 -19.06.44.59999 J2000  2        2329600
Spectral Windows:  (8 unique spectral windows and 1 unique polarization setups)
Spectral Windows:  (16 unique spectral windows and 1 unique polarization setups)
   SpwID  Name     #Chans  Frame  Ch0(MHz)  ChanWid(kHz)  TotBW(kHz) CtrFreq(MHz)  Corrs        
   SpwID  Name           #Chans  Frame  Ch0(MHz)  ChanWid(kHz)  TotBW(kHz) CtrFreq(MHz) BBC Num Corrs
   0      Subband:3     64   TOPO   1000.000     2000.000   128000.0   1063.0000  RR RL LR LL
   0      EVLA_P#A0C0#0     128   TOPO     222.000       125.000     16000.0   229.9375      12  XX XY YX YY
   1      Subband:1    64   TOPO   1128.000     2000.000   128000.0   1191.0000  RR RL LR LL
   1      EVLA_P#A0C0#1    128   TOPO     238.000       125.000     16000.0   245.9375      12  XX XY YX YY
   2      Subband:0     64   TOPO   1256.000     2000.000   128000.0   1319.0000  RR RL LR LL
   2      EVLA_P#A0C0#2     128   TOPO     254.000       125.000     16000.0   261.9375      12  XX XY YX YY
   3      Subband:2     64   TOPO   1384.000     2000.000   128000.0   1447.0000  RR RL LR LL
   3      EVLA_P#A0C0#3     128   TOPO     270.000       125.000     16000.0   277.9375      12  XX XY YX YY
   4      Subband:3     64   TOPO   1520.000     2000.000   128000.0   1583.0000  RR RL LR LL
   4      EVLA_P#A0C0#4     128   TOPO     286.000       125.000     16000.0   293.9375      12  XX XY YX YY
   5      Subband:1     64   TOPO   1648.000     2000.000   128000.0   1711.0000  RR RL LR LL
   5      EVLA_P#A0C0#5     128   TOPO     302.000       125.000     16000.0   309.9375      12  XX XY YX YY
   6      Subband:0     64   TOPO   1776.000     2000.000   128000.0   1839.0000  RR RL LR LL
   6      EVLA_P#A0C0#6     128   TOPO     318.000       125.000     16000.0   325.9375      12  XX XY YX YY
   7      Subband:2     64   TOPO   1904.000     2000.000   128000.0   1967.0000  RR RL LR LL
   7      EVLA_P#A0C0#7     128   TOPO     334.000       125.000     16000.0   341.9375      12 XX XY YX YY
Sources: 24
   8      EVLA_P#A0C0#8     128   TOPO     350.000      125.000     16000.0   357.9375      12  XX  XY  YX  YY
  ID  Name                SpwId RestFreq(MHz) SysVel(km/s)
   9      EVLA_P#A0C0#9     128   TOPO     366.000      125.000     16000.0   373.9375      12  XX  XY  YX  YY
   1    J1925+2106          0     -              -           
   10     EVLA_P#A0C0#10   128   TOPO     382.000      125.000    16000.0    389.9375       12 XX XY YX YY
   1    J1925+2106          1    -              -           
   11    EVLA_P#A0C0#11   128   TOPO     398.000       125.000    16000.0    405.9375      12 XX XY YX YY
  1    J1925+2106          2    -              -           
   12    EVLA_P#A0C0#12   128   TOPO    414.000      125.000    16000.0   421.9375       12 XX XY YX YY
  1    J1925+2106          3    -              -           
   13    EVLA_P#A0C0#13   128   TOPO    430.000      125.000    16000.0    437.9375       12 XX XY YX YY
  1    J1925+2106          4    -              -           
   14    EVLA_P#A0C0#14   128   TOPO     446.000       125.000    16000.0   453.9375       12 XX XY YX YY
  1    J1925+2106          5     -              -           
   15    EVLA_P#A0C0#15    128   TOPO     462.000       125.000    16000.0    469.9375       12  XX XY YX YY
  1    J1925+2106          6    -              -           
Antennas: 26 'name'='station'
  1    J1925+2106          7    -              -           
  ID=   0-3: 'ea01'='N32', 'ea02'='N28', 'ea03'='E28', 'ea04'='E24',
  2    G55.7+3.4          0     -              -           
  ID=   4-7: 'ea05'='W08', 'ea07'='N12', 'ea08'='N16', 'ea09'='W28',
  2    G55.7+3.4          1    -              -           
  ID= 8-11: 'ea10'='E04', 'ea11'='W24', 'ea12'='E08', 'ea13'='W20',
  2   G55.7+3.4          2    -              -           
  ID= 12-15: 'ea14'='N24', 'ea15'='E20', 'ea16'='N08', 'ea18'='E36',
   2    G55.7+3.4          3     -              -           
  ID= 16-19: 'ea19'='W16', 'ea20'='N04', 'ea21'='E12', 'ea22'='N20',
   2    G55.7+3.4          4     -              -           
  ID= 20-23: 'ea23'='W36', 'ea24'='W04', 'ea25'='W32', 'ea26'='W12',
  2    G55.7+3.4          5     -              -           
  ID= 24-25: 'ea27'='N36', 'ea28'='E16'
  2    G55.7+3.4          6    -              -           
   
  2   G55.7+3.4          7    -              -           
</pre>
   3    0542+498=3C147      0     -              -           
 
  3   0542+498=3C147      1    -              -           
== Initial processing steps - Antenna Position, Requantizer Gain, Ionospheric Correction ==
   3    0542+498=3C147      2    -              -           
 
  3    0542+498=3C147      3    -              -           
When importing the data, we saved the flags from the online system to an ASCII text file. This gives us the opportunity to review the flag commands before applying them. For our data set, the flag file is called <i>TSUB0001_20131221.flags</i>. Please load this file into your favorite text editor. The bulk of the flag commands refer to times when the VLA is slewing (<i>ANTENNA_NOT_ON_SOURCE</i>) or when the movable secondary reflector of the VLA's Cassegrain system is not in place (<i>SUBREFLECTOR_ERROR</i>). The latter can cause antenna gain variations (amplitude and phase), so it is safest to apply all the flags. The final two rows in the flag file will remove visibilities that are pure zero, and flag antennas that are partly blocked by other antennas (shadowing; this occurs mostly in compact configurations when observing along a VLA arm).
  3    0542+498=3C147      4    -              -           
<source lang='python'>
  3    0542+498=3C147      5     -              -           
flagdata(vis='TSUB0001_pband.ms', mode='list', inpfile='importflags.txt', action='apply', reason='any', flagbackup=True)
  3    0542+498=3C147      6    -              -           
</source>
  3    0542+498=3C147      7    -              -           
 
Antennas: 27:
=== Antenna Position Corrections ===
  ID  Name  Station  Diam.   Long.         Lat.               Offset from array center (m)                ITRF Geocentric coordinates (m)       
 
                                                                    East        North    Elevation              x              y              z
Now that we have applied the import flags we will correct for the antenna position offsets. Antenna positional errors translates to an error in the measured visibilities and need to be accounted for before we proceed with any of the other calibration steps.  
  0    ea01  W09      25.0 m  -107.37.25.2  +33.53.51.0       -521.9416    -332.7766      -1.2001 -1601710.017000 -5042006.925200 3554602.355600
 
  1    ea02 E02      25.0 m  -107.37.04.4 +33.54.01.1          9.8240      -20.4293      -2.7806 -1601150.060300 -5042000.619800 3554860.729400
<source lang='python'>
   2   ea03  E09      25.0 m   -107.36.45.1  +33.53.53.6        506.0564     -251.8670       -3.5825 -1600715.950800 -5042273.187000 3554668.184500
gencal(vis='TSUB0001_pband.ms',caltable='TSUB0001_pband.antpos',caltype='antpos')
  3    ea04 W01      25.0 m  -107.37.05.9 +33.54.00.5        -27.3562      -41.3030      -2.7418 -1601189.030140 -5042000.493300 3554843.425700
</source>
   4   ea05  W08      25.0 m   -107.37.21.6  +33.53.53.0       -432.1167    -272.1478       -1.5054 -1601614.091000 -5042001.652900 3554652.509300
 
  5    ea06 N06      25.0 m  -107.37.06.9 +33.54.10.3        -54.0649      263.8778      -4.2273 -1601162.591000 -5041828.999000 3555095.896400
The output shows that there are five antennas with positional offsets, this is the kind
   6   ea07  E05      25.0 m   -107.36.58.4  +33.53.58.8        164.9788      -92.8032       -2.5268 -1601014.462000 -5042086.252000 3554800.799800
<pre>
  7    ea08 N01      25.0 m  -107.37.06.0 +33.54.01.8        -30.8810      -1.4664      -2.8597 -1601185.634945 -5041978.156586 3554876.424700
 
   8   ea09  E06      25.0 m   -107.36.55.6  +33.53.57.7        236.9058     -126.3369       -2.4443 -1600951.588000 -5042125.911000  3554773.012300
2015-06-17 05:07:03 INFO gencal offsets for antenna ea03 : -0.00240  -0.00410   0.00340
  9   ea10  N03      25.0 m  -107.37.06.3  +33.54.04.8        -39.0773       93.0192      -3.3330 -1601177.376760 -5041925.073200 3554954.584100
2015-06-17 05:07:03 INFO gencal offsets for antenna ea04 : -0.00100 -0.00110   0.00180
  10  ea11 E04      25.0 m  -107.37.00.8 +33.53.59.7        102.8054      -63.7682      -2.6414 -1601068.790300 -5042051.910200 3554824.835300
2015-06-17 05:07:03 INFO gencal offsets for antenna ea05 : -0.00100   0.00100   0.00200
   11   ea12  E08      25.0 m  -107.36.48.9  +33.53.55.1        407.8285     -206.0065       -3.2272 -1600801.926000 -5042219.366500  3554706.448200
2015-06-17 05:07:03 INFO gencal offsets for antenna ea15 : -0.00190 -0.00240   0.00180
  12  ea13  N07       25.0 m  -107.37.07.2  +33.54.12.9        -61.1037      344.2331      -4.6138 -1601155.635800 -5041783.843800 3555162.374100
2015-06-17 05:07:03 INFO gencal offsets for antenna ea18 : -0.00180 -0.00590   0.00500
  13  ea15 W06      25.0 m  -107.37.15.6 +33.53.56.4      -275.8288    -166.7451      -2.0590 -1601447.198000 -5041992.502500 3554739.687600
   14  ea16  W02      25.0 -107.37.07.5  +33.54.00.9        -67.9687      -26.5614      -2.7175 -1601225.255200 -5041980.383590  3554855.675000
   15  ea17  W07      25.0 m  -107.37.18.4 +33.53.54.8       -349.9877    -216.7509      -1.7975 -1601526.387300 -5041996.840100  3554698.327400
  16   ea18  N09      25.0 m  -107.37.07.8  +33.54.19.0        -77.4346      530.6273      -5.5859 -1601139.485100 -5041679.036800 3555316.533200
  17  ea19  W04      25.0 m  -107.37.10.8  +33.53.59.1      -152.8599      -83.8054      -2.4614 -1601315.893000 -5041985.320170  3554808.304600
  18  ea20  N05      25.0 m  -107.37.06.7  +33.54.08.0        -47.8454      192.6015      -3.8723 -1601168.786100 -5041869.054000  3555036.936000
  19   ea21  E01      25.0 m  -107.37.05.7  +33.53.59.2        -23.8638      -81.1510      -2.5851 -1601192.467800 -5042022.856800  3554810.438800
  20  ea22  N04      25.0 m  -107.37.06.5 +33.54.06.1        -42.6239      132.8436      -3.5494 -1601173.979400 -5041902.657700  3554987.517500
  21   ea23  E07      25.0 m  -107.36.52.4  +33.53.56.5        318.0509    -164.1850      -2.6957 -1600880.571400 -5042170.388000  3554741.457400
   22  ea24  W05      25.0 m   -107.37.13.0 +33.53.57.8      -210.0959    -122.3887      -2.2577 -1601377.009500 -5041988.665500  3554776.393400
  23  ea25  N02      25.0 m  -107.37.06.2 +33.54.03.5        -35.6245      53.1806      -3.1345 -1601180.861480 -5041947.453400  3554921.628700
   24  ea26  W03      25.0 m  -107.37.08.9  +33.54.00.1      -105.3447      -51.7177      -2.6037 -1601265.153600 -5041982.533050  3554834.858400
  25  ea27  E03      25.0 m  -107.37.02.8 +33.54.00.5        50.6641      -39.4835      -2.7273 -1601114.365500 -5042023.151800  3554844.944000
   26  ea28  N08      25.0 m  -107.37.07.5  +33.54.15.8        -68.9057      433.1889      -5.0602 -1601147.940400 -5041733.837000  3555235.956000


##### End Task: listobs              #####
##########################################
</pre>
</pre>


We can see that there are three sources in this observation:
=== Ionospheric TEC Corrections ===
[[File:Pband_vla_tecu.png|200px|thumb|right]]
 
Low frequency observations are affected by the ionosphere. A delay in the signal path is introduced between the two polarization of light that varies both as a function of time and line of sight (direction dependent). The delay is proportional to the Total Electron Content (TEC) along the line of sight and is inversely proportional to the square of the frequency.GPS measurements at two different frequencies provides us with an estimate of the TEC per square metre. This correction has been implemented in CASA which we shall apply as a calibration table by means of the <i>gencal</i> task. The task requires a TEC map that we will generate utilizing casa recipes.
 
<source lang='python'>
from recipes import tec_maps
 
tec_image, tec_rms_image = tec_maps.create(vis='TSUB0001_pband.ms',doplot=True)
 
gencal(vis='TSUB0001_pband.ms',caltable='TSUB0001_pband.tecim',caltype='tecim',infile=tec_image)
 
</source>
 
[[File:Pband_tec.png|200px|thumb|right]]
 
A word of caution regarding the TEC map generation. The IGS website updates measurements only two weeks after the date of observation.
 
=== Requantizer Gains ===
 
The next step will correct the visibility amplitudes for the signal leveling that occurs at the inputs of the WIDAR correlator, the so-called requantizer gains. These levels (per antenna, per polarization, per spectral window) are stored with the measurement set (in the <i>SYSPOWER</i> sub-table). Currently, this step is not essential, since the levels get set only once at the start of an observation, and bandpass calibration will correct for this. But it will make your bandpass plots look better if you have multiple spectral windows. And, more importantly, in the future it may be that the levels will become time-variable during an observation, so we'd better be prepared.
 
The correction is done by means of the <i>gencal</i> task, where information in the <i>SYSPOWER</i> sub-table gets translated into a gain table.
 
<source lang='python'>
gencal(vis='TSUB0001_pband.ms/',caltype='rq',caltable='TSUB0001_pband.rq')
</source>
 
 
NOTE: The experimental task <i>mstransform()</i> combines <i>split()</i> and <i>hanningsmooth()</i> and several other data manipulation operations, but its output is not yet to be trusted for all operations.
 
== Dead and swapped antennas ==
 
Now it is time to have a first visual look at the uncalibrated visibility data. It is important to identify dead antennas / polarizations early on, so we can exclude them from further data processing (which is the most efficient data 'reduction' :-) ). A convenient way of doing this is through the <i>plotms</i> task on bright calibrator(s) (again, see the <i>listobs()</i> output), in our case 3C48.[[File:TSUB0001_pband_3C48_prebp.png|200px|thumb|right]]
<source lang='python'>
plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY', field='3C48',
          plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',iteraxis='baseline',
          plotfile='TSUB0001_pband_3C48_prebp.png')
</source>
 
This will load the <i>plotms</i> window that has queued up all the baselines of antenna ea01 and is currently displaying the first amplitude vs frequency plot with the colors representing the different spectral windows. Note that we are only plotting the XX and YY correlation of the antennas. This is because we expect most of the power in the linear cross correlation products to be in these two correlations. Notice that some spectral windows in particular are badly affected due to rfi. This is the issue that we will deal with after identifying dead antennas. If you scroll through the baselines using the green forward buttons in the plotms you will notice that the amplitude is particularly low when you encounter ea10 and ea13. If we make a quick plot of the baseline made by ea10 and ea13 we can see that there is no power in any of the polarizations so these two antennas were dead and can be flagged out. We also notice that ea25 has low XX polarization but also notice the excess power in the XY polarization. This tells us that the polarization inputs have been wrongly labeled we have a local task that we built already and we will utilize that to swap the polarization labels for antenna ea25. In addition to the dead antennas we also have a dummy scan during slew on a source named 3C48D, we shall flag that scan by hand too.


* J1925+2106, field ID 1: the phase calibrator;
<source lang='python'>
* G55.7+3.4, field ID 2: the supernova remnant;
flagdata(vis='TSUB0001_pband.ms',mode='manual',antenna='ea10,ea13')
* 0542+498=3C147, field ID 3: the flux and bandpass calibrator.
flagdata(vis='TSUB0001_pband.ms',mode='manual',field='3C48D')
swappol(vis='TSUB0001_pband.ms',antenna='ea25')
</source>


We can also see that these sources have associated "scan intents", which indicate their function in the observation. Note that you can select sources based on their intents in certain CASA tasks. The various scan intents in this dataset are:
NOTE: <i>swappol()</i> is not part of the default CASA release, but was imported together with <i>fixlowband()</i>. It is a pure python implementation operating on visibilities, therefore it may take a while to finish. The way in which we run <i>swappol()</i> we overwrite the previous visibilities, so no new measurement set is created.


* CALIBRATE_PHASE indicates that this is a scan to be used for gain calibration;
We also noticed sharp rfi peaks during our data examination, to prevent Gibbs ringing it is best to hanning smooth the data at this juncture before we proceed further with automatic flagging. [[File:TSUB0001_pband_3C48_prebp.png|200px|thumb|right]]
* OBSERVE_TARGET indicates that this is the science target;
<source lang='python'>
* CALIBRATE_AMPLI indicates that this is to be used for flux calibration; and
hanningsmooth(vis='TSUB0001_pband.ms',datacolumn='data')
* CALIBRATE_BANDPASS indicates that these scans are to be used for bandpass calibration.
</source>


Note that 3C147 is to be used for both flux and bandpass calibration.
We should replot the primary calibrator to see the effect of hanning smoothing on the data and the rfi.  


We can see the antenna configuration for this observation using {{plotants}}:
<source lang='python'>
plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
          field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
          iteraxis='baseline', plotfile='TSUB0001_pband_3C48_prebp_hanning.png')


<source lang="python">
# In CASA
plotants('G55.7+3.4_10s.ms')
</source>
</source>


[[Image:plotAnts.png|200px|thumb|right|plotants image]]
== Automatic flagging ==


This shows that antennas ea01, ea18, and ea03 were on the extreme ends of the west, north, and east arms, respectively.  The antenna position diagram is particularly useful as a guide to help determine which antenna to use as the reference antenna later during calibration.


We may also inspect the raw data using {{plotms}}. To start with, let's look at a subset of scans on the supernova remnant:
Before throwing away bad spectral windows by hand, we'll let the automated flaggers in CASA have a go at it. The main task for this is <i>flagdata()</i>. While working on your data, <i>flagdata()</i> produces an abundance of output, not all of which I find easy to understand. To help with this, we can get the flag status of our data before and after auto-flagging by running <i>flagdata()</i> in the <i>summary</i> mode. This first call provides the flag statistics of the flagging up to now, before any auto-flagging:
<source lang='python'>
summary_1 = flagdata(vis='TSUB0001_pband.ms', mode='summary')
</source>


<source lang="python">
This returns a python dictionary with flagged versus total visibilities along various axes (antenna, scan, spw, field, correlation, etc.). For example, if we want to know the percentage flagged per scan, run the following (note that the scans may not appear in sorted order):
# In CASA
<source lang='python'>
plotms(vis='G55.7+3.4_10s.ms', scan='30,75,120,165,190,235,303',
axis = 'scan'
      antenna='ea24', xaxis='freq', yaxis='amp', coloraxis='spw',
for id, stats in summary_1[ axis ].iteritems():
      iteraxis='scan', correlation='RR,LL', symbolshape='circle')
  print '%s %s: %5.1f percent flagged' % ( axis, id, 100. * stats[ 'flagged' ] / stats[ 'total' ] )
</source>
</source>


The <tt>coloraxis</tt> parameter indicates that a different color will be assigned to each spectral window, and the <tt>iteraxis</tt> parameter tells plotms to display a new plot for each scan. We have chosen only one antenna (ea24) and just the right and left circular polarizations (without the cross-hand terms) to reduce the amount of data in the selection.  One can flip through these plots using the green arrows located at the bottom of the plotting GUI: the double-left arrow will display the very first plot in the set, the single left arrow will go back one plot, and the right arrows have similar behavior for moving forward in the set.
For this example, you will notice that scan 1 (the dummy scan on 3C48D) is 100 percent flagged, which is what we did during the initial flagging.
 
We will run <i>flagdata()</i> in the <i>tfcrop</i> mode, which will (per scan, per baseline, per spectral window, per polarization) look for visibility amplitude outliers. It uses a 5-piece polynomial in an attempt to remove any intrinsic bandpass (amplitude) structure (we did not calibrate for bandpass yet). We run the task twice to allow for slightly deeper flagging. For the first run, we tell CASA to make a backup of our visibility flag status up to here, giving us an option to restore them if we choose over-aggresive flagging parameters and consequently over-flag our data. The flag backup file name is reported in the log window, and can be found in the <i>TSUB0001_20131221_PBAND.ms.flagversions</i> directory.
 
<source lang='python'>
flagdata(vis='TSUB0001_pband.ms', field='*', mode='tfcrop', datacolumn='data', timecutoff=4., freqcutoff=3., maxnpieces=5,
  action='apply', display='report', flagbackup=True, combinescans=True, ntime='3600s', correlation='ABS_XY,ABS_YX')


[[Image:PlotMS1.png|200px|thumb|right|plotms image]]
flagdata(vis='TSUB0001_pband.ms', field='*', mode='tfcrop', datacolumn='data', timecutoff=3., freqcutoff=3., maxnpieces=2,
  action='apply', display='report', flagbackup=True, combinescans=True, ntime='3600s', correlation='ABS_XY,ABS_YX')


Flipping through the scans, it's clear that there is significant time- and frequency-variable RFI present in this observation.  Since this is L-band data taken in the most compact EVLA configuration ("D"), this comes as no surprise.  However, it also poses one of the greatest challenges for obtaining a good image.
flagdata(vis='TSUB0001_pband.ms', mode='extend')
</source>


In particular, we can see that two spectral windows (SPWs) are quite badly affected. To determine which these are, click in the "Mark Regions" tool at the bottom of the {{plotms}} GUI (the open box with a green "plus" sign), and use the mouse to select a few of the highest-amplitude points in each of these SPWs.  Click on the "Locate" button (magnifying glass sign), and information associated with the selected points will be displayed in the logger window:
Let's get another flag summary to see how much extra data got flagged:
<source lang='python'>
summary_2 = flagdata(vis='TSUB0001_pband.ms' , mode='summary')


<pre>
axis = 'scan'
Frequency in [1.22177 1.27139] or [1.5762 1.65063], Amp in [23.1713 24.3056] or [59.6296 63.6806]:
for value, stats in summary_2[ axis ].iteritems():
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:20:57.0 BL=ea12@E08 & ea24@W05[11&22] Spw=1 Chan=59 Freq=1.246 Corr=RR X=1.246 Y=23.5243  (38134/11/1526)
  old_stats = summary_1[ axis ][ value ]
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:07.0 BL=ea03@E09 & ea24@W05[2&22] Spw=1 Chan=59 Freq=1.246 Corr=RR X=1.246 Y=23.6116  (40310/12/374)
  print '%s %s: %5.1f percent flagged additionally' % ( axis, value, 100. * ( stats[ 'flagged' ] - old_stats[ 'flagged' ] ) / stats[ 'total' ] )
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:07.0 BL=ea12@E08 & ea24@W05[11&22] Spw=1 Chan=59 Freq=1.246 Corr=RR X=1.246 Y=23.4432  (41462/12/1526)
 
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:57.0 BL=ea03@E09 & ea24@W05[2&22] Spw=1 Chan=59 Freq=1.246 Corr=RR X=1.246 Y=23.7536  (56950/17/374)
plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:07.0 BL=ea12@E08 & ea24@W05[11&22] Spw=4 Chan=41 Freq=1.602 Corr=RR X=1.602 Y=61.9097  (131282/39/1490)
          field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:17.0 BL=ea12@E08 & ea24@W05[11&22] Spw=4 Chan=41 Freq=1.602 Corr=RR X=1.602 Y=61.1769  (134610/40/1490)
          iteraxis='baseline', plotfile='TSUB0001_pband_3C48_prebp_hanning.png')
Scan=30 Field=G55.7+3.4[2] Time=2010/08/23/01:21:27.0 BL=ea12@E08 & ea24@W05[11&22] Spw=4 Chan=41 Freq=1.602 Corr=RR X=1.602 Y=60.1834  (137938/41/1490)
Found 7 points (7 unflagged) among 239616 in 0.02s.
</pre>


We can see that SPWs 1 and 4 are among the worst affected by RFI. (As an aside, note that the syntax for reporting a selected point's baseline is {antenna 1 name}@{pad 1 name} &{antenna 2 name}@{pad 2 name}[{antenna 1 index}&{antenna 2 index}].)  At this point, feel free to play around a bit more with {{plotms}}; you might try experimenting with different axes for iteration (under the "Iter" left-hand tab), different data selection parameters (under "Data"), different axes ("Axes"), different averaging techniques (under "Data"), or different selections for the coloraxis (the "colorize" option under "Display").
</source>
[[File:TSUB0001_pband_3C48_prbp_tfcropped.png|200px|thumb|right]]
There is quite a bit of RFI that gets missed in RFI-rich spectral windows. The solution to this is to provide the flagging routines with more contrast between healthy and affected data. For this, we will perform a preliminary bandpass calibration to take out the bandpass shape. We will do some coarse preliminary calibration apply it to the calibrator before flagging for RFI once more.


== A priori calibration and flagging ==
<source lang='python'>


Before we proceed with further processing, we should check the observation log to see if there were any issues noted during the run that need to be addressed.  The observing log file is linked to the [https://archive.nrao.edu/archive/ArchiveQuery?PASSWD=&QUERYTYPE=ARCHIVE&PROTOCOL=HTML&SORT_PARM=Starttime&SORT_ORDER=Asc&MAX_ROWS=NO+LIMIT&SORT_PARM2=Starttime&SORT_ORDER2=Asc&QUERY_ID=9999&QUERY_MODE=Prepare+Download&LOCKMODE=PROJECT&SITE_CODE=AOC&DBHOST=CHEWBACCA&WRITELOG=0&PROJECT_CODE=&SEGMENT=&OBSERVER=&ARCHIVE_VOLUME=AB1345_sb1800808_1.55431.004049953706&TIMERANGE1=&TIMERANGE2=&SOURCE_ID=&SRC_SEARCH_TYPE=SIMBAD+or+NED+Resolver&CALIB_TYPE=ALL+Srcs&CENTER_RA=&LONG_RANGE=&FRAME=Equatorial&CENTER_DEC=&LAT_RANGE=&EQUINOX=J2000&SRAD=10.0%27&MIN_EXPOSURE=&OBS_BANDS=ALL&TELESCOPE=EVLA&OBS_MODE=ALL&CORR_MODE=ALL&TELESCOPE_CONFIG=ALL&OBS_POLAR=ALL&SUBARRAY=ALL&OBSFREQ1=&DATATYPE=ALL&OBSBW1=&ARCHFORMAT=ALL&SUBMIT=Submit+Query archive web page] for this observation (at far right; under "logs etc."). Looking at the log, we can see that antenna ea07 may need a position correction, and antennas ea06, ea17, ea20, and ea26 did not have L-band receivers installed at the time and should be flagged.
gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.G0', gaintype='G', calmode='p', solint='int', field='3C48',refant='ea09',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim'])


=== Antenna position correction ===
gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.K0', gaintype='K', solint='inf', field='3C48',refant='ea09',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0'])


Correcting a known position error for an antenna is done with the task {{gencal}}. This is important, because the observed visibilities are a function of <math>u</math> and <math>v</math>. If an antenna's position is incorrect, then <math>u</math> and <math>v</math> will be calculated incorrectly, and there will be errors in any image derived from the data. Of course, the a priori position corrections may not completely account for all errors.
bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.bp0', solint='inf', field='3C48',refant='ea09', minsnr=2.0,
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0','TSUB0001_pband.K0'])


The {{gencal}} task will query the VLA Baseline Corrections database to determine what baseline corrections to apply to the dataset. If you wish to double-check this by hand, refer to the [http://www.vla.nrao.edu/astro/archive/baselines/ EVLA/VLA Baseline Corrections] page.
applycal(vis='TSUB0001_pband.ms', field='*', applymode='calflagstrict',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0','TSUB0001_pband.K0'] )


<source lang="python">
# In CASA
gencal(vis='G55.7+3.4_10s.ms', caltable='G55.7+3.4_10s.pos',
      caltype='antpos')
</source>
</source>


As reported by the CASA logger, {{gencal}} found a position correction for antenna ea07 of (x, y, z) = (0.0087, 0.0137, 0.000) and recorded this in our specified calibration table.
We will now flag the corrected data column that contains the coarsely calibrated visibilities which provide better contrast to the flagging algorithms to remove the RFI present.  We will begin by running the <i>RFLAG</i> algorithm in the task <i>flagdata</i>. We will yet again in summary mode see how much more of the observed data was flagged.
<source lang='python'>
flagdata(vis='TSUB0001_pband.ms', field='*', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply',  flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5)


=== Gain curve and opacity correction ===
flagdata(vis='TSUB0001_pband.ms', field='*', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply',  flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5)
summary_3 = flagdata(vis='TSUB0001_pband.ms' , mode='summary')


A decision has been made here to ignore both the corrections for atmospheric opacity and for the elevation-dependent telescope gain throughout this tutorial. These effects are very small (less than or about 1%) across the frequency range of this observation (1-2 GHz).  At higher frequencies, these corrections may be important and the appropriate calibration tables can be computed using the task {{gencal}}.  For an example of a tutorial which corrects for atmospheric opacity and the elevation-dependent gain see this [[http://casaguides.nrao.edu/index.php?title=EVLA_3-bit_Tutorial_G192 this tutorial.]]
axis = 'scan'
for value, stats in summary_2[ axis ].iteritems():
  old_stats = summary_1[ axis ][ value ]
  print '%s %s: %5.1f percent flagged additionally' % ( axis, value, 100. * ( stats[ 'flagged' ] - old_stats[ 'flagged' ] ) / stats[ 'total' ] )


=== Flagging non-operational antennas ===
plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
          field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
          iteraxis='baseline', plotfile='3C48_postbandpass_rflag.png', ydatacolumn='corrected')
</source>
[[File:3c48_postbandpass_rflag.png|200px|thumb|right]]
Taking another visual look at the data using <i>plotms</i> we examine the effect of the automated flagging on the calibrator. We find that most spectral windows are RFI free and look great but for spectral windows 2, 9, 13, 15. We dig deeper into the cause of the RFI in these instance by using the locate tool in the <i>plotms</i> tool. It comes to our notice that most of the RFI in spw 13 comes from antenna ea04. So we can flag ea04 for spa 13. This still leaves 3 problematic spw's 2,9,15. These spectral windows have been designed to catch most of the RFI in the P-Band and in the event that they are terribly contaminated we can ignore these spw's and proceed with the actual calibration. Nonetheless a final pass of <i>flagdata</i> in RFLAG mode over the contaminated spw's does not hurt.


In addition to updating the position for antenna ea07, we have to flag antennas ea06, ea17, ea20, and ea26, since these did not have working L-band receivers at the time of observationWe do this with the task {{flagdata}}:
<source lang='python'>
flagdata(vis='TSUB0001_pband.ms', field='3C48', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply', flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5, spw='2,9,15')
</source>


<source lang="python">
==Flux Density Calibration==
# In CASA
The initial flagging has cleaned up most of the stray RFI across the band. This allows us to proceed with the actual calibration of the data. Before we get to the calibration tables its essential to do the flux density calibration of our calibrator 3C48. This is done by means of the <i>setjy</i> task. Before we run the task on hand we first clear the preliminary calibration that was carried out to enable better flagging. We do that but running the <i>clearcal</i> task in casa.
flagdata(vis='G55.7+3.4_10s.ms', mode='manual',
 
        antenna='ea06,ea17,ea20,ea26')
<source lang='python'>
clearcal(vis='TSUB0001_pband.ms')
 
setjy(vis='TSUB0001_pband.ms', standard='Scaife-Heald 2012', field='3C48')
</source>
</source>


Note that the first thing {{flagdata}} does is create a backup flag file, in this case named "flagdata_1".  This flag file contains a copy of the flags present in the MS prior to the requested flagging operation, and can be found inside the <tt><MS_name>.flagversions</tt> directory, along with any other backed up flag files.  Since these flag files take up a fair amount of space (in this particular case, 230 MB), we won't me making them every time we run flagdata -- the automatic flag backup can be turned off by setting flagbackup=False.  However, it's good to keep a record of the names of the backup files and the associated processing step, in case you wish to restore a previous version of the flags using the {{flagmanager}} task.
== Delay and bandpass calibration ==


=== Flagging shadowed antennas and zero-amplitude data ===
First we use the full bandwidth on a single scan on the primary calibrator to determine a single delay per antenna per polarization. This will determine a single (approximate) phase slope across frequency, mainly caused by propagation effects in the (time-variable) ionosphere, cable length differences and electronics in the signal paths from antenna feeds to correlator. Note that for a short (5-10 minutes), single scan on the calibrator we can get away with solving for a time-invariant delay per antenna per polarization. We will again use scan 4, which is the longest scan on 3C48.


Since this is the most compact EVLA configuration, there may be instances where one antenna blocks, or "shadows" another.  Therefore, we will run {{flagdata}} to remove these data:
<source lang='python'>
gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.K1', field='3C48', solint='inf', refant='ea09', gaintype='K', parang=True)


<source lang="python">
plotcal(caltable='TSUB0001_pband.K1', xaxis='antenna', yaxis='delay', markersize=2.0)
# In CASA
flagdata(vis='G55.7+3.4_10s.ms', mode='shadow',
        flagbackup=False)
</source>
</source>


In this particular observation, there does not appear to be any data affected by shadowing, as can be seen in the logger report.
Since we picked ea09 as our reference antenna, the delays for this antenna ID (=0) are arbitrarily set to zero. All other delays should be within 30 nanosec or so (which they should be for this data set). Larger values should be treated with suspicion, probably indicating a problem with the antenna / polarization. We will use the bandpass calibration (next) to verify this.


In addition, there may be times during which the correlator writes out pure zero-valued data. In order to remove this bad data, we run {{flagdata}} to remove any pure zeroes:
Next is to determine the bandpass calibration. We use the same source and scan, and apply the delay calibration before solving for the bandpass. Note that we request a minimum SNR of 3, which will make the solve fail for the worst channels, but not all.
<source lang='python'>


<source lang="python">
bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.B1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, parang = True,
# In CASA
  gaintable=['TSUB0001_pband.K1'], interp=['nearest,nearestflag'])
flagdata(vis='G55.7+3.4_10s.ms', mode='clip',
        clipzeros=True, flagbackup=False)  
</source>
</source>


Inspecting the logger output which is generated by {{flagdata}} shows that there is a very small quantity of zero-valued data (0.02%) present in this MS.
After solving, we inspect the bandpass calibration amplitudes and phases, and flag any obvious residual outliers. Outliers may be found above or below the average bandpass curves, and tend to arise in the same channel (frequency) ranges for all antennas. Don't spend more than 1 minute per antenna. And don't worry about missing some bad points; these bad channels will likely get flagged in a later stage anyway. Note that the bandpass amplitudes and phases may differ between polarizations of the same antenna. Also note that the bandpass phases across frequency should not have an overall gradient (this was removed by the delay calibration). Also also note that bandpass phases may wrap around from +/-180 to -/+180 degrees. If that is problematic, re-run the phase <i>plotcal()</i> with <i>plotrange = [ 200.,500.,0.,360. ]</i>. Also note that there are no bandpass solutions for antennas ea10, ea13 and ea25.
<source lang='python'>
plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='amp', iteration='antenna', markersize=2.0)


''Note that the archive will automatically flag shadowed antennas as well as zero-valued data, if you request that online flags are applied.''
plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='phase', iteration='antenna', plotrange=[ 200.,500.,-180.,180. ], markersize = 2.0)
</source>


== Automatic RFI excision ==
Flagging is made easier by maximizing the plotcal() window. We don't set the scale for plotting the bandpass amplitudes, which is convenient when flagging outliers as it will auto-rescale. While plotting the bandpass phases we do fix the scale, as it provides a better feeling for the relevant magnitude of phase outliers. Flagging of outliers is done using the <i>Mark Region</i> and <i>Flag</i> buttons. We are using this mechanism to efficiently flag data manually, since it is done per antenna rather than per baseline. These 'flags' will not be permanent until we call <i>applycal()</i> later on, but are effective while applying the calibration on the fly, as we will do in subsequent calibration steps.


Now, we move on to one of the most difficult parts of L-band, D-configuration data processing: excising the RFI.  For the original reduction of this MS, flagging was done by hand and took several weeks.  The resulting data are offered as an option for the imaging stage of this tutorial (because careful by-hand flagging does yield a better image); however, it's not always practical to undertake this endeavor, and often the "automatic" flagging provides a reasonable (and much less time-consuming) solution.  Therefore, we will demonstrate the use of the automatic RFI excision tools currently available in CASA.
== Gain calibration ==


=== Hanning-smoothing data ===
With the delay and bandpass calibration in place, we will now look more closely at the time-variable behaviour of the VLA. We use the same scan on our primary calibrator 3C48 over the full effective bandwidth to determine gain calibrations: one complex value per antenna per polarization per integration time. The delay and bandpass tables are applied on the fly.


Prior to flagging any data which is affect by strong RFI, one should Hanning-smooth the data to remove Gibbs ringing. This is done with the task {{hanningsmooth}}, which can either write a new, Hanning-smoothed MS or directly operate on the requested column of the input MS. To conserve space, we will request the latter.  Note that if you wish to make your own "before" and "after" plots, you should make the first <i>prior</i> to running {{hanningsmooth}}, since you <i>will</i> be overwriting the non-Hanning-smoothed data in the process -- and this is not reversible. 
<source lang='python'>
gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.G1', field='3C48', solint = 'int', refant = reference_antenna, minsnr = 3.0, gaintype = 'G',
calmode = 'ap', gaintable = [ delay_table_v1, bandpass_table_v1 ], interp = ['','','','nearest,nearestflag', 'nearest,nearestflag' ], parang = True )
</source>


<source lang="python">
Similar to the bandpass flagging, we will flag outlier gain solutions in both amplitude and phase. The regular dips in the gain amplitudes every 4 minutes is caused by a very strong RFI signal from the local VLA site radio; this issue is being addressed. For the amplitudes, the final scatter around an average close to one should be a few percent. Note that antenna ea12 has quite a large bump in the gain amplitudes on one polarization. For this and other cases, remember that the gain solutions for both polarizations can be flagged together, as we will loose the equivalent data of the surviving polarization anyway.
# In CASA
plotms(vis='G55.7+3.4_10s.ms', scan='30', antenna='ea24', spw='0~2',
    xaxis='freq', yaxis='amp', coloraxis='spw', symbolshape = 'circle',
    correlation='RR,LL', plotrange=[1.0,1.27,-0.3,2.5],
    plotfile='amp_v_freq.beforeHanning.png')


hanningsmooth(vis='G55.7+3.4_10s.ms', datacolumn='data')
<source lang='python'>
plotcal(caltable='TSUB0001_pband.ms', xaxis='time', yaxis='amp', iteration='antenna', markersize=2.0 )


plotms(vis='G55.7+3.4_10s.ms', scan='30', antenna='ea24', spw='0~3',
plotcal(caltable='TSUB0001_pband.ms', xaxis='time', yaxis='phase', iteration='antenna', plotrange=[ None,None,-180.,180.], markersize=2.0)
    xaxis='freq', yaxis='amp', coloraxis='spw', symbolshape = 'circle',
    correlation='RR,LL', plotrange=[1.0,1.27,-0.3,2.5],  
    plotfile='amp_v_freq.afterHanning.png')
</source>
</source>


[[Image:PlotMS2.png|200px|thumb|left|before Hanning smoothing]]
Note that when plotting gains against time, it is convenient to use auto-scaling of the time axis by putting <i>None</i> in the first two fields of <i>plotrange</i>.
[[Image:PlotMS3.png|200px|thumb|right|after Hanning smoothing]]


Task {{hanningsmooth}} will take a few minutes to run.  Note that the 2nd {{plotms}} command above contains a trivial change in the spw selection (trivial because the 4th spw is outside of the specified plotrange).  This forces {{plotms}} to reload the plot since by default, {{plotms}} will not redraw a plot if the input parameters are unchanged. In this case, since the data column was changed between calls to {{plotms}}, a redraw is necessary. When using the GUI, you can simply check "force reload" in the bottom left corner of the side bar before clicking "Plot."
Next, we will prepare a smoothed and interpolated version of the gain calibration table, which will be applied later on to the target field data. This prevents flagging of target field data when one of the edges of a calibrator scan is flagged for one or more antennas. The result can be inspected with <i>plotcal</i>.
<source lang='python'>


We can compare the Hanning-smoothed data with the raw data by plotting a subset of data to show the result of Hanning-smoothing (see plots to the left and right). As you can see, the smoothing has spread the single-channel RFI into three channels, but has also removed the effects of some of the worst RFI from a number of channels. Overall, this will improve our ability to flag RFI from the data and retain as much good data as possible.
smoothcal(vis='TSUB0001_pband.ms', tablein='TSUB0001_pband.G1', caltable='TSUB0001_pband.Gs1', smoothtype='median', smoothtime = 60.*60.)


=== Using the phase calibration source for preliminary bandpass calibration ===
plotcal(caltable='TSUB0001_pband.Gs1', xaxis='time', yaxis='amp', iteration='antenna', plotrange=[ None,None,0.8,1.2 ], markersize=2.0)


In order to get the best possible result from the automatic RFI excision, we will first apply bandpass calibration to the MS.  Since the RFI is time-variable, using the phase calibration source to make an average bandpass over the entire observation will mitigate the amount of RFI present in the calculated bandpass. (For the final calibration, we will use the designated bandpass source 3C147; however, since this object was only observed in the last set of scans, it doesn't sample the time variability and would not provide a good average bandpass.)
plotcal(caltable='TSUB0001_pband.Gs1', xaxis='time', yaxis='phase', iteration='antenna', plotrange=[ None,None,-10.,10. ], markersize=2.0)


Since there are likely to be gain variations over the course of the observation, we will run {{gaincal}} to solve for an initial set of antenna-based phases over a narrow range of channels.  These will be used to create the bandpass solutions.  While amplitude variations will have little effect on the bandpass solutions, it is important to solve for these phase variations with sufficient time resolution to prevent decorrelation when vector averaging the data in computing the bandpass solutions.
</source>


In order to choose a narrow range of channels for each spectral window which are relatively RFI-free over the course of the observation, we can look at the data with {{plotms}}.  Note that it's important to only solve for phase using a narrow channel range, since an antenna-specific delay will cause the phase to vary with respect to frequency over the spectral window, perhaps by a substantial amount.
== Instrumental polarization calibration ==


<source lang="python">
The VLA at P-band measures the incoming radio waves using dual-dipole feeds mounted near the primary focus of the dishes. While much effort is put into mechanically making these dual-dipoles orthogonal, and to strongly suppress any cross-talk between the electronic signal paths of both dipoles, there is some (frequency-dependent) polarization leakage between them. Furthermore, the P-band feeds are mounted and aligned on each antenna by hand, allowing for 5-10 degrees difference in the orientation of the dipoles between antennas. For both intensity and polarization imaging, it is important to calibrate the polarization products in our data to optimize the (i) orthogonality between X and Y for each antenna and (ii) the alignment between Xs and Ys of different antennas. Note that this does not (yet) include calibration of the absolute polarization angle, for which we need a linearly polarized source with known polarization angle.
# In CASA
 
plotms(vis='G55.7+3.4_10s.ms', scan='30,75,120,165,190,235,303',
First we calibrate the cross delay, which is the difference in delay between the two polarizations of the reference antenna, in our case ea01. Remember that the regular delay calibration arbitrarily set the delays for both polarizations of the reference antenna to zero. In reality, there will be a small but noticeable physical path length difference between these two polarizations, for which we try to correct. This calibration uses the same scan on 3C48, assuming that 3C48 is unpolarized at P-band (which is a good approximation).
      antenna='ea24', xaxis='channel', yaxis='amp', iteraxis='spw',
<source lang='python'>
      yselfscale=True, correlation='RR,LL', symbolshape='circle')
gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Kc1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, gaintype='KCROSS', parang=True,
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Kc1'],  
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag'] )
 
plotcal(caltable='TSUB0001_pband.Kc1', xaxis='antenna', yaxis='delay', markersize=2.0)
</source>
</source>


* yselfscale=True: sets the y-scaling to be for the currently displayed spectral window, since some spectral windows have much worse RFI and will skew the scale for others.
The plot shows a small ~2 nanosec delay between X and Y of the reference antenna. Note that the table is generated in such a way that this correction gets applied to all antennas.
 
Next, we determine the leakage of the X signal into Y, and Y into X. For a well-behaved instrument, the magnitude of the leakage (the so-called D-terms) should be much less than one. Since the leakage is frequency dependent, we solve for leakage for each frequency channel, somewhat similar to bandpass calibration. The way to do this in CASA is through the <i>polcal()</i> task with the option <i>poltype = 'Df'</i>. Again, we can inspect (and edit) the leakage calibration table with <i>plotcal()</i>
 
<source lang='python'>
 
polcal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Df1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, poltype = 'Df',
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Kc1'],
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag' ] )


Looking at these plots, we can choose appropriate channel ranges for each SPW:
plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,0.,1. ], markersize=2.0)
</source>


<pre>
Before starting any flagging, it is best to first cycle past all antennas to get a feel for the magnitude of the leakage terms. For most antennas, both leakage terms are roughly equal in amplitude across the band, with values between 0 and 0.15. Few have higher leakages (up to 0.3). The most likely explanation is a larger misalignment of the P-band feed of these antennas relative to the others. Examples are ea05, ea11, and ea24. These antennas do not need to be flagged, but are merely expected to benefit most from this polarization calibration. Some examples of suspicious data that is probably best to flag: antenna ea03 has a peculiar bump in one of the leakage terms, ea12 has an upturn at the low-frequency end of the band, ea14 has a peak near the low-frequency end of the band.
SPW 0: 10-13
SPW 1: 30-33
SPW 2: 32-35
SPW 3: 30-33
SPW 4: 35-38
SPW 5: 30-33
SPW 6: 30-33
SPW 7: 46-49
</pre>


Using these channel ranges, we run {{gaincal}} to calculate phase-only solutions that will be used as input during our initial bandpass calibration. Remember - the calibration tables we are creating now are so that we can use automatic RFI flagging algorithms. Our final calibration tables will be generated later, after automated flagging. Here are the inputs for our initial pre-bandpass phase calibration:
It is better not to flag based on phases, because the closer the amplitude of the leakage terms get to zero, the more erratic the phase behaviour will be.
An alternative is to flag based on the real and imaginary parts, which you may or may not want to do.
<source lang='python'>
plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='real', iteration='antenna', plotrange=[ 200.,500.,-0.5,0.5 ], markersize=2.0)


<source lang="python">
plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='imag', iteration='antenna', plotrange=[ 200.,500.,-0.5,0.5 ], markersize=2.0)
# In CASA
gaincal(vis='G55.7+3.4_10s.ms', caltable='G55.7+3.4_10s.initPh',
        intent='CALIBRATE_PHASE*', solint='int',
        spw='0:10~13,1;3;5~6:30~33,2:32~35,4:35~38,7:46~49',
        refant='ea24', minblperant=3,
        minsnr=3.0, calmode='p', gaintable='G55.7+3.4_10s.pos')
</source>
</source>


* caltable='G55.7+3.4_10s.initPh': this is the output calibration table that will be written.
== Re-iterate bandpass and leakage calibration ==
* intent='CALIBRATE_PHASE*': this is the way we have chosen to select data. Alternatively, we could have used "field='J1925+2106'", since this is the only source with the CALIBRATE_PHASE* scan intent. Note the use of the wildcard character "*" at the end of the string; this accounts for the fact that all the intents end with ".UNSPECIFIED". We could just as well have used "*PHASE*".
 
* solint='int': we request a solution for each 10-second integration.
The largest instrumental effects on our data are now captured in several relevant calibration tables. But since we have used uncalibrated / partially calibrated data to determine these calibration tables, there are improvements to be obtained when re-determining some calibration tables. In this guide we re-calibrate the bandpass and polarization leakage since these are expected to have changed most. Our re-calibrations will be relative to the existing bandpass and leakage calibrations, so that we can more easily see deviations from the ideal case.
* spw='0:10~13,1;3;5~6:30~33,2:32~35,4:35~38,7:46~49': note the syntax of this selection: a ":" is used to separate the SPW from channel selection, ";" is used to separate <i>within</i> this selection, and "~" is used to indicate an inclusive range. 
 
* refant='ea24': we have chosen ea24 as the reference antenna after inspecting the antenna position diagram (see above). It is relatively close to, but not directly in, the center of the array, which could be important in D-configuration, since you don't want the reference antenna to have a high probability of being shadowed by nearby antennas.
First we update the bandpass calibration by determining a new, relative bandpass table while applying all previous calibrations. In the ideal case that our data and previous calibrations were perfect, the new bandpass table would contain gain amplitudes and phases of one and zero, respectively, for all (unflagged) antennas, polarizations and channels.
* minblperant=3: the minimum number of baselines which must be present to attempt a phase solution.
* minsnr=3.0: the minimum signal-to-noise a solution must have to be considered acceptable.  Note that solutions which fail this test will cause these data to be flagged downstream of this calibration step.
* calmode='p': perform phase-only solutions.
* gaintable='G55.7+3.4_10s.pos': use the antenna position correction for ea07 that we created earlier.


Note that a number of solutions do not pass the requirements of the minimum 3 baselines (generating the terminal message "Insufficient unflagged antennas to proceed with this solve.") or minimum signal-to-noise ratio (outputting "n of x solutions rejected due to SNR < 3 ...").  A particularly large number of solutions are rejected in SPW 4, where the RFI is most severe.
<source lang='python'>


[[Image:plotcal1.png|200px|thumb|right|Phases for antenna ea09]]
bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.B1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, parang = True,
[[Image:plotcal2.png|200px|thumb|right|Phases in SPW 4]]
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1'], interp=['','','','nearest,nearestflag'])


We can inspect the resulting calibration table with {{plotcal}}:
plotcal(caltable='TSUB0001_pband.B1' , xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,0.,2. ], markersize=2.0)


<source lang="python">
plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='phase', iteration='antenna', plotrange=[ 200.,500.,-180.,180. ], markersize=2.0)
# In CASA
plotcal(caltable='G55.7+3.4_10s.initPh', xaxis='time', yaxis='phase',
        iteration='antenna', spw='0', plotrange=[-1,-1,-180,180])
</source>
</source>


This iterates over antenna for a single spectral window; we can see that the phase does not change much over the course of the observation for SPW 0. We may also iterate over spectral window for a subset of antennas:
In the <i>plotcal()</i> calls above, the vertical axis scales have been chosen to indicate the relevance of the ideal case of unity amplitudes and zero phases. For most antennas, the bandpass solutions are close to ideal. Some antennas show some noticeable structure across frequency. A general guideline for flagging (or not) is that we expect the relative bandpass to be close to one in amplitude and vary smoothly in frequency.
 
<source lang='python'>
 
polcal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Df1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, poltype = 'Df',
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1',
              'TSUB0001_pband.B1','TSUB0001_pband.Kc1','TSUB0001_pband.Df1'],
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag' ] )


<source lang="python">
plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,None,None ], markersize=2.0)
# In CASA
plotcal(caltable='G55.7+3.4_10s.initPh', xaxis='time', yaxis='phase',
        iteration='spw', antenna='ea01,ea05,ea24', plotrange=[-1,-1,-180,180])
</source>
</source>


Clearly, the phases are affected by RFI in some places, especially in SPW 4.
== Transfer of calibrations to the target field ==


Using this phase information, we create time-averaged bandpass solutions for the phase calibration source:
So far, we have used one scan on the primary calibrator 3C48 to derive various calibration tables. These calibrations will now be applied to all scans of all sources in our measurement set, which includes 3C48 itself and our target field 0313-192. As described above, the task <i>applycal()</i> creates a <i>CORRECTED_DATA</i> column in which the calibrated visibilities get stored. This may take a while.


<source lang="python">
<source lang='python'>
# In CASA
applycal(vis='TSUB0001_pband.ms', parang=True, applymode='calflagstrict', flagbackup=True, gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq',
bandpass(vis='G55.7+3.4_10s.ms', caltable='G55.7+3.4_10s.initBP',
            'TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Gs1','TSUB0001_pband.Kc1','TSUB0001_pband.Df1'],
        intent='CALIBRATE_PHASE*', solint='inf',
         interp = ['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag','nearest,nearestflag'])
        combine='scan', refant='ea24', minblperant=3, minsnr=10.0,
        gaintable=['G55.7+3.4_10s.pos', 'G55.7+3.4_10s.initPh'],
         interp=['', 'nearest'], solnorm=False)
</source>
</source>


* solint='inf', combine='scan': the solution interval of 'inf' will automatically break by scans; this requests that the solution intervals be combined over scans, so that we will get one solution per antenna.
Now we split off the calibrated target field data, meaning that the visibilities of source 0313-192 get copied from the <i>CORRECTED_DATA</i> column to the <i>DATA</i> column of a new measurement set. This is convenient for further processing.
* gaintable=['G55.7+3.4_10s.pos', 'G55.7+3.4_10s.initPh']: we will pre-apply both the antenna position corrections as well as the initial phase solutions.
 
* interp=[<nowiki>''</nowiki>, 'nearest']: by default, {{gaincal}} will use linear interpolation for pre-applied calibration.  However, we want the <i>nearest</i> phase solution to be used for a given time.
<source lang='python'>
split(vis='TSUB0001_pband.ms', outputvis='TSUB0001_pband_target.ms', datacolumn='corrected', field='0313-192')
</source>


Again, we can see that a number of solutions have been rejected by our choices of <tt>minblperant</tt> and <tt>minsnr</tt>.
== Cross-polarization flagging ==


[[Image:plotcal3.png|200px|thumb|right|Bandpasses for antennas ea10 - ea19]]
All flagging up to this point was done on the calibrator 3C48, and some of these flags got propagated to the target field data. we will now extend the flagging of the target field data by flagging based on the cross-polarization visibilities XY and YX. Most RFI is strongly polarized, and will stand out clearly against the typically very weakly polarized target field.


We may plot the bandpasses with plotcal; first looking at the amplitudes:
<source lang='python'>
flagdata(vis='TSUB0001_pband_target.ms', mode = 'rflag', field = '*', correlation = 'ABS_XY,ABS_YX', datacolumn = 'corrected', winsize = 5,
  action = 'apply', display = 'report', flagbackup = False )


<source lang="python">
# In CASA
plotcal(caltable='G55.7+3.4_10s.initBP', xaxis='freq', yaxis='amp',
        iteration='antenna', subplot=331)
</source>
</source>


* subplot=331: displays 3x3 plots per screen


Also, we can look at the phase solutions:
==Imaging==
 
At this point, we're ready to make a first image of our target field. Imaging in CASA is done by means of the <i>CLEAN</i> task. The task implements algorithms for wide field imaging such as W-Projection (Cornwell et al. 2008 http://arxiv.org/abs/0807.4161) and Multi Term Multi Frequency Synthesis ( Rau et al. 2011 http://arxiv.org/abs/1106.2745) both of which we will utilize to make out initial image. Even though our source of concern the giant radio galaxy  lies in the centre of our field. The observations were carried out in B configuration of P Band resulting in an effective maximum resolution of approximately 5x5 arcsecs. To effectively model the source spectral index in the sky we will utilize the MTMFS algorithm and use the W-Projection algorithm to make a wide field image (The full beam at P Band is about 3 degrees in diameter). So going by these requirements we can now compute the required cell and image size. To Nyqvist sample the beam we need at least 3 pixels across the synthesized beam width, along the major and minor axes of the point spread function. Consulting the resolution guide of NRAO science page we can see that the expected HPBW for B - Configuration, P -Band Observation is 18.5 arcsec. So we can sample it well by using a 5 arcsec cellsize. Having done that if we decide to make a wide field image to account for all the point sources we will set the image size parameter to 4096 pixels. To enable the wide-field algorithm we set the <i>gridmode='widefield'</i> this invokes the W-Projection algorithm, upon which we set the number of W-Projection planes to be 128. We set the imager mode as Multi Frequency Synthesis using the <i>mode='mfs'</i> parameter along with the number of taylor terms to be considered during imaging to be 2. This allows for the source spectral variation to be modeled by a second order polynomial. We launch the interactive clean process.
 
<source lang='python'>


<source lang="python">
clean(vis='TSUB0001_pband_target.ms', imagename='0313-0192_intial_clean', cell=['5.0arcsec','5.0arcsec'], imsize=[4096,4096], mode='mfs',
# In CASA
        nterms=2, gridmode='widefield', wprojplanes=128, stokes='I', niter=10000, spw='3~8,10~15', interactive=True,  
plotcal(caltable='G55.7+3.4_10s.initBP', xaxis='freq', yaxis='phase',
        minpb=0.1, usescrarch=T, weighting='briggs', robust=0.0)
        iteration='antenna', subplot=331)
</source>
</source>


We can see that SPW 4 is virtually wiped-out by RFI; furthermore, there are channels in SPW 1 that are consistently badly affected. Prior to running any automatic flagging, we will flag these manually. In addition, we will flag the first 9 channels of SPW 0, since this is affected by an issue which causes the noise to be substantially higher:
[[File:0313_radio_gal_clean.png|200px|thumb|right]]
The <i>CLEAN</i> command launches an interactive session after a 100 iterations of clean and produces a wide field map with the source at the center and a lot of bright sources far out in the field. As it is a snapshot image the bright sources have significant side lobes and so tight clean boxing helped. This can done in the interactive viewer interface that pops up. This topic has been covered extensively in the 3C391 imaging tutorial which can be found here (https://casaguides.nrao.edu/index.php?title=EVLA_Continuum_Tutorial_3C391#Initial_Imaging). If we proceed with interactive clean with subsequent steps to keep boxing out the strong sources that pop up in the image we finally see the extended emission from the target radio galaxy begin to emerge. Boxing and cleaning to ensure that the residuals of the boxed cleaning look like nice (~10000 clean iterations). We stop the interactive task and look at the final image it produced.
 
Note the image has some sources still showing strong side lobes and imaging artifacts around them. We expected this as we have carried out phase calibration so far only on our flux calibrator and have just transferred the solutions over to our target field. Since we used the <i>usescratch=T</i> the MODEL_DATA column in the measurement set now contains the initial image model which we will self calibrate against to produce a better image. Also in clean do notice that I the spw's utilized are the cleanest spectral windows that are totally RFI free.


<source lang="python">
==Self Calibration ==
# In CASA
 
flagdata(vis='G55.7+3.4_10s.ms', spw='0:0~8,1:41~63,4')
We now proceed to compute gain phase solutions for our target field using the gain cal task as the first step in self-calibration.
 
<source lang='python'>
gaincal(vis='TSUB0001_pband_target.ms', caltable='TSUB0001_pband_target.ScG0', field='3C48', solint='inf', refant='ea09',  
          spw='3~8,10~15',minsnr=3.0, gaintype='G', parang=True, calmode='p')
 
applycal(vis='TSUB0001_pband_target.ms', gaintable=['TSUB0001_pband.ScG0'], applymode='calflagstrict')
</source>
</source>


Note that this has created a backup flag file called "flagdata_2".  Now we apply the antenna position corrections and the bandpass calibration table to the data:
Having applied these gain solutions we will once again image the target measurement set which we now expect to have better gain solutions and consequently a better image. We do this by invoking the <i>CLEAN</i> command.


<source lang="python">
<source lang='python'>
# In CASA
clean(vis='TSUB0001_pband_target.ms', imagename='0313-0192_clean_sc0', cell=['5.0arcsec','5.0arcsec'], imsize=[4096,4096], mode='mfs',
applycal(vis='G55.7+3.4_10s.ms',
         nterms=2, gridmode='widefield', wprojplanes=128, stokes='I', niter=10000, spw='3~8,10~15', interactive=True,  
         gaintable=['G55.7+3.4_10s.pos', 'G55.7+3.4_10s.initBP'],
         minpb=0.1, usescrarch=T, weighting='briggs', robust=0.0)
         calwt=False)
</source>
</source>
[[File:0313_radio_gal_cselfcal0.png|200px|thumb|right]]
On boxing and cleaning we already notice that the imaging artifacts has reduced significantly. We also see that the target source appears to contain more structure and a greater amount of flux. Further self calibration iterations involving an amplitude & phase gain calibration, even an on target bandpass and leakage calibration are all possible steps that can be introduced into the self-cal imaging loop. These steps and introducing Multi Scale Clean for the extended source are possible improvements on the current strategy implemented.
== Appendix: Some P-band data issues you may want to know about ==
Unfortunately, there are a few known issues with JVLA P-band observing. Most problems were discovered during the P-band commissioning period and have been fixed for newer data sets, but the archive keeps part of this history alive. Here we will go over some of those issues, and (if possible) provide ways of fixing them.
=== Polarization labeling ===
For a long period (until recent), P-band feeds have been labelled as being circular (R and L), while they are linear (X and Y). A contributed task =fixlowband()= is available to recognize and fix this problem.
=== Swapped polarizations ===
Throughout the whole history of the new VLA low-band system, even up to this day, there have been mistakes in the cabling of the full signal chain. This results in that some antennas have the X-polarization signal come in as Y and vice versa. The way to notice this in visibility data is that for baselines with one swapped antenna most power will be in the cross-hand correlations (XY and YX) rather than the parallel-hand correlations (XX and YY). Once antennas with this feature are identified (manually), a contributed task <i>swappol()</i> is available to fix this problem.
=== Double data descriptor entries ===
The data description table is part of the measurement set, and provides a link between the recorded visibilities, the spectral window information and the polarization information. For some data sets, the data description table contains two entries for each P-band spectral window, one pointing towards a circular (RL) polarization definition, and one pointing towards a linear (XY) polarization definition. A contributed task <i>fixlowband()</i> is available to recognize and fix this problem.
=== Continuous Radio Frequency Interference (RFI) ===
The wide bandwidth of the low-band receiver is (unfortunately) guaranteed to contain significant amounts of RFI. There are a few RFI sources that are active all the time, and are visible in all array configurations. The default P-band observing setup of 16 x 16 MHz tries to capture as much of the continuous RFI in as few spectral windows as possible, allowing for a simple RFI mitigation strategy in which these spectral windows (spws 1,2 and 9,10, but possibly more) can be immediately flagged.
=== Two spectral window setup ===
In the early commissioning period, the default setup for P-band observing was to use 2 spectral windows of 1024 channels each to cover 256 MHz of bandwidth from 230 - 486 MHz. However, it was noticed that strong, narrow-band RFI events were causing data to be lost for the whole spectral window in which they occured. To make the system more robust against data loss from these events, the frequency range was divided into 16 x 16 MHz, and shifted downwards by 6 MHz to capture ever-present RFI into as few spectral windows as possible. If your data has only two P-band spectral windows, please be aware that a higher data loss due to RFI is possible. There is no way to repair this.
=== Bandpass ripples ===
Due to signal reflections in cables and within the VLA dish, sinusoidal amplitude (and phase) modulations are always present in P-band data. This is most easily seen in bandpass calibration plots of amplitude versus frequency. In some cases, mostly due to cable & connector problems, these modulations can be very strong (~up to 50 percent of the average amplitude level). These modulations tend not vary over the duration of an observation and can therefore be removed through bandpass (and polarization) calibration. If they are found to be variable (e.g., by inspecting bandpass solutions for separate calibrator scans), the offending antenna / polarization should be flagged.
=== High cross-polarization ===
On each antenna, the P-band feed (dipole) is visually aligned with respect to the primary focus support legs. This is normally done within 5-10 degrees accuracy. On rare occasions the dipole on one antenna has accidentally rotated to much larger angles because the locking bolt on the back of the feed was not completely tightened. The result is a high cross-polarization in the baseline visibilities that include this antenna. If this is the case, it is safest to flag this data, since there is a possibility that the dipole has rotated during the observations.
== Useful links ==
* [http://www.aoc.nrao.edu/lbr The EVLA Low-Band Receiver System Status & User Pages]
* [https://science.nrao.edu/facilities/vla/docs/manuals/obsguide/modes/vlofreq VLA Very Low Frequency Observing]
* [https://science.nrao.edu/facilities/vla/commissioning NRAO VLA Low-Band commissioning webpage]

Latest revision as of 23:29, 11 March 2016

Back to CASA guides

By Preshanth Jagannathan & Huib Intema

Last checked on CASA Version 4.3.1.


Overview

This webpage provides a basic description on how to use CASA to reduce data from the upper part of the new VLA low-band system, also known as P-band, covering roughly 220-480 MHz. The goal is to make a wide-field continuum stokes I image of a typical blank field using the full effective bandwidth.

Obtaining the raw data

For this guide we'll use some test data that was taken in B-configuration. To get a copy of the raw data, go to the NRAO archive query page, and enter the following search parameters (leave the rest on default):

Telescopes: Jansky VLA (tickbox)
Project Code: TSUB0001
Telescope Config: B (tickbox)
Observing Bands: P (tickbox)

The search should return (at least) 19 rows of results. Enter your valid e-mail address, set the download format to SDM-BDF, check the box on the 17th row (data from Dec. 21, 2013, or "13-Dec-21 03:11:18") at the bottom of the page, and click Get My Data. On the next page, click Retrieve over internet. The next page should report that the data staging is in progress. Wait until you receive an e-mail reporting that your archive data is copied, which should take a few minutes. Download the data onto your computer running CASA.

Starting CASA

Start CASA by typing

casa

on the (linux) command line. This should start a CASA interactive python (iPython) session, and open a separate log window. The CASA version is reported at startup, both in the python session and the log window:

CASA Version 4.3.1-REL (r32491)

Note that this guide has been written for CASA release 4.3.1, which is the current stable release at NRAO. Due to ongoing development of CASA, this tutorial may or may not work with other versions. You may want to confirm your version before proceeding.

Importing the raw data into CASA

We will begin by importing our data into the measurement sent set format (CASA standard) from the binary format (SDM-BDF) as downloaded from the archive. We do this by means of the importevla task.

importevla(asdm='TSUB0001.sb28588128.eb28590840.56647.13284232639', vis ='TSUB0001_pband.ms', savecmds=T, outfile='importflags.txt')

This task calls the external tool asdm2MS to perform the conversion. Together with the visibility data, also the flag commands from the VLA online system are imported. These flags are not directly applied, but stored in the importflags.txt file and applied later.

Preliminary data inspection

listobs(vis='TSUB0001_pband.ms', verbose = True, listfile = 'TSUB001_pband_import.listobs')

Alternatively you can also output to the logger by running the command without the listfile argument. The sample listobs output shown has flag verbose=F for the sake of brevity.

listobs(vis='TSUB0001_pband.ms',verbose=F)
================================================================================
           MeasurementSet Name:  /lustre/pjaganna/evla/P_Band/casa_guide/TSUB0001_pband.ms      MS Version 2
================================================================================
   Observer: Frazer Owen     Project: uid://evla/pdb/1695465  
Observation: EVLA(26 antennas)
Data records: 5382000       Total elapsed time = 2076 seconds
   Observed from   21-Dec-2013/03:11:20.0   to   21-Dec-2013/03:45:56.0 (UTC)

Fields: 3
  ID   Code Name                RA               Decl           Epoch   SrcId      nRows
  0    NONE 3C48D               01:37:41.299431 +33.09.35.13299 J2000   0         884000
  1    NONE 3C48                01:37:41.299431 +33.09.35.13299 J2000   1        2168400
  2    NONE 0313-192            03:15:52.039999 -19.06.44.59999 J2000   2        2329600
Spectral Windows:  (16 unique spectral windows and 1 unique polarization setups)
  SpwID  Name           #Chans   Frame   Ch0(MHz)  ChanWid(kHz)  TotBW(kHz) CtrFreq(MHz) BBC Num  Corrs          
  0      EVLA_P#A0C0#0     128   TOPO     222.000       125.000     16000.0    229.9375       12  RR  RL  LR  LL
  1      EVLA_P#A0C0#1     128   TOPO     238.000       125.000     16000.0    245.9375       12  RR  RL  LR  LL
  2      EVLA_P#A0C0#2     128   TOPO     254.000       125.000     16000.0    261.9375       12  RR  RL  LR  LL
  3      EVLA_P#A0C0#3     128   TOPO     270.000       125.000     16000.0    277.9375       12  RR  RL  LR  LL
  4      EVLA_P#A0C0#4     128   TOPO     286.000       125.000     16000.0    293.9375       12  RR  RL  LR  LL
  5      EVLA_P#A0C0#5     128   TOPO     302.000       125.000     16000.0    309.9375       12  RR  RL  LR  LL
  6      EVLA_P#A0C0#6     128   TOPO     318.000       125.000     16000.0    325.9375       12  RR  RL  LR  LL
  7      EVLA_P#A0C0#7     128   TOPO     334.000       125.000     16000.0    341.9375       12  RR  RL  LR  LL
  8      EVLA_P#A0C0#8     128   TOPO     350.000       125.000     16000.0    357.9375       12  RR  RL  LR  LL
  9      EVLA_P#A0C0#9     128   TOPO     366.000       125.000     16000.0    373.9375       12  RR  RL  LR  LL
  10     EVLA_P#A0C0#10    128   TOPO     382.000       125.000     16000.0    389.9375       12  RR  RL  LR  LL
  11     EVLA_P#A0C0#11    128   TOPO     398.000       125.000     16000.0    405.9375       12  RR  RL  LR  LL
  12     EVLA_P#A0C0#12    128   TOPO     414.000       125.000     16000.0    421.9375       12  RR  RL  LR  LL
  13     EVLA_P#A0C0#13    128   TOPO     430.000       125.000     16000.0    437.9375       12  RR  RL  LR  LL
  14     EVLA_P#A0C0#14    128   TOPO     446.000       125.000     16000.0    453.9375       12  RR  RL  LR  LL
  15     EVLA_P#A0C0#15    128   TOPO     462.000       125.000     16000.0    469.9375       12  RR  RL  LR  LL
Antennas: 26 'name'='station' 
   ID=   0-3: 'ea01'='N32', 'ea02'='N28', 'ea03'='E28', 'ea04'='E24', 
   ID=   4-7: 'ea05'='W08', 'ea07'='N12', 'ea08'='N16', 'ea09'='W28', 
   ID=  8-11: 'ea10'='E04', 'ea11'='W24', 'ea12'='E08', 'ea13'='W20', 
   ID= 12-15: 'ea14'='N24', 'ea15'='E20', 'ea16'='N08', 'ea18'='E36', 
   ID= 16-19: 'ea19'='W16', 'ea20'='N04', 'ea21'='E12', 'ea22'='N20', 
   ID= 20-23: 'ea23'='W36', 'ea24'='W04', 'ea25'='W32', 'ea26'='W12', 
   ID= 24-25: 'ea27'='N36', 'ea28'='E16'
 

You can inspect the output text file TSUB0001_20131221.listobs in your favorite text editor (e.g., gedit). When taking some time to familiarize yourself with the output format, you will see that:

  • The observation consists of 4 scans, namely [1] 3C48D (hardware setup), [2] 3C48 (primary calibrator), [3] 0313-192 (target), and [4] again 3C48 (primary calibrator).
  • The frequency coverage is 224 - 480 MHz, divided into 16 x 16 MHz spectral windows, each having 128 x 0.125 MHz channels
  • Visibilities are recorded every 2 seconds in full polarization (4 polarization products, (wrongly!) labelled RR,RL,LR,LL).
  • Of the 28 VLA antennas labelled ea01 - ea028, antennas ea06 and ea17 are not participating in this observation.
  • Source, antenna and spectral window IDs start at zero, but scan IDs start at one.


Pband plotants.png

The array configuration can be inspected using:

plotants(vis='TSUB0001_pband.ms', figfile='TSUB0001_pband_plotants.png')

As noted above, the polarizations of P-band in this data set are wrongly labelled as circular rather than linear. This may seem mostly harmless, but does make a difference for polarization calibration (which we will do later). The following (non-standard) task will check and fix this (and another related problem; see appendix on P-band data issues):

execfile( '/lustre/hintema/cspam/mytasks.py' )

fixlowband(vis='TSUB0001_pband.ms')

Re-run the listobs() task to check if the fix was correctly applied.

Addendum: If you're not working on the NRAO DSOC network, you won't have access to the lustre file system. In that case, download this tarball in your CASA working directory, open a shell there, and type the following commands:

tar -xzvf casa_vla_lowband.tar.gz

buildmytasks

Now go back to your CASA session and type:

execfile('mytasks.py')

fixlowband(vis='TSUB0001_pband.ms')

The re-run listobs output will show the correct polarization.

================================================================================
           MeasurementSet Name:  /lustre/pjaganna/evla/P_Band/casa_guide/TSUB0001_pband.ms      MS Version 2
================================================================================
   Observer: Frazer Owen     Project: uid://evla/pdb/1695465
Observation: EVLA(26 antennas)
Data records: 5382000       Total elapsed time = 2076 seconds
   Observed from   21-Dec-2013/03:11:20.0   to   21-Dec-2013/03:45:56.0 (UTC)

Fields: 3
  ID   Code Name                RA               Decl           Epoch   SrcId      nRows
  0    NONE 3C48D               01:37:41.299431 +33.09.35.13299 J2000   0         884000
  1    NONE 3C48                01:37:41.299431 +33.09.35.13299 J2000   1        2168400
  2    NONE 0313-192            03:15:52.039999 -19.06.44.59999 J2000   2        2329600
Spectral Windows:  (16 unique spectral windows and 1 unique polarization setups)
  SpwID  Name           #Chans   Frame   Ch0(MHz)  ChanWid(kHz)  TotBW(kHz) CtrFreq(MHz) BBC Num  Corrs
  0      EVLA_P#A0C0#0     128   TOPO     222.000       125.000     16000.0    229.9375       12  XX  XY  YX  YY
  1      EVLA_P#A0C0#1     128   TOPO     238.000       125.000     16000.0    245.9375       12  XX  XY  YX  YY
  2      EVLA_P#A0C0#2     128   TOPO     254.000       125.000     16000.0    261.9375       12  XX  XY  YX  YY
  3      EVLA_P#A0C0#3     128   TOPO     270.000       125.000     16000.0    277.9375       12  XX  XY  YX  YY
  4      EVLA_P#A0C0#4     128   TOPO     286.000       125.000     16000.0    293.9375       12  XX  XY  YX  YY
  5      EVLA_P#A0C0#5     128   TOPO     302.000       125.000     16000.0    309.9375       12  XX  XY  YX  YY
  6      EVLA_P#A0C0#6     128   TOPO     318.000       125.000     16000.0    325.9375       12  XX  XY  YX  YY
  7      EVLA_P#A0C0#7     128   TOPO     334.000       125.000     16000.0    341.9375       12  XX  XY  YX  YY
  8      EVLA_P#A0C0#8     128   TOPO     350.000       125.000     16000.0    357.9375       12  XX  XY  YX  YY
  9      EVLA_P#A0C0#9     128   TOPO     366.000       125.000     16000.0    373.9375       12  XX  XY  YX  YY
  10     EVLA_P#A0C0#10    128   TOPO     382.000       125.000     16000.0    389.9375       12  XX  XY  YX  YY
  11     EVLA_P#A0C0#11    128   TOPO     398.000       125.000     16000.0    405.9375       12  XX  XY  YX  YY
  12     EVLA_P#A0C0#12    128   TOPO     414.000       125.000     16000.0    421.9375       12  XX  XY  YX  YY
  13     EVLA_P#A0C0#13    128   TOPO     430.000       125.000     16000.0    437.9375       12  XX  XY  YX  YY
  14     EVLA_P#A0C0#14    128   TOPO     446.000       125.000     16000.0    453.9375       12  XX  XY  YX  YY
  15     EVLA_P#A0C0#15    128   TOPO     462.000       125.000     16000.0    469.9375       12  XX  XY  YX  YY
Antennas: 26 'name'='station'
   ID=   0-3: 'ea01'='N32', 'ea02'='N28', 'ea03'='E28', 'ea04'='E24',
   ID=   4-7: 'ea05'='W08', 'ea07'='N12', 'ea08'='N16', 'ea09'='W28',
   ID=  8-11: 'ea10'='E04', 'ea11'='W24', 'ea12'='E08', 'ea13'='W20',
   ID= 12-15: 'ea14'='N24', 'ea15'='E20', 'ea16'='N08', 'ea18'='E36',
   ID= 16-19: 'ea19'='W16', 'ea20'='N04', 'ea21'='E12', 'ea22'='N20',
   ID= 20-23: 'ea23'='W36', 'ea24'='W04', 'ea25'='W32', 'ea26'='W12',
   ID= 24-25: 'ea27'='N36', 'ea28'='E16'
 

Initial processing steps - Antenna Position, Requantizer Gain, Ionospheric Correction

When importing the data, we saved the flags from the online system to an ASCII text file. This gives us the opportunity to review the flag commands before applying them. For our data set, the flag file is called TSUB0001_20131221.flags. Please load this file into your favorite text editor. The bulk of the flag commands refer to times when the VLA is slewing (ANTENNA_NOT_ON_SOURCE) or when the movable secondary reflector of the VLA's Cassegrain system is not in place (SUBREFLECTOR_ERROR). The latter can cause antenna gain variations (amplitude and phase), so it is safest to apply all the flags. The final two rows in the flag file will remove visibilities that are pure zero, and flag antennas that are partly blocked by other antennas (shadowing; this occurs mostly in compact configurations when observing along a VLA arm).

flagdata(vis='TSUB0001_pband.ms', mode='list', inpfile='importflags.txt', action='apply', reason='any', flagbackup=True)

Antenna Position Corrections

Now that we have applied the import flags we will correct for the antenna position offsets. Antenna positional errors translates to an error in the measured visibilities and need to be accounted for before we proceed with any of the other calibration steps.

gencal(vis='TSUB0001_pband.ms',caltable='TSUB0001_pband.antpos',caltype='antpos')

The output shows that there are five antennas with positional offsets, this is the kind


2015-06-17 05:07:03 INFO gencal	offsets for antenna ea03 : -0.00240  -0.00410   0.00340
2015-06-17 05:07:03 INFO gencal	offsets for antenna ea04 : -0.00100  -0.00110   0.00180
2015-06-17 05:07:03 INFO gencal	offsets for antenna ea05 : -0.00100   0.00100   0.00200
2015-06-17 05:07:03 INFO gencal	offsets for antenna ea15 : -0.00190  -0.00240   0.00180
2015-06-17 05:07:03 INFO gencal	offsets for antenna ea18 : -0.00180  -0.00590   0.00500

Ionospheric TEC Corrections

Pband vla tecu.png

Low frequency observations are affected by the ionosphere. A delay in the signal path is introduced between the two polarization of light that varies both as a function of time and line of sight (direction dependent). The delay is proportional to the Total Electron Content (TEC) along the line of sight and is inversely proportional to the square of the frequency.GPS measurements at two different frequencies provides us with an estimate of the TEC per square metre. This correction has been implemented in CASA which we shall apply as a calibration table by means of the gencal task. The task requires a TEC map that we will generate utilizing casa recipes.

from recipes import tec_maps

tec_image, tec_rms_image = tec_maps.create(vis='TSUB0001_pband.ms',doplot=True)

gencal(vis='TSUB0001_pband.ms',caltable='TSUB0001_pband.tecim',caltype='tecim',infile=tec_image)
Pband tec.png

A word of caution regarding the TEC map generation. The IGS website updates measurements only two weeks after the date of observation.

Requantizer Gains

The next step will correct the visibility amplitudes for the signal leveling that occurs at the inputs of the WIDAR correlator, the so-called requantizer gains. These levels (per antenna, per polarization, per spectral window) are stored with the measurement set (in the SYSPOWER sub-table). Currently, this step is not essential, since the levels get set only once at the start of an observation, and bandpass calibration will correct for this. But it will make your bandpass plots look better if you have multiple spectral windows. And, more importantly, in the future it may be that the levels will become time-variable during an observation, so we'd better be prepared.

The correction is done by means of the gencal task, where information in the SYSPOWER sub-table gets translated into a gain table.

gencal(vis='TSUB0001_pband.ms/',caltype='rq',caltable='TSUB0001_pband.rq')


NOTE: The experimental task mstransform() combines split() and hanningsmooth() and several other data manipulation operations, but its output is not yet to be trusted for all operations.

Dead and swapped antennas

Now it is time to have a first visual look at the uncalibrated visibility data. It is important to identify dead antennas / polarizations early on, so we can exclude them from further data processing (which is the most efficient data 'reduction' :-) ). A convenient way of doing this is through the plotms task on bright calibrator(s) (again, see the listobs() output), in our case 3C48.

TSUB0001 pband 3C48 prebp.png
plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY', field='3C48', 
           plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',iteraxis='baseline', 
           plotfile='TSUB0001_pband_3C48_prebp.png')

This will load the plotms window that has queued up all the baselines of antenna ea01 and is currently displaying the first amplitude vs frequency plot with the colors representing the different spectral windows. Note that we are only plotting the XX and YY correlation of the antennas. This is because we expect most of the power in the linear cross correlation products to be in these two correlations. Notice that some spectral windows in particular are badly affected due to rfi. This is the issue that we will deal with after identifying dead antennas. If you scroll through the baselines using the green forward buttons in the plotms you will notice that the amplitude is particularly low when you encounter ea10 and ea13. If we make a quick plot of the baseline made by ea10 and ea13 we can see that there is no power in any of the polarizations so these two antennas were dead and can be flagged out. We also notice that ea25 has low XX polarization but also notice the excess power in the XY polarization. This tells us that the polarization inputs have been wrongly labeled we have a local task that we built already and we will utilize that to swap the polarization labels for antenna ea25. In addition to the dead antennas we also have a dummy scan during slew on a source named 3C48D, we shall flag that scan by hand too.

flagdata(vis='TSUB0001_pband.ms',mode='manual',antenna='ea10,ea13')
flagdata(vis='TSUB0001_pband.ms',mode='manual',field='3C48D')
swappol(vis='TSUB0001_pband.ms',antenna='ea25')

NOTE: swappol() is not part of the default CASA release, but was imported together with fixlowband(). It is a pure python implementation operating on visibilities, therefore it may take a while to finish. The way in which we run swappol() we overwrite the previous visibilities, so no new measurement set is created.

We also noticed sharp rfi peaks during our data examination, to prevent Gibbs ringing it is best to hanning smooth the data at this juncture before we proceed further with automatic flagging.

TSUB0001 pband 3C48 prebp.png
hanningsmooth(vis='TSUB0001_pband.ms',datacolumn='data')

We should replot the primary calibrator to see the effect of hanning smoothing on the data and the rfi.

plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
           field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
           iteraxis='baseline', plotfile='TSUB0001_pband_3C48_prebp_hanning.png')

Automatic flagging

Before throwing away bad spectral windows by hand, we'll let the automated flaggers in CASA have a go at it. The main task for this is flagdata(). While working on your data, flagdata() produces an abundance of output, not all of which I find easy to understand. To help with this, we can get the flag status of our data before and after auto-flagging by running flagdata() in the summary mode. This first call provides the flag statistics of the flagging up to now, before any auto-flagging:

summary_1 = flagdata(vis='TSUB0001_pband.ms', mode='summary')

This returns a python dictionary with flagged versus total visibilities along various axes (antenna, scan, spw, field, correlation, etc.). For example, if we want to know the percentage flagged per scan, run the following (note that the scans may not appear in sorted order):

axis = 'scan'
for id, stats in summary_1[ axis ].iteritems():
  print '%s %s: %5.1f percent flagged' % ( axis, id, 100. * stats[ 'flagged' ] / stats[ 'total' ] )

For this example, you will notice that scan 1 (the dummy scan on 3C48D) is 100 percent flagged, which is what we did during the initial flagging.

We will run flagdata() in the tfcrop mode, which will (per scan, per baseline, per spectral window, per polarization) look for visibility amplitude outliers. It uses a 5-piece polynomial in an attempt to remove any intrinsic bandpass (amplitude) structure (we did not calibrate for bandpass yet). We run the task twice to allow for slightly deeper flagging. For the first run, we tell CASA to make a backup of our visibility flag status up to here, giving us an option to restore them if we choose over-aggresive flagging parameters and consequently over-flag our data. The flag backup file name is reported in the log window, and can be found in the TSUB0001_20131221_PBAND.ms.flagversions directory.

flagdata(vis='TSUB0001_pband.ms', field='*', mode='tfcrop', datacolumn='data', timecutoff=4., freqcutoff=3., maxnpieces=5,
  action='apply', display='report', flagbackup=True, combinescans=True, ntime='3600s', correlation='ABS_XY,ABS_YX')

flagdata(vis='TSUB0001_pband.ms', field='*', mode='tfcrop', datacolumn='data', timecutoff=3., freqcutoff=3., maxnpieces=2,
  action='apply', display='report', flagbackup=True, combinescans=True, ntime='3600s', correlation='ABS_XY,ABS_YX')

flagdata(vis='TSUB0001_pband.ms', mode='extend')

Let's get another flag summary to see how much extra data got flagged:

summary_2 = flagdata(vis='TSUB0001_pband.ms' , mode='summary')

axis = 'scan'
for value, stats in summary_2[ axis ].iteritems():
  old_stats = summary_1[ axis ][ value ]
  print '%s %s: %5.1f percent flagged additionally' % ( axis, value, 100. * ( stats[ 'flagged' ] - old_stats[ 'flagged' ] ) / stats[ 'total' ] )

plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
           field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
           iteraxis='baseline', plotfile='TSUB0001_pband_3C48_prebp_hanning.png')
TSUB0001 pband 3C48 prbp tfcropped.png

There is quite a bit of RFI that gets missed in RFI-rich spectral windows. The solution to this is to provide the flagging routines with more contrast between healthy and affected data. For this, we will perform a preliminary bandpass calibration to take out the bandpass shape. We will do some coarse preliminary calibration apply it to the calibrator before flagging for RFI once more.

gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.G0', gaintype='G', calmode='p', solint='int', field='3C48',refant='ea09',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim'])

gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.K0', gaintype='K', solint='inf', field='3C48',refant='ea09',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0'])

bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.bp0', solint='inf', field='3C48',refant='ea09', minsnr=2.0,
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0','TSUB0001_pband.K0'])

applycal(vis='TSUB0001_pband.ms', field='*', applymode='calflagstrict',
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.G0','TSUB0001_pband.K0'] )

We will now flag the corrected data column that contains the coarsely calibrated visibilities which provide better contrast to the flagging algorithms to remove the RFI present. We will begin by running the RFLAG algorithm in the task flagdata. We will yet again in summary mode see how much more of the observed data was flagged.

flagdata(vis='TSUB0001_pband.ms', field='*', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply',  flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5)

flagdata(vis='TSUB0001_pband.ms', field='*', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply',  flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5)
summary_3 = flagdata(vis='TSUB0001_pband.ms' , mode='summary')

axis = 'scan'
for value, stats in summary_2[ axis ].iteritems():
  old_stats = summary_1[ axis ][ value ]
  print '%s %s: %5.1f percent flagged additionally' % ( axis, value, 100. * ( stats[ 'flagged' ] - old_stats[ 'flagged' ] ) / stats[ 'total' ] )

plotms(vis='TSUB0001_pband.ms',xaxis='freq',yaxis='amp',antenna='ea01',correlation='XX,YY',
           field='3C48', plotrange=[0.2,0.5,0.0,100.0], coloraxis='spw',xlabel='Frequency',ylabel='Amplitude',
           iteraxis='baseline', plotfile='3C48_postbandpass_rflag.png', ydatacolumn='corrected')
3c48 postbandpass rflag.png

Taking another visual look at the data using plotms we examine the effect of the automated flagging on the calibrator. We find that most spectral windows are RFI free and look great but for spectral windows 2, 9, 13, 15. We dig deeper into the cause of the RFI in these instance by using the locate tool in the plotms tool. It comes to our notice that most of the RFI in spw 13 comes from antenna ea04. So we can flag ea04 for spa 13. This still leaves 3 problematic spw's 2,9,15. These spectral windows have been designed to catch most of the RFI in the P-Band and in the event that they are terribly contaminated we can ignore these spw's and proceed with the actual calibration. Nonetheless a final pass of flagdata in RFLAG mode over the contaminated spw's does not hurt.

flagdata(vis='TSUB0001_pband.ms', field='3C48', mode='rflag', datacolumn='corrected', timedevscale=4., freqdevscale=3.,
  action='apply',  flagbackup=True, combinescans=True, ntime='3600s', maxnpieces=5, spw='2,9,15')

Flux Density Calibration

The initial flagging has cleaned up most of the stray RFI across the band. This allows us to proceed with the actual calibration of the data. Before we get to the calibration tables its essential to do the flux density calibration of our calibrator 3C48. This is done by means of the setjy task. Before we run the task on hand we first clear the preliminary calibration that was carried out to enable better flagging. We do that but running the clearcal task in casa.

clearcal(vis='TSUB0001_pband.ms')

setjy(vis='TSUB0001_pband.ms', standard='Scaife-Heald 2012', field='3C48')

Delay and bandpass calibration

First we use the full bandwidth on a single scan on the primary calibrator to determine a single delay per antenna per polarization. This will determine a single (approximate) phase slope across frequency, mainly caused by propagation effects in the (time-variable) ionosphere, cable length differences and electronics in the signal paths from antenna feeds to correlator. Note that for a short (5-10 minutes), single scan on the calibrator we can get away with solving for a time-invariant delay per antenna per polarization. We will again use scan 4, which is the longest scan on 3C48.

gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.K1', field='3C48', solint='inf', refant='ea09', gaintype='K', parang=True)

plotcal(caltable='TSUB0001_pband.K1', xaxis='antenna', yaxis='delay', markersize=2.0)

Since we picked ea09 as our reference antenna, the delays for this antenna ID (=0) are arbitrarily set to zero. All other delays should be within 30 nanosec or so (which they should be for this data set). Larger values should be treated with suspicion, probably indicating a problem with the antenna / polarization. We will use the bandpass calibration (next) to verify this.

Next is to determine the bandpass calibration. We use the same source and scan, and apply the delay calibration before solving for the bandpass. Note that we request a minimum SNR of 3, which will make the solve fail for the worst channels, but not all.

bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.B1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, parang = True,
  gaintable=['TSUB0001_pband.K1'], interp=['nearest,nearestflag'])

After solving, we inspect the bandpass calibration amplitudes and phases, and flag any obvious residual outliers. Outliers may be found above or below the average bandpass curves, and tend to arise in the same channel (frequency) ranges for all antennas. Don't spend more than 1 minute per antenna. And don't worry about missing some bad points; these bad channels will likely get flagged in a later stage anyway. Note that the bandpass amplitudes and phases may differ between polarizations of the same antenna. Also note that the bandpass phases across frequency should not have an overall gradient (this was removed by the delay calibration). Also also note that bandpass phases may wrap around from +/-180 to -/+180 degrees. If that is problematic, re-run the phase plotcal() with plotrange = [ 200.,500.,0.,360. ]. Also note that there are no bandpass solutions for antennas ea10, ea13 and ea25.

plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='amp', iteration='antenna', markersize=2.0)

plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='phase', iteration='antenna', plotrange=[ 200.,500.,-180.,180. ], markersize = 2.0)

Flagging is made easier by maximizing the plotcal() window. We don't set the scale for plotting the bandpass amplitudes, which is convenient when flagging outliers as it will auto-rescale. While plotting the bandpass phases we do fix the scale, as it provides a better feeling for the relevant magnitude of phase outliers. Flagging of outliers is done using the Mark Region and Flag buttons. We are using this mechanism to efficiently flag data manually, since it is done per antenna rather than per baseline. These 'flags' will not be permanent until we call applycal() later on, but are effective while applying the calibration on the fly, as we will do in subsequent calibration steps.

Gain calibration

With the delay and bandpass calibration in place, we will now look more closely at the time-variable behaviour of the VLA. We use the same scan on our primary calibrator 3C48 over the full effective bandwidth to determine gain calibrations: one complex value per antenna per polarization per integration time. The delay and bandpass tables are applied on the fly.

gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.G1', field='3C48', solint = 'int', refant = reference_antenna, minsnr = 3.0, gaintype = 'G',
calmode = 'ap', gaintable = [ delay_table_v1, bandpass_table_v1 ], interp = ['','','','nearest,nearestflag', 'nearest,nearestflag' ], parang = True )

Similar to the bandpass flagging, we will flag outlier gain solutions in both amplitude and phase. The regular dips in the gain amplitudes every 4 minutes is caused by a very strong RFI signal from the local VLA site radio; this issue is being addressed. For the amplitudes, the final scatter around an average close to one should be a few percent. Note that antenna ea12 has quite a large bump in the gain amplitudes on one polarization. For this and other cases, remember that the gain solutions for both polarizations can be flagged together, as we will loose the equivalent data of the surviving polarization anyway.

plotcal(caltable='TSUB0001_pband.ms', xaxis='time', yaxis='amp', iteration='antenna', markersize=2.0 )

plotcal(caltable='TSUB0001_pband.ms', xaxis='time', yaxis='phase', iteration='antenna', plotrange=[ None,None,-180.,180.], markersize=2.0)

Note that when plotting gains against time, it is convenient to use auto-scaling of the time axis by putting None in the first two fields of plotrange.

Next, we will prepare a smoothed and interpolated version of the gain calibration table, which will be applied later on to the target field data. This prevents flagging of target field data when one of the edges of a calibrator scan is flagged for one or more antennas. The result can be inspected with plotcal.

smoothcal(vis='TSUB0001_pband.ms', tablein='TSUB0001_pband.G1', caltable='TSUB0001_pband.Gs1', smoothtype='median', smoothtime = 60.*60.)

plotcal(caltable='TSUB0001_pband.Gs1', xaxis='time', yaxis='amp', iteration='antenna', plotrange=[ None,None,0.8,1.2 ], markersize=2.0)

plotcal(caltable='TSUB0001_pband.Gs1', xaxis='time', yaxis='phase', iteration='antenna', plotrange=[ None,None,-10.,10. ], markersize=2.0)

Instrumental polarization calibration

The VLA at P-band measures the incoming radio waves using dual-dipole feeds mounted near the primary focus of the dishes. While much effort is put into mechanically making these dual-dipoles orthogonal, and to strongly suppress any cross-talk between the electronic signal paths of both dipoles, there is some (frequency-dependent) polarization leakage between them. Furthermore, the P-band feeds are mounted and aligned on each antenna by hand, allowing for 5-10 degrees difference in the orientation of the dipoles between antennas. For both intensity and polarization imaging, it is important to calibrate the polarization products in our data to optimize the (i) orthogonality between X and Y for each antenna and (ii) the alignment between Xs and Ys of different antennas. Note that this does not (yet) include calibration of the absolute polarization angle, for which we need a linearly polarized source with known polarization angle.

First we calibrate the cross delay, which is the difference in delay between the two polarizations of the reference antenna, in our case ea01. Remember that the regular delay calibration arbitrarily set the delays for both polarizations of the reference antenna to zero. In reality, there will be a small but noticeable physical path length difference between these two polarizations, for which we try to correct. This calibration uses the same scan on 3C48, assuming that 3C48 is unpolarized at P-band (which is a good approximation).

gaincal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Kc1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, gaintype='KCROSS', parang=True,
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Kc1'], 
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag'] )

plotcal(caltable='TSUB0001_pband.Kc1', xaxis='antenna', yaxis='delay', markersize=2.0)

The plot shows a small ~2 nanosec delay between X and Y of the reference antenna. Note that the table is generated in such a way that this correction gets applied to all antennas.

Next, we determine the leakage of the X signal into Y, and Y into X. For a well-behaved instrument, the magnitude of the leakage (the so-called D-terms) should be much less than one. Since the leakage is frequency dependent, we solve for leakage for each frequency channel, somewhat similar to bandpass calibration. The way to do this in CASA is through the polcal() task with the option poltype = 'Df'. Again, we can inspect (and edit) the leakage calibration table with plotcal()

polcal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Df1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, poltype = 'Df',
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Kc1'],
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag' ] )

plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,0.,1. ], markersize=2.0)

Before starting any flagging, it is best to first cycle past all antennas to get a feel for the magnitude of the leakage terms. For most antennas, both leakage terms are roughly equal in amplitude across the band, with values between 0 and 0.15. Few have higher leakages (up to 0.3). The most likely explanation is a larger misalignment of the P-band feed of these antennas relative to the others. Examples are ea05, ea11, and ea24. These antennas do not need to be flagged, but are merely expected to benefit most from this polarization calibration. Some examples of suspicious data that is probably best to flag: antenna ea03 has a peculiar bump in one of the leakage terms, ea12 has an upturn at the low-frequency end of the band, ea14 has a peak near the low-frequency end of the band.

It is better not to flag based on phases, because the closer the amplitude of the leakage terms get to zero, the more erratic the phase behaviour will be. An alternative is to flag based on the real and imaginary parts, which you may or may not want to do.

plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='real', iteration='antenna', plotrange=[ 200.,500.,-0.5,0.5 ], markersize=2.0)

plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='imag', iteration='antenna', plotrange=[ 200.,500.,-0.5,0.5 ], markersize=2.0)

Re-iterate bandpass and leakage calibration

The largest instrumental effects on our data are now captured in several relevant calibration tables. But since we have used uncalibrated / partially calibrated data to determine these calibration tables, there are improvements to be obtained when re-determining some calibration tables. In this guide we re-calibrate the bandpass and polarization leakage since these are expected to have changed most. Our re-calibrations will be relative to the existing bandpass and leakage calibrations, so that we can more easily see deviations from the ideal case.

First we update the bandpass calibration by determining a new, relative bandpass table while applying all previous calibrations. In the ideal case that our data and previous calibrations were perfect, the new bandpass table would contain gain amplitudes and phases of one and zero, respectively, for all (unflagged) antennas, polarizations and channels.

bandpass(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.B1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, parang = True,
  gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1'], interp=['','','','nearest,nearestflag'])

plotcal(caltable='TSUB0001_pband.B1' , xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,0.,2. ], markersize=2.0)

plotcal(caltable='TSUB0001_pband.B1', xaxis='freq', yaxis='phase', iteration='antenna', plotrange=[ 200.,500.,-180.,180. ], markersize=2.0)

In the plotcal() calls above, the vertical axis scales have been chosen to indicate the relevance of the ideal case of unity amplitudes and zero phases. For most antennas, the bandpass solutions are close to ideal. Some antennas show some noticeable structure across frequency. A general guideline for flagging (or not) is that we expect the relative bandpass to be close to one in amplitude and vary smoothly in frequency.

polcal(vis='TSUB0001_pband.ms', caltable='TSUB0001_pband.Df1', field='3C48', solint='inf', refant='ea09', minsnr=3.0, poltype = 'Df',
  gaintable=[ 'TSUB0001_pband.antpos','TSUB0001_pband.rq','TSUB0001_pband.tecim','TSUB0001_pband.K1',
              'TSUB0001_pband.B1','TSUB0001_pband.Kc1','TSUB0001_pband.Df1'],
  interp=['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag' ] )

plotcal(caltable='TSUB0001_pband.Df1', xaxis='freq', yaxis='amp', iteration='antenna', plotrange=[ 200.,500.,None,None ], markersize=2.0)

Transfer of calibrations to the target field

So far, we have used one scan on the primary calibrator 3C48 to derive various calibration tables. These calibrations will now be applied to all scans of all sources in our measurement set, which includes 3C48 itself and our target field 0313-192. As described above, the task applycal() creates a CORRECTED_DATA column in which the calibrated visibilities get stored. This may take a while.

applycal(vis='TSUB0001_pband.ms', parang=True, applymode='calflagstrict', flagbackup=True, gaintable=['TSUB0001_pband.antpos','TSUB0001_pband.rq',
             'TSUB0001_pband.tecim','TSUB0001_pband.K1', 'TSUB0001_pband.B1','TSUB0001_pband.Gs1','TSUB0001_pband.Kc1','TSUB0001_pband.Df1'],
         interp = ['','','','nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag', 'nearest,nearestflag','nearest,nearestflag'])

Now we split off the calibrated target field data, meaning that the visibilities of source 0313-192 get copied from the CORRECTED_DATA column to the DATA column of a new measurement set. This is convenient for further processing.

split(vis='TSUB0001_pband.ms', outputvis='TSUB0001_pband_target.ms', datacolumn='corrected', field='0313-192')

Cross-polarization flagging

All flagging up to this point was done on the calibrator 3C48, and some of these flags got propagated to the target field data. we will now extend the flagging of the target field data by flagging based on the cross-polarization visibilities XY and YX. Most RFI is strongly polarized, and will stand out clearly against the typically very weakly polarized target field.

flagdata(vis='TSUB0001_pband_target.ms', mode = 'rflag', field = '*', correlation = 'ABS_XY,ABS_YX', datacolumn = 'corrected', winsize = 5,
  action = 'apply', display = 'report', flagbackup = False )


Imaging

At this point, we're ready to make a first image of our target field. Imaging in CASA is done by means of the CLEAN task. The task implements algorithms for wide field imaging such as W-Projection (Cornwell et al. 2008 http://arxiv.org/abs/0807.4161) and Multi Term Multi Frequency Synthesis ( Rau et al. 2011 http://arxiv.org/abs/1106.2745) both of which we will utilize to make out initial image. Even though our source of concern the giant radio galaxy lies in the centre of our field. The observations were carried out in B configuration of P Band resulting in an effective maximum resolution of approximately 5x5 arcsecs. To effectively model the source spectral index in the sky we will utilize the MTMFS algorithm and use the W-Projection algorithm to make a wide field image (The full beam at P Band is about 3 degrees in diameter). So going by these requirements we can now compute the required cell and image size. To Nyqvist sample the beam we need at least 3 pixels across the synthesized beam width, along the major and minor axes of the point spread function. Consulting the resolution guide of NRAO science page we can see that the expected HPBW for B - Configuration, P -Band Observation is 18.5 arcsec. So we can sample it well by using a 5 arcsec cellsize. Having done that if we decide to make a wide field image to account for all the point sources we will set the image size parameter to 4096 pixels. To enable the wide-field algorithm we set the gridmode='widefield' this invokes the W-Projection algorithm, upon which we set the number of W-Projection planes to be 128. We set the imager mode as Multi Frequency Synthesis using the mode='mfs' parameter along with the number of taylor terms to be considered during imaging to be 2. This allows for the source spectral variation to be modeled by a second order polynomial. We launch the interactive clean process.

clean(vis='TSUB0001_pband_target.ms', imagename='0313-0192_intial_clean', cell=['5.0arcsec','5.0arcsec'], imsize=[4096,4096], mode='mfs',
         nterms=2, gridmode='widefield', wprojplanes=128, stokes='I', niter=10000, spw='3~8,10~15', interactive=True, 
         minpb=0.1, usescrarch=T, weighting='briggs', robust=0.0)
0313 radio gal clean.png

The CLEAN command launches an interactive session after a 100 iterations of clean and produces a wide field map with the source at the center and a lot of bright sources far out in the field. As it is a snapshot image the bright sources have significant side lobes and so tight clean boxing helped. This can done in the interactive viewer interface that pops up. This topic has been covered extensively in the 3C391 imaging tutorial which can be found here (https://casaguides.nrao.edu/index.php?title=EVLA_Continuum_Tutorial_3C391#Initial_Imaging). If we proceed with interactive clean with subsequent steps to keep boxing out the strong sources that pop up in the image we finally see the extended emission from the target radio galaxy begin to emerge. Boxing and cleaning to ensure that the residuals of the boxed cleaning look like nice (~10000 clean iterations). We stop the interactive task and look at the final image it produced.

Note the image has some sources still showing strong side lobes and imaging artifacts around them. We expected this as we have carried out phase calibration so far only on our flux calibrator and have just transferred the solutions over to our target field. Since we used the usescratch=T the MODEL_DATA column in the measurement set now contains the initial image model which we will self calibrate against to produce a better image. Also in clean do notice that I the spw's utilized are the cleanest spectral windows that are totally RFI free.

Self Calibration

We now proceed to compute gain phase solutions for our target field using the gain cal task as the first step in self-calibration.
gaincal(vis='TSUB0001_pband_target.ms', caltable='TSUB0001_pband_target.ScG0', field='3C48', solint='inf', refant='ea09', 
           spw='3~8,10~15',minsnr=3.0, gaintype='G', parang=True, calmode='p')

applycal(vis='TSUB0001_pband_target.ms', gaintable=['TSUB0001_pband.ScG0'], applymode='calflagstrict')

Having applied these gain solutions we will once again image the target measurement set which we now expect to have better gain solutions and consequently a better image. We do this by invoking the CLEAN command.

clean(vis='TSUB0001_pband_target.ms', imagename='0313-0192_clean_sc0', cell=['5.0arcsec','5.0arcsec'], imsize=[4096,4096], mode='mfs',
         nterms=2, gridmode='widefield', wprojplanes=128, stokes='I', niter=10000, spw='3~8,10~15', interactive=True, 
         minpb=0.1, usescrarch=T, weighting='briggs', robust=0.0)
0313 radio gal cselfcal0.png

On boxing and cleaning we already notice that the imaging artifacts has reduced significantly. We also see that the target source appears to contain more structure and a greater amount of flux. Further self calibration iterations involving an amplitude & phase gain calibration, even an on target bandpass and leakage calibration are all possible steps that can be introduced into the self-cal imaging loop. These steps and introducing Multi Scale Clean for the extended source are possible improvements on the current strategy implemented.

Appendix: Some P-band data issues you may want to know about

Unfortunately, there are a few known issues with JVLA P-band observing. Most problems were discovered during the P-band commissioning period and have been fixed for newer data sets, but the archive keeps part of this history alive. Here we will go over some of those issues, and (if possible) provide ways of fixing them.

Polarization labeling

For a long period (until recent), P-band feeds have been labelled as being circular (R and L), while they are linear (X and Y). A contributed task =fixlowband()= is available to recognize and fix this problem.

Swapped polarizations

Throughout the whole history of the new VLA low-band system, even up to this day, there have been mistakes in the cabling of the full signal chain. This results in that some antennas have the X-polarization signal come in as Y and vice versa. The way to notice this in visibility data is that for baselines with one swapped antenna most power will be in the cross-hand correlations (XY and YX) rather than the parallel-hand correlations (XX and YY). Once antennas with this feature are identified (manually), a contributed task swappol() is available to fix this problem.

Double data descriptor entries

The data description table is part of the measurement set, and provides a link between the recorded visibilities, the spectral window information and the polarization information. For some data sets, the data description table contains two entries for each P-band spectral window, one pointing towards a circular (RL) polarization definition, and one pointing towards a linear (XY) polarization definition. A contributed task fixlowband() is available to recognize and fix this problem.

Continuous Radio Frequency Interference (RFI)

The wide bandwidth of the low-band receiver is (unfortunately) guaranteed to contain significant amounts of RFI. There are a few RFI sources that are active all the time, and are visible in all array configurations. The default P-band observing setup of 16 x 16 MHz tries to capture as much of the continuous RFI in as few spectral windows as possible, allowing for a simple RFI mitigation strategy in which these spectral windows (spws 1,2 and 9,10, but possibly more) can be immediately flagged.

Two spectral window setup

In the early commissioning period, the default setup for P-band observing was to use 2 spectral windows of 1024 channels each to cover 256 MHz of bandwidth from 230 - 486 MHz. However, it was noticed that strong, narrow-band RFI events were causing data to be lost for the whole spectral window in which they occured. To make the system more robust against data loss from these events, the frequency range was divided into 16 x 16 MHz, and shifted downwards by 6 MHz to capture ever-present RFI into as few spectral windows as possible. If your data has only two P-band spectral windows, please be aware that a higher data loss due to RFI is possible. There is no way to repair this.

Bandpass ripples

Due to signal reflections in cables and within the VLA dish, sinusoidal amplitude (and phase) modulations are always present in P-band data. This is most easily seen in bandpass calibration plots of amplitude versus frequency. In some cases, mostly due to cable & connector problems, these modulations can be very strong (~up to 50 percent of the average amplitude level). These modulations tend not vary over the duration of an observation and can therefore be removed through bandpass (and polarization) calibration. If they are found to be variable (e.g., by inspecting bandpass solutions for separate calibrator scans), the offending antenna / polarization should be flagged.

High cross-polarization

On each antenna, the P-band feed (dipole) is visually aligned with respect to the primary focus support legs. This is normally done within 5-10 degrees accuracy. On rare occasions the dipole on one antenna has accidentally rotated to much larger angles because the locking bolt on the back of the feed was not completely tightened. The result is a high cross-polarization in the baseline visibilities that include this antenna. If this is the case, it is safest to flag this data, since there is a possibility that the dipole has rotated during the observations.

Useful links