@@ -27,13 +27,23 @@ def _to_area(major,minor):
27
27
u .arcmin : "'" }
28
28
29
29
30
+ def _set_default_unit (type_str , value , unit , equiv_unit = u .deg ):
31
+ if not hasattr (value , 'unit' ):
32
+ return value * unit
33
+
34
+ if value .unit .is_equivalent (equiv_unit ):
35
+ return value
36
+ else :
37
+ raise u .UnitsError (f"{ value .unit } for { type_str } is not equivalent to { equiv_unit } " )
38
+
39
+
30
40
class Beam (u .Quantity ):
31
41
"""
32
42
An object to handle single radio beams.
33
43
"""
34
44
35
45
def __new__ (cls , major = None , minor = None , pa = None , area = None ,
36
- default_unit = u .arcsec , meta = None ):
46
+ default_unit = u .deg , meta = None ):
37
47
"""
38
48
Create a new Gaussian beam
39
49
@@ -51,6 +61,8 @@ def __new__(cls, major=None, minor=None, pa=None, area=None,
51
61
Gaussian beam.
52
62
default_unit : :class:`~astropy.units.Unit`
53
63
The unit to impose on major, minor if they are specified as floats
64
+ meta : dict, optional
65
+ A dictionary of metadata to store with the beam.
54
66
"""
55
67
56
68
# improve to some kwargs magic later
@@ -69,34 +81,20 @@ def __new__(cls, major=None, minor=None, pa=None, area=None,
69
81
minor = rad * SIGMA_TO_FWHM
70
82
pa = 0.0 * u .deg
71
83
72
- # give specified values priority
73
- if major is not None :
74
- if u .deg .is_equivalent (major ):
75
- major = major
76
- else :
77
- warnings .warn ("Assuming major axis has been specified in degrees" )
78
- major = major * u .deg
79
- if minor is not None :
80
- if u .deg .is_equivalent (minor ):
81
- minor = minor
82
- else :
83
- warnings .warn ("Assuming minor axis has been specified in degrees" )
84
- minor = minor * u .deg
85
- if pa is not None :
86
- if u .deg .is_equivalent (pa ):
87
- pa = pa
88
- else :
89
- warnings .warn ("Assuming position angle has been specified in degrees" )
90
- pa = pa * u .deg
91
84
else :
92
- pa = 0.0 * u . deg
85
+ # give specified values priority
93
86
94
- # some sensible defaults
95
- if minor is None :
96
- minor = major
87
+ major = _set_default_unit ("major" , major , default_unit , equiv_unit = u .deg )
88
+ pa = _set_default_unit ("pa" , pa , default_unit , equiv_unit = u .deg )
89
+
90
+ # some sensible defaults
91
+ if minor is None :
92
+ minor = major
93
+ else :
94
+ minor = _set_default_unit ("minor" , minor , default_unit , equiv_unit = u .deg )
97
95
98
- if minor > major :
99
- raise ValueError ("Minor axis greater than major axis." )
96
+ if minor > major :
97
+ raise ValueError ("Minor axis greater than major axis." )
100
98
101
99
self = super (Beam , cls ).__new__ (cls , _to_area (major ,minor ).value , u .sr )
102
100
self ._major = major
0 commit comments