diff --git a/src/yapsut/__init__.py b/src/yapsut/__init__.py index 708e8b6a827b56f94a494c8d5a877c2bcbc82ac2..77676f02e0499b62f7b8e043d0d7e44bed297ce7 100644 --- a/src/yapsut/__init__.py +++ b/src/yapsut/__init__.py @@ -1,5 +1,6 @@ # Created : Thu Dec 1 20:04:27 2022 -from .graphics import odot,ocirc,curveXY2patch,SaveFig,STANDARDFIG,StandardFig +from .mks import MKS +from .graphics import odot,ocirc,curveXY2patch,SaveFig,STANDARDFIG,StandardFig, ImshowXT from .pyblocks import pyBlocks from .AppendableDict import AppendableDict from .ya_config import YA_CONFIG diff --git a/src/yapsut/mks.py b/src/yapsut/mks.py new file mode 100644 index 0000000000000000000000000000000000000000..6a78e1b7ad16ef130fe8a27eb80dd36422585502 --- /dev/null +++ b/src/yapsut/mks.py @@ -0,0 +1,169 @@ +__description__=""" +M.Maris - 2024 Apr 19 - + +Definition of relevant physical constants in MKS and a number of usefull units transforms + +The MKS object is a table of physical constants +""" + +class __physical_parameters_mks(object) : + @property + def table(self) : + return self._table + @property + def source(self) : + return "https://pdg.lbl.gov/2023/reviews/contents_sports.html" + def __init__(self) : + """ from https://pdg.lbl.gov/2023/reviews/contents_sports.html """ + from io import StringIO + import pandas + import numpy as np + # the table + self._table=pandas.read_csv(StringIO(""" +definition , latex_macro, latex_name, symbol, value , units , comment +speed of light in vacuum , c, speedL, c, 299792458. , m/s , +Planck constant , h, PConst, h, 6.62607015e-34 , J s , also J/Hz +reduced Planck constant , hcut, hbar, hbar, 1.0544571817e-34 , J s , also J/Hz is h/2pi +Avogadro Number , N_{\\mathrm{avo}}, Navo, Navo, 6.02214076e23 , 1/mol , +Boltzman constant , k_{\\mathrm{B}}, kB, kB, 1.380649e-23 , J/K , +Universal gas constant , R_{*}, Rgas, Rgas, 8.31446261815324 , J/K/mol , defined as kB*Navo +molar_volume , V_{\\mathrm{mol}}, MolVol, Vmol, 22.41396954e-3 , m3/mol , kB(273.15 K)/(101 325 Pa) +standard atmosphere pressure , p_{\\mathrm{atm}}, patm, patm, 101325. , pa , +zero Celsius , T_{0^{\\circ}\\mathrm{C}}, TzCel, T0C, 273.15 , K , +ev in joule , \\mathrm{J}/\\mathrm{ev}, Jev, J_ev, 1.6021766339999e-19 , J/ev , +rad2sed , \\mathrm{rad}/\\mathrm{sed}, radTosed, rad2sed, 4.191690043903363e-08, rad s/m , 2*pi/c +Stefan-Boltzman Constant , \\sigma, sigmaSB, sigmaSB, 5.670374419e-8 , W/m2/K4 , +photons SB constant , \\sigma_{\\mathrm{phot}},sigmaSBphot, sigmaSBphot, 2.5247846571310243e-3, micro moles/m2/s/K3, +standard solar temperature , T_{\\odot}, Tsun, Tsun, 5772. , K , +standard solar radius , R_{\\odot}, Rsun, Rsun, 696340e3 , m , +standard AU , \mathrm{AU}, AU, AU, 149597870700. , m , exact +gravitational constant , G_{\\mathrm{N}}, GN, GN, 6.67430e-11 , m3/Kg/s2, +standard gravitationa acceleration, g_{\\mathrm{N}}, gN, gN, 9.80665 , m/s2 , +parsec , \\mathrm{pc}, pc, pc, 3.08567758149e16 , m , exact +"""),sep='\s*,\s*',comment='#',engine="python",index_col=None) + # + self._table['comment'] =np.array(['' if str(k).lower() in ['nan'] else k for k in self._table['comment'].values]) + self._table['units'] =np.array(['' if str(k).lower() in ['nan'] else k for k in self._table['units'].values]) + # + for ik in range(len(self._table)) : + line=self._table.iloc[ik] + self.__dict__[line.symbol]=line.value + def keys(self) : + return self._table['symbol'].values + def __len__(self) : + return len(self._table) + def __getitem__(self,this) : + if type(this) is type('') : + try : + return self.__dict__[this] + except : + raise Exception("Symbol %s not found"%str(this),"") + else : + try : + return self._table.iloc[this] + except : + raise Exception("Symbol %s not found"%str(this),"") + def latex(self,this) : + """returns a latex definition for the given constant""" + if type(this) is type('') : + line=self._table.query('symbol=="'+this+'"') + if line is None : + raise Exception("Symbol %s not found"%str(this),"") + line=line.iloc[0] + else : + try : + line=self._table.iloc[line] + except : + raise Exception("Symbol %s not found"%str(this),"") + out='\\def'+'\\'+line.latex_name+'{'+line.latex_macro+'}'+' % '+line.definition+', '+line.units + return out + def wl2nu(self,wl) : + """wavelength to frequency""" + return self.c/wl + def nu2wl(self,nu) : + """frequency to wavelength""" + return self.c/nu + def nu2E(self,nu) : + """energy to frequency""" + return self.h*nu + def E2nu(self,E) : + """frequency to energy""" + return E/self.h + def wl2E(self,wl) : + """wavelength to energy""" + return self.h*self.c/wl + def E2wl(self,E) : + """energy to wavelength""" + return self.c*self.h/E + def ev2J(self,ev) : + """ ev/J""" + return ev*self.J_ev + def J2ev(self,J) : + """ J/ev""" + return J/self.J_ev + def radiance2sed(self,radiance) : + """ radiance -> spectral_energy_density""" + return self.rad2sed*radiance + def sed2radiance(self,sed) : + """ spectral_energy_density to radiance """ + return sed/self.rad2sed + def nu2bbx(self,nu,T) : + """ nu and T to black body x=nu*h/kB*T """ + return nu*self.h/(T*self.kB) + def bbx2nu(self,x,T) : + """ black body x: x=nu*h/kB*T, to nu for given T """ + return x*T*self.kB/self.h + def wl2bbx(self,wl,T) : + """ wl and T to black body x=c*h/kB*T*wl """ + return self.c*self.h/(T*self.kB*wl) + def bbx2wl(self,x,T) : + """ black body x: x=c*h/kB*T*wl, to wl for given T """ + return self.c*self.h/(T*self.kB*x) +MKS=__physical_parameters_mks() + +def wl2nu(wl) : + """wavelength to frequency""" + return MKS.c/wl +def nu2wl(nu) : + """frequency to wavelength""" + return MKS.c/nu +def nu2E(nu) : + """energy to frequency""" + return MKS.h*nu +def E2nu(E) : + """frequency to energy""" + return E/MKS.h +def wl2E(wl) : + """wavelength to energy""" + return MKS.h*MKS.c/wl +def E2wl(E) : + """energy to wavelength""" + return MKS.c*MKS.h/E +def ev2J(ev) : + """ ev/J""" + return ev*MKS.J_ev +def J2ev(J) : + """ J/ev""" + return J/MKS.J_ev +def radiance2sed(radiance) : + """ radiance -> spectral_energy_density""" + return MKS.rad2sed*radiance +def sed2radiance(sed) : + """ spectral_energy_density to radiance """ + return sed/MKS.rad2sed + +def nu2bbx(nu,T) : + """ nu and T to black body x=nu*h/kB*T """ + return nu*MKS.h/(T*MKS.kB) + +def bbx2nu(x,T) : + """ black body x: x=nu*h/kB*T, to nu for given T """ + return x*T*MKS.kB/MKS.h + +def wl2bbx(wl,T) : + """ wl and T to black body x=c*h/kB*T*wl """ + return MKS.c*MKS.h/(T*MKS.kB*wl) + +def bbx2wl(x,T) : + """ black body x: x=c*h/kB*T*wl, to wl for given T """ + return MKS.c*MKS.h/(T*MKS.kB*x)