|
1 | | -__all__ = ["MS", "MS_DIMS"] |
| 1 | +__all__ = [ |
| 2 | + "CUBE_DIMS", |
| 3 | + "MS_DIMS", |
| 4 | + "Cube", |
| 5 | + "MS", |
| 6 | +] |
2 | 7 |
|
3 | 8 |
|
4 | 9 | # standard library |
|
14 | 19 | # type hints |
15 | 20 | Ti = Literal["time"] |
16 | 21 | Ch = Literal["chan"] |
| 22 | +Lt = Literal["lat"] |
| 23 | +Ln = Literal["lon"] |
17 | 24 |
|
18 | 25 |
|
19 | 26 | # constants |
|
22 | 29 | -5440188.022176585, |
23 | 30 | -2475718.801708271, |
24 | 31 | ) |
| 32 | +CUBE_DIMS = "chan", "lat", "lon" |
25 | 33 | DEMS_VERSION = __version__ |
26 | 34 | DEMERGE_VERSION = "2.0.0" |
27 | 35 | MS_DIMS = "time", "chan" |
28 | 36 |
|
29 | 37 |
|
| 38 | +# sub-specs for dimensions |
30 | 39 | @dataclass |
31 | | -class Mask: |
32 | | - data: Data[Tuple[Ti, Ch], bool] |
33 | | - long_name: Attr[str] = "Data masks" |
| 40 | +class Time_: |
| 41 | + data: Data[Ti, Literal["datetime64[ns]"]] |
| 42 | + long_name: Attr[str] = "Start time in UTC" |
34 | 43 |
|
35 | 44 |
|
36 | 45 | @dataclass |
37 | | -class Weight: |
38 | | - data: Data[Tuple[Ti, Ch], float] |
39 | | - long_name: Attr[str] = "Data weights" |
| 46 | +class Chan_: |
| 47 | + data: Data[Ch, int] |
| 48 | + long_name: Attr[str] = "Channel ID" |
40 | 49 |
|
41 | 50 |
|
42 | 51 | @dataclass |
43 | | -class Time: |
44 | | - data: Data[Ti, Literal["datetime64[ns]"]] |
45 | | - long_name: Attr[str] = "Start time in UTC" |
| 52 | +class Lat_: |
| 53 | + data: Data[Lt, float] |
| 54 | + long_name: Attr[str] = "Sky latitude" |
| 55 | + units: Attr[str] = "deg" |
46 | 56 |
|
47 | 57 |
|
48 | 58 | @dataclass |
49 | | -class Chan: |
50 | | - data: Data[Ch, int] |
51 | | - long_name: Attr[str] = "Channel ID" |
| 59 | +class Lon_: |
| 60 | + data: Data[Ln, float] |
| 61 | + long_name: Attr[str] = "Sky longitude" |
| 62 | + units: Attr[str] = "deg" |
| 63 | + |
| 64 | + |
| 65 | +# sub-specs for coordinates |
| 66 | +@dataclass |
| 67 | +class Mask: |
| 68 | + data: Data[Tuple[Ti, Ch], bool] |
| 69 | + long_name: Attr[str] = "Data masks" |
| 70 | + |
| 71 | + |
| 72 | +@dataclass |
| 73 | +class Weight: |
| 74 | + data: Data[Tuple[Ti, Ch], float] |
| 75 | + long_name: Attr[str] = "Data weights" |
52 | 76 |
|
53 | 77 |
|
54 | 78 | @dataclass |
@@ -306,8 +330,8 @@ class MS(AsDataArray): |
306 | 330 | units: Attr[str] = "K" |
307 | 331 | name: Name[str] = "DEMS" |
308 | 332 | # dimensions |
309 | | - time: Coordof[Time] = "1970-01-01T00:00:00" |
310 | | - chan: Coordof[Chan] = 0 |
| 333 | + time: Coordof[Time_] = "1970-01-01T00:00:00" |
| 334 | + chan: Coordof[Chan_] = 0 |
311 | 335 | # labels |
312 | 336 | beam: Coordof[Beam] = "" |
313 | 337 | scan: Coordof[Scan] = "" |
@@ -360,3 +384,36 @@ class MS(AsDataArray): |
360 | 384 | d2_skychopper_isblocking: Coordof[D2SkychopperIsblocking] = False |
361 | 385 | d2_dems_version: Attr[str] = DEMS_VERSION |
362 | 386 | d2_demerge_version: Attr[str] = DEMERGE_VERSION |
| 387 | + |
| 388 | + |
| 389 | +@dataclass(frozen=True) |
| 390 | +class Cube(AsDataArray): |
| 391 | + """Spectral cube of DESHIMA 2.0.""" |
| 392 | + |
| 393 | + # data |
| 394 | + data: Data[Tuple[Ch, Lt, Ln], Any] |
| 395 | + long_name: Attr[str] = "Brightness" |
| 396 | + units: Attr[str] = "K" |
| 397 | + name: Name[str] = "Cube" |
| 398 | + # dimensions |
| 399 | + chan: Coordof[Chan_] = 0 |
| 400 | + lon: Coordof[Lon_] = 0.0 |
| 401 | + lat: Coordof[Lat_] = 0.0 |
| 402 | + # data information |
| 403 | + frame: Coordof[Frame] = "altaz" |
| 404 | + bandwidth: Coordof[Bandwidth] = 0.0 |
| 405 | + frequency: Coordof[Frequency] = 0.0 |
| 406 | + beam_major: Coordof[BeamMajor] = 0.0 |
| 407 | + beam_minor: Coordof[BeamMinor] = 0.0 |
| 408 | + beam_pa: Coordof[BeamPa] = 0.0 |
| 409 | + # observation information |
| 410 | + observation: Attr[str] = "" |
| 411 | + observer: Attr[str] = "" |
| 412 | + project: Attr[str] = "" |
| 413 | + object: Attr[str] = "" |
| 414 | + # DESHIMA 2.0 specific |
| 415 | + d2_mkid_id: Coordof[D2MkidID] = 0 |
| 416 | + d2_mkid_type: Coordof[D2MkidType] = "" |
| 417 | + d2_mkid_frequency: Coordof[D2MkidFrequency] = 0.0 |
| 418 | + d2_dems_version: Attr[str] = DEMS_VERSION |
| 419 | + d2_demerge_version: Attr[str] = DEMERGE_VERSION |
0 commit comments