GMRT conversion guide

[1]:
from importlib.metadata import version
import os

try:
    import xradio

    print("XRADIO version", version("xradio"), "already installed.")
except ImportError as exc:
    print(f"Could not import XRADIO: {exc}")
    print("Installing XRADIO")

    os.system("pip install xradio")

    import xradio

    print("xradio version", version("xradio"), " installed.")
XRADIO version 1.1.3 already installed.

Download dataset

[2]:
import toolviper
import os
from pathlib import Path
file_path_os = "gmrt.ms"

toolviper.utils.data.download(file="gmrt.ms")
[2026-04-20 15:18:03,597]     INFO   toolviper:  Initializing download...
[2026-04-20 15:18:03,598]     INFO   toolviper:  File already exists: /Users/vdesouza/work/xradio/docs/source/measurement_set/guides/gmrt.ms

Convert to Processing Set

[3]:
from xradio.measurement_set import convert_msv2_to_processing_set

ms_file = "gmrt.ms"
main_chunksize = {"frequency": 1, "time": 20}  # baseline, polarization
outfile = "gmrt.ps.zarr"
convert_msv2_to_processing_set(
    in_file=ms_file,
    out_file=outfile,
    parallel_mode="none",
    persistence_mode='w',
    main_chunksize=main_chunksize,
)
[2026-04-20 15:18:03,897]     INFO   toolviper:  Updated partition scheme used: ['DATA_DESC_ID', 'OBSERVATION_ID']
[2026-04-20 15:18:03,898]     INFO   toolviper:  Number of partitions: 1
[2026-04-20 15:18:03,898]     INFO   toolviper:  OBSERVATION_ID [0], DDI [0], STATE [None], FIELD [3], SCAN [7], EPHEMERIS [None]

Processing Set

[4]:
from xradio.measurement_set import open_processing_set

ps_xdt = open_processing_set(ps_store=outfile)
ps_xdt.xr_ps.summary()
[4]:
name scan_intents shape execution_block_UID polarization scan_name spw_name spw_intents field_name source_name line_name field_coords session_reference_UID scheduling_block_UID project_UID start_frequency end_frequency
0 gmrt_0 [None] (2, 435, 64, 4) --- [RR, RL, LR, LL] [7] spw_0 [UNSPECIFIED] [3C286_3] [3C286_3] [] [fk5, 13h31m08.28s, 30d30m32.90s] --- --- 551562500.0 748437500.0
[5]:
ps_xdt.xr_ps.plot_antenna_positions_2d()
../../_images/measurement_set_guides_GMRT_8_0.png
[6]:
ps_xdt.xr_ps.plot_phase_centers()
../../_images/measurement_set_guides_GMRT_9_0.png

Measurement Sets

Visibility dataset

[7]:
ms_xdt = ps_xdt["gmrt_0"]
ms_xdt
[7]:
<xarray.DataTree 'gmrt_0'>
Group: /gmrt_0
│   Dimensions:                     (time: 2, baseline_id: 435, frequency: 64,
│                                    polarization: 4, uvw_label: 3)
│   Coordinates:
│     * time                        (time) float64 16B 1.72e+09 1.72e+09
│       field_name                  (time) <U27 216B dask.array<chunksize=(2,), meta=np.ndarray>
│       scan_name                   (time) <U21 168B dask.array<chunksize=(2,), meta=np.ndarray>
│     * baseline_id                 (baseline_id) int64 3kB 0 1 2 3 ... 432 433 434
│       baseline_antenna1_name      (baseline_id) <U3 5kB dask.array<chunksize=(435,), meta=np.ndarray>
│       baseline_antenna2_name      (baseline_id) <U3 5kB dask.array<chunksize=(435,), meta=np.ndarray>
│     * frequency                   (frequency) float64 512B 5.516e+08 ... 7.484e+08
│     * polarization                (polarization) <U2 32B 'RR' 'RL' 'LR' 'LL'
│     * uvw_label                   (uvw_label) <U1 12B 'u' 'v' 'w'
│   Data variables:
│       EFFECTIVE_INTEGRATION_TIME  (time, baseline_id) float64 7kB dask.array<chunksize=(2, 435), meta=np.ndarray>
│       FLAG                        (time, baseline_id, frequency, polarization) bool 223kB dask.array<chunksize=(2, 435, 1, 4), meta=np.ndarray>
│       TIME_CENTROID               (time, baseline_id) float64 7kB dask.array<chunksize=(2, 435), meta=np.ndarray>
│       UVW                         (time, baseline_id, uvw_label) float64 21kB dask.array<chunksize=(2, 435, 3), meta=np.ndarray>
│       VISIBILITY                  (time, baseline_id, frequency, polarization) complex64 2MB dask.array<chunksize=(2, 435, 1, 4), meta=np.ndarray>
│       WEIGHT                      (time, baseline_id, frequency, polarization) float32 891kB dask.array<chunksize=(2, 435, 1, 4), meta=np.ndarray>
│   Attributes:
│       creation_date:     2026-04-20T21:18:03.911368+00:00
│       creator:           {'software_name': 'xradio', 'version': '1.1.3'}
│       data_groups:       {'base': {'correlated_data': 'VISIBILITY', 'date': '20...
│       observation_info:  {'observer': ['TEST_PM'], 'observing_log': '[]', 'proj...
│       processor_info:    {'sub_type': '', 'type': ''}
│       schema_version:    4.0.0
│       type:              visibility
├── Group: /gmrt_0/antenna_xds
│       Dimensions:                 (antenna_name: 30, cartesian_pos_label: 3,
│                                    receptor_label: 2)
│       Coordinates:
│         * antenna_name            (antenna_name) <U3 360B 'C00' 'C01' ... 'W05' 'W06'
│           mount                   (antenna_name) <U6 720B dask.array<chunksize=(30,), meta=np.ndarray>
│           station_name            (antenna_name) <U6 720B dask.array<chunksize=(30,), meta=np.ndarray>
│           telescope_name          (antenna_name) <U4 480B dask.array<chunksize=(30,), meta=np.ndarray>
│         * cartesian_pos_label     (cartesian_pos_label) <U1 12B 'x' 'y' 'z'
│         * receptor_label          (receptor_label) <U5 40B 'pol_0' 'pol_1'
│           polarization_type       (antenna_name, receptor_label) <U1 240B dask.array<chunksize=(30, 2), meta=np.ndarray>
│       Data variables:
│           ANTENNA_DISH_DIAMETER   (antenna_name) float64 240B dask.array<chunksize=(30,), meta=np.ndarray>
│           ANTENNA_POSITION        (antenna_name, cartesian_pos_label) float64 720B dask.array<chunksize=(30, 3), meta=np.ndarray>
│           ANTENNA_RECEPTOR_ANGLE  (antenna_name, receptor_label) float64 480B dask.array<chunksize=(30, 2), meta=np.ndarray>
│       Attributes:
│           overall_telescope_name:  GMRT
│           relocatable_antennas:    False
│           type:                    antenna
└── Group: /gmrt_0/field_and_source_base_xds
        Dimensions:                       (field_name: 1, sky_dir_label: 2,
                                           line_label: 1)
        Coordinates:
          * field_name                    (field_name) <U27 108B '3C286_3'
            source_name                   (field_name) <U27 108B dask.array<chunksize=(1,), meta=np.ndarray>
          * sky_dir_label                 (sky_dir_label) <U3 24B 'ra' 'dec'
          * line_label                    (line_label) <U21 84B '0'
            line_name                     (field_name, line_label) <U1 4B dask.array<chunksize=(1, 1), meta=np.ndarray>
        Data variables:
            FIELD_PHASE_CENTER_DIRECTION  (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>
            LINE_REST_FREQUENCY           (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>
            LINE_SYSTEMIC_VELOCITY        (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>
            SOURCE_DIRECTION              (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>
        Attributes:
            type:     field_and_source
[8]:
ms_xdt.coords["frequency"]
[8]:
<xarray.DataArray 'frequency' (frequency: 64)> Size: 512B
array([5.515625e+08, 5.546875e+08, 5.578125e+08, 5.609375e+08, 5.640625e+08,
       5.671875e+08, 5.703125e+08, 5.734375e+08, 5.765625e+08, 5.796875e+08,
       5.828125e+08, 5.859375e+08, 5.890625e+08, 5.921875e+08, 5.953125e+08,
       5.984375e+08, 6.015625e+08, 6.046875e+08, 6.078125e+08, 6.109375e+08,
       6.140625e+08, 6.171875e+08, 6.203125e+08, 6.234375e+08, 6.265625e+08,
       6.296875e+08, 6.328125e+08, 6.359375e+08, 6.390625e+08, 6.421875e+08,
       6.453125e+08, 6.484375e+08, 6.515625e+08, 6.546875e+08, 6.578125e+08,
       6.609375e+08, 6.640625e+08, 6.671875e+08, 6.703125e+08, 6.734375e+08,
       6.765625e+08, 6.796875e+08, 6.828125e+08, 6.859375e+08, 6.890625e+08,
       6.921875e+08, 6.953125e+08, 6.984375e+08, 7.015625e+08, 7.046875e+08,
       7.078125e+08, 7.109375e+08, 7.140625e+08, 7.171875e+08, 7.203125e+08,
       7.234375e+08, 7.265625e+08, 7.296875e+08, 7.328125e+08, 7.359375e+08,
       7.390625e+08, 7.421875e+08, 7.453125e+08, 7.484375e+08])
Coordinates:
  * frequency  (frequency) float64 512B 5.516e+08 5.547e+08 ... 7.484e+08
Attributes:
    channel_width:            {'attrs': {'type': 'quantity', 'units': 'Hz'}, ...
    observer:                 TOPO
    reference_frequency:      {'attrs': {'observer': 'TOPO', 'type': 'spectra...
    spectral_window_intents:  ['UNSPECIFIED']
    spectral_window_name:     spw_0
    type:                     spectral_coord
    units:                    Hz

Antenna dataset

[9]:
ms_xdt.antenna_xds
[9]:
<xarray.DataTree 'antenna_xds'>
Group: /gmrt_0/antenna_xds
    Dimensions:                 (time: 2, baseline_id: 435, frequency: 64,
                                 polarization: 4, uvw_label: 3, antenna_name: 30,
                                 cartesian_pos_label: 3, receptor_label: 2)
    Coordinates:
      * antenna_name            (antenna_name) <U3 360B 'C00' 'C01' ... 'W05' 'W06'
        mount                   (antenna_name) <U6 720B dask.array<chunksize=(30,), meta=np.ndarray>
        station_name            (antenna_name) <U6 720B dask.array<chunksize=(30,), meta=np.ndarray>
        telescope_name          (antenna_name) <U4 480B dask.array<chunksize=(30,), meta=np.ndarray>
      * cartesian_pos_label     (cartesian_pos_label) <U1 12B 'x' 'y' 'z'
      * receptor_label          (receptor_label) <U5 40B 'pol_0' 'pol_1'
        polarization_type       (antenna_name, receptor_label) <U1 240B dask.array<chunksize=(30, 2), meta=np.ndarray>
    Inherited coordinates:
      * baseline_id             (baseline_id) int64 3kB 0 1 2 3 ... 431 432 433 434
      * frequency               (frequency) float64 512B 5.516e+08 ... 7.484e+08
      * polarization            (polarization) <U2 32B 'RR' 'RL' 'LR' 'LL'
      * time                    (time) float64 16B 1.72e+09 1.72e+09
      * uvw_label               (uvw_label) <U1 12B 'u' 'v' 'w'
    Data variables:
        ANTENNA_DISH_DIAMETER   (antenna_name) float64 240B dask.array<chunksize=(30,), meta=np.ndarray>
        ANTENNA_POSITION        (antenna_name, cartesian_pos_label) float64 720B dask.array<chunksize=(30, 3), meta=np.ndarray>
        ANTENNA_RECEPTOR_ANGLE  (antenna_name, receptor_label) float64 480B dask.array<chunksize=(30, 2), meta=np.ndarray>
    Attributes:
        overall_telescope_name:  GMRT
        relocatable_antennas:    False
        type:                    antenna

Field and source dataset

[10]:
ms_xdt.xr_ms.get_field_and_source_xds()
[10]:
<xarray.DatasetView> Size: 4kB
Dimensions:                       (field_name: 1, sky_dir_label: 2,
                                   line_label: 1, baseline_id: 435,
                                   frequency: 64, polarization: 4, time: 2,
                                   uvw_label: 3)
Coordinates:
  * field_name                    (field_name) <U27 108B '3C286_3'
    source_name                   (field_name) <U27 108B dask.array<chunksize=(1,), meta=np.ndarray>
  * sky_dir_label                 (sky_dir_label) <U3 24B 'ra' 'dec'
  * line_label                    (line_label) <U21 84B '0'
    line_name                     (field_name, line_label) <U1 4B dask.array<chunksize=(1, 1), meta=np.ndarray>
  * baseline_id                   (baseline_id) int64 3kB 0 1 2 ... 432 433 434
  * frequency                     (frequency) float64 512B 5.516e+08 ... 7.48...
  * polarization                  (polarization) <U2 32B 'RR' 'RL' 'LR' 'LL'
  * time                          (time) float64 16B 1.72e+09 1.72e+09
  * uvw_label                     (uvw_label) <U1 12B 'u' 'v' 'w'
Data variables:
    FIELD_PHASE_CENTER_DIRECTION  (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>
    LINE_REST_FREQUENCY           (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>
    LINE_SYSTEMIC_VELOCITY        (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>
    SOURCE_DIRECTION              (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>
Attributes:
    type:     field_and_source