Skip to content

Commit 87ed82b

Browse files
authored
#48 Merge pull request from deshima-dev/astropenguin/issue45
Add specifications for cube
2 parents 69bcbb8 + c22cc3e commit 87ed82b

2 files changed

Lines changed: 81 additions & 18 deletions

File tree

dems/d2.py

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
__all__ = ["MS", "MS_DIMS"]
1+
__all__ = [
2+
"CUBE_DIMS",
3+
"MS_DIMS",
4+
"Cube",
5+
"MS",
6+
]
27

38

49
# standard library
@@ -14,6 +19,8 @@
1419
# type hints
1520
Ti = Literal["time"]
1621
Ch = Literal["chan"]
22+
Lt = Literal["lat"]
23+
Ln = Literal["lon"]
1724

1825

1926
# constants
@@ -22,33 +29,50 @@
2229
-5440188.022176585,
2330
-2475718.801708271,
2431
)
32+
CUBE_DIMS = "chan", "lat", "lon"
2533
DEMS_VERSION = __version__
2634
DEMERGE_VERSION = "2.0.0"
2735
MS_DIMS = "time", "chan"
2836

2937

38+
# sub-specs for dimensions
3039
@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"
3443

3544

3645
@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"
4049

4150

4251
@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"
4656

4757

4858
@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"
5276

5377

5478
@dataclass
@@ -306,8 +330,8 @@ class MS(AsDataArray):
306330
units: Attr[str] = "K"
307331
name: Name[str] = "DEMS"
308332
# 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
311335
# labels
312336
beam: Coordof[Beam] = ""
313337
scan: Coordof[Scan] = ""
@@ -360,3 +384,36 @@ class MS(AsDataArray):
360384
d2_skychopper_isblocking: Coordof[D2SkychopperIsblocking] = False
361385
d2_dems_version: Attr[str] = DEMS_VERSION
362386
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

tests/test_d2.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# dependencies
2-
from dems.d2 import MS
2+
from dems.d2 import CUBE_DIMS, MS_DIMS, Cube, MS
33

44

55
# test functions
6-
def test_creation() -> None:
7-
MS.zeros([5, 5])
6+
def test_ms_creation() -> None:
7+
da = MS.zeros([5, 5])
8+
assert da.dims == MS_DIMS
9+
10+
11+
def test_cube_creation() -> None:
12+
da = Cube.zeros([5, 4, 3])
13+
assert da.dims == CUBE_DIMS

0 commit comments

Comments
 (0)