{ "cells": [ { "cell_type": "markdown", "id": "f412df9c-35ac-418d-a4f6-b95edef8478e", "metadata": {}, "source": [ "# Ephemeris 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.3 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": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\u001b[38;2;128;05;128m2026-04-20 15:17:27,795\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m toolviper: \u001b[0m Initializing download... \n", "[\u001b[38;2;128;05;128m2026-04-20 15:17:27,795\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m toolviper: \u001b[0m File already exists: /Users/vdesouza/work/xradio/docs/source/measurement_set/guides/venus_ephem_test.ms \n" ] } ], "source": [ "import toolviper\n", "ms_file = \"venus_ephem_test.ms\"\n", "toolviper.utils.data.download(file=ms_file)" ] }, { "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-04-20 15:17:28,092\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m toolviper: \u001b[0m Updated partition scheme used: ['DATA_DESC_ID', 'OBS_MODE', 'OBSERVATION_ID', 'EPHEMERIS_ID'] \n", "[\u001b[38;2;128;05;128m2026-04-20 15:17:28,094\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m toolviper: \u001b[0m Number of partitions: 1 \n", "[\u001b[38;2;128;05;128m2026-04-20 15:17:28,094\u001b[0m] \u001b[38;2;50;50;205m INFO\u001b[0m\u001b[38;2;112;128;144m toolviper: \u001b[0m OBSERVATION_ID [0], DDI [0], STATE [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], FIELD [0, 1, 2, 3, 4, 5, 6], SCAN [7, 11], EPHEMERIS [0] \n" ] } ], "source": [ "from xradio.measurement_set import convert_msv2_to_processing_set\n", "ms_file = \"venus_ephem_test.ms\"\n", "\n", "main_chunksize = {\"frequency\": 1, \"time\": 20} # baseline, polarization\n", "outfile = \"venus_ephem_test.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", "venus_ephem_test_0 | \n", "[OBSERVE_TARGET#ON_SOURCE] | \n", "(140, 1128, 1, 2) | \n", "uid://A002/Xd7be9d/X499e | \n", "[XX, YY] | \n", "[11, 7] | \n", "X1847499280#ALMA_RB_06#BB_1#SW-01#FULL_RES_0 | \n", "[UNSPECIFIED] | \n", "[Venus_0, Venus_1, Venus_2, Venus_3, Venus_4, ... | \n", "[Venus_0] | \n", "[OSSO_Line_1(ID=0)] | \n", "Ephemeris | \n", "uid://A001/X133d/X169f | \n", "uid://A001/X133d/X169a | \n", "uid://A001/X12ea/X715 | \n", "2.452498e+11 | \n", "2.452498e+11 | \n", "
<xarray.DataTree 'venus_ephem_test_0'>\n",
"Group: /venus_ephem_test_0\n",
"│ Dimensions: (time: 140, baseline_id: 1128, frequency: 1,\n",
"│ polarization: 2, uvw_label: 3)\n",
"│ Coordinates:\n",
"│ * time (time) float64 1kB 1.547e+09 ... 1.547e+09\n",
"│ field_name (time) <U27 15kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
"│ scan_name (time) <U21 12kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
"│ * baseline_id (baseline_id) int64 9kB 0 1 2 ... 1125 1126 1127\n",
"│ baseline_antenna1_name (baseline_id) <U9 41kB dask.array<chunksize=(1128,), meta=np.ndarray>\n",
"│ baseline_antenna2_name (baseline_id) <U9 41kB dask.array<chunksize=(1128,), meta=np.ndarray>\n",
"│ * frequency (frequency) float64 8B 2.452e+11\n",
"│ * polarization (polarization) <U2 16B 'XX' 'YY'\n",
"│ * uvw_label (uvw_label) <U1 12B 'u' 'v' 'w'\n",
"│ Data variables:\n",
"│ EFFECTIVE_INTEGRATION_TIME (time, baseline_id) float64 1MB dask.array<chunksize=(20, 1128), meta=np.ndarray>\n",
"│ FLAG (time, baseline_id, frequency, polarization) bool 316kB dask.array<chunksize=(20, 1128, 1, 2), meta=np.ndarray>\n",
"│ TIME_CENTROID (time, baseline_id) float64 1MB dask.array<chunksize=(20, 1128), meta=np.ndarray>\n",
"│ UVW (time, baseline_id, uvw_label) float64 4MB dask.array<chunksize=(20, 1128, 3), meta=np.ndarray>\n",
"│ VISIBILITY (time, baseline_id, frequency, polarization) complex64 3MB dask.array<chunksize=(20, 1128, 1, 2), meta=np.ndarray>\n",
"│ WEIGHT (time, baseline_id, frequency, polarization) float32 1MB dask.array<chunksize=(20, 1128, 1, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ creation_date: 2026-04-20T21:17:28.127657+00:00\n",
"│ creator: {'software_name': 'xradio', 'version': '1.1.3'}\n",
"│ data_groups: {'base': {'correlated_data': 'VISIBILITY', 'date': '20...\n",
"│ observation_info: {'execution_block_UID': 'uid://A002/Xd7be9d/X499e', 'o...\n",
"│ processor_info: {'sub_type': 'ALMA_CORRELATOR_MODE', 'type': 'CORRELAT...\n",
"│ schema_version: 4.0.0\n",
"│ type: visibility\n",
"├── Group: /venus_ephem_test_0/antenna_xds\n",
"│ Dimensions: (antenna_name: 47, cartesian_pos_label: 3,\n",
"│ receptor_label: 2)\n",
"│ Coordinates:\n",
"│ * antenna_name (antenna_name) <U9 2kB 'DA41_A058' ... 'DV25_A006'\n",
"│ mount (antenna_name) <U6 1kB dask.array<chunksize=(47,), meta=np.ndarray>\n",
"│ station_name (antenna_name) <U4 752B dask.array<chunksize=(47,), meta=np.ndarray>\n",
"│ telescope_name (antenna_name) <U4 752B dask.array<chunksize=(47,), meta=np.ndarray>\n",
"│ * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
"│ * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
"│ polarization_type (antenna_name, receptor_label) <U1 376B dask.array<chunksize=(47, 2), meta=np.ndarray>\n",
"│ Data variables:\n",
"│ ANTENNA_DISH_DIAMETER (antenna_name) float64 376B dask.array<chunksize=(47,), meta=np.ndarray>\n",
"│ ANTENNA_POSITION (antenna_name, cartesian_pos_label) float64 1kB dask.array<chunksize=(47, 3), meta=np.ndarray>\n",
"│ ANTENNA_RECEPTOR_ANGLE (antenna_name, receptor_label) float64 752B dask.array<chunksize=(47, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ overall_telescope_name: ALMA\n",
"│ relocatable_antennas: True\n",
"│ type: antenna\n",
"├── Group: /venus_ephem_test_0/field_and_source_base_xds\n",
"│ Dimensions: (time: 140, sky_dir_label: 2,\n",
"│ sky_dis_label: 1, line_label: 1,\n",
"│ cartesian_pos_label: 3, time_ephemeris: 2,\n",
"│ ellipsoid_dir_label: 2,\n",
"│ ellipsoid_dis_label: 1)\n",
"│ Coordinates:\n",
"│ field_name (time) <U27 15kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
"│ source_name (time) <U27 15kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
"│ * sky_dir_label (sky_dir_label) <U3 24B 'ra' 'dec'\n",
"│ * sky_dis_label (sky_dis_label) <U4 16B 'dist'\n",
"│ * line_label (line_label) <U21 84B '0'\n",
"│ line_name (time, line_label) <U17 10kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
"│ * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
"│ * time_ephemeris (time_ephemeris) float64 16B 1.547e+09 1.54...\n",
"│ * ellipsoid_dir_label (ellipsoid_dir_label) <U3 24B 'lon' 'lat'\n",
"│ * ellipsoid_dis_label (ellipsoid_dis_label) <U4 16B 'dist'\n",
"│ Data variables:\n",
"│ FIELD_PHASE_CENTER_DIRECTION (time, sky_dir_label) float64 2kB dask.array<chunksize=(140, 2), meta=np.ndarray>\n",
"│ FIELD_PHASE_CENTER_DISTANCE (time, sky_dis_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
"│ LINE_REST_FREQUENCY (time, line_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
"│ LINE_SYSTEMIC_VELOCITY (time, line_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
"│ OBSERVER_POSITION (cartesian_pos_label) float64 24B dask.array<chunksize=(3,), meta=np.ndarray>\n",
"│ SOURCE_DIRECTION (time_ephemeris, sky_dir_label) float64 32B dask.array<chunksize=(2, 2), meta=np.ndarray>\n",
"│ SOURCE_DISTANCE (time_ephemeris, sky_dis_label) float64 16B dask.array<chunksize=(2, 1), meta=np.ndarray>\n",
"│ SOURCE_RADIAL_VELOCITY (time_ephemeris) float64 16B dask.array<chunksize=(2,), meta=np.ndarray>\n",
"│ SUB_OBSERVER_DIRECTION (time_ephemeris, ellipsoid_dir_label) float64 32B dask.array<chunksize=(2, 2), meta=np.ndarray>\n",
"│ Attributes:\n",
"│ type: field_and_source_ephemeris\n",
"└── Group: /venus_ephem_test_0/weather_xds\n",
" Dimensions: (station_name: 5, time_weather: 147,\n",
" cartesian_pos_label: 3)\n",
" Coordinates:\n",
" * station_name (station_name) <U14 280B 'Meteo129' ... 'MeteoTB2'\n",
" * time_weather (time_weather) float64 1kB 1.547e+09 ... 1.547e+09\n",
" * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
" Data variables:\n",
" DEW_POINT (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" PRESSURE (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" REL_HUMIDITY (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" STATION_POSITION (station_name, cartesian_pos_label) float64 120B dask.array<chunksize=(5, 3), meta=np.ndarray>\n",
" TEMPERATURE (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" WIND_DIRECTION (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" WIND_SPEED (station_name, time_weather) float64 6kB dask.array<chunksize=(5, 147), meta=np.ndarray>\n",
" Attributes:\n",
" type: weather<xarray.DataTree 'antenna_xds'>\n",
"Group: /venus_ephem_test_0/antenna_xds\n",
" Dimensions: (time: 140, baseline_id: 1128, frequency: 1,\n",
" polarization: 2, uvw_label: 3, antenna_name: 47,\n",
" cartesian_pos_label: 3, receptor_label: 2)\n",
" Coordinates:\n",
" * antenna_name (antenna_name) <U9 2kB 'DA41_A058' ... 'DV25_A006'\n",
" mount (antenna_name) <U6 1kB dask.array<chunksize=(47,), meta=np.ndarray>\n",
" station_name (antenna_name) <U4 752B dask.array<chunksize=(47,), meta=np.ndarray>\n",
" telescope_name (antenna_name) <U4 752B dask.array<chunksize=(47,), meta=np.ndarray>\n",
" * cartesian_pos_label (cartesian_pos_label) <U1 12B 'x' 'y' 'z'\n",
" * receptor_label (receptor_label) <U5 40B 'pol_0' 'pol_1'\n",
" polarization_type (antenna_name, receptor_label) <U1 376B dask.array<chunksize=(47, 2), meta=np.ndarray>\n",
" Inherited coordinates:\n",
" * baseline_id (baseline_id) int64 9kB 0 1 2 3 ... 1125 1126 1127\n",
" * frequency (frequency) float64 8B 2.452e+11\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * time (time) float64 1kB 1.547e+09 1.547e+09 ... 1.547e+09\n",
" * uvw_label (uvw_label) <U1 12B 'u' 'v' 'w'\n",
" Data variables:\n",
" ANTENNA_DISH_DIAMETER (antenna_name) float64 376B dask.array<chunksize=(47,), meta=np.ndarray>\n",
" ANTENNA_POSITION (antenna_name, cartesian_pos_label) float64 1kB dask.array<chunksize=(47, 3), meta=np.ndarray>\n",
" ANTENNA_RECEPTOR_ANGLE (antenna_name, receptor_label) float64 752B dask.array<chunksize=(47, 2), meta=np.ndarray>\n",
" Attributes:\n",
" overall_telescope_name: ALMA\n",
" relocatable_antennas: True\n",
" type: antenna<xarray.DatasetView> Size: 56kB\n",
"Dimensions: (time: 140, sky_dir_label: 2,\n",
" sky_dis_label: 1, line_label: 1,\n",
" cartesian_pos_label: 3, time_ephemeris: 2,\n",
" ellipsoid_dir_label: 2, baseline_id: 1128,\n",
" frequency: 1, polarization: 2, uvw_label: 3,\n",
" ellipsoid_dis_label: 1)\n",
"Coordinates: (12/15)\n",
" * time (time) float64 1kB 1.547e+09 ... 1.547e+09\n",
" field_name (time) <U27 15kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
" source_name (time) <U27 15kB dask.array<chunksize=(140,), meta=np.ndarray>\n",
" * sky_dir_label (sky_dir_label) <U3 24B 'ra' 'dec'\n",
" * sky_dis_label (sky_dis_label) <U4 16B 'dist'\n",
" * line_label (line_label) <U21 84B '0'\n",
" ... ...\n",
" * ellipsoid_dir_label (ellipsoid_dir_label) <U3 24B 'lon' 'lat'\n",
" * baseline_id (baseline_id) int64 9kB 0 1 2 ... 1126 1127\n",
" * frequency (frequency) float64 8B 2.452e+11\n",
" * polarization (polarization) <U2 16B 'XX' 'YY'\n",
" * uvw_label (uvw_label) <U1 12B 'u' 'v' 'w'\n",
" * ellipsoid_dis_label (ellipsoid_dis_label) <U4 16B 'dist'\n",
"Data variables:\n",
" FIELD_PHASE_CENTER_DIRECTION (time, sky_dir_label) float64 2kB dask.array<chunksize=(140, 2), meta=np.ndarray>\n",
" FIELD_PHASE_CENTER_DISTANCE (time, sky_dis_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
" LINE_REST_FREQUENCY (time, line_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
" LINE_SYSTEMIC_VELOCITY (time, line_label) float64 1kB dask.array<chunksize=(140, 1), meta=np.ndarray>\n",
" OBSERVER_POSITION (cartesian_pos_label) float64 24B dask.array<chunksize=(3,), meta=np.ndarray>\n",
" SOURCE_DIRECTION (time_ephemeris, sky_dir_label) float64 32B dask.array<chunksize=(2, 2), meta=np.ndarray>\n",
" SOURCE_DISTANCE (time_ephemeris, sky_dis_label) float64 16B dask.array<chunksize=(2, 1), meta=np.ndarray>\n",
" SOURCE_RADIAL_VELOCITY (time_ephemeris) float64 16B dask.array<chunksize=(2,), meta=np.ndarray>\n",
" SUB_OBSERVER_DIRECTION (time_ephemeris, ellipsoid_dir_label) float64 32B dask.array<chunksize=(2, 2), meta=np.ndarray>\n",
"Attributes:\n",
" type: field_and_source_ephemeris<xarray.DataArray (time: 3)> Size: 24B\n",
"array([0, 0, 0])\n",
"Coordinates:\n",
" * time (time) int64 24B 0 1 2\n",
"Attributes:\n",
" test: 0\n",
" test2: 1<xarray.DataArray (time: 3)> Size: 24B\n",
"array([0, 0, 0])\n",
"Coordinates:\n",
" * time (time) int64 24B 0 1 2\n",
"Attributes:\n",
" test: 0\n",
" test2: 1<xarray.DataArray (sky_dir_label: 2)> Size: 16B\n",
"array([-1.1825466 , -0.39941499])\n",
"Coordinates:\n",
" * sky_dir_label (sky_dir_label) <U3 24B 'ra' 'dec'\n",
"Attributes:\n",
" coordinate_system: geocentric\n",
" frame: ITRF\n",
" origin_object_name: earth\n",
" type: location\n",
" units: rad