VLA CASA Bandpass Slope-CASA6.4.1: Difference between revisions

From CASA Guides
Jump to navigationJump to search
No edit summary
No edit summary
Line 1: Line 1:
<b>This CASA Guide is for CASA version 6.4.1</b>
<b>This CASA Guide is for CASA version 6.4.1</b>


{{<i>'''If you are new to CASA, or to VLA data reduction in CASA, it is '''strongly''' recommended that you start with the [[Getting Started in CASA]] guide, the [https://casaguides.nrao.edu/index.php/VLA_high_frequency_Spectral_Line_tutorial_-_IRC%2B10216-CASA6.5.2 IRC+10216 spectral line tutorial], or the [https://casaguides.nrao.edu/index.php/VLA_Continuum_Tutorial_3C391-CASA6.4.1 VLA 3C391 Continuum Tutorial] before proceeding with this tutorial.'''</i>}}
<i>'''If you are new to CASA, or to VLA data reduction in CASA, it is '''strongly''' recommended that you start with the [[Getting Started in CASA]] guide, the [https://casaguides.nrao.edu/index.php/VLA_high_frequency_Spectral_Line_tutorial_-_IRC%2B10216-CASA6.5.2 IRC+10216 spectral line tutorial], or the [https://casaguides.nrao.edu/index.php/VLA_Continuum_Tutorial_3C391-CASA6.4.1 VLA 3C391 Continuum Tutorial] before proceeding with this tutorial.'''</i>




== Overview ==
== Overview ==


For the standard VLA flux density calibrators 3C138, 3C147, 3C286 and 3C48, CASA includes angular and spectral models that are referenced during calibration. The models account for the observational source characteristics, resulting in improved calibration solutions that therefore more accurately represent the instrumental and atmospheric corrections. These VLA standard calibrators, however, exhibit a negative spectral index and are relatively weak at high frequencies.
For the standard VLA flux density calibrators 3C138, 3C147, 3C286 and 3C48, the CASA distribution includes angular and spectral models that are referenced during calibration. The models account for the observational source characteristics, resulting in improved calibration solutions that therefore more accurately represent the instrumental and atmospheric corrections. These VLA standard calibrators, however, exhibit a negative spectral index (flux density decreasing with increasing frequency) and become relatively weak at high frequencies.


Although the standard VLA flux density calibrators are usually still sufficiently bright enough for absolute flux density calibration even at the higher frequency bands, a good bandpass determination&mdash;which is important for spectral line observations or measuring the spectral index of continuum sources&mdash;requires high signal-to-noise ratios derived from either a long integration time or a very bright source (refer to the [https://science.nrao.edu/facilities/vla/docs/manuals/obsguide/modes/line#section-8 Spectral Line (Bandpass Setup) section within the Guide to Observing with the VLA]). Generally, instead of a long integration on a fainter source, additional observations of non-standard, but bright bandpass calibrators are used. Unfortunately, the spectral characetistics of these sources are undetermined, and no ''a-priori'' flux density model is available. If not accounted for, using undetermined spectral behavior will introduce bias in the bandpass calibration. This tutorial describes how to determine these source spectral characteristics and how to correct the bandpass solution for this effect using these additional sources.  
Although the standard VLA flux density calibrators are usually still sufficiently bright enough for absolute flux density calibration even at the higher frequency bands, a good bandpass determination&mdash;which is important for spectral line observations or measuring the spectral index of continuum sources&mdash;requires high signal-to-noise ratio bandpass solutions derived from either a long integration time or a very bright source (refer to the [https://science.nrao.edu/facilities/vla/docs/manuals/obsguide/modes/line#section-8 Spectral Line (Bandpass Setup) section within the Guide to Observing with the VLA]). Generally, instead of a long integration on a fainter source, additional observations of non-standard, but bright bandpass calibrators are used. Unfortunately, the spectral characteristics of these sources will be undetermined, and no ''a-priori'' flux density model is available. If not accounted for, using undetermined spectral knowledge will introduce bias in the bandpass calibration. This tutorial describes how to determine a source's spectral characteristics and how to correct the bandpass solution for such an effect using these additional sources.  




== Obtaining the Data ==
== Obtaining the Data ==


The data used in this guide are taken for a target field in Ka-band with four 2-GHz basebands paired to two chunks of 4 GHz contiguous frequency coverage centered at 29 and 36.5 GHz. That is, each baseband consists of a series of 16 consecutive 128-MHz subbands for a total of 64 individual spectral windows.</ br>
The data used in this guide are taken for a target field in Ka-band with four 2-GHz basebands paired to two chunks of 4 GHz contiguous frequency coverage centered at 29 and 36.5 GHz for a total of 8 GHz frequency coverage. That is, each baseband consists of a series of 16 consecutive 128-MHz subbands linked to another baseband for a total of 64 individual spectral windows.</ br>
As this tutorial concerns bandpass calibration, all scans on fields other than the flux density and bandpass calibrator were removed from the measurement set (MS). All pre-calibration steps including flagging, antenna position offsets, requantizer gains, opacity corrections, and gain-elevation curves were applied. The original data (<tt>TVER0004.sb14459364.eb14492359.56295.26287841435</tt>) can be obtained through the [https://data.nrao.edu NRAO archive] and has a raw size of 57.04 GB.
As this tutorial only concerns bandpass calibration, all scans on fields other than the flux density and bandpass calibrator fields were removed from the measurement set (MS). All pre-calibration steps including flagging, antenna position offsets, requantizer gains, opacity corrections, and gain-elevation curves were applied. The original data (<tt>TVER0004.sb14459364.eb14492359.56295.26287841435</tt>) can be obtained through the [https://data.nrao.edu NRAO archive] and has a raw size of 57.04 GB.


The trimmed measurement set can be downloaded directly from [http://casa.nrao.edu/Data/EVLA/G192/G192-BP.ms.tar.gz http://casa.nrao.edu/Data/EVLA/G192/G192-BP.ms.tar.gz] (dataset size: 3.4 GB)
The trimmed measurement set used here can be downloaded directly from [http://casa.nrao.edu/Data/EVLA/G192/G192-BP.ms.tar.gz http://casa.nrao.edu/Data/EVLA/G192/G192-BP.ms.tar.gz] (dataset size: 3.4 GB)


Your first step will be to uncompress and untar the file in a terminal (before you start CASA):
Your first step will be to uncompress and untar the file in a terminal (before you start CASA):
Line 24: Line 24:
</source>
</source>


Then move to your working directory (if not the same as you put the raw data in) and optionally move/copy or link the data to a preferred shortcut name, for example:
Then move to your working directory (if not the same as you put the raw data in) and optionally move/copy or link the data to a preferred shortcut name. This is particularly useful if the original observation name has it's full extent like '',TVER0004.sb14459364.eb14492359.56295.26287841435'', for example:


<source lang="bash">
<source lang="bash">
ln -s <path-to-data>/G192-BP.ms uvvis.ms   
ln -s <path-to-data>/G192-BP.ms my-vis.ms   
</source>
</source>


Line 44: Line 44:
</source>
</source>


This will initialize CASA and set the necessary paths appropriately. This will also create two files; one is ''ipython-<unique-stamp>.log'' which contains a record of all the text entered at the CASA prompt, and another as ''casapy-<unique-stamp>.log'' which will contain all the messages that are printed to the CASA logger window. It is recommended to keep these log files intact as a reminder of the steps completed in the data reduction. These log files may also be helpful when submitting a helpdesk ticket.
This will initialize CASA and set the necessary paths appropriately. This will also create two files; one is ''ipython-<unique-timestamp>.log'' which contains a record of all the text entered at the CASA prompt, and another as ''casapy-<unique-timestamp>.log'' which will contain all the messages that are printed to the CASA logger window. It is recommended to keep these log files intact as a reminder of the steps completed in the data reduction. These log files may also be helpful when submitting a helpdesk ticket.


Once CASA has started, a logger window will appear. Note that you can rescale this window or change the font size (under the '''View''' menu option) as desired. I personally like to remove clutter columns by moving the mouse to the logger window and press "Ctrl-N", "Ctrl-Y","Ctrl-E", (''N''ew ''Y''ears ''E''ve is a way to remember).
Once CASA has started, a logger window will appear. Note that you can rescale this window or change the font size (under the '''View''' menu option) as desired. I personally like to remove clutter columns by moving the mouse to the logger window and press "Ctrl-N", "Ctrl-Y","Ctrl-E", (''N''ew ''Y''ears ''E''ve is a way to remember).


== Examining the Measurement Set (MS) ==
== Examining the Measurement Set (MS) ==
From here on, instead of the ''G192-BP.ms'' name in the directory, will be replacing it with the variable name ''msvis'' in this tutorial to make the instructions less dependent on the name of the file so that if another measurement set name is used, only the definition here needs to be edited to the other file name. In order to do that we will define some parameters as variables inside of CASA:
<source lang="python">
# In CASA
visbase = 'G192-BP'      (or whatever base name the data set or link to be used has, like ''my-vis'' above)
msvis = visbase + '.ms'  (this should match and find the measurement set created earlier)
</source>


We use [https://casadocs.readthedocs.io/en/v6.4.1/api/tt/casatasks.information.listobs.html listobs] to summarize our MS:
We use [https://casadocs.readthedocs.io/en/v6.4.1/api/tt/casatasks.information.listobs.html listobs] to summarize our MS:
<source lang="python">
<source lang="python">
# In CASA: listobs on the initial data set
# In CASA: listobs on the initial data set
listobs('G192-BP.ms', listfile='G192_listobs.txt')
listobs(vis=msvis, listfile=visbase+'_list.txt')
</source>
</source>


This will write the output to a file called <tt>G192_listobs.txt</tt>, which we can print to the terminal using various Unix/Linux commands such as <tt>cat</tt>, <tt>less</tt>, or <tt>more</tt>:
This will write the output to a file called <tt><visbase>_list.txt</tt>, which we can examine using various Unix/Linux print commands such as <tt>cat</tt>, <tt>less</tt>, or <tt>more</tt> or use an editor and keep it on the desktop for frequent consultation with e.g. <tt>emacs</tt>, <tt>vi</tt>, or <tt>nedit</tt>,


<source lang="python">
<source lang="python">
# In CASA
# In CASA
cat G192_listobs.txt
cat G192-BP_list.txt
</source>
</source>


<pre>
<pre>
================================================================================
================================================================================
           MeasurementSet Name:  /lustre/aoc/sciops/jott/casa/topicalguide/bandpass/new/G192-BP.ms      MS Version 2
           MeasurementSet Name:  <path-to-data>/G192-BP.ms      MS Version 2
================================================================================
================================================================================
   Observer: Dr. Debra Shepherd     Project: uid://evla/pdb/7303457   
   Observer: Dr. Observer     Project: uid://evla/pdb/7303457   
Observation: EVLA
Observation: EVLA
Data records: 1769355      Total elapsed time = 4563 seconds
Data records: 1769355      Total elapsed time = 4563 seconds
Line 132: Line 141:
</pre>
</pre>
This small MS contains only scans on the flux density calibrator 3C147 (field 0) and the bandpass calibrator 3C84 (field 1). Both fields have 64 spectral windows (spws); each spw is comprised of 128 channels, each channel being 1 MHz wide, for a total bandwidth of 128 MHz / spw.
This small MS contains only scans on the flux density calibrator 3C147 (field 0) and the bandpass calibrator 3C84 (field 1). Both fields have 64 spectral windows (spws); each spw is comprised of 128 channels, each channel being 1 MHz wide, for a total bandwidth of 128 MHz / spw.
As the intents for these fields are clearly included in the listing, we now will introduce new variable to recall the general use of these intents without having to remember their details like field ID numbers or name strings:
<source lang="python">
# In CASA
field_flx = '3C147' (or '0' for using the field name or field ID respectively)
field_bp  = '3c84-J0319+413' (or '1')
</source>


== Setting the Model of the Flux Density Calibrator ==
== Setting the Model of the Flux Density Calibrator ==
Line 140: Line 158:
<source lang="python">
<source lang="python">
# In CASA: model for the flux density calibrator
# In CASA: model for the flux density calibrator
setjy(vis='G192-BP.ms', field='0', scalebychan=True,
setjy(vis=msvis, field=id_flx, scalebychan=True,
       standard='Perley-Butler 2017', model='3C147_A.im')
       standard='Perley-Butler 2017', model='3C147_A.im')
</source>
</source>
Line 152: Line 170:
<source lang="python">
<source lang="python">
# In CASA
# In CASA
plotms(vis='G192-BP.ms', field='0', antenna='ea03',  
plotms(vis=msvis, field=id_flx, antenna='ea03',  
       xaxis='freq', yaxis='amp', ydatacolumn='model',coloraxis='ant2')
       xaxis='freq', yaxis='amp', ydatacolumn='model',coloraxis='ant2')
</source>
</source>
Line 164: Line 182:
<source lang="python">
<source lang="python">
# In CASA: plotting antenna locations
# In CASA: plotting antenna locations
plotants(vis='G192-BP.ms')
plotants(vis=msvis)
</source>
</source>
Although the plot is a bit crowded (Figure 2), zooming in (with the magnifying glass icon) shows that ea05 is located close to the center and if we use the flagdata task with mode='summary' it can be seen that ea05 has a comparably small number of flags. Therefore we will use this antenna as our reference.
Although the plot is a bit crowded (Figure 2), zooming in (with the magnifying glass icon) shows that ea05 is located close to the center and if we use the flagdata task with mode='summary' it can be seen that ea05 has a comparably small number of flags. Therefore we will use this antenna as our reference.
Line 174: Line 192:
<source lang="python">
<source lang="python">
# In CASA: phase only calibration
# In CASA: phase only calibration
gaincal(vis='G192-BP.ms', caltable='calG192.G0',  
gaincal(vis=msvis, caltable='calG192.G0',  
         field='1', spw='*:60~68', \
         field='1', spw='*:60~68', \
         gaintype='G', refant='ea05', calmode='p',  
         gaintype='G', refant='ea05', calmode='p',  
Line 231: Line 249:
<source lang="python">
<source lang="python">
# In CASA: residual delays
# In CASA: residual delays
gaincal(vis='G192-BP.ms', caltable='calG192.K0',  
gaincal(vis=msvis, caltable='calG192.K0',  
         field='1', spw='*:5~122', gaintype='K',  
         field='1', spw='*:5~122', gaintype='K',  
         gaintable=['calG192.G0'],
         gaintable=['calG192.G0'],
Line 256: Line 274:
<source lang="python">
<source lang="python">
# In CASA: antenna bandpasses
# In CASA: antenna bandpasses
bandpass(vis='G192-BP.ms', caltable='calG192.B0',  
bandpass(vis=msvis, caltable='calG192.B0',  
         gaintable=['calG192.G0', 'calG192.K0'],  
         gaintable=['calG192.G0', 'calG192.K0'],  
         field='1', refant='ea05', solnorm=False,  
         field='1', refant='ea05', solnorm=False,  
Line 308: Line 326:
<source lang="python">
<source lang="python">
# In CASA: flux and bandpass calibrators gain
# In CASA: flux and bandpass calibrators gain
gaincal(vis='G192-BP.ms', caltable='calG192.G1p', field='0,1',  
gaincal(vis=msvis, caltable='calG192.G1p', field='0,1',  
         gaintable=['calG192.K0', 'calG192.B0'],  
         gaintable=['calG192.K0', 'calG192.B0'],  
         gaintype='G', refant='ea05', calmode='p', solint='int', minsnr=3)
         gaintype='G', refant='ea05', calmode='p', solint='int', minsnr=3)
Line 317: Line 335:
<source lang="python">
<source lang="python">
# In CASA: flux and bandpass calibrators gain
# In CASA: flux and bandpass calibrators gain
gaincal(vis='G192-BP.ms', caltable='calG192.G1', field='0,1',  
gaincal(vis=msvis, caltable='calG192.G1', field='0,1',  
         gaintable=['calG192.K0', 'calG192.B0','calG192.G1p'],  
         gaintable=['calG192.K0', 'calG192.B0','calG192.G1p'],  
         gaintype='G', refant='ea05', calmode='ap', solint='inf', minsnr=3)
         gaintype='G', refant='ea05', calmode='ap', solint='inf', minsnr=3)
Line 349: Line 367:
<source lang="python">
<source lang="python">
# In CASA: bandpass calibrator gain amplitudes scaling
# In CASA: bandpass calibrator gain amplitudes scaling
flux1 = fluxscale(vis='G192-BP.ms', caltable='calG192.G1',  
flux1 = fluxscale(vis=msvis, caltable='calG192.G1',  
                   fluxtable='calG192.F1', reference='0',  
                   fluxtable='calG192.F1', reference='0',  
                   transfer='1', listfile='3C84.fluxinfo', fitorder=1)
                   transfer='1', listfile='3C84.fluxinfo', fitorder=1)
Line 422: Line 440:
<source lang="python">
<source lang="python">
# In CASA: spectral information
# In CASA: spectral information
setjy(vis='G192-BP.ms', field='1', scalebychan=True,  
setjy(vis=msvis, field='1', scalebychan=True,  
       standard = 'fluxscale', fluxdict=flux1)
       standard = 'fluxscale', fluxdict=flux1)
</source>
</source>
Line 430: Line 448:
<source lang="python">
<source lang="python">
# In CASA
# In CASA
plotms(vis='G192-BP.ms', field='1', antenna='ea05&ea02',  
plotms(vis=msvis, field='1', antenna='ea05&ea02',  
       xaxis='freq', yaxis='amp', ydatacolumn='model')
       xaxis='freq', yaxis='amp', ydatacolumn='model')
</source>
</source>
Line 438: Line 456:
<source lang="python">
<source lang="python">
# In CASA: phase only recalibration
# In CASA: phase only recalibration
gaincal(vis='G192-BP.ms', caltable='calG192.G0.b',  
gaincal(vis=msvis, caltable='calG192.G0.b',  
         field='1', spw='*:60~68',  
         field='1', spw='*:60~68',  
         gaintype='G', refant='ea05', calmode='p',  
         gaintype='G', refant='ea05', calmode='p',  
Line 444: Line 462:


# In CASA: residual delays recalibration
# In CASA: residual delays recalibration
gaincal(vis='G192-BP.ms', caltable='calG192.K0.b',  
gaincal(vis=msvis, caltable='calG192.K0.b',  
         gaintable=['calG192.G0.b'],  
         gaintable=['calG192.G0.b'],  
         field='1', spw='*:5~122', gaintype='K',  
         field='1', spw='*:5~122', gaintype='K',  
Line 450: Line 468:


# In CASA: antenna bandpasses recalibration
# In CASA: antenna bandpasses recalibration
bandpass(vis='G192-BP.ms', caltable='calG192.B0.b',  
bandpass(vis=msvis, caltable='calG192.B0.b',  
         gaintable=['calG192.G0.b', 'calG192.K0.b'],  
         gaintable=['calG192.G0.b', 'calG192.K0.b'],  
         field='1', refant='ea05', solnorm=False,  
         field='1', refant='ea05', solnorm=False,  
Line 499: Line 517:
-- Edits to Guide: Anna Kapinska (5.5.0, 2019/06/28) <br />
-- Edits to Guide: Anna Kapinska (5.5.0, 2019/06/28) <br />
-- Edits to Guide: Trent Seelig (6.2.0, 2021/07/08) <br />
-- Edits to Guide: Trent Seelig (6.2.0, 2021/07/08) <br />
-- Version 6.4.1, Lorant (Jan 2023), also using standard variables for parameters now <br />
-->
-->

Revision as of 18:46, 11 January 2023

This CASA Guide is for CASA version 6.4.1

If you are new to CASA, or to VLA data reduction in CASA, it is strongly recommended that you start with the Getting Started in CASA guide, the IRC+10216 spectral line tutorial, or the VLA 3C391 Continuum Tutorial before proceeding with this tutorial.


Overview

For the standard VLA flux density calibrators 3C138, 3C147, 3C286 and 3C48, the CASA distribution includes angular and spectral models that are referenced during calibration. The models account for the observational source characteristics, resulting in improved calibration solutions that therefore more accurately represent the instrumental and atmospheric corrections. These VLA standard calibrators, however, exhibit a negative spectral index (flux density decreasing with increasing frequency) and become relatively weak at high frequencies.

Although the standard VLA flux density calibrators are usually still sufficiently bright enough for absolute flux density calibration even at the higher frequency bands, a good bandpass determination—which is important for spectral line observations or measuring the spectral index of continuum sources—requires high signal-to-noise ratio bandpass solutions derived from either a long integration time or a very bright source (refer to the Spectral Line (Bandpass Setup) section within the Guide to Observing with the VLA). Generally, instead of a long integration on a fainter source, additional observations of non-standard, but bright bandpass calibrators are used. Unfortunately, the spectral characteristics of these sources will be undetermined, and no a-priori flux density model is available. If not accounted for, using undetermined spectral knowledge will introduce bias in the bandpass calibration. This tutorial describes how to determine a source's spectral characteristics and how to correct the bandpass solution for such an effect using these additional sources.


Obtaining the Data

The data used in this guide are taken for a target field in Ka-band with four 2-GHz basebands paired to two chunks of 4 GHz contiguous frequency coverage centered at 29 and 36.5 GHz for a total of 8 GHz frequency coverage. That is, each baseband consists of a series of 16 consecutive 128-MHz subbands linked to another baseband for a total of 64 individual spectral windows.</ br> As this tutorial only concerns bandpass calibration, all scans on fields other than the flux density and bandpass calibrator fields were removed from the measurement set (MS). All pre-calibration steps including flagging, antenna position offsets, requantizer gains, opacity corrections, and gain-elevation curves were applied. The original data (TVER0004.sb14459364.eb14492359.56295.26287841435) can be obtained through the NRAO archive and has a raw size of 57.04 GB.

The trimmed measurement set used here can be downloaded directly from http://casa.nrao.edu/Data/EVLA/G192/G192-BP.ms.tar.gz (dataset size: 3.4 GB)

Your first step will be to uncompress and untar the file in a terminal (before you start CASA):

tar -xzvf G192-BP.ms.tar.gz

Then move to your working directory (if not the same as you put the raw data in) and optionally move/copy or link the data to a preferred shortcut name. This is particularly useful if the original observation name has it's full extent like ,TVER0004.sb14459364.eb14492359.56295.26287841435, for example:

ln -s <path-to-data>/G192-BP.ms my-vis.ms

Starting CASA

To start CASA, type:

casa

or better, to make sure to be running the CASA version for which this tutorial was designed (list the installed versions to choose from by typing casa -ls):

casa -r 6.4.1-12-pipeline-2022.2.0.64

This will initialize CASA and set the necessary paths appropriately. This will also create two files; one is ipython-<unique-timestamp>.log which contains a record of all the text entered at the CASA prompt, and another as casapy-<unique-timestamp>.log which will contain all the messages that are printed to the CASA logger window. It is recommended to keep these log files intact as a reminder of the steps completed in the data reduction. These log files may also be helpful when submitting a helpdesk ticket.

Once CASA has started, a logger window will appear. Note that you can rescale this window or change the font size (under the View menu option) as desired. I personally like to remove clutter columns by moving the mouse to the logger window and press "Ctrl-N", "Ctrl-Y","Ctrl-E", (New Years Eve is a way to remember).

Examining the Measurement Set (MS)

From here on, instead of the G192-BP.ms name in the directory, will be replacing it with the variable name msvis in this tutorial to make the instructions less dependent on the name of the file so that if another measurement set name is used, only the definition here needs to be edited to the other file name. In order to do that we will define some parameters as variables inside of CASA:

# In CASA
visbase = 'G192-BP'       (or whatever base name the data set or link to be used has, like ''my-vis'' above)
msvis = visbase + '.ms'   (this should match and find the measurement set created earlier)


We use listobs to summarize our MS:

# In CASA: listobs on the initial data set
listobs(vis=msvis, listfile=visbase+'_list.txt')

This will write the output to a file called <visbase>_list.txt, which we can examine using various Unix/Linux print commands such as cat, less, or more or use an editor and keep it on the desktop for frequent consultation with e.g. emacs, vi, or nedit,

# In CASA
cat G192-BP_list.txt
================================================================================
           MeasurementSet Name:  <path-to-data>/G192-BP.ms      MS Version 2
================================================================================
   Observer: Dr. Observer     Project: uid://evla/pdb/7303457  
Observation: EVLA
Data records: 1769355       Total elapsed time = 4563 seconds
   Observed from   03-Jan-2013/06:31:48.0   to   03-Jan-2013/07:47:51.0 (UTC)

   ObservationID = 0         ArrayID = 0
  Date        Timerange (UTC)          Scan  FldId FieldName             nRows     SpwIds   Average Interval(s)    ScanIntent
  03-Jan-2013/06:31:48.0 - 06:36:42.0     6      0 3C147                   704865  [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]  [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5.94, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] [CALIBRATE_FLUX#UNSPECIFIED,OBSERVE_TARGET#UNSPECIFIED]
              07:40:27.0 - 07:47:51.0    64      1 3c84-J0319+413         1064490  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]  [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] [CALIBRATE_BANDPASS#UNSPECIFIED,OBSERVE_TARGET#UNSPECIFIED]
           (nRows = Total number of rows per scan) 
Fields: 2
  ID   Code Name                RA               Decl           Epoch   SrcId      nRows
  0    E    3C147               05:42:36.137916 +49.51.07.23356 J2000   0         704865
  1    F    3c84-J0319+413      03:19:48.160102 +41.30.42.10305 J2000   1        1064490
Spectral Windows:  (64 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_KA#A1C1#2     128   TOPO   34476.000      1000.000    128000.0  34539.5000       10  RR  LL
  1      EVLA_KA#A1C1#3     128   TOPO   34604.000      1000.000    128000.0  34667.5000       10  RR  LL
  2      EVLA_KA#A1C1#4     128   TOPO   34732.000      1000.000    128000.0  34795.5000       10  RR  LL
  3      EVLA_KA#A1C1#5     128   TOPO   34860.000      1000.000    128000.0  34923.5000       10  RR  LL
<snip>
  13     EVLA_KA#A1C1#15    128   TOPO   36140.000      1000.000    128000.0  36203.5000       10  RR  LL
  14     EVLA_KA#A1C1#16    128   TOPO   36268.000      1000.000    128000.0  36331.5000       10  RR  LL
  15     EVLA_KA#A1C1#17    128   TOPO   36396.000      1000.000    128000.0  36459.5000       10  RR  LL
  16     EVLA_KA#A2C2#18    128   TOPO   36476.000      1000.000    128000.0  36539.5000       11  RR  LL
  17     EVLA_KA#A2C2#19    128   TOPO   36604.000      1000.000    128000.0  36667.5000       11  RR  LL
  18     EVLA_KA#A2C2#20    128   TOPO   36732.000      1000.000    128000.0  36795.5000       11  RR  LL
<snip>
  29     EVLA_KA#A2C2#31    128   TOPO   38140.000      1000.000    128000.0  38203.5000       11  RR  LL
  30     EVLA_KA#A2C2#32    128   TOPO   38268.000      1000.000    128000.0  38331.5000       11  RR  LL
  31     EVLA_KA#A2C2#33    128   TOPO   38396.000      1000.000    128000.0  38459.5000       11  RR  LL
  32     EVLA_KA#B1D1#34    128   TOPO   26976.000      1000.000    128000.0  27039.5000       13  RR  LL
  33     EVLA_KA#B1D1#35    128   TOPO   27104.000      1000.000    128000.0  27167.5000       13  RR  LL
  34     EVLA_KA#B1D1#36    128   TOPO   27232.000      1000.000    128000.0  27295.5000       13  RR  LL
<snip>
  45     EVLA_KA#B1D1#47    128   TOPO   28640.000      1000.000    128000.0  28703.5000       13  RR  LL
  46     EVLA_KA#B1D1#48    128   TOPO   28768.000      1000.000    128000.0  28831.5000       13  RR  LL
  47     EVLA_KA#B1D1#49    128   TOPO   28896.000      1000.000    128000.0  28959.5000       13  RR  LL
  48     EVLA_KA#B2D2#50    128   TOPO   28976.000      1000.000    128000.0  29039.5000       14  RR  LL
  49     EVLA_KA#B2D2#51    128   TOPO   29104.000      1000.000    128000.0  29167.5000       14  RR  LL
  50     EVLA_KA#B2D2#52    128   TOPO   29232.000      1000.000    128000.0  29295.5000       14  RR  LL
<snip>
  61     EVLA_KA#B2D2#63    128   TOPO   30640.000      1000.000    128000.0  30703.5000       14  RR  LL
  62     EVLA_KA#B2D2#64    128   TOPO   30768.000      1000.000    128000.0  30831.5000       14  RR  LL
  63     EVLA_KA#B2D2#65    128   TOPO   30896.000      1000.000    128000.0  30959.5000       14  RR  LL

Sources: 128
  ID   Name                SpwId RestFreq(MHz)  SysVel(km/s) 
  0    3C147               0     -              -            
  0    3C147               1     -              -            
  0    3C147               2     -              -            
<snip>
  0    3C147               61    -              -            
  0    3C147               62    -              -            
  0    3C147               63    -              -            
  1    3c84-J0319+413      0     -              -            
  1    3c84-J0319+413      1     -              -            
  1    3c84-J0319+413      2     -              -            
<snip>
  1    3c84-J0319+413      61    -              -            
  1    3c84-J0319+413      62    -              -            
  1    3c84-J0319+413      63    -              -            
<snip>

This small MS contains only scans on the flux density calibrator 3C147 (field 0) and the bandpass calibrator 3C84 (field 1). Both fields have 64 spectral windows (spws); each spw is comprised of 128 channels, each channel being 1 MHz wide, for a total bandwidth of 128 MHz / spw.

As the intents for these fields are clearly included in the listing, we now will introduce new variable to recall the general use of these intents without having to remember their details like field ID numbers or name strings:

# In CASA
field_flx = '3C147' (or '0' for using the field name or field ID respectively)
field_bp  = '3c84-J0319+413' (or '1')


Setting the Model of the Flux Density Calibrator

To start, we insert the spectral (using the 'Perley-Butler 2017' standard) and spatial (3C147_A.im for Ka-band) models for the flux density calibrator 3C147 (field 0) with the setjy task:

# In CASA: model for the flux density calibrator
setjy(vis=msvis, field=id_flx, scalebychan=True,
      standard='Perley-Butler 2017', model='3C147_A.im')
Figure 1: plotms() output for model amplitudes vs freqency for 3C147
  • scalebychan=True: If scalebychan=False setjy would use a single value per spectral window.

Inspecting the logger report shows that 3C147 has amplitudes ranging from ~1.0–1.47 Jy across all spws.

We can plot the model data using plotms (Figure 1):

# In CASA
plotms(vis=msvis, field=id_flx, antenna='ea03', 
       xaxis='freq', yaxis='amp', ydatacolumn='model',coloraxis='ant2')

This plot shows baselines to antenna ea03. Since we provided both a spectral and a spatial model for this well resolved calibrator, each baseline has a somewhat different behavior.

Calibrating delays and initial bandpass solutions

As a first step, we need to specify a reference antenna for all phase calibrations. Since observations were performed with VLA in the most extended configuration A, it is desirable to use an antenna that is near the center of the array, and has valid calibrator data on all baselines with the least amount of data flagged. The array can be mapped with plotants:

# In CASA: plotting antenna locations
plotants(vis=msvis)

Although the plot is a bit crowded (Figure 2), zooming in (with the magnifying glass icon) shows that ea05 is located close to the center and if we use the flagdata task with mode='summary' it can be seen that ea05 has a comparably small number of flags. Therefore we will use this antenna as our reference.

Figure 2: Antenna locations plotted with plotants() task.

We start with a phase-only, time-dependent calibration solution for the bandpass calibrator. Solutions for each integration will remove most of the decorrelation of the signal. For best results, we will derive the phase variations from a narrow range of channels (60~68) near the centers of each spws:

# In CASA: phase only calibration
gaincal(vis=msvis, caltable='calG192.G0', 
        field='1', spw='*:60~68', \
        gaintype='G', refant='ea05', calmode='p', 
        solint='int', minsnr=3)
  • refant='ea05' : Use ea05 as the reference antenna
  • solint='int' : Do a per-integration solve (every 6 seconds, since we've time-averaged the data).
  • minsnr=3 : Apply a minimum signal-to-noise cutoff. Solutions with less than this value will be flagged.
  • gaintable is not set here as we have already applied pre-calibrations.

Plot the phase solutions (using full phase range -180 to 180 instead of autorange):

# In CASA
plotms(vis='calG192.G0', xaxis='time', yaxis='phase', 
        iteraxis='antenna', plotrange=[-1,-1,-180,180])

Note that antenna ea01 is fully flagged. Click on the green arrows to page through the rest of the antennas (also note the reference antenna ea05 has all phases set to 0 deg).

We will now produce multipanel plots of the phase solutions, writing the plots to output files as well as on the screen (Figures 3a, 3b, & 3c). The output files generated are PNG files and can be viewed within CASA by executing an external viewer program, e.g., !xv plotG192_plotcal_G0p1.png; or by running an image viewing application such as xv, Preview, Gimp, Photoshop, etc., external to CASA at the OS level.

# In CASA
plotms(vis='calG192.G0', xaxis='time', yaxis='phase',
       antenna='0~11', gridrows=3, gridcols=3, iteraxis='antenna',
       customsymbol=True, symbolshape='circle',symbolsize=2, coloraxis='spw',
       plotfile='plotG192_plotcal_G0p1.png', width=1300, height=800)

#
plotms(vis='calG192.G0', xaxis='time', yaxis='phase', 
       antenna='12~20', gridrows=3, gridcols=3, iteraxis='antenna',
       customsymbol=True, symbolshape='circle',symbolsize=2, coloraxis='spw',
       plotfile='plotG192_plotcal_G0p2.png', width=1300, height=800)

#
plotms(vis='calG192.G0', xaxis='time', yaxis='phase', 
       antenna='21~26', gridrows=2, gridcols=3, iteraxis='antenna',
       customsymbol=True, symbolshape='circle',symbolsize=2, coloraxis='spw',
       plotfile='plotG192_plotcal_G0p3.png', width=1300, height=600)
Figure 3a: Gain phase calibration solutions for antennas ea01 to ea11
Figure 3b: Gain phase calibration solutions for antennas ea12 to ea20
Figure 3c: Gain phase calibration solutions for antennas ea21 to ea26


Here the width=1300 and height=800 parameters specify the dimensions, in pixels, of the output file.

We can now solve for the residual delays using the parameter gaintype='K' option in gaincal. Note that this currently does not do a global fringe-fitting solution for delays, but instead does a baseline-based delay solution per spw for all baselines to the reference antenna, treating these as antenna-based delays. In most cases, with high enough S/N to get baseline-based delay solutions, this will suffice. We avoid the edge channels of each spectral window by selecting channels 5~122:

# In CASA: residual delays
gaincal(vis=msvis, caltable='calG192.K0', 
        field='1', spw='*:5~122', gaintype='K', 
        gaintable=['calG192.G0'],
        refant='ea05', solint='inf', minsnr=3)

Note that we are now applying our initial phase table calG192.G0.

Alternatively, you can derive a delay across all spws of a baseband. If this is desired, use parameter combine='spw' in gaincal and run the task for each baseband separately. The solutions from the second and following runs can be appended to the same calibration table via parameter append=True.

Figure 4: Antenna based delays after running gaincal().

Now plot the delays, in nanoseconds, as a function of antenna index (you will get one for each spw and polarization):

# In CASA
plotms(vis='calG192.K0', xaxis='ant1', yaxis='delay', coloraxis='spw')

The delays range from around -5 to 4 nanoseconds (Figure 4).

Now solve for the antenna bandpasses using the previously generated tables calG192.G0 and calG192.K0:

# In CASA: antenna bandpasses
bandpass(vis=msvis, caltable='calG192.B0', 
         gaintable=['calG192.G0', 'calG192.K0'], 
         field='1', refant='ea05', solnorm=False, 
         bandtype='B', solint='inf')

WARNING: You must set solnorm=False here or later on you will find some offsets among spws due to the way the amplitude scaling adjusts weights internally during solving.


You will see in the terminal window some reports of solutions failing due to "Insufficient unflagged antennas"—note that these are for bad channels that have been pre-flagged.

Plot the resulting bandpasses in amplitude and phase. Note that the first panel with ea01 is empty as it is completely flagged. Proceed to ea06 to see the plots as shown in Figures 5a, 5b, 6a, and 6b:

# In CASA
plotms(vis='calG192.B0', xaxis='freq', yaxis='amp', 
       spw='0~31', iteraxis='antenna', coloraxis='spw')

#
plotms(vis='calG192.B0', xaxis='freq', yaxis='amp', 
       spw='32~63', iteraxis='antenna', coloraxis='spw')

#
plotms(vis='calG192.B0', xaxis='freq', yaxis='phase', 
       spw='0~31', iteraxis='antenna', coloraxis='spw', 
       plotrange=[-1,-1,-180,180], customsymbol=True, 
       symbolshape='circle',symbolsize=2)

#
plotms(vis='calG192.B0', xaxis='freq', yaxis='phase', 
       spw='32~63', iteraxis='antenna', coloraxis='spw', 
       plotrange=[-1,-1,-180,180], customsymbol=True, 
       symbolshape='circle',symbolsize=2)
Figure 5a: Gain amplitude bandpass calibration solutions for antenna ea06 in spectral windows from 0 to 31.
Figure 5b: Gain amplitude bandpass calibration solutions for antenna ea06 in spectral windows from 32 to 63.
Figure 6a: Gain phase bandpass calibration solutions for antenna ea06 in spectral windows from 0 to 31
Figure 6b: Gain phase bandpass calibration solutions for antenna ea06 in spectral windows from 32 to 63.

Bootstrapping the bandpass calibrator spectrum

Since there is no a priori spectral information for our chosen bandpass calibrator of 3C84, we need to bootstrap to find its spectral index, then recalibrate with this information in order to avoid folding the intrinsic spectral shape of 3C84 into our calibration.

First, we again do a phase-only calibration solution, this time for both the bandpass and the flux density calibrator. This will correct for decorrelation of the signals. We again use the channel range 60~68 and apply the bandpass and delay calibration tables:

# In CASA: flux and bandpass calibrators gain
gaincal(vis=msvis, caltable='calG192.G1p', field='0,1', 
        gaintable=['calG192.K0', 'calG192.B0'], 
        gaintype='G', refant='ea05', calmode='p', solint='int', minsnr=3)

Now we are ready to solve for both phase and gain for each scan:

# In CASA: flux and bandpass calibrators gain
gaincal(vis=msvis, caltable='calG192.G1', field='0,1', 
        gaintable=['calG192.K0', 'calG192.B0','calG192.G1p'], 
        gaintype='G', refant='ea05', calmode='ap', solint='inf', minsnr=3)


With gain solutions for the flux density and bandpass calibrators, we can now use fluxscale to scale the gain amplitudes of the bandpass calibrator using those of the flux density calibrator:


# In CASA: bandpass calibrator gain amplitudes scaling
flux1 = fluxscale(vis=msvis, caltable='calG192.G1', 
                  fluxtable='calG192.F1', reference='0', 
                  transfer='1', listfile='3C84.fluxinfo', fitorder=1)
  • flux1 = fluxscale(...): the Python dictionary returned by the fluxscale task will be stored in the flux1 variable. You can inspect the dictionary flux1 by typing "print flux1" at the CASA command line.
  • fluxtable='calG192.F1': this is the output scaled gain table. Since we are only using this to find the spectral index of 3C84, we won't be using this table.
  • listfile='3C84.fluxinfo': an output file that contains the derived flux values and fit information.
  • fitorder=1: only find a spectral index, ignoring curvature in the spectrum.
  • reference='0': the reference field from which the flux scaling is transferred (here: the flux density calibrator 3C147, field 0)
  • transfer='1': the target field to which the flux scaling is transferred (here: the bandpass calibrator 3C84, field 1)


The last line in the file (and displayed in the logger) shows:

Fitted spectrum for 3c84-J0319+413 with fitorder=1: Flux density = 29.0286 +/- 0.0308709 (freq=32.5128 GHz) spidx=-0.538803 +/- 0.00883078
Figure 7: Bootstrapped 3C84 flux density spectrum.

Using the information in the returned flux1 dictionary, we can plot the derived spectrum seen in Figure 7:

(Note, IPython 5.1.0 requires the use of "%cpaste" to allow the copy/paste of loops, conditions, etc.. Press "Enter" (or "Return") after "--" at the end, this stops (or exits) the copy/paste prompt and will return you to the CASA prompt.)

# In CASA
%cpaste

# Press Enter or Return, then copy/paste the following:
freq = flux1['freq'] / 1e9
spw_list = range(0,64)
spw_str = []
for i in spw_list:
   thisspw = str(i)
   spw_str.append(thisspw)
--
# In CASA
%cpaste

# Press Enter or Return, then copy/paste the following:
bootstrapped_fluxes = []
for j in spw_str:
    thisflux = flux1['1'][j]['fluxd'][0]
    if thisflux ==None:
        continue
    else:
        bootstrapped_fluxes.append(thisflux)
--
# In CASA - this section creates the plot seen in Figure 7
import matplotlib.pyplot as pl
%cpaste

# Press Enter or Return, then copy/paste the following:
pl.clf()
pl.plot(freq, bootstrapped_fluxes, 'bo')
pl.xlabel('Frequency (GHz)')
pl.ylabel('Flux Density (Jy)')
pl.title('3C84')
pl.show()
--

We can use the model from fluxscale to fill the MODEL column with 3C84's spectral information using setjy. With standard='fluxscale', we can directly use the flux1 Python dictionary as input via fluxdict:

Figure 8: Model amplitude of 3C84 as a function of frequency.
# In CASA: spectral information
setjy(vis=msvis, field='1', scalebychan=True, 
      standard = 'fluxscale', fluxdict=flux1)

Check with plotms that the data have been appropriately filled (Figure 8):

# In CASA
plotms(vis=msvis, field='1', antenna='ea05&ea02', 
       xaxis='freq', yaxis='amp', ydatacolumn='model')

Next, we redo the previous calibration using this new model information. Although the commands are the same as issued earlier, keep in mind that the model values for the bandpass calibrator have changed and, therefore, the results of these calibration calculations will differ:

# In CASA: phase only recalibration
gaincal(vis=msvis, caltable='calG192.G0.b', 
        field='1', spw='*:60~68', 
        gaintype='G', refant='ea05', calmode='p', 
        solint='int', minsnr=3) 

# In CASA: residual delays recalibration
gaincal(vis=msvis, caltable='calG192.K0.b', 
        gaintable=['calG192.G0.b'], 
        field='1', spw='*:5~122', gaintype='K', 
        refant='ea05', solint='inf', minsnr=3)

# In CASA: antenna bandpasses recalibration
bandpass(vis=msvis, caltable='calG192.B0.b', 
         gaintable=['calG192.G0.b', 'calG192.K0.b'], 
         field='1', refant='ea05', solnorm=False, 
         bandtype='B', solint='inf')

Finally, we inspect these solutions (Figures 9a, 9b, 10a, and 10b; again note that antenna ea01 is fully flagged):

# In CASA - Figure 9a
plotms(vis='calG192.B0.b', xaxis='freq', yaxis='amp', 
       spw='0~31', iteraxis='antenna', coloraxis='spw')

#
plotms(vis='calG192.B0.b', xaxis='freq', yaxis='amp', 
       spw='32~63', iteraxis='antenna', coloraxis='spw')

#
plotms(vis='calG192.B0.b', xaxis='freq', yaxis='phase', 
       spw='0~31', iteraxis='antenna', coloraxis='spw', 
       plotrange=[-1,-1,-180,180], customsymbol=True, 
       symbolshape='circle',symbolsize=2)

#
plotms(vis='calG192.B0.b', xaxis='freq', yaxis='phase', 
       spw='32~63', iteraxis='antenna', coloraxis='spw', 
       plotrange=[-1,-1,-180,180], customsymbol=True, 
       symbolshape='circle',symbolsize=2)
Figure 9a: Calibration solutions for the bootstrapped bandpass amplitudes for 3C84. Shown is antenna ea06 and spectral windows spw=0~31.
Figure9b: Calibration solutions for the bootstrapped bandpass amplitudes for 3C84. Shown is antenna ea06 and spectral windows spw=32~63.
Figure 10a: Calibration solutions for the bootstrapped bandpass phases for 3C84. Shown is antenna ea06 and spectral windows spw=0~31.
Figure 10b: Calibration solutions for the bootstrapped bandpass phases for 3C84. Shown is antenna ea06 and spectral windows spw=32-63.

They look virtually unchanged from the previous solutions with the exception that the amplitude scaling is corrected for the spectrum of 3C84. We have the final version of our delay and bandpass calibration tables, calG192.K0.b and calG192.B0.b, which can be used for all subsequent calibration steps.

Last checked on CASA Version 6.4.1