next up previous contents index
Next: Calibration - IV Up: Simple Reduction Previous: Simple Reduction - II

Hybrid Mode Calibration - III

This example7.1originates from Misty Lavigne and Stuart Vogel and uses a dataset taken in hybrid passband mode in order to calibrate the phase offsets between the different bands. This is often the case when a single ``narrow band'' is not able to catch the velocity range of the object of interest, in the current correlator galaxies appear to be the primary victim of this.

It assumes that a relatively bright quasar has been observed in the following modes:

  1. Three 500/500/500 MHz wide bands, currently 15 channels each.
  2. Three nb/nb/nb narrowband (BW depends on what you need for your object to fill the spectral range), currently 63 channels each.
  3. Two bands in narrowband and the other in 500. Aka "hybrid" mode. The procedure below can be easily modified if one band is narrow, and the others 500.

Some further comments:

  1. Uses the noise source for narrow-band channel to channel bandpass calibration. Since the astronomical data is in the USB in this example and the noise source is only in the LSB, it also conjugate LSB to USB.
  2. Uses an astronomical source for wideband and low-order polynomical narrow- band passband calibration
  3. Uses hybrid mode data for band-offset phase calibration
  4. Generates temporal phase calibration from phase calibrator using super-wideband (average of all three bands from both sidebands)
  5. Applies calibrations to each of the source data bands
  6. Glues source bands back together
  7. Flags bad channels in overlap region between bands.

There are various other assumptions in the procedure below that almost never apply exactly to your data. We also assume that the data have been properly flagged and that self cal solutions are good, and that the reference antenna is a proper choice. The script also assumes only one visibility calibrator.

The script first sets a few parameters, but note that some of these parameters (e.g. superwidechan, narrowline) depend on the specific correlator mode that was choosen.

set vis           = alldata.vis      # visibility file
set refant        = 10               # reference antenna
set cal           = 3C273            # passband calibrator
set viscal        = 1058+015         # visibility (phase) calibrator
set fluxcal       = 3C273            # flux calibrator
set source        = N3627            # source
set nb_array      = ( 4 5 6 )        # spectral line bands to calibrate
set wide_array    = ( 5 4 5  )       # hybrid band with wide setup
				     # For each element in nb_array, the
				     # corresponding element in wide_array
                                     # should be the hybrid band that is wideband
set superwidewin  = 4,5              # windows to use for super-wideband
set superwidechan = 1,1,30           # Channels for superwide
set bw            = 64               # Spectral Line bandwidth
set wideline      = 1,3,11,11        # line type for 500 MHz
set narrowline    = 1,3,58,58        # line type for narrow band
set sideband      = usb              # Sideband (used for noise conjugation)
set calint        = 0.2              # passband calibration interval (minutes)
set vcalint       = 30               # visibility calibrator cal interval
set fcalint       = 30               # flux calibrator interval
set ampcalint     = 30               # selfcal amplitude interval
set flux          = 18               # flux of flux calibrator (SMA or Woojin)
set visflux       = 5.1              # flux of vlisibility calibrator, calculated from fluxcal.csh
set order         = 1                # polynomial order for smamfcal fit
set edge          = 3                # of edge channels to discard in smamfcal
set badants       = 2,15             # bad antennas to flag 
                                     # Do heavy uvflagging prior to script
set badchan1      = 6,61,1,1         # bad overlap channels between 1st 2 bands
set badchan2      = 6,124,1,1        # bad overlap channels between 2nd 2 bands
set restfreq      = 115.271203       # rest frequency of line

set gv=ghostview                     # your postscript viewer

Although you very most likely will have inspected the visibility data and perhaps had to flag bad data in time, frequency and/or baseline/antennae space, here is a simple example to flag two antennas:

uvflag vis=$vis select=ant'('$badants')' flagval=flag

Select the bands

# Select all-wideband and all-narrowband data
  rm -rf all.wide all.nb $cal.wide* $cal.nb* $cal.hyb* 
bwsel vis=$vis bw=500,500,500 nspect=6 out=all.wide 
bwsel vis=$vis bw=$bw,$bw,$bw nspect=6 out=all.nb

# First get super-wideband on passband calibrator and phase calibrator
  rm -rf $cal.wide $cal.wide.0 $viscal.v.wide $viscal.v.wide.0
uvcat vis=all.wide out=$cal.wide.0 \
        "select=-auto,source($cal),win($superwidewin)" options=nocal,nopass
uvcat vis=all.wide out=$cal.wide.1 \
        "select=-auto,source($cal)"                    options=nocal,nopass
uvcat vis=all.wide out=$viscal.v.wide.0 \
        "select=-auto,source($viscal)"                 options=nocal,nopass

Run mfcal on the superwideband (500/500/500) data. Don't bother using the noise source for the superwideband. Inspect the antenna based solutions in both frequency and time.

mfcal vis=$cal.wide.0 interval=$calint refant=$refant

# Inspect super-wideband passband 
gpplt vis=$cal.wide.0 options=bandpass yaxis=phase nxy=4,4 yrange=-360,360 device=bp$cal.wide.0.ps/ps
$gv bp$cal.wide.0.ps

# Inspect temporal phase variation on superwideband
gpplt vis=$cal.wide.0 yaxis=phase yrange=-360,360 nxy=4,4 device=p$cal.wide.0.ps/ps
$gv p$cal.wide.0.ps

# Apply superwideband passband for later use in band offset cal
gpcopy vis=$cal.wide.0 out=$cal.wide.1
uvcat vis=$cal.wide.1 out=$cal.wide options=nocal

# Copy wideband passband to visibility calibrator
gpcopy vis=$cal.wide.0 out=$viscal.v.wide.0 options=nocal,nopol
uvcat vis=$viscal.v.wide.0 out=$viscal.v.wide options=nocal

# Determine phase gain variations on visibility calibrator using superwide
  rm -rf $viscal.v.wide.sw $viscal.v.wide.sw.test
uvcat vis=$viscal.v.wide out=$viscal.v.wide.sw select='win('$superwidewin')'
uvcat vis=$viscal.v.wide out=$viscal.v.wide.sw.test select='win('$superwidewin')'

selfcal vis=$viscal.v.wide.sw.test interval=0.1 refant=$refant
gpplt vis=$viscal.v.wide.sw.test yaxis=phase yrange=-360,360 device=testphase.ps/ps nxy=4,4
$gv testphase.ps

 
selfcal vis=$viscal.v.wide.sw line=channel,$superwidechan \
        interval=$vcalint options=phase refant=$refant
echo "**** Phases on the superwideband visibility calibrator $viscal.v.wide.sw"
gpplt vis=$viscal.v.wide.sw device=p$viscal.v.wide.sw.ps/ps yaxis=phase yrange=-360,360 nxy=4,4 
$gv p$viscal.v.wide.sw.ps

Checking the phase calibrator:does it look like a nice point source. Notice we don't use mosaicing here, since it is a point source, though for extended sources you will want to use that option in invert when the source is mapped.

rm -rf $viscal.v.wide.sw.mp $viscal.v.wide.sw.bm $viscal.v.wide.sw.cl $viscal.v.wide.sw.r

invert vis=$viscal.v.wide.sw cell=0.5 imsize=257 line=chan,$superwidechan \
       map=$viscal.v.wide.sw.mp beam=$viscal.v.wide.sw.bm options=system,double sup=0

set rms = `histo in=$viscal.v.wide.sw.mp | grep Rms | awk '{print$4}'`

clean map=$viscal.v.wide.sw.mp beam=$viscal.v.wide.sw.bm out=$viscal.v.wide.sw.cl \
      niters=1000 cutoff=$rms

restor map=$viscal.v.wide.sw.mp beam=$viscal.v.wide.sw.bm model=$viscal.v.wide.sw.cl \
       out=$viscal.v.wide.sw.r

cgdisp in=$viscal.v.wide.sw.r,$viscal.v.wide.sw.r nxy=1,1 range=-.5,2,lin,3 \
       region=quart device=$viscal.ps/ps cols1=1 \
       type=grey,cont slev=p,5 levs1=50,15,10,5,-5 \
       options=full,noepoch,beambl csize=1,1 labtyp=arcsec
$gv $viscal.ps

For flux calibration, we offer two methods, depending if the flux calibrator is the same as the passband calibrator. At the end ask the user if the phasecal gains are acceptable and need to be applied later

if ($cal == $fluxcal) then
  rm -r $cal.wide.gain $viscal.v.wide.sw.gain $viscal.v.wide.sw.gain.applied
  # Calculating Gains on Fluxcal
  uvcat vis=$cal.wide.1 out=$cal.wide.gain options=nocal "select=win($superwidewin)"
  selfcal vis=$cal.wide.gain refant=$refant interval=$fcalint "select=source($fluxcal)" \
     options=noscale,amplitude flux=$flux
  gplist vis=$cal.wide.gain options=zeropha,amp > $fluxcal.gains
  less $fluxcal.gains

  # Calculating Gains on Phasecal
  uvcat vis=$viscal.v.wide out=$viscal.v.wide.sw.gain select='win('$superwidewin')'
  selfcal vis=$viscal.v.wide.sw.gain interval=$vcalint \
        refant=$refant options=noscale,amp flux=$visflux 
  gplist vis=$viscal.v.wide.sw.gain options=zeropha,amp > $viscal.gains  
  less $viscal.gains

else
  rm -r $viscal.v.wide.sw.gain $fluxcal.wide.0 $fluxcal.wide.gain $fluxcal.gains $viscal.gains
  # Fluxcal different from Pbcal"
  uvcat vis=all.wide out=$fluxcal.wide.0 \
        "select=-auto,source($fluxcal)" options=nocal,nopass
  # Passband correcting Fluxcal"
  gpcopy vis=$cal.wide.0 out=$fluxcal.wide.0 options=nocal,nopol
  uvcat vis=$fluxcal.wide.0 out=$fluxcal.wide.gain options=nocal "select=win($superwidewin)"
  # Calculating Gains on Fluxcal
  selfcal vis=$fluxcal.wide.gain refant=$refant interval=$fcalint "select=source($fluxcal)" \
    options=noscale,amplitude flux=$flux
  gplist vis=$fluxcal.wide.gain options=zeropha,amp > $fluxcal.gains
  less $fluxcal.gains

  # Calculating Gains on Phasecal
  uvcat vis=$viscal.v.wide out=$viscal.v.wide.sw.gain select='win('$superwidewin')'
  selfcal vis=$viscal.v.wide.sw.gain line=channel,$superwidechan \
     interval=$vcalint options=phase refant=$refant
  selfcal vis=$viscal.v.wide.sw.gain interval=$ampcalint \
        refant=$refant options=noscale,amp flux=$visflux 
  gplist vis=$viscal.v.wide.sw.gain options=zeropha,amp > $viscal.gains  
  less $viscal.gains

endif

# now ask the user if this should be applied later
echo -n "Apply Phasecal Gains to data? (y or n): " ;   set apply_gains=$<

Loop over each of the narrow bands and assemble the hybrid data

set nblength = $#nb_array
set list=(`awk "BEGIN{for(i=1;i<=$nblength;i++)print i}"`)

#  start nb loop
foreach i  ( $list )

set nb = $nb_array[$i]
set wide = $wide_array[$i]
rm -r all.hyb

# Select hybrid data 
# NB:  assumes only 1 band is in wideband mode; if two bands are in wideband
#      mode, change hybrid selection to select on nb and modify bw=
if ( $wide == 1 || $wide == 4 ) then 
    if ($nb == 2 || $nb == 5) then
      bwsel vis=$vis nspect=6 bw=500,$bw,0 out=all.hyb
    else
      bwsel vis=$vis nspect=6 bw=500,0,$bw out=all.hyb      
    endif
endif
if ( $wide == 2 || $wide == 5 ) then
    if ($nb == 1 || $nb == 4) then
      bwsel vis=$vis nspect=6 bw=$bw,500,0 out=all.hyb
    else
      bwsel vis=$vis nspect=6 bw=0,500,$bw out=all.hyb      
    endif
endif    
if ( $wide == 3 || $wide == 6 ) then
    if ($nb == 1 || $nb == 4) then
      bwsel vis=$vis nspect=6 bw=$bw,0,500 out=all.hyb
    else
      bwsel vis=$vis nspect=6 bw=0,$bw,500 out=all.hyb      
    endif    
endif

Two sanity tests to make sure you have data and that the bands are present.

set test = `uvio vis=all.hyb | grep -i source | awk '{if (NR==1) print $4}'`
if ($test == "") then
  echo
  echo "FATAL!  There appears to be no valid data in all.hyb"
  echo "This is likely to be because wide_array[$i] = $wide is not valid"
  echo "(i.e. band $wide is not really wideband), or one of the other "
  echo "bands is not really narrowband.  Use uvindex to sort this out"
  exit 1
endif

uvlist vis=all.hyb options=spectra

Now we need to select single bands to process in this pass Select by source and band. First get the two bands in all-wideband mode Note that we use super-wideband calibrated file for the wide mode.

rm -rf $cal.win$nb* $cal.win$wide* $cal.wide.win$wide* $cal.wide.win$nb*
rm -rf $cal.hyb.win$nb* $cal.hyb.win$wide* noise.nb.win$nb*
uvcat vis=$cal.wide out=$cal.wide.win$wide "select=-auto,source($cal),win($wide)" \
	options=nocal,nopass
uvcat vis=$cal.wide out=$cal.wide.win$nb "select=-auto,source($cal),win($nb)" \
	options=nocal,nopass

# select hybrid wideband band
uvcat vis=all.hyb out=$cal.hyb.win$wide.0 "select=-auto,source($cal),win($wide)" \
	options=nocal,nopass
# select the hybrid and all-narrowband narrow bands
# nb bands require extra step (applying noise source)
# we did not bother with noise source for wideband
uvcat vis=all.hyb out=$cal.hyb.win$nb.00 "select=-auto,source($cal),win($nb)" \
	options=nocal,nopass
uvcat vis=all.nb out=$cal.nb.win$nb.00 "select=-auto,source($cal),win($nb)" \
	options=nocal,nopass  

# copy wideband passband determined from all-wideband mode to hybrid wideband
gpcopy vis=$cal.wide.0   out=$cal.hyb.win$wide.0 options=nocal,nopol
uvcat vis=$cal.hyb.win$wide.0  out=$cal.hyb.win$wide   options=nocal

Now get the noise source data. Use the noise source data obtained in all narrowband mode, and assume it also can be applied to hybrid narrowband.

if ($sideband == "USB" || $sideband == "usb" ) then
  rm -rf noise.lsb noise.usb
  @ lsbnb = $nb - 3
  uvcat vis=all.nb out=noise.lsb "select=-auto,source(NOISE),win($lsbnb)" \
        options=nocal,nopass
  uvcat vis=all.nb out=noise.usb "select=-auto,source(NOISE),win($nb)" \
        options=nocal,nopass
  set sdf = `uvio vis=noise.usb | grep sdf | grep DATA | awk '{print $5}'`
  set sfreq = `uvio vis=noise.usb | grep sfreq | grep DATA | awk '{if (NR==1) print $5}'`
  uvcal vis=noise.lsb out=noise.nb.win$nb.00 options=conjugate
  puthd in=noise.nb.win$nb.00/sfreq value=$sfreq type=d
  puthd in=noise.nb.win$nb.00/sdf value=$sdf type=d
else
  uvcat vis=all.nb out=noise.nb.win$nb.00 "select=-auto,source(NOISE),win($nb)" \
        options=nocal,nopass
endif

For the narrowband windows, first do a passband cal using the noise source

mfcal vis=noise.nb.win$nb.00 refant=$refant

# Passband cal using noise source
gpplt vis=noise.nb.win$nb.00 device=bpnoise.nb.win$nb.00.ps/ps options=bandpass yaxis=phase nxy=4,4 \
      yrange=-90,90
$gv bpnoise.nb.win$nb.00.ps

# Copy noise passband to astronomical all-narrowband and hybrid narrowbands, and apply
gpcopy vis=noise.nb.win$nb.00 out=$cal.nb.win$nb.00  options=nocal,nopol
gpcopy vis=noise.nb.win$nb.00 out=$cal.hyb.win$nb.00 options=nocal,nopol
uvcat vis=$cal.nb.win$nb.00 out=$cal.nb.win$nb.0 options=nocal
uvcat vis=$cal.hyb.win$nb.00 out=$cal.hyb.win$nb.0 options=nocal

# use smamfcal with 1st order polynomial to
# get passband on hybrid narrowband and copy to all narrowband
smamfcal vis=$cal.hyb.win$nb.0 line=chan,19,4,3 interval=1 refant=$refant edge=$edge options=opolyfit \
          polyfit=$order
gpplt vis=$cal.hyb.win$nb.0 options=bandpass yaxis=phase nxy=4,4 yrange=-90,90 \
    device=bp$cal.hyb.win$nb.0.ps/ps
$gv bp$cal.hyb.win$nb.0.ps

# Copy narrowband passband from hybrid to all-narrowband mode
gpcopy vis=$cal.hyb.win$nb.0    out=$cal.nb.win$nb.0 options=nocal,nopol

# check that all-narrowband passband is flat
rm -rf test.pass
uvcat vis=$cal.nb.win$nb.0 out=test.pass
mfcal vis=test.pass refant=$refant
gpplt vis=test.pass options=bandpass yaxis=phase nxy=4,4 yrange=-90,90 \
      device=bptest.ps/ps
$gv bptest.ps

# Apply astronomical narrowband passband to hybrid and all-narrowband
uvcat vis=$cal.hyb.win$nb.0    out=$cal.hyb.win$nb     options=nocal
uvcat vis=$cal.nb.win$nb.0    out=$cal.nb.win$nb     options=nocal

# Selfcal on hybrid wideband to remove temporal variations 
# prior to band offset calibration
selfcal vis=$cal.hyb.win$wide line=channel,$wideline \
        interval=$calint options=phase refant=$refant

# Copy selfcal solution over to narrow hybrid band and apply
copyhd in=$cal.hyb.win$wide out=$cal.hyb.win$nb items=gains,ngains,nsols,interval
uvcat vis=$cal.hyb.win$nb out=$cal.hyb.win$nb.a

# Selfcal on narrow band of hybrid to determine band offset
selfcal vis=$cal.hyb.win$nb.a line=channel,$narrowline \
    interval=9999 options=phase refant=$refant
# Band offset between hybrid-narrowband $cal.hyb.win$nb.a
#      and hybrid-wideband $cal.hyb.win$nb
gplist vis=$cal.hyb.win$nb.a options=phase
# Also copy band offset to text file
gplist vis=$cal.hyb.win$nb.a options=phase >! mnband_offset.$cal.hybwin$nb.txt

# Test by applying to calibrator observed in all-narrowband mode
copyhd in=$cal.hyb.win$nb.a out=$cal.nb.win$nb items=gains,ngains,nsols,interval
uvcat vis=$cal.nb.win$nb out=$cal.nb.win$nb.a

# Remove antenna phase gain using super-wideband
rm -rf $cal.wide.sw
uvcat vis=$cal.wide out=$cal.wide.sw select='win('$superwidewin')'
selfcal vis=$cal.wide.sw line=channel,$superwidechan \
    interval=9999 options=phase refant=$refant
# Copy super-wideband gain to narrowband and apply
copyhd in=$cal.wide.sw out=$cal.nb.win$nb.a items=gains,ngains,nsols,interval
uvcat vis=$cal.nb.win$nb.a out=$cal.nb.win$nb.a.sc

# Selfcal to check that phases are roughly zero
# to within amount expected given temporal variations over interval
# between superwideband and all-narrowband observerations
selfcal vis=$cal.nb.win$nb.a.sc line=channel,$narrowline \
     interval=9999 options=phase refant=$refant

# List gains, which should be near zero except for temporal variations
# over interval between wideband and narrow band observations of cal
echo "**** Phase offset between super-wideband $cal.wide.sw "
echo "**** and all-narrow narrow band $cal.nb.win$nb.a.sc "
echo "**** Check that phases are near zero, limited by atmospheric flucatuations"
gplist  vis=$cal.nb.win$nb.a.sc options=phase 

# Now apply calibrations to source data
rm -rf  $source.win$nb* $source.win$nb.bcal
# First select source data
uvcat vis=all.nb out=$source.win$nb.00 \
   "select=-auto,source($source),win($nb)"  options=nocal,nopass
# Copy and apply noise passband to source
gpcopy vis=noise.nb.win$nb.00 out=$source.win$nb.00 options=nocal,nopol
uvcat vis=$source.win$nb.00 out=$source.win$nb.0 options=nocal
# Copy and apply astronomical passband
gpcopy vis=$cal.hyb.win$nb.0 out=$source.win$nb.0 options=nocal,nopol
uvcat vis=$source.win$nb.0 out=$source.win$nb options=nocal
# Copy band offset to source
copyhd in=$cal.hyb.win$nb.a out=$source.win$nb items=gains,ngains,nsols,interval
rm -rf $source.win_$i
# Apply band offset using smachunkglue naming convention
uvcat vis=$source.win$nb out=$source.win_$i

# end nb loop
end

This end looping over the bands. The three bands can be glued back together, though the complexity below depends on how many files (bands) we had. It also flags the (bad) overlapping channels between bands that were glued together.

if ($nblength == 2) then
  set cfile=$source.$nb_array[1]$nb_array[2]
  rm -rf $cfile
  smachunkglue vis=$source.win nfiles=$nblength out=$cfile
  uvflag vis=$cfile line=channel,$badchan1 flagval=flag
else if ($nblength == 3) then
  set cfile=$source.$nb_array[1]$nb_array[2]$nb_array[3]
  rm -r $cfile
  smachunkglue vis=$source.win nfiles=$nblength out=$cfile
  # flag bad overlap channels
  uvflag vis=$cfile line=channel,$badchan1 flagval=flag
  uvflag vis=$cfile line=channel,$badchan2 flagval=flag
else
  set cfile=$source.$nb_array[1]
  rm -rf $cfile  
  uvcat vis=$source.win_$nblength[1] out=$cfile
endif

# put in restfreq, using UV override principle
puthd in=$cfile/restfreq type=double value=$restfreq

To apply we are using a handy little c-shell alias:

rm -rf tmptmp.mir
alias apply 'uvcat vis=\!* out=tmptmp.mir; rm -rf \!*; mv tmptmp.mir \!*'

Phase and Amp calibration can now commence, if it was so selected earlier:

if ($apply_gains == 'y') then
  # copy super-wideband gains to source

  # Apply Phase Gains
  gpcopy vis=$viscal.v.wide.sw out=$cfile options=nopol,nopass
  #apply $cfile 

  # Apply amplitude calibration

  rm -r medianflux
  #  Apply Amplitude Gains from Phasecal: $viscal
  #gpcopy vis=$viscal.v.wide.sw.gain out=$cfile options=nopol,nopass
  set medianflux = `grep Medians $viscal.gains | tr -d Medians:`
  echo $medianflux > medianflux
  gplist vis=$cfile options=replace jyperk=@medianflux
  apply $cfile
endif


if ($apply_gains == 'n' && $cal == $fluxcal) then
  # copy super-wideband gains to source

  # Apply Phase Gains
  gpcopy vis=$viscal.v.wide.sw out=$cfile options=nopol,nopass

  rm -r medianflux
  # Apply Amplitude Gains from Passband Cal: $cal
  set medianflux = `grep Medians $fluxcal.gains | tr -d Medians:`
  echo $medianflux > medianflux
  gplist vis=$cfile options=replace jyperk=@medianflux
  apply $cfile
endif


if ($apply_gains == 'n' && $cal != $fluxcal) then
  # copy super-wideband gains to source

  # Apply Phase Gains
  gpcopy vis=$viscal.v.wide.sw out=$cfile options=nopol,nopass

  rm -r medianflux
  # Apply Amplitude Gains from Fluxcal: $fluxcal
  set medianflux = `grep Medians $fluxcal.gains | tr -d Medians:`
  echo $medianflux > medianflux
  gplist vis=$cfile options=replace jyperk=@medianflux
  apply $cfile
endif


next up previous contents index
Next: Calibration - IV Up: Simple Reduction Previous: Simple Reduction - II
Peter
2009-10-05