Source code for dmsky.utils.units

#!/usr/bin/env python
"""
Simple module to deal with unit conversion
"""
__all__ = ['Units']

import numpy as np


[docs]class Units(object): """Simple class to keep track of unit conversions""" # Could be replaced by astropy... # length cm = 1 m = 1e2 # m to cm km = m * 1e3 # km to cm pc = 3.08568e18 # pc to cm kpc = pc * 1e3 # kpc to cm m2 = 1e4 # mass g = 1.0 msun = 1.98892e33 # solar mass to g gev = 1.78266e-24 # gev to g # density msun_pc3 = msun * np.power(pc, -3) msun_kpc3 = msun * np.power(kpc, -3) msun2_pc5 = np.power(msun, 2) * np.power(pc, -5) msun2_kpc5 = np.power(msun, 2) * np.power(kpc, -5) gev2_cm5 = np.power(gev, 2) gev_cm3 = np.power(gev, 1) gev_cm2 = np.power(gev, 1) g_cm3 = 1.0 cm3_s = 1.0 # random hr = 3600. deg2 = np.power(np.pi / 180., 2) # This is to convert stuff to strings that astropy units understands map_to_astropy = {'gev2_cm5': 'GeV2 / cm5', 'gev_cm3': 'GeV / cm3', 'gev_cm2': 'GeV / cm2', 'g_cm3': 'g / cm3', 'cm3_s': 'cm3 / s'} map_from_astropy = {} for k, v in map_to_astropy.items(): map_from_astropy[v] = k
[docs] @staticmethod def get_value(key): """ Get a conversion value based on a key This is here to make it easy to automate unit conversion Parameters ---------- key : str, a key corresponding to one of the globals defined above Returns ------- the conversion constant """ if key is None: return None try: return getattr(Units, key) except AttributeError: try: newkey = Units.map_from_astropy[key] return getattr(Units, newkey) except: raise KeyError("Did not recoginze units %s" % key)
[docs] @staticmethod def convert_to(value, key): """ Convert from cgs units to a different type of units Parameters ---------- value : scalar or array-like, the input value(s) key : str, a key corresponding to one of the globals defined above Returns ------- the input values, converted to requested units """ conv = Units.get_value(key) if conv is None: return value return value / conv
[docs] @staticmethod def convert_from(value, key): """ Convert to cgs units from a different type of units Parameters ---------- value : scalar or array-like, the input value(s) key : str, a key corresponding to one of the globals defined above Returns ------- the input values, converted to cgs units """ conv = Units.get_value(key) if conv is None: return value return value * conv