def _parse_dimension(dim): """ Parses the radius and returns it in the format expected by UKIDSS. Parameters ---------- dim : str, `~astropy.units.Quantity` Returns ------- dim_in_min : float The value of the radius in arcminutes. """ if isinstance(dim, u.Quantity) and dim.unit in u.deg.find_equivalent_units(): dim_in_min = dim.to(u.arcmin).value # otherwise must be an Angle or be specified in hours... else: try: new_dim = commons.parse_radius(dim).degree dim_in_min = u.Quantity(value=new_dim, unit=u.deg).to(u.arcmin).value except (u.UnitsException, coord.errors.UnitsError, AttributeError): raise u.UnitsException("Dimension not in proper units") return dim_in_min
def invert(self, dispersion_values): if not hasattr(dispersion_values, 'unit'): raise u.UnitsException( 'Must give a dispersion value with a valid unit') if misc.isiterable(dispersion_values) and not isinstance( dispersion_values, basestring): dispersion_values = np.array(dispersion_values) return float((dispersion_values - self.dispersion0) / self.dispersion_delta) + self.pixel_index
def _parse_dimension(dim): if isinstance(dim, u.Quantity) and dim.unit in u.deg.find_equivalent_units(): if dim.unit not in ['arcsec', 'arcmin', 'deg']: dim = dim.to(u.degree) # otherwise must be an Angle or be specified in hours... else: try: new_dim = commons.parse_radius(dim) dim = u.Quantity(new_dim.degree, u.Unit('degree')) except (u.UnitsException, coord.errors.UnitsError, AttributeError): raise u.UnitsException("Dimension not in proper units") return dim
def from_header(cls, header, unit=None, spectroscopic_axis_number=1, **kwargs): """ Load a simple linear Spectral WCS from a FITS header. Respects the following keywords: * CDELT or CD: delta-dispersion * CRVAL: reference position * CRPIX: reference pixel * CUNIT: dispersion units (parsed by astropy.units) Parameters ---------- header : str FITS Filename or FITS Header instance unit : astropy.units.Unit Specified units. Overrides CUNIT1 if specified. .. todo:: Allow FITS files or just headers to be passed... """ if isinstance(header, basestring): header = fits.getheader(header, **kwargs) if unit is None: try: unit = u.Unit(header.get('CUNIT%i' % spectroscopic_axis_number)) except u.UnitsException: raise u.UnitsException( "No units were specified and CUNIT did not contain unit information." ) cdelt = header.get('CDELT%i' % spectroscopic_axis_number) if cdelt is None: cdelt = header.get( 'CD%i_%i' % (spectroscopic_axis_number, spectroscopic_axis_number)) crpix = header['CRPIX%i' % spectroscopic_axis_number] crval = header['CRVAL%i' % spectroscopic_axis_number] return cls(crval, cdelt, crpix - 1, unit=unit)
def _parse_radius(radius): """ Parses the radius and returns it in the format expected by NED. Parameters ---------- radius : str, `~astropy.units.Quantity` Returns ------- radius_in_min : float The value of the radius in arcminutes. """ if isinstance(radius, u.Quantity) and radius.unit in u.deg.find_equivalent_units(): radius_in_min = radius.to(u.arcmin).value # otherwise must be an Angle or be specified in hours... else: try: radius_in_min = commons.radius_to_unit(radius,u.arcmin) except (u.UnitsException, coord.errors.UnitsError, AttributeError): raise u.UnitsException("Dimension not in proper units") return radius_in_min