; UVLSF
;---------------------------------------------------------------
;! least squares fit to channels and subtracts from uv data.
;# TASK UV SPECTRAL EDITING
;-----------------------------------------------------------------------
;;  Copyright (C) 1995-1997, 1999-2001, 2007-2008
;;  Associated Universities, Inc. Washington DC, USA.
;;
;;  This program is free software; you can redistribute it and/or
;;  modify it under the terms of the GNU General Public License as
;;  published by the Free Software Foundation; either version 2 of
;;  the License, or (at your option) any later version.
;;
;;  This program is distributed in the hope that it will be useful,
;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;  GNU General Public License for more details.
;;
;;  You should have received a copy of the GNU General Public
;;  License along with this program; if not, write to the Free
;;  Software Foundation, Inc., 675 Massachusetts Ave, Cambridge,
;;  MA 02139, USA.
;;
;;  Correspondence concerning AIPS should be addressed as follows:
;;         Internet email: aipsmail@nrao.edu.
;;         Postal address: AIPS Project Office
;;                         National Radio Astronomy Observatory
;;                         520 Edgemont Road
;;                         Charlottesville, VA 22903-2475 USA
;-----------------------------------------------------------------------
UVLSF     LLLLLLLLLLLLUUUUUUUUUUUU CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
UVLSF     Least squares fit baseline and subtracts from uv data.
INNAME                             Input UV file name (name)
INCLASS                            Input UV file name (class)
INSEQ             0.0     9999.0   Input UV file name (seq. #)
INDISK            0.0        9.0   Input UV file disk unit #
SOURCES                            Source name
QUAL            -10.0              Calibrator qualifier -1=>all
CALCODE                            Calibrator code '    '=>all
TIMERANG                           Time range to use
SELBAND                            Bandwidth to select (kHz)
SELFREQ                            Frequency to select (MHz)
FREQID                             Freq. ID to select.
SUBARRAY          0.0     1000.0   Sub-array, 0=>all
BIF                                Low IF number to do
EIF                                Highest IF number to do
DOCALIB          -1.0      101.0   > 0 calibrate data & weights
                                   > 99 do NOT calibrate weights
GAINUSE                            CL (or SN) table to apply
DOPOL            -1.0       10.0   If >0.5 correct polarization.
BLVER                              BL table to apply.
FLAGVER                            Flag table version
DOBAND           -1.0       10.0   If >0.5 apply bandpass cal.
                                   Method used depends on value
                                   of DOBAND (see HELP file).
BPVER                              Bandpass table version
SMOOTH                             Smoothing function. See
                                   HELP SMOOTH for details.
DOACOR                             Include autocorrelations?
OUTNAME                            Output UV file name (name)
OUTCLASS                           Output UV file name (class)
OUTSEQ           -1.0     9999.0   Output UV file name (seq. #)
OUTDISK           0.0        9.0   Output UV file disk unit #.
BCHAN                              Lowest channel to write
ECHAN                              Highest channel to write
ICHANSEL                           Select channels to fit: NOTE
                                   this is start,end,increment
                                   and IF for each region
ORDER            -4.0        4.0   Order of fit line (0 -> DC)
                                   < 0 => add contiuum of
                                   CHANNEL back to line data
DOOUTPUT         -1.0        1.0   > 0 => write fit baseline as
                                   a continuum uv data base
CHANNEL      -16384.0    1634.0    Channel of fit to be written
                                   as continuum: 0 -> reference
FLUX              0.0              Flag data if residual flux in
                                   any fit channel is > FLUX
                                   0 -> 10**20
CUTOFF            0.0              Flag data if RMS of residual
                                   in fit channels > CUTOFF
                                   0 -> 10**20
SHIFT                              Shift in asec at ref position
----------------------------------------------------------------
UVLSF
Task:  This task does a spectral baseline subtraction.  It fits a
       straight line to the real and imaginary parts of selected
       channels and subtracts the fitted baseline from the spectrum.
       Optionally, it can flag data having excess residuals in the
       channels used for the baseline fitting.  This is a good method
       for detecting and deleting data damaged by RFI.

       See task FLGIT for a more powerful RFI excision task and UVMLN
       for a task dealing with multi-source data with FG tables.
Adverbs:
  INNAME.....Input UV file name (name).      Standard defaults.
  INCLASS....Input UV file name (class).     Standard defaults.
  INSEQ......Input UV file name (seq. #).    0 => highest.
  INDISK.....Disk drive # of input UV file.  0 => any.
  SOURCES....Source to be baselined.   '  '=> all; if any starts with
             a '-' then all except ANY source named.   Only one source
             may be done at a time.
  QUAL.......Qualifier of source to be baselined. -1 => all.
  CALCODE....Calibrator code of sources to baseline. ' '=> all.
  TIMERANG...Time range of the data to be copied. In order: Start day,
             hour, min. sec, end day, hour, min. sec. Days relative to
             ref. date.
  SELBAND....Bandwidth of data to be selected. If more than one IF is
             present SELBAND is the width of the first IF required.
             Units = kHz. For data which contain multiple
             bandwidths/frequencies the task will insist that some form
             of selection be made by frequency or bandwidth.
  SELFREQ....Frequency of data to be selected. If more than one IF is
             present SELFREQ is the frequency of the first IF required.
             Units = MHz.
  FREQID.....Frequency identifier to select (you may determine which is
             applicable from the OPTYPE='SCAN' listing produced by
             LISTR). If either SELBAND or SELFREQ are set, their values
             override that of FREQID.  However, setting SELBAND and
             SELFREQ may result in an ambiguity.  In that case, the task
             will request that you use FREQID.
  SUBARRAY...Sub-array number to copy. 0=>all.
  BIF........First IF to include.  0 -> 1.
  EIF........Last IF to include.   0 -> max.
  DOCALIB....If true (>0), calibrate the data using information in the
             specified Cal (CL) table for multi-source or SN table for
             single-source data.  Also calibrate the weights unless
             DOCALIB > 99 (use this for old non-physical weights).
  GAINUSE....version number of the CL table to apply to multi-source
             files or the SN table for single source files.
             0 => highest.
  DOPOL......If > 0.5 then correct data for instrumental polarization as
             represented in the AN table.  This correction is only
             useful if PCAL has been run or feed polarization parameters
             have been otherwise obtained.  If DOPOL > 0.5, then you can
             do only one sub-array at a time.  If you have more than one
             sub-array, it would be best to calibrate and SPLIT each
             separately and then DBCON them back together before
             IMAGRing.  See HELP DOPOL for available correction modes.
             IMAGR uses DOPOL as the nearest integer; 0.1 is therefore
             "false".
  BLVER......Version number of the baseline based calibration (BL) table
             to apply. <0 => apply no BL table, 0 => highest.
  FLAGVER....specifies the version of the flagging table to be applied.
              0 => highest numbered table.
             <0 => no flagging to be applied.
  DOBAND.....If true (>0) then correct the data for the shape of the
             antenna bandpasses using the BP table specified by BPVER.
             The correction has five modes:
             (a) if DOBAND=1 all entries for an antenna in the table
             are averaged together before correcting the data.
             (b) if DOBAND=2 the entry nearest in time (including
             solution weights) is used to correct the data.
             (c) if DOBAND=3 the table entries are interpolated in
             time (using solution weights) and the data are then
             corrected.
             (d) if DOBAND=4 the entry nearest in time (ignoring
             solution weights) is used to correct the data.
             (e) if DOBAND=5 the table entries are interpolated in
             time (ignoring solution weights) and the data are then
             corrected.
             IMAGR uses DOBAND as the nearest integer; 0.1 is therefore
             "false".
  BPVER......Specifies the version of the BP table to be applied
                0 => highest numbered table.
               <0 => no bandpass correction to be applied.
  SMOOTH.....Specifies the type of spectral smoothing to be applied to
             a uv database . The default is not to apply any smoothing.
             The elements of SMOOTH are as follows:
             SMOOTH(1) = type of smoothing to apply: 0 => no smoothing
               To smooth before applying bandpass calibration
                 1 => Hanning, 2 => Gaussian, 3 => Boxcar, 4 => Sinc
               To smooth after applying bandpass calibration
                 5 => Hanning, 6 => Gaussian, 7 => Boxcar, 8 => Sinc
             SMOOTH(2) = the "diameter" of the function, i.e. width
               between first nulls of Hanning triangle and sinc
               function, FWHM of Gaussian, width of Boxcar. Defaults
               (if < 0.1) are 4, 2, 2 and 3 channels for SMOOTH(1) =
               1 - 4 and 5 - 8, resp.
             SMOOTH(3) = the diameter over which the convolving
               function has value - in channels.  Defaults: 1,3,1,4
               times SMOOTH(2) used when input SMOOTH(3) < net
               SMOOTH(2).
  DOACOR.....> 0 => include autocorrelations as well as cross
             correlation data.
  OUTNAME....Output UV file name (name).     Standard defaults.
  OUTCLASS...Output UV file name (class).    Standard defaults.
  OUTSEQ.....Output UV file name (seq. #).   0 => highest unique
  OUTDISK....Disk drive # of output UV file. 0 => highest with
             space for the file.
  BCHAN......Lowest channel number in the input file to write to
             the output file. 0=> 1.
  ECHAN......Highest channel number in the input file to write
             to the output file. 0=> highest in input data.
  ICHANSEL...Select up to 20 groups of channels/IF(s) to fit as sets
             of (Start,end,inc,IF), i.e., ICHANSEL = 6,37,1,0,
             92,123,1,0 for two regions applying to all IFs.  The
             first group for which ICHANSEL(2,i) <= 0 ends the list.
             Defaults: Any IF having no group assigned to it, gets a
             group including all channels.
             ICHANSEL(1,j) defaults to 1,
             0 < ICHANSEL(2,j) < ICHANSEL(1,j) defaults to Nchan.
             ICHANSEL(3,j) < 1 or > ICHANSEL(2,j)-ICHANSEL(1,j)+1
             defaults to 1.
             ICHANSEL(4) <= 0 => this group applies to all IFs.
  ORDER......Normally the fit should be done with a first order
             polynomial, namely a DC term and a slope.  If only one box
             is used, the slope may not be adequately defined and a
             simple DC term for the real and for the imaginary parts
             would be more reliable.
             **********************************************************
             Experimentally, for special transition problems with the
             VLA, ORDER is allowed to go up to 4.  If ORDER = -n is
             entered, then the fit is done with order n and the fit
             value at channel CHANNEL is added back to all of the line
             channels.  This leaves one with a data set containing
             continuum and line signal, but with channel-dependent
             problems in the continuum suppressed.
             **********************************************************
  DOOUTPUT...<= 0 => write out only the subtracted uv data.
             > 0 => write also a data set with the fit baseline
                    as visibilities.
  CHANNEL....When DOOUTPUT > 0, write the continuum data with the fit
             evaluated at spectral channel CHANNEL.
             0 => reference channel.
  FLUX.......If the residual flux in any channel used to fit the
             baseline exceeds FLUX, then the spectrum for that time, IF,
             and polarization is fully flagged.  <= 0 => 1.0E20
  CUTOFF.....If the RMS flux in the channels used to fit the baseline
             exceeds CUTOFF, then the spectrum for that time, IF, and
             polarization is fully flagged.      <= 0 => 1.0E20
  SHIFT......Shift in arcseconds during fitting process. The data
             are shifted, fitted, flagged and then shifted back.
             These are shifts in arc seconds at the reference point -
             RA = RA0 + SHIFT(1)/cos(DEC0), DEC = DEC0 + SHIFT(2)
----------------------------------------------------------------
UVLSF: Task which subtracts continuum from channels in UV-plane
DOCUMENTOR: H.J. van Langevelde (Sterrewacht Leiden)
RELATED TASKS:   UVLIN, UVBAS

                          PURPOSE

    UVLSF will estimate the continuum visibilities and subtract
these from a specified range of channels, hopefully leaving only
the information about spectral features in the output UV-file.
It fits, by least squares, a straight line to the to the real and
imaginary parts of the selected channels.  This baseline is
subtracted from the spectrum.

    This can only work properly if the UV coverage is the same
for all spectral line channels. It can, however, deal with
frequency dependent flagging.

                     PHASE SHIFTING

     Since UVLSF works perfectly for a single point source at the
phase center, one should shift any dominant point source to the phase
center prior to the fitting process. Note that UVFIX now does this
correctly since it does the relative phase shift between channels.
The shift option is offered here for convenience and since THE SHIFT
IS UNDONE AFTER THE FIT. The sense of the shift is the same as in
UVFIX. The code for computing the shift is:

         DTORAD = 3.14159265358979326D0 / 180.0D0
         RA = RA0 + SHIFT(1) / 3600./ COS (DTORAD * DEC0)
         DEC = DEC0 + SHIFT(2) / 3600.
         DXC = SIN (DTORAD * (RA - RA0)) * COS (DEC * DTORAD)
         DYC = COS (DEC0 * DTORAD) * SIN (DEC * DTORAD) -
     *      SIN (DEC0 * DTORAD) * COS (DEC * DTORAD) *
     *      COS ((RA - RA0) * DTORAD)
         DZC = SIN (DTORAD * DEC0) * SIN (DTORAD * DEC) +
     *      COS (DTORAD * DEC0) * COS (DTORAD * DEC) +
     *      COS (DTORAD * (RA - RA0)) - 1.0D0

The necessary values for SHIFT can be measured from an image in arc
seconds or have position routines return true coordinates which must
be corrected by multiplying by cos(declination) in RA.

                          COMMENTS

    This task has proved to be powerful in problems where bandwith is
small and extended continuum emission has to be removed. Its accuracy
is limited by the fact that the visibilities in the uv plane change
over the bandwith. The errors made in the approximation of the
continuum visibility -- and thus in the subtraction -- can be
estimated as:

               d V      d u             d V      L
       D V  =  ---  *   ---  *  D v  =  ---  *  ---  *  D v
          L    d u      d v             d u      c

Where D V is the error, D v the bandwith over which we try to do this
and u a coordinate in UV-plane. L is the baseline length specified in
the same units as those used for c, the speed of light.  The formula
tells us that UVLSF should do an accurate job on short baselines
and/or small bandwith, provided there is a reasonably smooth signature
in the UV-plane. That means that it will generally not work for a
field dominated by discrete (point) sources.  It will work better if
the dominant point source is shifted to the filed center.  Use UVFIX
which now does a correct shift for spectral data.

    In comparison with the method of cleaning the background and UVSUB
the components from the spectral line channels, this method has the
main advantages that it is 1) much faster, 2) will work when the
background is difficult to model with clean components. When point-
sources are the main source of continuum emission the UVSUB method is
perfectly suited. In some cases a hybrid method may be advantageous.

    In comparison with averaging maps to estimate the continuum, this
method is again faster and more reliable, since there will be no
sidelobs of the continuum in the map.

    The output data set can also be a powerful diagnostic tool.  In
principle, the data can be used to apply selfcal on your spectral line
data.

    UVLSF differs from UVLIN in a number of ways. UVLIN does its
flagging only on the peak residual in the channels selected for
fitting and scales the peak by the square root of the weight
before deciding on flagging.  This is correct for peak residuals due
solely to thermal noise (and reflected correctly in the data weights),
but is an added confusion to the user.  In any case, you should set
the FLUX cutoff at a conservative level (6 - 8 times the expected
sigma in the integration time typical for the current data set).  The
CUTOFF test is better for spectra that do not fit the linear model or
are just excessively noisy for some reason.  UVLSF offers the option
of writing the fit continuum as a UV data set which can be used for
self-cal, TVFLG editing, etc.

     UVBAS fits the linear baseline in amplitude and phase
rather than real and imaginary.  If the emission is well off the
center of the field, the amplitude and phase are more likely to
be nearly linear than the real and imaginary parts.  However,
the amplitude does not have Gaussian noise statistics and UVBAS
is therefore suspect in low signal-to-noise ratio cases.


			REFERENCES

See Cornwell, Uson and Haddad (Astron. Astrophys. 258, 583; 1992) for a
detailed discussion which includes estimates of errors.
