72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
# coding: utf-8
|
|
|
|
import pymses.utils.constants as cst
|
|
|
|
|
|
def parse_exp_unit(u):
|
|
splitted = u.split("^")
|
|
name_u = cst.Unit.from_name(splitted[0]).latex
|
|
exp = ""
|
|
if len(splitted) > 1:
|
|
exp = "$^{" + str(splitted[1]) + "}$"
|
|
return name_u + exp
|
|
|
|
|
|
def convert_exp(number):
|
|
splitted = "{:.4g}".format(number).split("e")
|
|
if len(splitted) == 1:
|
|
return "${}$".format(splitted[0])
|
|
else:
|
|
coeff = float(splitted[0])
|
|
exp = int(splitted[1])
|
|
exp_str = "10^{" + str(exp) + "}"
|
|
if coeff == 1.0:
|
|
return "$" + exp_str + "$"
|
|
else:
|
|
return "$" + str(coeff) + "\\times" + exp_str + "$"
|
|
|
|
|
|
def unit_str(unit, base=None, prefix=""):
|
|
if unit == cst.none:
|
|
return ""
|
|
elif not base is None:
|
|
coeff = unit.express(base)
|
|
return unit_str(base, prefix=convert_exp(coeff) + " ")
|
|
elif len(unit.latex) > 0:
|
|
if ("." in unit.latex or "^" in unit.latex) and not "$" in unit.latex:
|
|
base_str = ".".join(map(parse_exp_unit, unit.name.split(".")))
|
|
return r" [{}{}]".format(prefix, base_str)
|
|
else:
|
|
return r" [{}{}]".format(prefix, unit.latex)
|
|
elif len(unit.name) > 0:
|
|
try:
|
|
base_str = ".".join(map(parse_exp_unit, unit.name.split(".")))
|
|
u_str = r" [{}{}]".format(prefix, base_str)
|
|
except:
|
|
u_str = r" [{}{}]".format(prefix, unit.name)
|
|
return u_str
|
|
else:
|
|
base_str = ".".join(
|
|
map(parse_exp_unit, unit._decompose_base_units().split("."))
|
|
)
|
|
return r" [{}{} {}]".format(prefix, unit.coeff, base_str)
|
|
|
|
|
|
cst.coldens = cst.create_unit(
|
|
"Msun.pc^-2", base_unit=cst.Msun / cst.pc ** 2, descr="Column density"
|
|
)
|
|
cst.km_s = cst.create_unit("km.s^-1", base_unit=cst.km / cst.s, descr="Speed")
|
|
|
|
cst.Msun_pc3 = cst.create_unit(
|
|
"Msun.pc^-3", base_unit=cst.Msun / cst.pc ** 3, descr="Density"
|
|
)
|
|
|
|
cst.kg_m3 = cst.create_unit("kg.m^-3", base_unit=cst.kg / cst.m ** 3, descr="Density")
|
|
|
|
cst.ssfr = cst.create_unit(
|
|
"Msun.yr^-1.pc^-2",
|
|
base_unit=cst.Msun / cst.year / cst.pc ** 2,
|
|
descr="Surfacic SFR",
|
|
latex="M$_{\odot}$.yr$^{-1}$.p$c^{-2}$",
|
|
)
|