Coordinate systems
Antenna/tile/station/array coordinates
In measurement sets and uvfits files, antennas/tiles/stations usually have their positions recorded in the ITRF frame (internally we refer to this as "geocentric XYZ"). There's also a "geodetic XYZ" frame; an example of this is WGS 84 (which we assume everywhere when converting, as it's the current best ellipsoid). Finally, there's also an "East North Height" coordinate system.
To calculate UVW baseline coordinates, geodetic XYZ coordinates are
required1. Therefore, various coordinate conversions are required to obtain
UVWs. The conversion between all of these systems is briefly described below.
The relevant code lives within Marlu
.
ITRF and "geocentric XYZ"
As the name implies, this coordinate system uses the centre of the Earth as a reference. To convert between geocentric and geodetic, an array position is required (i.e. the "average" location on the Earth of the instrument collecting visibilities). When all antenna positions are geocentric, the array position is given by the mean antenna position.
Measurement sets indicate the usage of ITRF with the "MEASURE_REFERENCE" keyword attached to the POSITION column of an ANTENNA table (value "ITRF").
The uvfits
standard states
that only supported frame is "ITRF", and hyperdrive
assumes that only ITRF is
used. However, CASA/casacore seem to write out antenna positions incorrectly;
the positions look like what you would find in an equivalent measurement set.
The incorrect behaviour is detected and accounted for.
"Geodetic XYZ"
This coordinate system is similar to geocentric, but uses an array position as its reference.
Measurement sets support the WGS 84 frame, again with the "MEASURE_REFERENCE"
keyword attached to the POSITION column of an ANTENNA table (value "WGS84").
However, hyperdrive
currently does not check if geodetic positions are used;
it instead just assumes geocentric.
When read literally, the antenna positions in a uvfits file ("STABXYZ" column of the "AIPS AN" HDU) should be geodetic, not counting the aforementioned casacore bug.
East North Height (ENH)
MWA tiles positions are listed in metafits files with the ENH coordinate system. Currently, ENH coordinates are converted to geodetic XYZ with the following pseudocode:
x = -n * sin(latitude) + h * cos(latitude)
y = e
z = n * cos(latitude) + h * sin(latitude)
(I unfortunately don't know anything more about this system.)
Array positions
Array positions can be found with the mean geocentric antenna positions, as is
the case with measurement sets, or with the ARRAYX
, ARRAYY
and ARRAYZ
keys
in a uvfits file. However, hyperdrive
allows the user to supply a custom array
position, which will be used in any conversions between provided antenna
positions and other coordinate systems as required.
For raw MWA data, no array position is supplied, so we assume a location for the MWA. This is currently:
- Latitude: -0.4660608448386394 radians (or −26.70331941 degrees)
- Longitude: 2.0362898668561042 radians (or 116.6708152 degrees)
- Height: 377.827 metres
Precession
It is often necessary to precess antenna positions to the J2000 epoch, because:
- Measurement sets and uvfits expect their UVWs to be specified in the J2000 epoch; and
- Sky model source lists are expected to be specified in the J2000 epoch.
hyperdrive
performs precession on each timestep of input visibility data to
(hopefully) get UVWs as correct as possible.
The process to precess geodetic XYZs is too complicated to detail here, but the
code lives within Marlu
. This code is
a re-write of old MWA code, and there appears to be no references on how or why
it works; any information is greatly appreciated!
UVWs
A geodetic XYZ is converted to UVW using the following pseudocode:
s_ha = sin(phase_centre.hour_angle)
c_ha = cos(phase_centre.hour_angle)
s_dec = sin(phase_centre.declination)
c_dec = cos(phase_centre.declination)
u = s_ha * x + c_ha * y,
v = -s_dec * c_ha * x + s_dec * s_ha * y + c_dec * z,
w = c_dec * c_ha * x - c_dec * s_ha * y + s_dec * z,
Note that this is a UVW coordinate for an antenna. To get the proper baseline
UVW, a difference between two antennas' UVWs needs to be taken. The order of
this subtraction is important; hyperdrive
uses the "antenna1 - antenna2"
convention. Software that reads data may need to conjugate visibilities if this
convention is different.
Further reading
- https://en.wikipedia.org/wiki/International_Terrestrial_Reference_System_and_Frame
- https://en.wikipedia.org/wiki/World_Geodetic_System
- The uvfits standard
- https://casa.nrao.edu/Memos/CoordConvention.pdf
- https://casa.nrao.edu/Memos/229.html#SECTION00042000000000000000
If this isn't true, please file a hyperdrive
issue.