--- a
+++ b/units.py
@@ -0,0 +1,75 @@
+from pint import UnitRegistry
+from pint.unit import UnitsContainer
+import pandas as pd
+
+class MedicalUreg(UnitRegistry):
+
+    def __init__(self,medical_uom_defs='config/medical_units.txt',**kwargs):
+        super(MedicalUreg, self).__init__(**kwargs)
+        self.load_definitions(medical_uom_defs)
+
+    def parse_units(self,units):
+        try:
+            parsed_units = super(MedicalUreg,self).parse_units(units)
+        except:
+            parsed_units = super(MedicalUreg,self).parse_units(units.lower())
+        return parsed_units
+
+    def same_units(self,unit1,unit2):
+        return same_units(unit1,unit2,self)
+
+    def same_dimensionality(self,unit1,unit2):
+        return same_dimensionality(unit1,unit2,self)
+
+    def convert_units(self,from_units,to_units,data):
+        return convert_units(from_units,to_units,data,self)
+
+    def is_volume(self,units):
+        if type(units) is str:
+            units = self.parse_units(units)
+        return is_volume(units)
+
+    def is_mass(self,units):
+        if type(units) is str:
+            units = self.parse_units(units)
+        return is_mass(units)
+
+    def is_temp(self,units):
+        if type(units) is str:
+            units = self.parse_units(units)
+        return units.dimensionality == UnitsContainer({'[temperature]':1.0})
+
+    def is_rate(self,units):
+        if type(units) is str:
+            units = self.parse_units(units)
+        return units.dimensionality.get('[time]',0) == -1.0
+
+
+def smart_parse_units(units,ureg):
+    try:
+        parsed_units = ureg.parse_units(units)
+    except:
+        parsed_units = ureg.parse_units(units.lower())
+    return parsed_units
+
+
+def same_units(unit1,unit2,ureg):
+    return ureg.parse_units(unit1) == ureg.parse_units(unit2)
+
+def same_dimensionality(unit1,unit2,ureg):
+    return ureg.parse_units(unit1).dimensionality == ureg.parse_units(unit2).dimensionality
+
+def convert_units(from_units,to_units,data,ureg):
+    from_parsed = ureg.parse_units(from_units)
+    to_parsed = ureg.parse_units(to_units)
+    Q_ = ureg.Quantity
+    unit_data = Q_(data,from_parsed)
+    np_ar = unit_data.to(to_parsed)
+    return pd.Series(np_ar,name=np_ar.name,index=data.index)
+
+
+def is_volume(units):
+    return units.dimensionality == UnitsContainer({'[length]':3.0})
+
+def is_mass(units):
+    return units.dimensionality == UnitsContainer({'[mass]':1.0})