Utility Functions¶
Commonly used utility functions.
-
utils.
LatLonAlt_from_XYZ
(xyz)[source]¶ Calculate lat/lon/alt from ECEF x,y,z.
- Parameters
xyz – numpy array, shape (Npts, 3), with ECEF x,y,z coordinates
- Returns
- tuple of latitude, longitude, altitude numpy arrays (if Npts > 1) or
values (if Npts = 1) in radians & meters
-
utils.
XYZ_from_LatLonAlt
(latitude, longitude, altitude)[source]¶ Calculate ECEF x,y,z from lat/lon/alt values.
- Parameters
latitude – latitude in radians, can be a single value or a vector of length Npts
longitude – longitude in radians, can be a single value or a vector of length Npts
altitude – altitude in meters, can be a single value or a vector of length Npts
- Returns
numpy array, shape (Npts, 3) (if Npts > 1) or (3,) (if Npts = 1), with ECEF x,y,z coordinates
-
utils.
rotECEF_from_ECEF
(xyz, longitude)[source]¶ Calculate a rotated ECEF from ECEF such that the x-axis goes through the specified longitude.
Miriad (and maybe uvfits) expect antenna positions in this frame (with longitude of the array center/telescope location)
- Parameters
xyz – numpy array, shape (Npts, 3), with ECEF x,y,z coordinates
longitude – longitude in radians to rotate coordinates to (usually the array center/telescope location)
- Returns
numpy array, shape (Npts, 3), with rotated ECEF coordinates
-
utils.
ECEF_from_rotECEF
(xyz, longitude)[source]¶ Calculate ECEF from a rotated ECEF such that the x-axis goes through the specified longitude. (Inverse of rotECEF_from_ECEF)
- Parameters
xyz – numpy array, shape (Npts, 3), with rotated ECEF x,y,z coordinates
longitude – longitude in radians to rotate coordinates to (usually the array center/telescope location)
- Returns
numpy array, shape (Npts, 3), with ECEF coordinates
-
utils.
ENU_from_ECEF
(xyz, latitude, longitude, altitude)[source]¶ Calculate local ENU (east, north, up) coordinates from ECEF coordinates.
- Parameters
xyz – numpy array, shape (Npts, 3), with ECEF x,y,z coordinates
latitude – latitude of center of ENU coordinates in radians
longitude – longitude of center of ENU coordinates in radians
altitude – altitude of center of ENU coordinates in radians
- Returns
numpy array, shape (Npts, 3), with local ENU coordinates
-
utils.
ECEF_from_ENU
(enu, latitude, longitude, altitude)[source]¶ Calculate ECEF coordinates from local ENU (east, north, up) coordinates.
- Parameters
enu – numpy array, shape (Npts, 3), with local ENU coordinates
latitude – latitude of center of ENU coordinates in radians
longitude – longitude of center of ENU coordinates in radians
- Returns
numpy array, shape (Npts, 3), with ECEF x,y,z coordinates
-
utils.
phase_uvw
(ra, dec, xyz)[source]¶ This code expects xyz locations relative to the telescope location in the same frame that ra/dec are in (e.g. icrs or gcrs) and returns uvws in the same frame.
Note that this code is nearly identical to ENU_from_ECEF, except that it uses an arbitrary phasing center rather than a coordinate center.
- Parameters
ra – right ascension to phase to in desired frame
dec – declination to phase to in desired frame
xyz – locations relative to the array center in desired frame, shape (Nlocs, 3)
- Returns
uvw array in the same frame as xyz, ra and dec
-
utils.
unphase_uvw
(ra, dec, uvw)[source]¶ This code expects uvw locations in the same frame that ra/dec are in (e.g. icrs or gcrs) and returns relative xyz values in the same frame.
- Parameters
ra – right ascension data are phased to
dec – declination data are phased to
uvw – phased uvw values
- Returns
xyz locations relative to the array center in the phased frame
-
utils.
get_lst_for_time
(jd_array, latitude, longitude, altitude)[source]¶ Get the lsts for a set of jd times at an earth location.
- Parameters
jd_array – an array of JD times to get lst for
latitude – latitude of location to get lst for in degrees
longitude – longitude of location to get lst for in degrees
altitude – altitude of location to get lst for in meters
- Returns
an array of lst times corresponding to the jd_array
-
utils.
polstr2num
(pol, x_orientation=None)[source]¶ Convert polarization str to number according to AIPS Memo 117.
Prefer ‘pI’, ‘pQ’, ‘pU’ and ‘pV’ to make it clear that these are pseudo-Stokes, not true Stokes, but also supports ‘I’, ‘Q’, ‘U’, ‘V’.
- Parameters
pol (str) – polarization string
x_orientation (str, optional) – Orientation of the physical dipole corresponding to what is labelled as the x polarization (“east” or “north”) to allow for converting from E/N strings. See corresonding parameter on UVData for more details.
- Returns
int – Number corresponding to string
- Raises
ValueError – If the pol string cannot be converted to a polarization number.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
polnum2str
(num, x_orientation=None)[source]¶ Convert polarization number to str according to AIPS Memo 117.
Uses ‘pI’, ‘pQ’, ‘pU’ and ‘pV’ to make it clear that these are pseudo-Stokes, not true Stokes
- Parameters
num (int) – polarization number
x_orientation (str, optional) – Orientation of the physical dipole corresponding to what is labelled as the x polarization (“east” or “north”) to convert to E/N strings. See corresonding parameter on UVData for more details.
- Returns
str – String corresponding to polarization number
- Raises
ValueError – If the polarization number cannot be converted to a polarization string.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
jstr2num
(jstr, x_orientation=None)[source]¶ Convert jones polarization str to number according to calfits memo.
- Parameters
jstr (str) – antenna (jones) polarization string
x_orientation (str, optional) – Orientation of the physical dipole corresponding to what is labelled as the x polarization (“east” or “north”) to allow for converting from E/N strings. See corresonding parameter on UVData for more details.
- Returns
int – antenna (jones) polarization number corresponding to string
- Raises
ValueError – If the jones string cannot be converted to a polarization number.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
jnum2str
(jnum, x_orientation=None)[source]¶ Convert jones polarization number to str according to calfits memo.
- Parameters
num (int) – antenna (jones) polarization number
x_orientation (str, optional) – Orientation of the physical dipole corresponding to what is labelled as the x polarization (“east” or “north”) to convert to E/N strings. See corresonding parameter on UVData for more details.
- Returns
str – antenna (jones) polarization string corresponding to number
- Raises
ValueError – If the jones polarization number cannot be converted to a jones polarization string.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
parse_polstr
(polstr, x_orientation=None)[source]¶ Parse a polarization string and return pyuvdata standard polarization string.
See utils.POL_STR2NUM_DICT for options.
- Parameters
polstr (str) – polarization string
x_orientation (str, optional) – Orientation of the physical dipole corresponding to what is labelled as the x polarization (“east” or “north”) to allow for converting from E/N strings. See corresonding parameter on UVData for more details.
- Returns
str – AIPS Memo 117 standard string
- Raises
ValueError – If the pol string cannot be converted to a polarization number.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
parse_jpolstr
(jpolstr, x_orientation=None)[source]¶ Parse a Jones polarization string and return pyuvdata standard jones string.
See utils.JONES_STR2NUM_DICT for options.
- Parameters
jpolstr (str) – Jones polarization string
- Returns
str – calfits memo standard string
- Raises
ValueError – If the jones string cannot be converted to a polarization number.
- Warns
UserWarning – If the x_orientation not recognized.
-
utils.
conj_pol
(pol)[source]¶ Returns the polarization for the conjugate baseline. For example, (1, 2, ‘xy’) = conj(2, 1, ‘yx’). The returned polarization is determined by assuming the antenna pair is reversed in the data, and finding the correct polarization correlation which will yield the requested baseline when conjugated. Note this means changing the polarization for linear cross-pols, but keeping auto-pol (e.g. xx) and Stokes the same.
- Parameters
pol – Polarization (str or int)
- Returns
cpol – Polarization as if antennas are swapped (type matches input)
-
utils.
reorder_conj_pols
(pols)[source]¶ Reorders a list of pols, swapping pols that are conjugates of one another. For example (‘xx’, ‘xy’, ‘yx’, ‘yy’) -> (‘xx’, ‘yx’, ‘xy’, ‘yy’) This is useful for the _key2inds function in the case where an antenna pair is specified but the conjugate pair exists in the data. The conjugated data should be returned in the order of the polarization axis, so after conjugating the data, the pols need to be reordered. For example, if a file contains antpair (0, 1) and pols ‘xy’ and ‘yx’, but the user requests antpair (1, 0), they should get: [(1x, 0y), (1y, 0x)] = [conj(0y, 1x), conj(0x, 1y)]
- Parameters
pols – Polarization array (strings or ints)
- Returns
conj_order – Indices to reorder polarization axis
-
utils.
baseline_to_antnums
(baseline, Nants_telescope)[source]¶ Get the antenna numbers corresponding to a given baseline number.
- Parameters
baseline – integer baseline number
Nant_telescope – integer number of antennas
- Returns
tuple with the two antenna numbers corresponding to the baseline.
-
utils.
antnums_to_baseline
(ant1, ant2, Nants_telescope, attempt256=False)[source]¶ Get the baseline number corresponding to two given antenna numbers.
- Parameters
ant1 – first antenna number (integer)
ant2 – second antenna number (integer)
Nant_telescope – integer number of antennas
attempt256 – Option to try to use the older 256 standard used in many uvfits files (will use 2048 standard if there are more than 256 antennas). Default is False.
- Returns
integer baseline number corresponding to the two antenna numbers.
-
utils.
get_baseline_redundancies
(baselines, baseline_vecs, tol=1.0, with_conjugates=False)[source]¶ Find redundant baseline groups
- Parameters
baselines (array_like of int) – Baseline numbers, shape (Nbls,)
baseline_vecs (array_like of float) – Baseline vectors in meters, shape shape (Nbls, 3)
tol (float) – Absolute tolerance of redundancy, in meters.
with_conjugates (bool) – Option to include baselines that are redundant when flipped.
- Returns
baseline_groups (list of lists of int) – list of lists of redundant baseline numbers
vec_bin_centers (list of array_like of float) – List of vectors describing redundant group centers
lengths (list of float) – List of redundant group baseline lengths in meters
baseline_ind_conj (list of int) – List of baselines that are redundant when reversed. Only returned if with_conjugates is True
-
utils.
get_antenna_redundancies
(antenna_numbers, antenna_positions, tol=1.0, include_autos=False)[source]¶ Find redundant baseline groups based on antenna positions.
Include all possible redundant baselines based on antenna positions.
- Parameters
antenna_numbers (array_like of int) – Antenna numbers, shape (Nants,).
antenna_positions (array_like of float) – Antenna position vectors in the ENU (topocentric) frame in meters, shape (Nants, 3).
tol (float) – Redundancy tolerance in meters.
include_autos (bool) – Option to include autocorrelations.
- Returns
baseline_groups (list of lists of int) – list of lists of redundant baseline numbers
vec_bin_centers (list of array_like of float) – List of vectors describing redundant group centers
lengths (list of float) – List of redundant group baseline lengths in meters
-
utils.
collapse
(arr, alg, weights=None, axis=None, return_weights=False)[source]¶ Parent function to collapse an array with a given algorithm. :Parameters: * arr (array) – Input array to process.
alg (str) – Algorithm to use. Must be defined in this function with corresponding subfunction below.
weights (array, optional) – weights for collapse operation (e.g. weighted mean). NOTE: Some subfunctions do not use the weights. See corresponding doc strings.
axis (int, tuple, optional) – Axis or axes to collapse. Default is all.
return_weights (Bool) – Whether to return sum of weights. Default is False.
-
utils.
mean_collapse
(arr, weights=None, axis=None, return_weights=False)[source]¶ Function to average data. This is similar to np.average, except it handles infs (by giving them zero weight) and zero weight axes (by forcing result to be inf with zero output weight). :Parameters: * arr - array to process
weights - weights for average. If none, will default to equal weight for – all non-infinite data.
axis - axis keyword to pass to np.sum
return_weights - whether to return sum of weights. Default is False.
-
utils.
absmean_collapse
(arr, weights=None, axis=None, return_weights=False)[source]¶ Function to average absolute value :Parameters: * arr - array to process
weights - weights for average
axis - axis keyword to pass to np.mean
return_weights - whether to return sum of weights. Default is False.
-
utils.
quadmean_collapse
(arr, weights=None, axis=None, return_weights=False)[source]¶ Function to average in quadrature :Parameters: * arr - array to process
weights - weights for average
axis - axis keyword to pass to np.mean
return_weights - whether to return sum of weights. Default is False.
-
utils.
or_collapse
(arr, weights=None, axis=None, return_weights=False)[source]¶ Function to collapse axes using OR operation :Parameters: * arr - boolean array to process
weights - NOT USED, but kept for symmetry with other averaging functions
axis - axis or axes over which to OR
return_weights - whether to return dummy weights array. NOTE – the dummy weights will simply be an array of ones. Default is False.
-
utils.
and_collapse
(arr, weights=None, axis=None, return_weights=False)[source]¶ Function to collapse axes using AND operation :Parameters: * arr - boolean array to process
weights - NOT USED, but kept for symmetry with other averaging functions
axis - axis or axes over which to AND
return_weights - whether to return dummy weights array. NOTE – the dummy weights will simply be an array of ones. Default is False.