Source code for skultrafast.unit_conversions
"""
This module contains functions to covert between units of energy.
"""
import numpy as np
from scipy.constants import physical_constants, c
[docs]
names = dict(
cm="wavenumbers in 1/cm",
fs="period in femotoseconds",
ps="period in picoseconds",
nm="wavelength in nanometers",
eV="energy in electron Volt",
THz="frequency in THz",
dichro="Dichroic ratio (para/perp)",
angle="relative angle between transition dipole moments in degrees",
aniso="Anisotropy (para-perp)/(para+2*perp)",
kcal="energy in kcal/mol",
invps="energy in inverse picoseconds",
)
[docs]
def make_doc(func):
a, b = str.split(func.__name__, '2')
func.__doc__ = ('%s to %s' % (names[a], names[b])).capitalize()
return func
@make_doc
[docs]
def fs2cm(t):
return 1 / (t*1e-15*c_cm)
@make_doc
[docs]
def cm2fs(cm):
return 1e15 / (cm*c_cm)
@make_doc
[docs]
def ps2cm(t):
return 1 / (t*1e-12*c_cm)
@make_doc
[docs]
def cm2ps(cm):
return 1e12 / (cm*c_cm)
@make_doc
[docs]
def nm2cm(nm):
return 1e7 / nm
@make_doc
[docs]
def nm2eV(nm):
return cm2eV(nm2cm(nm))
@make_doc
[docs]
def cm2nm(cm):
return 1e7 / cm
@make_doc
[docs]
def cm2eV(cm):
eV_m = physical_constants['electron volt-inverse meter relationship'][0]
eV_cm = eV_m / 100
return cm / eV_cm
@make_doc
[docs]
def eV2cm(eV):
eV_m = physical_constants['electron volt-inverse meter relationship'][0]
eV_cm = eV_m / 100
return eV * eV_cm
@make_doc
[docs]
def THz2eV(THz):
hertz_eV = physical_constants['hertz-electron volt relationship'][0]
return THz * 1e12 * hertz_eV
@make_doc
[docs]
def eV2THz(eV):
eV_Hertz = physical_constants['electron volt-hertz relationship'][0]
return eV * eV_Hertz * 1e-12
@make_doc
[docs]
def eV2nm(eV):
return cm2nm(eV2cm(eV))
@make_doc
[docs]
def cm2THz(cm):
return 1 / fs2cm(cm) / 1e-3
@make_doc
[docs]
def THz2cm(THz):
return cm2fs(1e3 / THz)
@make_doc
[docs]
def dichro2angle(d):
return np.arccos(np.sqrt((2*d - 1) / (d+2))) / np.pi * 180
@make_doc
[docs]
def angle2dichro(deg):
rad = np.deg2rad(deg)
return (1 + 2 * np.cos(rad)**2) / (2 - np.cos(rad)**2)
@make_doc
[docs]
def angle2aniso(deg):
ang = np.deg2rad(deg)
return 2 / 5 * (3 * np.cos(ang)**2 - 1) / 2
@make_doc
[docs]
def aniso2angle(r):
return np.arccos(np.sqrt((r*10/2 + 1) / 3)) / np.pi * 180
@make_doc
[docs]
def cm2kcal(cm):
return cm * 2.859e-3
@make_doc
[docs]
def kcal2cm(kcal):
return kcal / 2.859e-3
@make_doc
[docs]
def invps2cm(invps):
return 1 / (invps*1e-12*c)
@make_doc
[docs]
def cm2invps(cm):
return 1 / (cm*1e-12*c)