xradio 0.0.27__py3-none-any.whl → 0.0.29__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- xradio/__init__.py +5 -4
- xradio/_utils/array.py +90 -0
- xradio/_utils/zarr/common.py +48 -3
- xradio/image/_util/_fits/xds_from_fits.py +10 -5
- xradio/image/_util/_zarr/zarr_low_level.py +27 -24
- xradio/image/_util/common.py +4 -1
- xradio/image/_util/zarr.py +4 -1
- xradio/schema/__init__.py +24 -6
- xradio/schema/bases.py +440 -2
- xradio/schema/check.py +96 -55
- xradio/schema/dataclass.py +123 -27
- xradio/schema/metamodel.py +21 -4
- xradio/schema/typing.py +33 -18
- xradio/vis/__init__.py +5 -2
- xradio/vis/_processing_set.py +30 -9
- xradio/vis/_vis_utils/_ms/_tables/create_field_and_source_xds.py +710 -0
- xradio/vis/_vis_utils/_ms/_tables/load.py +23 -10
- xradio/vis/_vis_utils/_ms/_tables/load_main_table.py +145 -64
- xradio/vis/_vis_utils/_ms/_tables/read.py +782 -156
- xradio/vis/_vis_utils/_ms/_tables/read_main_table.py +176 -45
- xradio/vis/_vis_utils/_ms/_tables/read_subtables.py +79 -28
- xradio/vis/_vis_utils/_ms/_tables/write.py +102 -45
- xradio/vis/_vis_utils/_ms/_tables/write_exp_api.py +127 -65
- xradio/vis/_vis_utils/_ms/chunks.py +58 -21
- xradio/vis/_vis_utils/_ms/conversion.py +536 -67
- xradio/vis/_vis_utils/_ms/descr.py +52 -20
- xradio/vis/_vis_utils/_ms/msv2_to_msv4_meta.py +70 -35
- xradio/vis/_vis_utils/_ms/msv4_infos.py +0 -59
- xradio/vis/_vis_utils/_ms/msv4_sub_xdss.py +76 -9
- xradio/vis/_vis_utils/_ms/optimised_functions.py +0 -46
- xradio/vis/_vis_utils/_ms/partition_queries.py +308 -119
- xradio/vis/_vis_utils/_ms/partitions.py +82 -25
- xradio/vis/_vis_utils/_ms/subtables.py +32 -14
- xradio/vis/_vis_utils/_utils/partition_attrs.py +30 -11
- xradio/vis/_vis_utils/_utils/xds_helper.py +136 -45
- xradio/vis/_vis_utils/_zarr/read.py +60 -22
- xradio/vis/_vis_utils/_zarr/write.py +83 -9
- xradio/vis/_vis_utils/ms.py +48 -29
- xradio/vis/_vis_utils/zarr.py +44 -20
- xradio/vis/convert_msv2_to_processing_set.py +106 -32
- xradio/vis/load_processing_set.py +38 -61
- xradio/vis/read_processing_set.py +62 -96
- xradio/vis/schema.py +687 -0
- xradio/vis/vis_io.py +75 -43
- {xradio-0.0.27.dist-info → xradio-0.0.29.dist-info}/LICENSE.txt +6 -1
- {xradio-0.0.27.dist-info → xradio-0.0.29.dist-info}/METADATA +10 -5
- xradio-0.0.29.dist-info/RECORD +73 -0
- {xradio-0.0.27.dist-info → xradio-0.0.29.dist-info}/WHEEL +1 -1
- xradio/vis/model.py +0 -497
- xradio-0.0.27.dist-info/RECORD +0 -71
- {xradio-0.0.27.dist-info → xradio-0.0.29.dist-info}/top_level.txt +0 -0
xradio/vis/model.py
DELETED
|
@@ -1,497 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import Literal, Optional, Union
|
|
5
|
-
from xradio.schema.bases import AsDataArray, AsDataset
|
|
6
|
-
from xradio.schema.typing import Attr, Coord, Coordof, Data, Dataof, Name
|
|
7
|
-
import numpy
|
|
8
|
-
|
|
9
|
-
# Dimensions
|
|
10
|
-
Time = Literal["time"]
|
|
11
|
-
""" Observation time dimension """
|
|
12
|
-
AntennaId = Literal["antenna_id"]
|
|
13
|
-
""" Antenna ID dimension """
|
|
14
|
-
BaselineId = Literal["baseline_id"]
|
|
15
|
-
""" Baseline ID dimension """
|
|
16
|
-
Frequency = Literal["frequency"]
|
|
17
|
-
""" Frequency dimension """
|
|
18
|
-
Polarization = Literal["polarization"]
|
|
19
|
-
""" Polarization dimension """
|
|
20
|
-
UvwLabel = Literal["uvw_label"]
|
|
21
|
-
""" Coordinate dimension of UVW data (typically shape 3 for 'u', 'v', 'w') """
|
|
22
|
-
DirectionLabel = Literal["direction_label"]
|
|
23
|
-
""" Coordinate dimension of UVW data (typically shape 3 for 'u', 'v', 'w') """
|
|
24
|
-
TimePolynomial = Literal["time_polynomial"]
|
|
25
|
-
""" For data that is represented as variable in time using Taylor expansion """
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# Plain data class models
|
|
29
|
-
@dataclass
|
|
30
|
-
class SourceInfoDict:
|
|
31
|
-
# TODO
|
|
32
|
-
pass
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@dataclass
|
|
36
|
-
class FieldInfoDict:
|
|
37
|
-
"""
|
|
38
|
-
Field positions for each source.
|
|
39
|
-
|
|
40
|
-
Defines a field position on the sky. For interferometers, this is the correlated field position.
|
|
41
|
-
For single dishes, this is the nominal pointing direction.
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
name: str
|
|
45
|
-
"""Field name."""
|
|
46
|
-
field_id: int
|
|
47
|
-
"""Field id"""
|
|
48
|
-
code: str
|
|
49
|
-
"""Field code indicating special characteristics of the field; user specified."""
|
|
50
|
-
time_reference: str
|
|
51
|
-
"""
|
|
52
|
-
Time reference for the directions and rates. When used in :py:class:`VisibilityXds` should match
|
|
53
|
-
the scale and format given for ``time`` (see :py:class:`TimeAxis`).
|
|
54
|
-
"""
|
|
55
|
-
delay_direction: SkyCoordDict
|
|
56
|
-
|
|
57
|
-
# TODO
|
|
58
|
-
pass
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@dataclass
|
|
62
|
-
class QuantityDict:
|
|
63
|
-
# TODO
|
|
64
|
-
pass
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@dataclass
|
|
68
|
-
class SkyCoordDict:
|
|
69
|
-
# TODO
|
|
70
|
-
pass
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
@dataclass(frozen=True)
|
|
74
|
-
class ObservationInfoDict:
|
|
75
|
-
observer: List[str]
|
|
76
|
-
"""List of observer names."""
|
|
77
|
-
project: str
|
|
78
|
-
"""Project Code/Project_UID"""
|
|
79
|
-
release_data: str
|
|
80
|
-
"""Project release date. This is the date on which the data may become public."""
|
|
81
|
-
execution_block_id: Optional[str]
|
|
82
|
-
execution_block_number: Optional[str]
|
|
83
|
-
execution_block_UID: Optional[str]
|
|
84
|
-
session_reference: Optional[str]
|
|
85
|
-
observing_script: Optional[str]
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
# Coordinates / Axes
|
|
89
|
-
@dataclass(frozen=True)
|
|
90
|
-
class TimeAxis(AsDataArray):
|
|
91
|
-
"""Data model of time axis"""
|
|
92
|
-
|
|
93
|
-
data: Data[Time, float]
|
|
94
|
-
""" Time, expressed in SI seconds since the epoch (see ``scale`` & ``format``). """
|
|
95
|
-
|
|
96
|
-
integration_time: Attr[Optional[QuantityDict]] = None
|
|
97
|
-
""" The nominal sampling interval (ms v2). Units of seconds. """
|
|
98
|
-
effective_integration_time: Attr[Optional[QuantityDict]] = None
|
|
99
|
-
""" Name of data array that contains the integration time that includes the effects of missing data. """
|
|
100
|
-
|
|
101
|
-
long_name: Attr[str] = "Observation Time"
|
|
102
|
-
""" Long-form name to use for axis"""
|
|
103
|
-
type: Attr[str] = "time"
|
|
104
|
-
""" Coordinate type. Should be ``"time"``. """
|
|
105
|
-
units: Attr[tuple[str]] = ("s",)
|
|
106
|
-
""" Units to associate with axis"""
|
|
107
|
-
scale: Attr[str] = "tai"
|
|
108
|
-
""" Astropy time scales, see :py:class:`astropy.time.Time` """
|
|
109
|
-
format: Attr[str] = "unix"
|
|
110
|
-
""" Astropy format, see :py:class:`astropy.time.Time`. Default seconds from 1970-01-01 00:00:00 UTC """
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
@dataclass(frozen=True)
|
|
114
|
-
class AntennaAxis(AsDataArray):
|
|
115
|
-
data: Data[AntennaId, int]
|
|
116
|
-
"""
|
|
117
|
-
Antenna id of an antenna. Maps to ``antenna_id``
|
|
118
|
-
in :py:class:`AntennaXds`.
|
|
119
|
-
"""
|
|
120
|
-
long_name: Attr[str] = "Antenna ID"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
@dataclass(frozen=True)
|
|
124
|
-
class BaselineAxis(AsDataArray):
|
|
125
|
-
"""TODO: documentation"""
|
|
126
|
-
|
|
127
|
-
data: Data[BaselineId, int]
|
|
128
|
-
"""Unique id for each baseline."""
|
|
129
|
-
long_name: Attr[str] = "Baseline ID"
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@dataclass(frozen=True)
|
|
133
|
-
class BaselineAntennaAxis(AsDataArray):
|
|
134
|
-
data: Data[BaselineId, int]
|
|
135
|
-
"""
|
|
136
|
-
Antenna id for an antenna in a baseline. Maps to ``attrs['antenna_xds'].antenna_id``
|
|
137
|
-
in :py:class:`VisibilityXds`
|
|
138
|
-
"""
|
|
139
|
-
long_name: Attr[str] = "Baseline Antenna ID"
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
@dataclass(frozen=True)
|
|
143
|
-
class FrequencyAxis(AsDataArray):
|
|
144
|
-
"""TODO: documentation"""
|
|
145
|
-
|
|
146
|
-
data: Data[Frequency, float]
|
|
147
|
-
""" Time, expressed in SI seconds since the epoch. """
|
|
148
|
-
spectral_window_name: Attr[str]
|
|
149
|
-
""" Name associated with spectral window. """
|
|
150
|
-
frequency_group_name: Attr[str]
|
|
151
|
-
""" Name associated with frequency group - needed for multi-band VLBI fringe-fitting."""
|
|
152
|
-
reference_frequency: Attr[QuantityDict]
|
|
153
|
-
""" A frequency representative of the spectral window, usually the sky
|
|
154
|
-
frequency corresponding to the DC edge of the baseband. Used by the calibration
|
|
155
|
-
system if a fixed scaling frequency is required or in algorithms to identify the
|
|
156
|
-
observing band. """
|
|
157
|
-
channel_width: Attr[QuantityDict]
|
|
158
|
-
""" The nominal channel bandwidth. Same units as data array (see units key). """
|
|
159
|
-
doppler: Optional[Attr[DopplerXds]]
|
|
160
|
-
""" Doppler tracking information """
|
|
161
|
-
|
|
162
|
-
type: Attr[str] = "spectral_coord"
|
|
163
|
-
""" Coordinate type. Should be ``"spectral_coord"``. """
|
|
164
|
-
long_name: Attr[str] = "Frequency"
|
|
165
|
-
""" Long-form name to use for axis"""
|
|
166
|
-
units: Attr[tuple[str]] = ("Hz",)
|
|
167
|
-
""" Units to associate with axis"""
|
|
168
|
-
frame: Attr[str] = "icrs"
|
|
169
|
-
"""
|
|
170
|
-
Astropy velocity reference frames (see :external:ref:`astropy-spectralcoord`).
|
|
171
|
-
Note that Astropy does not use the name
|
|
172
|
-
'topo' (telescope centric) velocity frame, rather it assumes if no velocity
|
|
173
|
-
frame is given that this is the default.
|
|
174
|
-
"""
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
@dataclass(frozen=True)
|
|
178
|
-
class PolarizationAxis(AsDataArray):
|
|
179
|
-
"""
|
|
180
|
-
Possible correlations that can be formed from polarised receptors. Possible
|
|
181
|
-
values, taken from `Measures/Stokes.h
|
|
182
|
-
<https://github.com/casacore/casacore/blob/5a8df94738bdc36be27e695d7b14fe949a1cc2df/measures/Measures/Stokes.h>`_:
|
|
183
|
-
|
|
184
|
-
* ``I``, ``Q``, ``U``, ``V`` (standard stokes parameters)
|
|
185
|
-
* ``RR``, ``RL``, ``LR``, ``LL`` (circular correlation products)
|
|
186
|
-
* ``XX``, ``XY``, ``YX``, ``YY`` (linear correlation products)
|
|
187
|
-
* ``RX``, ``RY``, ``LX``, ``LY``, ``XR``, ``XL``, ``YR``, ``YL`` (mixed correlation products)
|
|
188
|
-
* ``PP``, ``PQ``, ``QP``, ``QQ`` (general quasi-orthogonal correlation products)
|
|
189
|
-
* ``RCircular``, ``LCircular``, ``Linear`` (single dish polarization types)
|
|
190
|
-
* ``Ptotal`` (polarized intensity: ``sqrt(Q²+U²+V²)``)
|
|
191
|
-
* ``Plinear`` (linearly polarized intensity: ``sqrt(Q²+U²)``)
|
|
192
|
-
* ``PFtotal`` (polarization fraction: ``Ptotal/I``)
|
|
193
|
-
* ``PFlinear`` (linear polarization fraction: ``Plinear/I``)
|
|
194
|
-
* ``Pangle`` (linear polarization angle: ``0.5 arctan(U/Q)`` in radians)
|
|
195
|
-
|
|
196
|
-
"""
|
|
197
|
-
|
|
198
|
-
data: Data[Polarization, str]
|
|
199
|
-
""" Polarization names. """
|
|
200
|
-
type: Attr[str] = "polarization"
|
|
201
|
-
""" Coordinate type. Should be ``"polarization"``. """
|
|
202
|
-
long_name: Attr[str] = "Polarization"
|
|
203
|
-
""" Long-form name to use for axis. Should be ``"Polarization"``"""
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
@dataclass(frozen=True)
|
|
207
|
-
class UvwLabelAxis(AsDataArray):
|
|
208
|
-
"""
|
|
209
|
-
Coordinate axis to make up ``("u", "v", "w")`` tuple, see :py:class:`UvwArray`.
|
|
210
|
-
"""
|
|
211
|
-
|
|
212
|
-
data: Data[UvwLabel, str] = ("u", "v", "w")
|
|
213
|
-
"""Should be ``('u','v','w')``, used by :py:class:`UvwArray`"""
|
|
214
|
-
long_name: Attr[str] = "U/V/W label"
|
|
215
|
-
""" Long-form name to use for axis. Should be ``"U/V/W label"``"""
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
# Data variables
|
|
219
|
-
@dataclass(frozen=True)
|
|
220
|
-
class VisibilityArray(AsDataArray):
|
|
221
|
-
"""TODO: documentation"""
|
|
222
|
-
|
|
223
|
-
data: Data[
|
|
224
|
-
tuple[Time, BaselineId, Frequency, Polarization],
|
|
225
|
-
numpy.complex64 | numpy.complex128,
|
|
226
|
-
]
|
|
227
|
-
time: Coordof[TimeAxis]
|
|
228
|
-
baseline_id: Coordof[BaselineAxis]
|
|
229
|
-
frequency: Coordof[FrequencyAxis]
|
|
230
|
-
polarization: Coordof[PolarizationAxis]
|
|
231
|
-
delay_direction: Attr[SkyCoordDict]
|
|
232
|
-
"""
|
|
233
|
-
Direction of delay center, i.e. what the coorelator originally phased the
|
|
234
|
-
visibilities to.
|
|
235
|
-
|
|
236
|
-
For conversion from MSv2, frame refers column
|
|
237
|
-
keywords by default. If frame varies with field, it refers PhaseDir_Ref
|
|
238
|
-
column instead.
|
|
239
|
-
"""
|
|
240
|
-
phase_direction: Attr[SkyCoordDict]
|
|
241
|
-
"""
|
|
242
|
-
Phase direction of visibilities, i.e. the sky direction from which flux
|
|
243
|
-
would result in real-valued visibilities independent of baseline UVW.
|
|
244
|
-
"""
|
|
245
|
-
long_name: Attr[str] = "Visibility values"
|
|
246
|
-
""" Long-form name to use for axis. Should be ``"Visibility values"``"""
|
|
247
|
-
units: Attr[tuple[str]] = ("Jy",)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
@dataclass(frozen=True)
|
|
251
|
-
class FlagArray(AsDataArray):
|
|
252
|
-
"""
|
|
253
|
-
An array of Boolean values with the same shape as `VISIBILITY`,
|
|
254
|
-
representing the cumulative flags applying to this data matrix. Data are
|
|
255
|
-
flagged bad if the ``FLAG`` array element is ``True``.
|
|
256
|
-
"""
|
|
257
|
-
|
|
258
|
-
data: Data[
|
|
259
|
-
tuple[Time, BaselineId, Frequency, Polarization]
|
|
260
|
-
| tuple[Time, BaselineId, Frequency]
|
|
261
|
-
| tuple[Time, BaselineId],
|
|
262
|
-
bool,
|
|
263
|
-
]
|
|
264
|
-
time: Coordof[TimeAxis]
|
|
265
|
-
baseline_id: Coordof[BaselineAxis]
|
|
266
|
-
frequency: Coordof[FrequencyAxis]
|
|
267
|
-
polarization: Optional[Coordof[PolarizationAxis]] = None
|
|
268
|
-
long_name: Attr[str] = "Visibility flags"
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
@dataclass(frozen=True)
|
|
272
|
-
class WeightArray(AsDataArray):
|
|
273
|
-
"""
|
|
274
|
-
The weight for each channel, with the same shape as the associated
|
|
275
|
-
:py:class:`VisibilityArray`, as assigned by the correlator or processor.
|
|
276
|
-
|
|
277
|
-
Weight spectrum in ms v2 is renamed weight. Should be calculated as
|
|
278
|
-
1/sigma^2 (sigma rms noise).
|
|
279
|
-
"""
|
|
280
|
-
|
|
281
|
-
data: Data[
|
|
282
|
-
tuple[Time, BaselineId, Frequency, Polarization]
|
|
283
|
-
| tuple[Time, BaselineId, Frequency]
|
|
284
|
-
| tuple[Time, BaselineId],
|
|
285
|
-
numpy.float16 | numpy.float32 | numpy.float64,
|
|
286
|
-
]
|
|
287
|
-
"""Visibility weights"""
|
|
288
|
-
time: Coordof[TimeAxis]
|
|
289
|
-
baseline_id: Coordof[BaselineAxis]
|
|
290
|
-
frequency: Optional[Coordof[FrequencyAxis]] = None
|
|
291
|
-
polarization: Optional[Coordof[PolarizationAxis]] = None
|
|
292
|
-
long_name: Attr[str] = "Visibility weights"
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
@dataclass(frozen=True)
|
|
296
|
-
class UvwArray(AsDataArray):
|
|
297
|
-
"""
|
|
298
|
-
Coordinates for the baseline from ``baseline_antenna2_id`` to
|
|
299
|
-
``baseline_antenna1_id``, i.e. the baseline is equal to the difference
|
|
300
|
-
``POSITION2 - POSITION1``. The UVW given are for the ``TIME_CENTROID``, and
|
|
301
|
-
correspond in general to the reference type for the
|
|
302
|
-
``field_info.phase_dir``.
|
|
303
|
-
|
|
304
|
-
The baseline direction should be: ``W`` towards source direction; ``V`` in
|
|
305
|
-
plane through source and system's pole; ``U`` in direction of increasing
|
|
306
|
-
longitude coordinate. So citing
|
|
307
|
-
http://casa.nrao.edu/Memos/CoordConvention.pdf: Consider an XYZ Celestial
|
|
308
|
-
coordinate system centered at the location of the interferometer, with
|
|
309
|
-
:math:`X` towards the East, :math:`Z` towards the NCP and :math:`Y` to
|
|
310
|
-
complete a right-handed system. The UVW coordinate system is then defined
|
|
311
|
-
by the hour-angle and declination of the phase-reference direction such
|
|
312
|
-
that
|
|
313
|
-
|
|
314
|
-
#. when the direction of observation is the NCP (`ha=0,dec=90`),
|
|
315
|
-
the UVW coordinates are aligned with XYZ,
|
|
316
|
-
#. V, W and the NCP are always on a Great circle,
|
|
317
|
-
#. when W is on the local meridian, U points East
|
|
318
|
-
#. when the direction of observation is at zero declination, an
|
|
319
|
-
hour-angle of -6 hours makes W point due East.
|
|
320
|
-
|
|
321
|
-
This definition also determines the sign of the phase of ``VISIBILITY``.
|
|
322
|
-
|
|
323
|
-
"""
|
|
324
|
-
|
|
325
|
-
data: Data[
|
|
326
|
-
tuple[Time, BaselineId, Frequency, Polarization, UvwLabel]
|
|
327
|
-
| tuple[Time, BaselineId, Frequency, UvwLabel]
|
|
328
|
-
| tuple[Time, BaselineId, UvwLabel],
|
|
329
|
-
numpy.float16 | numpy.float32 | numpy.float64,
|
|
330
|
-
]
|
|
331
|
-
"""Baseline coordinates from ``baseline_antenna2_id`` to ``baseline_antenna1_id``"""
|
|
332
|
-
time: Coordof[TimeAxis]
|
|
333
|
-
baseline_id: Coordof[BaselineAxis]
|
|
334
|
-
frequency: Optional[Coordof[FrequencyAxis]] = None
|
|
335
|
-
polarization: Optional[Coordof[PolarizationAxis]] = None
|
|
336
|
-
uvw_label: Coordof[UvwLabelAxis] = ("u", "v", "w")
|
|
337
|
-
long_name: Attr[str] = "Baseline coordinates"
|
|
338
|
-
""" Long-form name to use for axis. Should be ``"Baseline coordinates``"""
|
|
339
|
-
units: Attr[tuple[str]] = ("m",)
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
@dataclass(frozen=True)
|
|
343
|
-
class TimeSamplingArray(AsDataArray):
|
|
344
|
-
"""TODO: documentation"""
|
|
345
|
-
|
|
346
|
-
data: Data[
|
|
347
|
-
tuple[Time, BaselineId, Frequency, Polarization]
|
|
348
|
-
| tuple[Time, BaselineId, Frequency]
|
|
349
|
-
| tuple[Time, BaselineId],
|
|
350
|
-
float,
|
|
351
|
-
]
|
|
352
|
-
|
|
353
|
-
time: Coordof[TimeAxis]
|
|
354
|
-
baseline_id: Coordof[BaselineAxis]
|
|
355
|
-
frequency: Optional[Coordof[FrequencyAxis]] = None
|
|
356
|
-
polarization: Optional[Coordof[PolarizationAxis]] = None
|
|
357
|
-
|
|
358
|
-
scale: Attr[str] = "tai"
|
|
359
|
-
""" Astropy time scales, see :py:class:`astropy.time.Time` """
|
|
360
|
-
format: Attr[str] = "unix"
|
|
361
|
-
""" Astropy format, see :py:class:`astropy.time.Time`. Default seconds from 1970-01-01 00:00:00 UTC """
|
|
362
|
-
|
|
363
|
-
long_name: Attr[str] = "Time sampling data"
|
|
364
|
-
units: Attr[str] = "s"
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
@dataclass(frozen=True)
|
|
368
|
-
class FreqSamplingArray(AsDataArray):
|
|
369
|
-
"""TODO: documentation"""
|
|
370
|
-
|
|
371
|
-
data: Data[
|
|
372
|
-
tuple[Time, BaselineId, Frequency, Polarization]
|
|
373
|
-
| tuple[Time, BaselineId, Frequency]
|
|
374
|
-
| tuple[Time, Frequency]
|
|
375
|
-
| tuple[Frequency],
|
|
376
|
-
float,
|
|
377
|
-
]
|
|
378
|
-
"""
|
|
379
|
-
Data about frequency sampling, such as centroid or integration
|
|
380
|
-
time. Concrete function depends on concrete data array within
|
|
381
|
-
:py:class:`VisibilityXds`.
|
|
382
|
-
"""
|
|
383
|
-
frequency: Coordof[FrequencyAxis]
|
|
384
|
-
time: Optional[Coordof[TimeAxis]] = None
|
|
385
|
-
baseline_id: Optional[Coordof[BaselineAxis]] = None
|
|
386
|
-
polarization: Optional[Coordof[PolarizationAxis]] = None
|
|
387
|
-
long_name: Attr[str] = "Frequency sampling data"
|
|
388
|
-
units: Attr[str] = "Hz"
|
|
389
|
-
frame: Attr[str] = "icrs"
|
|
390
|
-
"""
|
|
391
|
-
Astropy velocity reference frames (see :external:ref:`astropy-spectralcoord`).
|
|
392
|
-
Note that Astropy does not use the name
|
|
393
|
-
'topo' (telescope centric) velocity frame, rather it assumes if no velocity
|
|
394
|
-
frame is given that this is the default.
|
|
395
|
-
"""
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
# Data Sets
|
|
399
|
-
@dataclass(frozen=True)
|
|
400
|
-
class VisibilityXds(AsDataset):
|
|
401
|
-
"""TODO: documentation"""
|
|
402
|
-
|
|
403
|
-
# Required Coordinates
|
|
404
|
-
time: Coordof[TimeAxis]
|
|
405
|
-
"""
|
|
406
|
-
The time coordinate is the mid-point of the nominal sampling interval, as
|
|
407
|
-
specified in the ``ms_v4.time.attrs['integration_time']`` (ms v2 interval).
|
|
408
|
-
"""
|
|
409
|
-
baseline_id: Coordof[BaselineAxis]
|
|
410
|
-
frequency: Coordof[FrequencyAxis]
|
|
411
|
-
"""Center frequencies for each channel."""
|
|
412
|
-
polarization: Coordof[PolarizationAxis]
|
|
413
|
-
"""
|
|
414
|
-
Labels for polarization types, e.g. ``['XX','XY','YX','YY']``, ``['RR','RL','LR','LL']``.
|
|
415
|
-
"""
|
|
416
|
-
uvw_label: Optional[Coordof[UvwLabelAxis]]
|
|
417
|
-
|
|
418
|
-
# Required data variables / arrays
|
|
419
|
-
VISIBILITY: Dataof[VisibilityArray]
|
|
420
|
-
|
|
421
|
-
# Required Attributes
|
|
422
|
-
field_info: Attr[FieldInfoDict]
|
|
423
|
-
"""Values without any phase rotation. See data array (``VISIBILITY`` and ``UVW``) attribute phase center for phase rotated value. """
|
|
424
|
-
antenna_xds: Attr[AntennaXds]
|
|
425
|
-
|
|
426
|
-
# Optional Coordinates
|
|
427
|
-
baseline_antenna1_id: Optional[Coordof[BaselineAntennaAxis]] = None
|
|
428
|
-
"""Antenna id for 1st antenna in baseline. Maps to ``attrs['antenna_xds'].antenna_id``"""
|
|
429
|
-
baseline_antenna2_id: Optional[Coordof[BaselineAntennaAxis]] = None
|
|
430
|
-
"""Antenna id for 2nd antenna in baseline. Maps to ``attrs['antenna_xds'].antenna_id``"""
|
|
431
|
-
scan_id: Optional[Coord[Time, int]] = None
|
|
432
|
-
"""Arbitary scan number to identify data taken in the same logical scan."""
|
|
433
|
-
|
|
434
|
-
# Optional data variables / arrays
|
|
435
|
-
"""Complex visibilities, either simulated or measured by interferometer."""
|
|
436
|
-
FLAG: Optional[Dataof[FlagArray]] = None
|
|
437
|
-
WEIGHT: Optional[Dataof[WeightArray]] = None
|
|
438
|
-
UVW: Optional[Dataof[UvwArray]] = None
|
|
439
|
-
EFFECTIVE_INTEGRATION_TIME: Optional[Dataof[TimeSamplingArray]] = None
|
|
440
|
-
"""
|
|
441
|
-
The integration time, including the effects of missing data, in contrast to
|
|
442
|
-
``integration_time`` attribute of the ``time`` coordinate,
|
|
443
|
-
see :py:class:`TimeAxis`. (MS v2: ``exposure``).
|
|
444
|
-
"""
|
|
445
|
-
TIME_CENTROID: Optional[Dataof[TimeSamplingArray]] = None
|
|
446
|
-
"""
|
|
447
|
-
The time centroid of the visibility, includes the effects of missing data
|
|
448
|
-
unlike the ``time`` coordinate, see :py:class:`TimeAxis`.
|
|
449
|
-
"""
|
|
450
|
-
TIME_CENTROID_EXTRA_PRECISION: Optional[Dataof[TimeSamplingArray]] = None
|
|
451
|
-
"""Additional precision for ``TIME_CENTROID``"""
|
|
452
|
-
EFFECTIVE_CHANNEL_WIDTH: Optional[Dataof[FreqSamplingArray]] = None
|
|
453
|
-
"""The channel bandwidth that includes the effects of missing data."""
|
|
454
|
-
FREQUENCY_CENTROID: Optional[Dataof[FreqSamplingArray]] = None
|
|
455
|
-
"""Includes the effects of missing data unlike ``frequency``."""
|
|
456
|
-
|
|
457
|
-
# Optional Attributes
|
|
458
|
-
pointing_xds: Optional[Attr[PointingXds]] = None
|
|
459
|
-
source_xds: Optional[Attr[SourceXds]] = None
|
|
460
|
-
pased_array_xds: Optional[Attr[PhasedArrayXds]] = None
|
|
461
|
-
observation_info: Optional[Attr[ObservationInfoDict]] = None
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
@dataclass(frozen=True)
|
|
465
|
-
class PointingXds(AsDataset):
|
|
466
|
-
# TODO
|
|
467
|
-
pass
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
@dataclass(frozen=True)
|
|
471
|
-
class SpectralCoordXds(AsDataset):
|
|
472
|
-
# TODO
|
|
473
|
-
pass
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
@dataclass(frozen=True)
|
|
477
|
-
class AntennaXds(AsDataset):
|
|
478
|
-
# TODO
|
|
479
|
-
pass
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
@dataclass(frozen=True)
|
|
483
|
-
class SourceXds(AsDataset):
|
|
484
|
-
# TODO
|
|
485
|
-
pass
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
@dataclass(frozen=True)
|
|
489
|
-
class PhasedArrayXds(AsDataset):
|
|
490
|
-
# TODO
|
|
491
|
-
pass
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
@dataclass(frozen=True)
|
|
495
|
-
class DopplerXds(AsDataset):
|
|
496
|
-
# TODO
|
|
497
|
-
pass
|
xradio-0.0.27.dist-info/RECORD
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
xradio/__init__.py,sha256=xQlI7isyho2zIVf6S31lu681fzx3vwJTF1aW9V93kdE,314
|
|
2
|
-
xradio/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
xradio/_utils/common.py,sha256=bjUZfZZrYTOt0i_XVfmQ2kvgr3egoYPWKGgnr4vKe-Y,46
|
|
4
|
-
xradio/_utils/_casacore/tables.py,sha256=aq6E_4RRAHdTBCwMKrVil1cWhFU2O980DNH9IlRKXLw,1280
|
|
5
|
-
xradio/_utils/zarr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
xradio/_utils/zarr/common.py,sha256=w_orsJ7-nh8nXFllkYPwbEYFS5B-KeMVWnhO3elX_PQ,3470
|
|
7
|
-
xradio/image/__init__.py,sha256=HAD0GfopIbhdxOYckyW6S9US_dSWmZrwIl3FHUzZwrE,435
|
|
8
|
-
xradio/image/image.py,sha256=QoJ_BTLoMfeXJzU1yvtidBIhaMmjNA5_-6C3FWJRUeI,15635
|
|
9
|
-
xradio/image/_util/__init__.py,sha256=M9lxD1Gc7kv0ucDEDbjLRuIEuESev-IG8j9EaCKUAkA,77
|
|
10
|
-
xradio/image/_util/casacore.py,sha256=DmBTHUQ6870N5ARuFnYSfjZSLniJYgsjrsICUlCREYM,4234
|
|
11
|
-
xradio/image/_util/common.py,sha256=hzVcnq4pYhxvkbMAIBzhWKdLN4nrqRGlmFwABxkww7A,8921
|
|
12
|
-
xradio/image/_util/fits.py,sha256=gyGm06fuCKqVGK7uv-ObvQNfFawUDsIOa_nQyklM3Aw,329
|
|
13
|
-
xradio/image/_util/image_factory.py,sha256=6tPzs20FTm2wEshHc1xqtTV7D0TbKxGLUKAVtvOc68I,10506
|
|
14
|
-
xradio/image/_util/zarr.py,sha256=xTjg-KY-T4vuyua8pvuZZjCL-rI_wAsPjPUOYd5PZr4,1512
|
|
15
|
-
xradio/image/_util/_casacore/__init__.py,sha256=OlsiRE40o1jSbBI4khgQQzgfDYbAlOMKIhO4UFlbGhg,41
|
|
16
|
-
xradio/image/_util/_casacore/common.py,sha256=ky999eTCWta8w-uIs-7P7rPhZRLuh9yTuQXAxPvaPm4,1579
|
|
17
|
-
xradio/image/_util/_casacore/xds_from_casacore.py,sha256=Rht4A32QLAQ7uizwKfOsZ3Z819shvlUbsZfAuTIVerU,42562
|
|
18
|
-
xradio/image/_util/_casacore/xds_to_casacore.py,sha256=P6c-yoOjuVQkm07ApA7FFKfje4aPwV-MsRFKaRaPq9I,15338
|
|
19
|
-
xradio/image/_util/_fits/xds_from_fits.py,sha256=rsV2OMK3g4U_GYKgj68cZXWIlXi0M0oU2M9FtAUeCk8,28339
|
|
20
|
-
xradio/image/_util/_zarr/common.py,sha256=apMX_bF4Hr3pFGjnDFpp36KgmhTYAPBZquNkjBHrsXk,307
|
|
21
|
-
xradio/image/_util/_zarr/xds_from_zarr.py,sha256=hz6lHlpybfr_r8pn_uObDHOFmN5h75F11bkBv8KCuP0,3192
|
|
22
|
-
xradio/image/_util/_zarr/xds_to_zarr.py,sha256=wogXbwX8n3Sl9PHoc3_Y_LBowQsQ-94HZQFZ5NcxUZA,1624
|
|
23
|
-
xradio/image/_util/_zarr/zarr_low_level.py,sha256=5D8Vu8QZD8CpKSPMkxHhnKpdk3vhUStW3kQFHUQUQns,10984
|
|
24
|
-
xradio/schema/__init__.py,sha256=UpejQegOaCLrsbcR4MLudR0RxeE0sN3zxFXM8rzyJPo,444
|
|
25
|
-
xradio/schema/bases.py,sha256=vcW47jZWpJ0mJdni7eFVY7zJoper2sy2VjX8LE3pUqc,150
|
|
26
|
-
xradio/schema/check.py,sha256=3u79hRL3pGF6dvQE0LF21nGdAVnRXWwgnbMmStGBSSA,16310
|
|
27
|
-
xradio/schema/dataclass.py,sha256=vkc2cqLjGV5QN8j70GbBaNfslT_KLWmebsPGeBEuGcs,8879
|
|
28
|
-
xradio/schema/metamodel.py,sha256=RHrihyaetinu7_lGTTZ31Rlv-_Db_EgQCXzk56H004o,3476
|
|
29
|
-
xradio/schema/typing.py,sha256=coF3LuKOlCUJGKTUUH81EcjePZ86koOYzm8qzsAw-HU,9983
|
|
30
|
-
xradio/vis/__init__.py,sha256=AV2WG26NzFB1LEEtFaq1ULQKz9VnluEAjg0Qb5Ju7m8,358
|
|
31
|
-
xradio/vis/_processing_set.py,sha256=zYCswmWjsRN_8M61IkbMo6zpI-4ABMWpKZkL8f20KGo,4187
|
|
32
|
-
xradio/vis/convert_msv2_to_processing_set.py,sha256=7vTjqtWFEBOySnLVoadceKCA4VLgOig7eCs1dxrdYQA,3966
|
|
33
|
-
xradio/vis/load_processing_set.py,sha256=ldgg0GqFwYuNc2fPkRlc_lW2Kt7naq2wFGloALl0J4Y,6753
|
|
34
|
-
xradio/vis/model.py,sha256=uBjvvhYEY1p-3H3NStrt1ZKMQACLGLo93OiEBvDVId8,17083
|
|
35
|
-
xradio/vis/read_processing_set.py,sha256=mhBcwrNEVlu5_dMfRaJQHzD-Yc3n2dtVqhNxvaoq09U,5522
|
|
36
|
-
xradio/vis/vis_io.py,sha256=rCSOt4Max37uFzF3_Ck4U4xWzzYcipdbYcxbhBhQ_Qs,5278
|
|
37
|
-
xradio/vis/_vis_utils/__init__.py,sha256=Scu6rKJ2SpO8aG7F-xdTZcYfyWx0viV8gFh8E8ur_gI,93
|
|
38
|
-
xradio/vis/_vis_utils/ms.py,sha256=0uycYCDmeQku16TdPcnZEBJMdfb_i6xPoieYPhPoVIg,5258
|
|
39
|
-
xradio/vis/_vis_utils/ms_column_descriptions_dicts.py,sha256=BV2SyiAmIB8P8n-u8osKlKYKiOq8fmiFsB9xSxlkTrM,39906
|
|
40
|
-
xradio/vis/_vis_utils/zarr.py,sha256=vmpdB4_cdkObBaRRFVJesvIIDiAmM_rOzcpN3Oglih8,3548
|
|
41
|
-
xradio/vis/_vis_utils/_ms/chunks.py,sha256=rqQyx00Cnq6EZDfHujvonvhNcxzVtCBTRye7MVX6CK8,4922
|
|
42
|
-
xradio/vis/_vis_utils/_ms/conversion.py,sha256=cnEqv9CZTvwjwdSAqguF4n01n04rgIIbXxoISk9ANiE,15660
|
|
43
|
-
xradio/vis/_vis_utils/_ms/descr.py,sha256=kOuZLFfXR5kHoV29TLhzHllw7zP6Z67Cc5xdVS6JTa4,4626
|
|
44
|
-
xradio/vis/_vis_utils/_ms/msv2_msv3.py,sha256=9AKs2HWly7Ivv_Cjr11dIPGmm33_rtSBoGF9wN5ZwEQ,116
|
|
45
|
-
xradio/vis/_vis_utils/_ms/msv2_to_msv4_meta.py,sha256=SUU5dMUxYWnKqfnw46H4QZno2RW4Z8Wl1r3ouHnReOA,3812
|
|
46
|
-
xradio/vis/_vis_utils/_ms/msv4_infos.py,sha256=hyxtEAR1NcdZS43ayQAytsN1ikgOvy7KC1Wm4NJ1IGw,1967
|
|
47
|
-
xradio/vis/_vis_utils/_ms/msv4_sub_xdss.py,sha256=UlvdopOqev1TI2DeGAGiBCVzMFzVW9vRtX0bLuwUGt0,11126
|
|
48
|
-
xradio/vis/_vis_utils/_ms/optimised_functions.py,sha256=j4tkgUavFj8BAYxCgl9rDb1iQHlln9OfjlCTGWmXrO8,1397
|
|
49
|
-
xradio/vis/_vis_utils/_ms/partition_queries.py,sha256=fBPIXPLtwXqCtuxsN621VuHVFaWx6QE9yA4bm7QBF84,13776
|
|
50
|
-
xradio/vis/_vis_utils/_ms/partitions.py,sha256=vlBIaJgKKNkxE1okQxJ3NZTk9vnKHklB2nO1NXaDGWg,12000
|
|
51
|
-
xradio/vis/_vis_utils/_ms/subtables.py,sha256=hkSa3sXUaSRVEv2CNK65Svx5Uyp3opZHaHYnJucehyU,3728
|
|
52
|
-
xradio/vis/_vis_utils/_ms/_tables/load.py,sha256=TXrEf7fKfsP0Wp7fB7DLWeOS_Z8A1OLKGWGNSoiYHOM,1665
|
|
53
|
-
xradio/vis/_vis_utils/_ms/_tables/load_main_table.py,sha256=HyIfjaQXfFA30YRUzU2H_ugRnArQ1XOiVGKxC9PbiOo,13497
|
|
54
|
-
xradio/vis/_vis_utils/_ms/_tables/read.py,sha256=lt3JOre-7WyzTprUuZIowi6aEcXc8R367oLZUB0vdhk,21781
|
|
55
|
-
xradio/vis/_vis_utils/_ms/_tables/read_main_table.py,sha256=9XasWazrGSkQ6C4jSrItIGidaTUzh-bdSRYkYR5j0Dg,23958
|
|
56
|
-
xradio/vis/_vis_utils/_ms/_tables/read_subtables.py,sha256=_3AlxlLJwdu__a8sfG8a7-wz-yTo2S7JyVit17XaxKs,11741
|
|
57
|
-
xradio/vis/_vis_utils/_ms/_tables/table_query.py,sha256=q8EGFf_zIwHcHnvFJOn8hPh8zFZQ3f7BGbXvL3bHad4,555
|
|
58
|
-
xradio/vis/_vis_utils/_ms/_tables/write.py,sha256=Uuk4QGib_QOc8i6g7OYB9E6SxMUDPlXDYXlHqkzPX5Q,8475
|
|
59
|
-
xradio/vis/_vis_utils/_ms/_tables/write_exp_api.py,sha256=0C-TOEA05mdmx9lz97s3Qlc-F6Z-bOF1QEuTiEJJuEQ,13188
|
|
60
|
-
xradio/vis/_vis_utils/_utils/cds.py,sha256=OpvKowSheIthUbcPEv2AoKmxlEt3DqJZS5C1AYh5z10,1179
|
|
61
|
-
xradio/vis/_vis_utils/_utils/partition_attrs.py,sha256=EaA23Kfqb78BfmIi8tcn_4XTKWQJomNMZhVcl4xKado,3201
|
|
62
|
-
xradio/vis/_vis_utils/_utils/stokes_types.py,sha256=DMa8TmmS7BQ99Xm8c7ZjcRapMtLbrKVxrt4f0qUIOvg,561
|
|
63
|
-
xradio/vis/_vis_utils/_utils/xds_helper.py,sha256=UhtAZV5DyYzVVBkXzwDAOz6TICxotQpGvAKxY6zzVkU,11152
|
|
64
|
-
xradio/vis/_vis_utils/_zarr/encoding.py,sha256=GENIlThV6a9CUCL6gIGlu9c6NR3OFWNos6mpxZjMwDc,536
|
|
65
|
-
xradio/vis/_vis_utils/_zarr/read.py,sha256=ikNGlOdHuZ_cgWpPAZ4iHzeLdU44I0iBLcqSEiM_hCk,7111
|
|
66
|
-
xradio/vis/_vis_utils/_zarr/write.py,sha256=exvrqNVnVKk6LzbDPm_fm142YzX-7lHGqklXTQB9wh0,8864
|
|
67
|
-
xradio-0.0.27.dist-info/LICENSE.txt,sha256=dvACd-5O67yjSZlnEKcWmu3DqwzBtbC922iPv0KOeAw,1516
|
|
68
|
-
xradio-0.0.27.dist-info/METADATA,sha256=hxvJZYsyS63WS8BMON9TYk5M-GRWkQbqUtjip8D6Zpk,4089
|
|
69
|
-
xradio-0.0.27.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
70
|
-
xradio-0.0.27.dist-info/top_level.txt,sha256=dQu27fGBZJ2Yk-gW5XeD-dZ76Xa4Xcvk60Vz-dwXp7k,7
|
|
71
|
-
xradio-0.0.27.dist-info/RECORD,,
|
|
File without changes
|