xradio 0.0.29__tar.gz → 0.0.30__tar.gz

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.
Files changed (79) hide show
  1. {xradio-0.0.29/src/xradio.egg-info → xradio-0.0.30}/PKG-INFO +1 -1
  2. {xradio-0.0.29 → xradio-0.0.30}/pyproject.toml +1 -1
  3. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_processing_set.py +49 -18
  4. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/conversion.py +49 -38
  5. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/msv2_to_msv4_meta.py +2 -0
  6. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/convert_msv2_to_processing_set.py +0 -63
  7. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/read_processing_set.py +3 -1
  8. {xradio-0.0.29 → xradio-0.0.30/src/xradio.egg-info}/PKG-INFO +1 -1
  9. {xradio-0.0.29 → xradio-0.0.30}/LICENSE.txt +0 -0
  10. {xradio-0.0.29 → xradio-0.0.30}/MANIFEST.in +0 -0
  11. {xradio-0.0.29 → xradio-0.0.30}/README.md +0 -0
  12. {xradio-0.0.29 → xradio-0.0.30}/setup.cfg +0 -0
  13. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/__init__.py +0 -0
  14. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/__init__.py +0 -0
  15. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/_casacore/tables.py +0 -0
  16. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/array.py +0 -0
  17. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/common.py +0 -0
  18. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/zarr/__init__.py +0 -0
  19. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/_utils/zarr/common.py +0 -0
  20. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/__init__.py +0 -0
  21. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/__init__.py +0 -0
  22. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_casacore/__init__.py +0 -0
  23. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_casacore/common.py +0 -0
  24. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_casacore/xds_from_casacore.py +0 -0
  25. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_casacore/xds_to_casacore.py +0 -0
  26. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_fits/xds_from_fits.py +0 -0
  27. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_zarr/common.py +0 -0
  28. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_zarr/xds_from_zarr.py +0 -0
  29. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_zarr/xds_to_zarr.py +0 -0
  30. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/_zarr/zarr_low_level.py +0 -0
  31. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/casacore.py +0 -0
  32. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/common.py +0 -0
  33. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/fits.py +0 -0
  34. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/image_factory.py +0 -0
  35. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/_util/zarr.py +0 -0
  36. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/image/image.py +0 -0
  37. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/__init__.py +0 -0
  38. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/bases.py +0 -0
  39. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/check.py +0 -0
  40. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/dataclass.py +0 -0
  41. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/metamodel.py +0 -0
  42. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/schema/typing.py +0 -0
  43. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/__init__.py +0 -0
  44. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/__init__.py +0 -0
  45. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/create_field_and_source_xds.py +0 -0
  46. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/load.py +0 -0
  47. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/load_main_table.py +0 -0
  48. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/read.py +0 -0
  49. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/read_main_table.py +0 -0
  50. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/read_subtables.py +0 -0
  51. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/table_query.py +0 -0
  52. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/write.py +0 -0
  53. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/_tables/write_exp_api.py +0 -0
  54. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/chunks.py +0 -0
  55. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/descr.py +0 -0
  56. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/msv2_msv3.py +0 -0
  57. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/msv4_infos.py +0 -0
  58. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/msv4_sub_xdss.py +0 -0
  59. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/optimised_functions.py +0 -0
  60. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/partition_queries.py +0 -0
  61. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/partitions.py +0 -0
  62. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_ms/subtables.py +0 -0
  63. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_utils/cds.py +0 -0
  64. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_utils/partition_attrs.py +0 -0
  65. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_utils/stokes_types.py +0 -0
  66. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_utils/xds_helper.py +0 -0
  67. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_zarr/encoding.py +0 -0
  68. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_zarr/read.py +0 -0
  69. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/_zarr/write.py +0 -0
  70. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/ms.py +0 -0
  71. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/ms_column_descriptions_dicts.py +0 -0
  72. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/_vis_utils/zarr.py +0 -0
  73. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/load_processing_set.py +0 -0
  74. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/schema.py +0 -0
  75. {xradio-0.0.29 → xradio-0.0.30}/src/xradio/vis/vis_io.py +0 -0
  76. {xradio-0.0.29 → xradio-0.0.30}/src/xradio.egg-info/SOURCES.txt +0 -0
  77. {xradio-0.0.29 → xradio-0.0.30}/src/xradio.egg-info/dependency_links.txt +0 -0
  78. {xradio-0.0.29 → xradio-0.0.30}/src/xradio.egg-info/requires.txt +0 -0
  79. {xradio-0.0.29 → xradio-0.0.30}/src/xradio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xradio
3
- Version: 0.0.29
3
+ Version: 0.0.30
4
4
  Summary: Xarray Radio Astronomy Data IO
5
5
  Author-email: Jan-Willem Steeb <jsteeb@nrao.edu>
6
6
  License: BSD 3-Clause License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "xradio"
3
- version = "0.0.29"
3
+ version = "0.0.30"
4
4
  description = " Xarray Radio Astronomy Data IO"
5
5
  authors = [
6
6
  {name = "Jan-Willem Steeb", email="jsteeb@nrao.edu"},
@@ -6,12 +6,6 @@ class processing_set(dict):
6
6
  super().__init__(*args, **kwargs)
7
7
  self.meta = {"summary": {}}
8
8
 
9
- # generate_meta(self)
10
-
11
- # def generate_meta(self):
12
- # self.meta['summary'] = {"base": _summary(self)}
13
- # self.meta['max_dims'] = _get_ps_max_dims(self)
14
-
15
9
  def summary(self, data_group="base"):
16
10
  if data_group in self.meta["summary"]:
17
11
  return self.meta["summary"][data_group]
@@ -36,28 +30,34 @@ class processing_set(dict):
36
30
  def _summary(self, data_group="base"):
37
31
  summary_data = {
38
32
  "name": [],
39
- "ddi": [],
40
33
  "intent": [],
41
- "field_id": [],
34
+ "shape": [],
35
+ "polarization": [],
36
+ "spw_id": [],
42
37
  "field_name": [],
38
+ "field_id": [],
39
+ "field_coords": [],
43
40
  "start_frequency": [],
44
41
  "end_frequency": [],
45
- "shape": [],
46
- "field_coords": [],
47
42
  }
48
43
  from astropy.coordinates import SkyCoord
49
44
  import astropy.units as u
50
45
 
51
46
  for key, value in self.items():
52
47
  summary_data["name"].append(key)
53
- summary_data["ddi"].append(value.attrs["ddi"])
54
- summary_data["intent"].append(value.attrs["intent"])
48
+ summary_data["intent"].append(value.attrs["partition_info"]["intent"])
49
+ summary_data["spw_id"].append(
50
+ value.attrs["partition_info"]["spectral_window_id"]
51
+ )
52
+ summary_data["polarization"].append(value.polarization.values)
55
53
 
56
54
  if "visibility" in value.attrs["data_groups"][data_group]:
57
55
  data_name = value.attrs["data_groups"][data_group]["visibility"]
56
+ center_name = "FIELD_PHASE_CENTER"
58
57
 
59
58
  if "spectrum" in value.attrs["data_groups"][data_group]:
60
59
  data_name = value.attrs["data_groups"][data_group]["spectrum"]
60
+ center_name = "FIELD_REFERENCE_CENTER"
61
61
 
62
62
  summary_data["shape"].append(value[data_name].shape)
63
63
 
@@ -72,13 +72,11 @@ class processing_set(dict):
72
72
  summary_data["field_coords"].append("Ephemeris")
73
73
  else:
74
74
  ra_dec_rad = (
75
- value[data_name]
76
- .attrs["field_and_source_xds"]["FIELD_PHASE_CENTER"]
77
- .values
75
+ value[data_name].attrs["field_and_source_xds"][center_name].values
78
76
  )
79
77
  frame = (
80
78
  value[data_name]
81
- .attrs["field_and_source_xds"]["FIELD_PHASE_CENTER"]
79
+ .attrs["field_and_source_xds"][center_name]
82
80
  .attrs["frame"]
83
81
  .lower()
84
82
  )
@@ -90,8 +88,8 @@ class processing_set(dict):
90
88
  summary_data["field_coords"].append(
91
89
  [
92
90
  frame,
93
- coord.ra.to_string(unit=u.hour),
94
- coord.dec.to_string(unit=u.deg),
91
+ coord.ra.to_string(unit=u.hour, precision=2),
92
+ coord.dec.to_string(unit=u.deg, precision=2),
95
93
  ]
96
94
  )
97
95
 
@@ -131,3 +129,36 @@ class processing_set(dict):
131
129
 
132
130
  def get(self, id):
133
131
  return self[list(self.keys())[id]]
132
+
133
+ def sel(self, **kwargs):
134
+ import numpy as np
135
+
136
+ summary_table = self.summary()
137
+ for key, value in kwargs.items():
138
+ if isinstance(value, list) or isinstance(value, np.ndarray):
139
+ summary_table = summary_table[summary_table[key].isin(value)]
140
+ elif isinstance(value, slice):
141
+ summary_table = summary_table[
142
+ summary_table[key].between(value.start, value.stop)
143
+ ]
144
+ else:
145
+ summary_table = summary_table[summary_table[key] == value]
146
+
147
+ sub_ps = processing_set()
148
+ for key, val in self.items():
149
+ if key in summary_table["name"].values:
150
+ sub_ps[key] = val
151
+
152
+ return sub_ps
153
+
154
+ def ms_sel(self, **kwargs):
155
+ sub_ps = processing_set()
156
+ for key, val in self.items():
157
+ sub_ps[key] = val.sel(kwargs)
158
+ return sub_ps
159
+
160
+ def ms_isel(self, **kwargs):
161
+ sub_ps = processing_set()
162
+ for key, val in self.items():
163
+ sub_ps[key] = val.isel(kwargs)
164
+ return sub_ps
@@ -754,9 +754,6 @@ def convert_and_write_partition(
754
754
 
755
755
  start = time.time()
756
756
 
757
- xds.attrs["intent"] = intent
758
- xds.attrs["ddi"] = ddi
759
-
760
757
  # Time and frequency should always be increasing
761
758
  if len(xds.frequency) > 1 and xds.frequency[1] - xds.frequency[0] < 0:
762
759
  xds = xds.sel(frequency=slice(None, None, -1))
@@ -765,41 +762,7 @@ def convert_and_write_partition(
765
762
  xds = xds.sel(time=slice(None, None, -1))
766
763
 
767
764
  # Add data_groups and field_info
768
- xds.attrs["data_groups"] = {}
769
- if "VISIBILITY" in xds:
770
- xds.attrs["data_groups"]["base"] = {
771
- "visibility": "VISIBILITY",
772
- "flag": "FLAG",
773
- "weight": "WEIGHT",
774
- "uvw": "UVW",
775
- }
776
-
777
- if "VISIBILITY_CORRECTED" in xds:
778
- xds.attrs["data_groups"]["corrected"] = {
779
- "visibility": "VISIBILITY_CORRECTED",
780
- "flag": "FLAG",
781
- "weight": "WEIGHT",
782
- "uvw": "UVW",
783
- }
784
-
785
- is_single_dish = False
786
- if "SPECTRUM" in xds:
787
- xds.attrs["data_groups"]["base"] = {
788
- "spectrum": "SPECTRUM",
789
- "flag": "FLAG",
790
- "weight": "WEIGHT",
791
- "uvw": "UVW",
792
- }
793
- is_single_dish = True
794
-
795
- if "SPECTRUM_CORRECTED" in xds:
796
- xds.attrs["data_groups"]["corrected"] = {
797
- "spectrum": "SPECTRUM_CORRECTED",
798
- "flag": "FLAG",
799
- "weight": "WEIGHT",
800
- "uvw": "UVW",
801
- }
802
- is_single_dish = True
765
+ xds, is_single_dish = add_data_groups(xds)
803
766
 
804
767
  # Create field_and_source_xds (combines field, source and ephemeris data into one super dataset)
805
768
  start = time.time()
@@ -910,3 +873,51 @@ def convert_and_write_partition(
910
873
  logger.debug("Write data " + str(time.time() - start))
911
874
 
912
875
  # logger.info("Saved ms_v4 " + file_name + " in " + str(time.time() - start_with) + "s")
876
+
877
+
878
+ def add_data_groups(xds):
879
+ xds.attrs["data_groups"] = {}
880
+ if "VISIBILITY" in xds:
881
+ xds.attrs["data_groups"]["base"] = {
882
+ "visibility": "VISIBILITY",
883
+ "flag": "FLAG",
884
+ "weight": "WEIGHT",
885
+ "uvw": "UVW",
886
+ }
887
+
888
+ if "VISIBILITY_CORRECTED" in xds:
889
+ xds.attrs["data_groups"]["corrected"] = {
890
+ "visibility": "VISIBILITY_CORRECTED",
891
+ "flag": "FLAG",
892
+ "weight": "WEIGHT",
893
+ "uvw": "UVW",
894
+ }
895
+
896
+ if "VISIBILITY_MODEL" in xds:
897
+ xds.attrs["data_groups"]["model"] = {
898
+ "visibility": "VISIBILITY_MODEL",
899
+ "flag": "FLAG",
900
+ "weight": "WEIGHT",
901
+ "uvw": "UVW",
902
+ }
903
+
904
+ is_single_dish = False
905
+ if "SPECTRUM" in xds:
906
+ xds.attrs["data_groups"]["base"] = {
907
+ "spectrum": "SPECTRUM",
908
+ "flag": "FLAG",
909
+ "weight": "WEIGHT",
910
+ "uvw": "UVW",
911
+ }
912
+ is_single_dish = True
913
+
914
+ if "SPECTRUM_CORRECTED" in xds:
915
+ xds.attrs["data_groups"]["corrected"] = {
916
+ "spectrum": "SPECTRUM_CORRECTED",
917
+ "flag": "FLAG",
918
+ "weight": "WEIGHT",
919
+ "uvw": "UVW",
920
+ }
921
+ is_single_dish = True
922
+
923
+ return xds, is_single_dish
@@ -4,6 +4,7 @@ col_to_data_variable_names = {
4
4
  "FLOAT_DATA": "SPECTRUM",
5
5
  "DATA": "VISIBILITY",
6
6
  "CORRECTED_DATA": "VISIBILITY_CORRECTED",
7
+ "MODEL_DATA": "VISIBILITY_MODEL",
7
8
  "WEIGHT_SPECTRUM": "WEIGHT",
8
9
  "WEIGHT": "WEIGHT",
9
10
  "FLAG": "FLAG",
@@ -14,6 +15,7 @@ col_to_data_variable_names = {
14
15
  col_dims = {
15
16
  "DATA": ("time", "baseline_id", "frequency", "polarization"),
16
17
  "CORRECTED_DATA": ("time", "baseline_id", "frequency", "polarization"),
18
+ "MODEL_DATA": ("time", "baseline_id", "frequency", "polarization"),
17
19
  "WEIGHT_SPECTRUM": ("time", "baseline_id", "frequency", "polarization"),
18
20
  "WEIGHT": ("time", "baseline_id", "frequency", "polarization"),
19
21
  "FLAG": ("time", "baseline_id", "frequency", "polarization"),
@@ -107,66 +107,3 @@ def convert_msv2_to_processing_set(
107
107
 
108
108
  if parallel:
109
109
  dask.compute(delayed_list)
110
-
111
- # delayed_list = []
112
- # ms_v4_id = 0
113
- # for idx, pair in partition_enumerated_product:
114
- # ddi, state_id, field_id, scan_id = pair
115
- # # logger.debug(
116
- # # "DDI " + str(ddi) + ", STATE " + str(state_id) + ", FIELD " + str(field_id) + ", SCAN " + str(scan_id)
117
- # # )
118
-
119
- # # if scan_id == 67: #67
120
- # # logger.debug(
121
- # # "DDI " + str(ddi) + ", STATE " + str(state_id) + ", FIELD " + str(field_id) + ", SCAN " + str(scan_id)
122
- # # )
123
- # if partition_scheme == "ddi_intent_field":
124
- # intent = intents[idx[1]]
125
- # else:
126
- # intent = intents[idx[1]] + "_" + str(state_id)
127
-
128
- # if parallel:
129
- # delayed_list.append(
130
- # dask.delayed(convert_and_write_partition)(
131
- # in_file,
132
- # out_file,
133
- # intent,
134
- # ms_v4_id,
135
- # ddi,
136
- # state_id,
137
- # field_id,
138
- # scan_id,
139
- # partition_scheme,
140
- # main_chunksize=main_chunksize,
141
- # with_pointing=with_pointing,
142
- # pointing_chunksize=pointing_chunksize,
143
- # pointing_interpolate=pointing_interpolate,
144
- # ephemeris_interpolate=ephemeris_interpolate,
145
- # compressor=compressor,
146
- # overwrite=overwrite,
147
- # )
148
- # )
149
- # else:
150
- # convert_and_write_partition(
151
- # in_file,
152
- # out_file,
153
- # intent,
154
- # ms_v4_id,
155
- # ddi,
156
- # state_id,
157
- # field_id,
158
- # scan_id,
159
- # partition_scheme,
160
- # main_chunksize=main_chunksize,
161
- # with_pointing=with_pointing,
162
- # pointing_chunksize=pointing_chunksize,
163
- # pointing_interpolate=pointing_interpolate,
164
- # ephemeris_interpolate=ephemeris_interpolate,
165
- # compressor=compressor,
166
- # storage_backend=storage_backend,
167
- # overwrite=overwrite,
168
- # )
169
- # ms_v4_id = ms_v4_id + 1
170
-
171
- # if parallel:
172
- # dask.compute(delayed_list)
@@ -37,7 +37,9 @@ def read_processing_set(
37
37
  xds = _open_dataset(ms_main_store, file_system)
38
38
  data_groups = xds.attrs["data_groups"]
39
39
 
40
- if (intents is None) or (xds.attrs["intent"] in intents):
40
+ print(xds)
41
+
42
+ if (intents is None) or (xds.attrs["partition_info"]["intent"] in intents):
41
43
  sub_xds_dict, field_and_source_xds_dict = _read_sub_xds(
42
44
  ms_store, file_system=file_system, data_groups=data_groups
43
45
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xradio
3
- Version: 0.0.29
3
+ Version: 0.0.30
4
4
  Summary: Xarray Radio Astronomy Data IO
5
5
  Author-email: Jan-Willem Steeb <jsteeb@nrao.edu>
6
6
  License: BSD 3-Clause License
File without changes
File without changes
File without changes
File without changes
File without changes