Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
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 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 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 )