Skip to content

Commit e20ad24

Browse files
committed
Add fix for astropy #17096 (astropy/astropy#17096)
1 parent 325cad3 commit e20ad24

File tree

1 file changed

+24
-26
lines changed

1 file changed

+24
-26
lines changed

radio_beam/beam.py

+24-26
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,23 @@ def _to_area(major,minor):
2727
u.arcmin: "'"}
2828

2929

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+
3040
class Beam(u.Quantity):
3141
"""
3242
An object to handle single radio beams.
3343
"""
3444

3545
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):
3747
"""
3848
Create a new Gaussian beam
3949
@@ -51,6 +61,8 @@ def __new__(cls, major=None, minor=None, pa=None, area=None,
5161
Gaussian beam.
5262
default_unit : :class:`~astropy.units.Unit`
5363
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.
5466
"""
5567

5668
# improve to some kwargs magic later
@@ -69,34 +81,20 @@ def __new__(cls, major=None, minor=None, pa=None, area=None,
6981
minor = rad * SIGMA_TO_FWHM
7082
pa = 0.0 * u.deg
7183

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
9184
else:
92-
pa = 0.0 * u.deg
85+
# give specified values priority
9386

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)
9795

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.")
10098

10199
self = super(Beam, cls).__new__(cls, _to_area(major,minor).value, u.sr)
102100
self._major = major

0 commit comments

Comments
 (0)