{ "cells": [ { "cell_type": "markdown", "id": "65fca704-19af-4e41-b080-b3ff70d7eecf", "metadata": {}, "source": [ "# Single dish (GBT) conversion guide" ] }, { "cell_type": "code", "execution_count": 1, "id": "14a699d5-bf6e-4ebe-bfa5-dcccbec0ec2e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "XRADIO version 1.1.12a0 already installed.\n" ] } ], "source": [ "from importlib.metadata import version\n", "import os\n", "\n", "try:\n", " import xradio\n", "\n", " print(\"XRADIO version\", version(\"xradio\"), \"already installed.\")\n", "except ImportError as e:\n", " print(e)\n", " print(\"Installing XRADIO\")\n", "\n", " os.system(\"pip install xradio\")\n", "\n", " import xradio\n", "\n", " print(\"xradio version\", version(\"xradio\"), \" installed.\")" ] }, { "cell_type": "markdown", "id": "a939f97e-6c76-47b0-aef5-256df2e908f9", "metadata": {}, "source": [ "## Download dataset" ] }, { "cell_type": "markdown", "id": "805daf71", "metadata": {}, "source": [ "https://open-bitbucket.nrao.edu/projects/CASA/repos/casatestdata/browse/unittest/tclean/venus_ephem_test.ms" ] }, { "cell_type": "code", "execution_count": 2, "id": "134a99e3-c5a2-443c-96d4-f44fae59555a", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\u001b[38;2;128;05;128m2026-01-21 13:11:10,176\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m Downloading from [cloudflare] .... \n" ] }, { "data": { "text/html": [ "
\n",
" Download List \n",
" ─────────────── \n",
" sdimaging.ms \n",
" \n",
"\n"
],
"text/plain": [
" \n",
" \u001b[1m \u001b[0m\u001b[1mDownload List\u001b[0m\u001b[1m \u001b[0m \n",
" ─────────────── \n",
" \u001b[35msdimaging.ms\u001b[0m \n",
" \n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[38;2;128;05;128m2026-01-21 13:11:10,179\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m File exists: sdimaging.ms \n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9da66753ecec4c30868eeabffaf75746",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n"
],
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import toolviper\n",
"\n",
"toolviper.utils.data.download(file=\"sdimaging.ms\")"
]
},
{
"cell_type": "markdown",
"id": "f8435c96-7010-4b79-8be6-51f7f6993b5f",
"metadata": {},
"source": [
"## Convert to Processing Set"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ee52d124-2c17-450b-879f-1f86f0ae265c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[\u001b[38;2;128;05;128m2026-01-21 13:11:11,120\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m Updated partition scheme used: ['DATA_DESC_ID', 'OBS_MODE', 'OBSERVATION_ID'] \n",
"[\u001b[38;2;128;05;128m2026-01-21 13:11:11,122\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m Number of partitions: 1 \n",
"[\u001b[38;2;128;05;128m2026-01-21 13:11:11,122\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m OBSERVATION_ID [0], DDI [0], STATE [0], FIELD [0], SCAN [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61], EPHEMERIS [None] \n",
"[\u001b[38;2;128;05;128m2026-01-21 13:11:11,417\u001b[0m] \u001b[38;2;255;160;0m WARNING\u001b[0m\u001b[38;2;112;128;144m viperlog: \u001b[0m Doppler table present. Please open an issue on https://github.com/casangi/xradio/issues so that we can add support for this. \n"
]
}
],
"source": [
"from xradio.measurement_set import convert_msv2_to_processing_set\n",
"\n",
"ms_file = \"sdimaging.ms\"\n",
"\n",
"main_chunksize = {\"time\": 63} # baseline, polarization\n",
"outfile = \"sdimaging.ps.zarr\"\n",
"convert_msv2_to_processing_set(\n",
" in_file=ms_file,\n",
" out_file=outfile,\n",
" parallel_mode=\"none\",\n",
" persistence_mode='w',\n",
" main_chunksize=main_chunksize,\n",
")"
]
},
{
"cell_type": "markdown",
"id": "fbd02679-0df8-4fa5-8036-6f22f534e386",
"metadata": {},
"source": [
"## Processing Set"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dab986ca-55f8-4a4a-ba59-9c97fcc2ca84",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"| \n", " | name | \n", "scan_intents | \n", "shape | \n", "execution_block_UID | \n", "polarization | \n", "scan_name | \n", "spw_name | \n", "spw_intents | \n", "field_name | \n", "source_name | \n", "line_name | \n", "field_coords | \n", "session_reference_UID | \n", "scheduling_block_UID | \n", "project_UID | \n", "start_frequency | \n", "end_frequency | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "sdimaging_0 | \n", "[OBSERVE_TARGET_ON_SOURCE, FREQUENCY_SWITCH_SIG] | \n", "(3843, 1, 1024, 2) | \n", "--- | \n", "[XX, YY] | \n", "[1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2,... | \n", "spw_0 | \n", "[UNSPECIFIED] | \n", "[FLS3a_0] | \n", "[FLS3a_0] | \n", "[] | \n", "[fk5, 0h00m00.00s, 0d00m00.00s] | \n", "--- | \n", "--- | \n", "\n", " | 1.419395e+09 | \n", "1.421893e+09 | \n", "
<xarray.DataTree 'sdimaging_0'>\n",
"Group: /sdimaging_0\n",
"│ Dimensions: (time: 3843, antenna_name: 1, frequency: 1024,\n",
"│ polarization: 2)\n",
"│ Coordinates:\n",
"│ * time (time) float64 31kB 1.069e+09 ... 1.069e+09\n",
"│ * antenna_name (antenna_name) <U3 12B 'GBT'\n",
"│ * frequency (frequency) float64 8kB 1.419e+09 ... 1.422e+09\n",
"│ * polarization (polarization) <U2 16B 'XX' 'YY'\n",
"│ field_name (time) <U27 415kB dask.array<chunksize=(1922,), meta=np.ndarray>\n",
"│ scan_name (time) <U21 323kB dask.array<chunksize=(1922,), meta=np.ndarray>\n",
"│ telescope_name (antenna_name) <U3 12B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ Data variables:\n",
"│ EFFECTIVE_INTEGRATION_TIME (time, antenna_name) float64 31kB dask.array<chunksize=(63, 1), meta=np.ndarray>\n",
"│ FLAG (time, antenna_name, frequency, polarization) bool 8MB dask.array<chunksize=(63, 1, 1024, 2), meta=np.ndarray>\n",
"│ SPECTRUM (time, antenna_name, frequency, polarization) float32 31MB dask.array<chunksize=(63, 1, 1024, 2), meta=np.ndarray>\n",
"│ TIME_CENTROID (time, antenna_name) float64 31kB dask.array<chunksize=(63, 1), meta=np.ndarray>\n",
"│ WEIGHT (time, antenna_name, frequency, polarization) float32 31MB dask.array<chunksize=(63, 1, 1024, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ creation_date: 2026-01-21T18:11:11.140206+00:00\n",
"│ creator: {'software_name': 'xradio', 'version': '1.1.12a0'}\n",
"│ data_groups: {'base': {'correlated_data': 'SPECTRUM', 'date': '2026...\n",
"│ observation_info: {'observer': ['AGBT02A_031_12'], 'observing_log': '[]'...\n",
"│ processor_info: {'sub_type': '', 'type': ''}\n",
"│ schema_version: 4.0.0\n",
"│ type: spectrum\n",
"├── Group: /sdimaging_0/antenna_xds\n",
"│ Dimensions: (antenna_name: 1, cartesian_pos_label: 3,\n",
"│ receptor_label: 2)\n",
"│ Coordinates:\n",
"│ * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
"│ * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
"│ mount (antenna_name) <U6 24B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ polarization_type (antenna_name, receptor_label) <U1 8B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
"│ station_name (antenna_name) <U9 36B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ telescope_name (antenna_name) <U3 12B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ Data variables:\n",
"│ ANTENNA_DISH_DIAMETER (antenna_name) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ ANTENNA_POSITION (antenna_name, cartesian_pos_label) float64 24B dask.array<chunksize=(1, 3), meta=np.ndarray>\n",
"│ ANTENNA_RECEPTOR_ANGLE (antenna_name, receptor_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ overall_telescope_name: GBT\n",
"│ relocatable_antennas: False\n",
"│ type: antenna\n",
"├── Group: /sdimaging_0/field_and_source_base_xds\n",
"│ Dimensions: (field_name: 1, sky_dir_label: 2,\n",
"│ line_label: 1)\n",
"│ Coordinates:\n",
"│ * field_name (field_name) <U27 108B 'FLS3a_0'\n",
"│ * sky_dir_label (sky_dir_label) <U3 24B 'ra' 'dec'\n",
"│ * line_label (line_label) <U21 84B '0'\n",
"│ line_name (field_name, line_label) <U1 4B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
"│ source_name (field_name) <U27 108B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ Data variables:\n",
"│ FIELD_REFERENCE_CENTER_DIRECTION (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
"│ LINE_REST_FREQUENCY (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
"│ LINE_SYSTEMIC_VELOCITY (field_name, line_label) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
"│ SOURCE_DIRECTION (field_name, sky_dir_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ type: field_and_source\n",
"├── Group: /sdimaging_0/pointing_xds\n",
"│ Dimensions: (time_pointing: 3843, antenna_name: 1,\n",
"│ local_sky_dir_label: 2)\n",
"│ Coordinates:\n",
"│ * time_pointing (time_pointing) float64 31kB 1.069e+09 ... 1.069e+09\n",
"│ * local_sky_dir_label (local_sky_dir_label) <U3 24B 'az' 'alt'\n",
"│ Data variables:\n",
"│ POINTING_BEAM (time_pointing, antenna_name, local_sky_dir_label) float64 61kB dask.array<chunksize=(3843, 1, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ type: pointing\n",
"├── Group: /sdimaging_0/system_calibration_xds\n",
"│ Dimensions: (antenna_name: 1, time_system_cal: 3843,\n",
"│ receptor_label: 2, frequency_system_cal: 1)\n",
"│ Coordinates:\n",
"│ * time_system_cal (time_system_cal) float64 31kB 1.069e+09 ... 1.069e+09\n",
"│ * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
"│ * frequency_system_cal (frequency_system_cal) int64 8B 0\n",
"│ antenna_id (antenna_name) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ mount (antenna_name) <U6 24B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ polarization_type (antenna_name, receptor_label) <U1 8B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
"│ station_name (antenna_name) <U9 36B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ telescope_name (antenna_name) <U3 12B dask.array<chunksize=(1,), meta=np.ndarray>\n",
"│ Data variables:\n",
"│ TCAL (antenna_name, time_system_cal, receptor_label, frequency_system_cal) float64 61kB dask.array<chunksize=(1, 3843, 2, 1), meta=np.ndarray>\n",
"│ TSYS (antenna_name, time_system_cal, receptor_label, frequency_system_cal) float64 61kB dask.array<chunksize=(1, 3843, 2, 1), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ type: system_calibration\n",
"└── Group: /sdimaging_0/weather_xds\n",
" Dimensions: (station_name: 1, time_weather: 1,\n",
" cartesian_pos_label: 3)\n",
" Coordinates:\n",
" * station_name (station_name) <U9 36B 'GREENBANK'\n",
" * time_weather (time_weather) float64 8B 1.069e+09\n",
" * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
" Data variables:\n",
" PRESSURE (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" REL_HUMIDITY (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" STATION_POSITION (station_name, cartesian_pos_label) float64 24B dask.array<chunksize=(1, 3), meta=np.ndarray>\n",
" TEMPERATURE (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" WIND_DIRECTION (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" WIND_SPEED (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" Attributes:\n",
" type: weather<xarray.DataTree 'antenna_xds'>\n",
"Group: /sdimaging_0/antenna_xds\n",
" Dimensions: (time: 3843, antenna_name: 1, frequency: 1024,\n",
" polarization: 2, cartesian_pos_label: 3,\n",
" receptor_label: 2)\n",
" Coordinates:\n",
" * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
" * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
" mount (antenna_name) <U6 24B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" polarization_type (antenna_name, receptor_label) <U1 8B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
" station_name (antenna_name) <U9 36B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" telescope_name (antenna_name) <U3 12B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" Inherited coordinates:\n",
" * antenna_name (antenna_name) <U3 12B 'GBT'\n",
" * frequency (frequency) float64 8kB 1.419e+09 ... 1.422e+09\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * time (time) float64 31kB 1.069e+09 ... 1.069e+09\n",
" Data variables:\n",
" ANTENNA_DISH_DIAMETER (antenna_name) float64 8B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" ANTENNA_POSITION (antenna_name, cartesian_pos_label) float64 24B dask.array<chunksize=(1, 3), meta=np.ndarray>\n",
" ANTENNA_RECEPTOR_ANGLE (antenna_name, receptor_label) float64 16B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
" Attributes:\n",
" overall_telescope_name: GBT\n",
" relocatable_antennas: False\n",
" type: antenna<xarray.DataTree 'weather_xds'>\n",
"Group: /sdimaging_0/weather_xds\n",
" Dimensions: (time: 3843, antenna_name: 1, frequency: 1024,\n",
" polarization: 2, station_name: 1, time_weather: 1,\n",
" cartesian_pos_label: 3)\n",
" Coordinates:\n",
" * station_name (station_name) <U9 36B 'GREENBANK'\n",
" * time_weather (time_weather) float64 8B 1.069e+09\n",
" * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
" Inherited coordinates:\n",
" * antenna_name (antenna_name) <U3 12B 'GBT'\n",
" * frequency (frequency) float64 8kB 1.419e+09 ... 1.422e+09\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * time (time) float64 31kB 1.069e+09 1.069e+09 ... 1.069e+09\n",
" Data variables:\n",
" PRESSURE (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" REL_HUMIDITY (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" STATION_POSITION (station_name, cartesian_pos_label) float64 24B dask.array<chunksize=(1, 3), meta=np.ndarray>\n",
" TEMPERATURE (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" WIND_DIRECTION (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" WIND_SPEED (station_name, time_weather) float64 8B dask.array<chunksize=(1, 1), meta=np.ndarray>\n",
" Attributes:\n",
" type: weather<xarray.DataTree 'system_calibration_xds'>\n",
"Group: /sdimaging_0/system_calibration_xds\n",
" Dimensions: (time: 3843, antenna_name: 1, frequency: 1024,\n",
" polarization: 2, time_system_cal: 3843,\n",
" receptor_label: 2, frequency_system_cal: 1)\n",
" Coordinates:\n",
" * time_system_cal (time_system_cal) float64 31kB 1.069e+09 ... 1.069e+09\n",
" * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
" * frequency_system_cal (frequency_system_cal) int64 8B 0\n",
" antenna_id (antenna_name) int32 4B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" mount (antenna_name) <U6 24B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" polarization_type (antenna_name, receptor_label) <U1 8B dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
" station_name (antenna_name) <U9 36B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" telescope_name (antenna_name) <U3 12B dask.array<chunksize=(1,), meta=np.ndarray>\n",
" Inherited coordinates:\n",
" * antenna_name (antenna_name) <U3 12B 'GBT'\n",
" * frequency (frequency) float64 8kB 1.419e+09 ... 1.422e+09\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * time (time) float64 31kB 1.069e+09 1.069e+09 ... 1.069e+09\n",
" Data variables:\n",
" TCAL (antenna_name, time_system_cal, receptor_label, frequency_system_cal) float64 61kB dask.array<chunksize=(1, 3843, 2, 1), meta=np.ndarray>\n",
" TSYS (antenna_name, time_system_cal, receptor_label, frequency_system_cal) float64 61kB dask.array<chunksize=(1, 3843, 2, 1), meta=np.ndarray>\n",
" Attributes:\n",
" type: system_calibration<xarray.DataTree 'pointing_xds'>\n",
"Group: /sdimaging_0/pointing_xds\n",
" Dimensions: (time: 3843, antenna_name: 1, frequency: 1024,\n",
" polarization: 2, time_pointing: 3843,\n",
" local_sky_dir_label: 2)\n",
" Coordinates:\n",
" * time_pointing (time_pointing) float64 31kB 1.069e+09 ... 1.069e+09\n",
" * local_sky_dir_label (local_sky_dir_label) <U3 24B 'az' 'alt'\n",
" Inherited coordinates:\n",
" * antenna_name (antenna_name) <U3 12B 'GBT'\n",
" * frequency (frequency) float64 8kB 1.419e+09 ... 1.422e+09\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * time (time) float64 31kB 1.069e+09 1.069e+09 ... 1.069e+09\n",
" Data variables:\n",
" POINTING_BEAM (time_pointing, antenna_name, local_sky_dir_label) float64 61kB dask.array<chunksize=(3843, 1, 2), meta=np.ndarray>\n",
" Attributes:\n",
" type: pointing