NCALIB POLAR: Polarisation corrections

Contents

Preface

This document describes the handling of polarisation calibration and correction by the NCALIB POLAR option. This option is activated as follows:
> exe ncalib

      NCALIB$1 (v4.62) is started at 30-May-94 13:52:04

OPTION (REDUNDANCY, POLAR, SET, SHOW, QUIT) = QUIT:
POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:

Select option

WSRT polarisation calibration strategy

In the following, it will be assumed that the dipoles of the WSRT telescopes are parallel (++). The usual calibration strategy consists of the following steps:

For the best results, it may be necessary to iterate two or three times, because one pair of dipole errors (position angle/ellipticity) may affect the determination of the other pair (gain/phase). However, the process will iterate to the correct result, because, in the case of parallel dipoles, all four types of dipole errors have distinct signatures. This means that one type of dipole error cannot be interpreted as another type, and still give a consistent result. Therefore, all four types can be determined independently.

Polarisation equations

Each of the 14 WSRT telescopes have two perpendicular linear dipoles, X and Y. In the existing front-ends, the XY-dipole unit can be rotated over an arbitrary angle. The dipole position angle () is defined from North () through East (). The complex visibility that is measured with an interferometer (consisting of two dipoles with position angles and can be written as (see Weiler, 1973):

in which I, Q, U and V are the Fourier transforms of the corresponding Stokes parameters of the observed source, and the , and factors contain the four types of dipole errors: phase (), gain (), dipole angle error () and ellipticity (). In the ideal case, they are all zero. For small values of and , second-order terms can be ignored, and we can write:

Parallel dipoles (++)

In the `normal' position (+) of the dipole unit, (east), and (south). Usually the dipole units in all WSRT telescopes are set `parallel' (++) to each other. In this case, the equations reduce to a particularly simple form. Again ignoring second-order terms, we get

in which is the visibility measured between the X-dipoles of telescopes i and j, etc. After calibration, and , and the complex Stokes values can be calculated from the observed visibilities:

In the parallel mode (++), the two sets of dipole errors (phase/gain and angle/ellipticity) are separable, and so can be determined. Nowadays (after December 1983), the dipoles are almost always parallel, and in the new frontends (after 1997), the dipoles will not be rotatable.

X-Y Phase Zero Difference (PZD)

In the case of parallel dipoles (++), the complex gain errors of the X-dipoles and those of the Y-dipoles are calibrated separately; and will usually not have enough signal for calibration, because these dipoles are nominally perpendicular and the fraction of linear polarisation is usually small in calibrators. Since we only calibrate phase differences, an arbitrary phase zero ( and ) is assigned to the X- and Y-dipoles. These phase zeros will cancel out for and , but not for and . Thus, the latter will be multiplied by an unknown phase factor , the so-called XY Phase Zero Difference (PZD).

in which . Of course, is the complex gain of the interferometer made up of the X-dipole of telescope and Y-dipole of telescope , etc.

Crossed dipoles ()

Before 1983, polarisation measurements with the WSRT were usually carried out with dipoles in the fixed telescopes (0-9) in the `normal' position, and the dipoles in the movable telescopes (A-D) rotated by (), with and . The 40 standard (fixed-movable) interferometers were said to have `crossed' () dipoles. In this case, the visibility equations take the following form:

With crossed dipoles, the signal-to-noise ratio of the xy/yx terms are similar to that of the xx/yy terms. This makes it possible to make a redundancy calibration solution for all 28 dipoles simultaneously, but only if we may assume that . In principle, this would open the way to continuous polarisation calibration on the object itself, provided it has enough flux.

However, crossed dipoles introduce a number of new problems that make them less attractive:

These problems, combined with the fact that the phase-zero problem is not really avoided (since redundancy solution is only possible if it has to be assumed that ) have led to the practice to use only parallel dipoles.

(Annotation by JPH 940624: The reader is cautioned that the arguments advanced here against the use of crossed dipoles are a matter of continuing controversy. It can easily be shown from first principles that the separability of phase/gain and dipole errors is irrelevant. Furthermore, the parallel-dipole configuration is inherently asymmetric with respect to Stokes Q and U and crossed dipoles are clearly superior in this respect; how important this is is not clear.)

Faraday rotation

When radiation passes through a charged medium (like the ionosphere), the place of linear polarisation will be rotated by the angle :

Note that , and are independent of . The Faraday effect is strongly frequency-dependent: .

POLAR SHOW: Show corrections

The 56 correction factors (2 for each of the 28 dipoles) for angle errors and ellipticities that are stored in the set header (as POLC, see SCN-file description) can be viewed in a digestible form:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":

For example

 Sector: 2.0.0.0.0

        Position          Ellipticity    Rotation Orthog.
       X(%

 0    -1.13    -0.06    -0.37     0.54    -0.34     0.61
 1    -0.16     0.13     0.07     0.04    -0.01     0.17
 2     1.25     0.82     1.77    -2.56     0.59    -0.24
 3     0.49    -0.02     0.11     1.19     0.13    -0.29
 4    -0.72    -0.14    -0.03    -0.46    -0.25     0.33
 5    -0.09    -0.41     0.47     0.15    -0.14    -0.19
 6    -0.04    -0.21    -0.93     0.52    -0.07    -0.10
 7    -1.30    -1.42     0.45    -0.21    -0.78    -0.07
 8     2.51     1.77     0.86     0.99     1.23    -0.42
 9     0.80    -0.23    -0.69    -0.39     0.16    -0.59
 A    -0.03    -0.73     1.61    -0.08    -0.22    -0.40
 B    -0.13    -0.57    -0.57     0.30    -0.20    -0.26
 C     0.00     0.00     0.00     0.00     0.00     0.00
 D    -0.05    -0.31    -1.23     1.50    -0.10    -0.15

The first two columns (position) give the dipole angle error, expressed as the percentage of I that will corrupt Q, U and V. This is equivalent to expressing the dipole misalignment errors as percentages of one radian. In the last two columns, these same numbers are re-interpreted as a position error (rotation) of the entire XY-dipole assembly in degrees, and a deviation from the nominal orthogonality between the X and Y dipole. This is useful, since the entire XY-dipole assembly can be rotated as a whole for each WSRT telescope.

The ellipticities are also given as percentages of the corrupting I, or as percentages of one radian.

POLAR CALC: Calculate corrections

The dipole angle errors and ellipticities are calculated using equation. A strong calibrator is observed, which is known to be unpolarised ( and ). It is assumed that gain and phase have already been calibrated by other means (e.g. Selfcal): . Thus, equation reduces to:

with .

The system of linear equations (one for each and ) can be solved in a manner that is entirely analogous to the redundancy solution for gain and phase errors. The separate solutions for the real and imaginary parts now give the and respectively.

Since the S/N of the and will be small, the least-squares solution will be more accurate if more data (Sets and HA-range) are used. However, it must of course be assumed that the and values are the same for all these data. This is a fairly safe assumption, since the causes for these dipole errors are `mechanical', and vary only slowly in time. If the estimated values are to be useful for correction subsequent observations, they must at least be constant for the duration of the calibrator observation.


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":
HA_RANGE (DEG) (HA range) = *:

 All cross interferometers pre-selected

SELECT_IFRS (Select/de-select ifrs) = "":
   0123456789ABCD
 0 -+++++++++++++
 1  -++++++++++++
 2   -+++++++++++
 3    -++++++++++
 4     -+++++++++
 5      -++++++++
 6       -+++++++
 7        -++++++
 8         -+++++
 9          -++++
 A           -+++
 B            -++
 C             -+
 D              -

SELECT_IFRS (Select/de-select ifrs) = "":
BASEL_CHECK (M) (Baseline deviation allowed) = 0.5 M:

The only difference with a `normal' (gain/phase) Redundancy solution is that these solutions are for all 28 dipoles simultaneously. Therefore, the necessary constraint equations have 28 coefficients. The words `gain' and `phase' refer to the separate Real and Imaginary solutions. The succession of dipoles is 0X,0Y,1X,1Y,...etc.

The constraint equations arbitrarily set the average ellipticity and the average dipole angle errors over the array to zero. Without further information, this may be the most reasonable value. But if it is wrong it could affect the observations that are calibrated with the results.

The result of CALC looks very much like the output of SHOW (see above), except that the estimated accuracy (mean error) of the numbers is give in brackets.

 Sector: 2.0.0.0

         Position                     Ellipticity           Rotation Orthog.
         X(%

 0    -1.13(0.06)    -0.06(0.06)    -0.37(0.06)     0.54(0.06)    -0.34     0.61
 1    -0.16(0.06)     0.13(0.06)     0.07(0.06)     0.04(0.06)    -0.01     0.17
 2     1.25(0.06)     0.82(0.06)     1.77(0.06)    -2.56(0.06)     0.59    -0.24
 3     0.49(0.06)    -0.02(0.06)     0.11(0.06)     1.19(0.06)     0.13    -0.29
 4    -0.72(0.06)    -0.14(0.06)    -0.03(0.06)    -0.46(0.06)    -0.25     0.33
 5    -0.09(0.06)    -0.41(0.06)     0.47(0.06)     0.15(0.06)    -0.14    -0.19
 6    -0.04(0.06)    -0.21(0.06)    -0.93(0.06)     0.52(0.06)    -0.07    -0.10
 7    -1.30(0.06)    -1.42(0.06)     0.45(0.06)    -0.21(0.06)    -0.78    -0.07
 8     2.51(0.06)     1.77(0.06)     0.86(0.06)     0.99(0.06)     1.23    -0.42
 9     0.80(0.07)    -0.23(0.07)    -0.69(0.07)    -0.39(0.07)     0.16    -0.59
 A    -0.03(0.04)    -0.73(0.04)     1.61(0.04)    -0.08(0.04)    -0.22    -0.40
 B    -0.13(0.05)    -0.57(0.05)    -0.57(0.05)     0.30(0.05)    -0.20    -0.26
 C     0.00(0.72)     0.00(0.72)     0.00(0.72)     0.00(0.72)     0.00     0.00
 D    -0.05( 0.2)    -0.31( 0.2)    -1.23( 0.2)     1.50( 0.2)    -0.10    -0.15

The dipole corrections estimated by CALC will be added to the corrections that were applied to the data when they were read in.

POLAR SET: Set corrections manually

The user may specify values for the dipole angle errors and ellipticity manually. The numbers given by the user are converted to internal format, and stored (as POLC) in the headers of the given range of Sets. The default values are zero.


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":

For example
POL_ROTAN (dipole position) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_ORTHOG (dipole orthogonality) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_X_ELLIPS (X ellipticity) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_Y_ELLIPS (Y ellipticity) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:

 Sector: 2.0.0.0.0

POLAR EDIT: Edit corrections

This is similar to POLAR SET above, except that the default values are the corrections (POLC) that are already stored in the Set headers. Thus, the existing POLC corrections in each Set header of the given range can be edited separately:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":

For example

 Sector: 2.0.0.0.0

POL_ROTAN (dipole position) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_ORTHOG (dipole orthogonality) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_X_ELLIPS (X ellipticity) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:
POL_Y_ELLIPS (Y ellipticity) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0:

POLAR ZERO: Zero corrections

For the specified range of sets, the POLC corrections in the set header are set to zero:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":

 Sector: 2.0.0.0.0

POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:

POLAR COPY: Copy corrections from somewhere else

The polarisation corrections and are calculated with the help of a strong, unpolarised calibrator source, using the option POLAR CALC (see above). In order to use these corrections to correct a real observation, they must be transferred (copied) from the Set header of the calibrator to the Set header(s) of the observed object.

There are two possibilities: The calibrator observation (and thus the desired corrections) may be stored in a separate SCN-file (node), or they may be stored in another `group' in the same SCN-file as the observed object. Below, an example is given for both situations:

If the calibrator observation is stored in a separate SCN-file:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":
USE_SCN_NODE (input node name) = *:

 Specify the node name from which the corrections should be calculated.
 * indicates the same as the output node name.

USE_SCN_NODE (input node name) = *:
USE_SCN_SETS (Set(s) of input uv-data Sectors: g.o.f.c.s) = "":
 Sector: 0.0.0.0.0
 Sector: 0.0.0.4.0

If the calibrator observation is stored in the same SCN-file (e.g. as group 1, while the observed object is stored as group 0), the process runs as follows:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":
USE_SCN_NODE (input node name) = *:
USE_SCN_SETS (Set(s) of input uv-data Sectors: g.o.f.c.s) = "":

 Sector: 0.0.0.0.0
 Sector: 0.0.0.4.0

POLAR VZERO: X-Y Phase Zero Difference, assuming V=0

The VZERO option deals with the determination and manipulation of the Phase Zero Difference (PZD) between the X and Y dipoles. It is invoked in the following way:


POLAR_OPTION (CALC, SHOW, SET, COPY, EDIT...) = QUIT:

POLAR VZERO CALC: Calculate and show

An Phase Zero Difference (PZD) between the X-dipoles an the Y-dipoles affects the phase of the complex gain factors and (but not and ). The PZD is determined with the help of a strong calibrator source, which must have a relatively large U-component of linear polarisation, and an accurately known amount of circular polarisation (Stokes V). The latter is important, since a wrong value for V will be incorrectly interpreted as a PZD. Since the V is difficult to measure accurately, it is safer to use a calibrator that `should not' have any circular polarisation: .

The algorithm uses equation and equation. It is assumed that the `leakage' of the strong I-term is eliminated by means POLAR CALC: . It is also assumed that the gain and phase errors have also been well-calibrated: . Thus, equation reduce to:

The calculation of the PZD angle () is now quite straightforward. Because of the low S/N of the `cross-terms' , as many data (Sets, HA-range) should be used in the estimation as possible. However, the PZD may change with time.


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = "PSR1937.JAN93":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":
HA_RANGE (DEG) (HA range) = *:

 All cross interferometers pre-selected

SELECT_IFRS (Select/de-select ifrs) = "":
 Sector: 0.0.0.0
 Sector: 0.0.0.4

The resulting PZD angle is given as follows:

 A complex angle of 0.54+0.12I(0.01+0.01I) or 12.44 degrees

This message is somewhat confusing as the interesting information in the ``complex angle'' has been truncated in the printing (the relative sizes of the real and imaginary parts). The angle given in degrees is somewhat more informative.

POLAR VZERO APPLY: Calculate, show and apply

The PZD angle is `applied' by adjusting the phase in the `other corrections' (OTHC) in the Scan headers. This is done for the entire specified range (Sets and HA-range).


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = "":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = "":
HA_RANGE (DEG) (HA range) = *:

 All cross interferometers pre-selected

SELECT_IFRS (Select/de-select ifrs) = "":
 Sector: 0.0.0.0
 Sector: 0.0.0.4
 A complex angle of 0.55+0.01I(0.01+0.01I) or 1.00 degrees

POLAR VZERO ASK: Calculate, check with user, and apply

The user may influence the result by giving another PZD, which will be `applied' for the entire specified range (Sets and HA-range). The default is the calculated value.


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = "PSR1937.JAN93":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = 0:
HA_RANGE (DEG) (HA range) = *:

   0123456789ABCD
 0 -+++++++++++++
 1  -++++++++++++
 2   -+++++++++++
 3    -++++++++++
 4     -+++++++++
 5      -++++++++
 6       -+++++++
 7        -++++++
 8         -+++++
 9          -++++
 A           -+++
 B            -++
 C             -+
 D              -

SELECT_IFRS (Select/de-select ifrs) = "":
 Sector: 0.0.0.0
 Sector: 0.0.0.4
 A complex angle of 0.55-0.00I(0.01+0.01I) or -0.19 degrees

VZERO_PHASE (X-Y difference) = -0.1857903:

Use the calculated value

POLAR VZERO MANUAL: Ask for and apply

The PZD angle given by the user is `applied' to the entire specified range (Sets and HA-range). The default value is .


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = "PSR1937.JAN93":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = 0:
HA_RANGE (DEG) (HA range) = *:
VZERO_PHASE (X-Y difference) = 0:

User specifies a PZD = -1 degrees

POLAR VZERO SCAN: Calculate and apply on a per-scan basis

The change of the PZD angle as a function of time can be studied by estimating it for each Scan (HA) separately. The S/N of the estimation will necessarily be low.


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = "PSR1937.JAN93":
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = 0:
HA_RANGE (DEG) (HA range) = *:

   0123456789ABCD
 0 -+++++++++++++
 1  -++++++++++++
 2   -+++++++++++
 3    -++++++++++
 4     -+++++++++
 5      -++++++++
 6       -+++++++
 7        -++++++
 8         -+++++
 9          -++++
 A           -+++
 B            -++
 C             -+
 D              -

SELECT_IFRS (Select/de-select ifrs) = "":

POLAR VZERO COPY: Calculate from input and apply to output

The PZD angle is calculated with the help of a strong, unpolarised calibrator source. In order to use it to correct a real observation, it must be transferred (copied) from the Scan header(s) of the calibrator to the Scan header(s) of the observed object.

There are two possibilities: The calibrator observation (and thus the desired corrections) may be stored in a separate SCN-file (node), or it may be stored in another group in the same SCN-file as the observed object. NB: In the latter case, it could even be the same observation! In both cases, the PZD is calculated from a range of data (Sets and HA-range) in the INPUT_NODE, and `applied' (i.e. stored as `other corrections' (OTHC)) to the Scan Headers in the SCAN_NODE. In the following example, the calibrator is stored in the same SCN-file as group 1, while the observed object is stored as group 0):


VZERO_OPTION (CALC, APPLY, ASK, MANUAL, SCAN...) = QUIT:
SCN_NODE (input/output 'node' name) = ""

SCN-file
SCN_LOOPS (niter, Setincr(g.o.f.c.s) ....) = "":
SCN_SETS (Set(s) to do: g.o.f.c.s ) = 0:

Apply the PZD to all sets of job 0
USE_SCN_NODE (input node name) = *:

 Specify the node name from which the corrections should be calculated.
 * indicates the same as the output node name.

USE_SCN_NODE (input node name) = *:

Use the same SCN file
USE_SCN_SETS (Set(s) of input uv-data Sectors: g.o.f.c.s) = "":

Sets in job 2
HA_RANGE (DEG) (HA range) = *:

Use all scans in these sets

   0123456789ABCD
 0 -+++++++++++++
 1  -++++++++++++
 2   -+++++++++++
 3    -++++++++++
 4     -+++++++++
 5      -++++++++
 6       -+++++++
 7        -++++++
 8         -+++++
 9          -++++
 A           -+++
 B            -++
 C             -+
 D              -

SELECT_IFRS (Select/de-select ifrs) = "":

Use all interferometers

 Sector: 0.0.0.0
 Sector: 0.0.0.4
 A complex angle of 0.55-0.00I(0.01+0.01I) or -0.89 degrees

Warning: Remember that the PZD may partly be an artifact of the separate phase/gain calibration of the X-dipoles and the Y-dipoles. This may lead to a different PZD angle for the calibrator and the subsequent observation. The difference may be several degrees, which is much greater than the accuracy that is required for the measurement of very small percentages of circular polarisation. However, the measured V may be more accurate if the observed object is extended, which will often be the case. But the truth of the matter is that, even though the WSRT may offer the best conditions for very accurate polarisation measurements, the PZD problem is essentially unsolved.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.


newstar@nfra.nl