irfpy.util.planck
¶
Collection of Planck’s black body radiation formulae.
Code author: Yoshifumi Futaana
Todo
Move freq2wavlen, wavlen2freq, energy2wavelen, wavelen2energy to irfpy.util.physics
module.
- irfpy.util.planck.freq2wavlen(freq)[source]¶
Frequency (Hz) to wavelength (m) conversion.
- Parameters:
freq (Scalar or np.array.) – Frequency
- Returns:
Wavelength in m
The following command confirms that 1 MHz ~ 300 m.
>>> print('%.3f' % freq2wavlen(1e6)) # 1MHz 299.792
Unitful version is also defined.
>>> freq = u.Hz * np.array([1e6, 1e7, 1e8]) # 1MHz, 10 and 100MHz >>> wavlen = freq2wavlen_u(freq) >>> print('%.5f %.5f %.5f' % tuple(wavlen.rescale(u.km))) 0.29979 0.02998 0.00300
- irfpy.util.planck.freq2wavlen_u(*args)¶
Unitful version of
freq2wavlen()
- irfpy.util.planck.wavlen2freq(wavlen)[source]¶
Wavelength (m) to frequency (Hz) conversion.
- Parameters:
wavlen (Sacalar or np.array.) – Wavelength in m.
- Returns:
Frequency in Hz.
>>> print('%.3e' % wavlen2freq(1e-9)) # 1 nm 2.998e+17
It confirms 1 nm ~ 300 000 000 GHz = 3e17 Hz.
Unitful version
wavlen2freq_u()
is also defined.>>> wavlen = np.array([5, 10, 30]) >>> wavlen = u.km * wavlen # 5km, 10km, 30 km >>> freq = wavlen2freq_u(wavlen) >>> print('%.1f %.1f %.1f' % tuple(freq.rescale(u.Hz))) 59958.5 29979.2 9993.1
- irfpy.util.planck.wavlen2freq_u(*args)¶
Unitful version of
wavlen2freq()
- irfpy.util.planck.energy2wavlen(energy)[source]¶
Convert the energy (J) to wavelength (m)
>>> print('%.2e m' % (energy2wavlen(3.973e-19))) 5.00e-07 m >>> print('3 [eV] = %.2f [nm]' % energy2wavlen_u(3 * u.eV).rescale(u.nm)) 3 [eV] = 413.28 [nm]
- irfpy.util.planck.energy2wavlen_u(*args)¶
Unitful version of
energy2wavlen()
.
- irfpy.util.planck.wavlen2energy(wavlen)[source]¶
Convert the wavelength (m) to energy (J)
\[E = h\nu = \frac{hc}{\lambda}\]>>> print('%.3e J' % wavlen2energy(500e-9)) # 500 nm 3.973e-19 J >>> print('%.3f eV' % (wavlen2energy(500e-9) / k.qe)) 2.480 eV
Unitful version also defined.
>>> wavlen = 500 * u.nm >>> energy = wavlen2energy_u(wavlen) >>> print('500 nm = %.3e J' % energy.rescale(u.J)) 500 nm = 3.973e-19 J >>> print('500 nm = %.3f eV' % energy.rescale(u.eV)) 500 nm = 2.480 eV
- irfpy.util.planck.wavlen2energy_u(*args)¶
Unitful version of wavlen2energy
- class irfpy.util.planck.BlackBodyMksa(temperature)[source]¶
Bases:
object
Black body class with interfaces to MKSA unit system.
A black body is instanced.
- Parameters:
temperature – Temperature in K.
- lh = -33.17874397056745¶
- lc = 8.476820702927927¶
- spectral_radiance_per_frequency(frequency)[source]¶
Return the spectral radiance in frequency domain
- Parameters:
frequency (Scalar or np.array) – Frequency in Hz (/s).
- Returns:
The spectral radiance, in the unit of \(W/m^2 sr Hz\)
The spectral radiance is calcualted as
\[B_\nu(T) = \frac{2h\nu^3}{c^2}\frac{1}{\exp{\frac{h\nu}{k_BT} - 1}}\]>>> sun = BlackBodyMksa(6000) # Sun is 6000 K black body. >>> print('%.3e' % sun.spectral_radiance_per_frequency(1.5e14)) # 2000 nm 2.145e-08
- Bnu(*args, **kwds)[source]¶
Return
spectral_radiance_per_frequency()
An alias to
spectral_radiance_per_frequency()
.>>> sun = BlackBodyMksa(6000) >>> print('%.3e' % sun.Bnu(1.5e14)) 2.145e-08
- spectral_radiance_per_wavelength(wavelength)[source]¶
Return the spectral radiance in wavelength domain
- Parameters:
wavelength – Wavelength in
m
.- Returns:
The spectral radiance, in the unit of \(W/m^2 sr m\)
\[B_\lambda(T) = \frac{2hc^2}{\lambda^5}{\frac{1}{\exp{\frac{hc}{\lambda k_BT}}-1}}\]>>> sun = BlackBodyMksa(6000) >>> print('%.3e' % sun.spectral_radiance_per_wavelength(500e-9)) 3.176e+13
- Blambda(*args, **kwds)[source]¶
An alias to
spectral_radiance_per_wavelength()
.
- class irfpy.util.planck.BlackBody_u(temperature)[source]¶
Bases:
BlackBodyMksa
Unitful version of
BlackBodyMksa
.>>> earth = BlackBody_u(300 * u.K) >>> b = earth.Bnu(500 * u.kHz) >>> print('{0:.3e} {1}'.format(float(b.n), b.u)) 2.304e-26 W/(m**2*sr*Hz) >>> b = earth.Blambda(500 * u.nm) >>> print('{0:.3e} {1}'.format(float(b.n), b.u)) 8.399e-27 W/(m**3*sr)
>>> sun = BlackBody_u(0.5 * u.eVT) # ~5800K >>> b = sun.Bnu(500 * u.kHz) >>> print('{0:.3e} {1}'.format(float(b.n), b.u)) 4.457e-25 W/(m**2*sr*Hz)
>>> sun = BlackBody_u(5800 * u.K) # ~5800K >>> b = sun.Bnu(500 * u.kHz) >>> print('{0:.3e} {1}'.format(float(b.n), b.u)) 4.455e-25 W/(m**2*sr*Hz)
A black body is instanced.
- Parameters:
temperature – Temperature in K.
- spectral_radiance_per_frequency()¶
Return the spectral radiance in frequency domain
- Parameters:
frequency (Scalar or np.array) – Frequency in Hz (/s).
- Returns:
The spectral radiance, in the unit of \(W/m^2 sr Hz\)
The spectral radiance is calcualted as
\[B_\nu(T) = \frac{2h\nu^3}{c^2}\frac{1}{\exp{\frac{h\nu}{k_BT} - 1}}\]>>> sun = BlackBodyMksa(6000) # Sun is 6000 K black body. >>> print('%.3e' % sun.spectral_radiance_per_frequency(1.5e14)) # 2000 nm 2.145e-08
- spectral_radiance_per_wavelength()¶
Return the spectral radiance in wavelength domain
- Parameters:
wavelength – Wavelength in
m
.- Returns:
The spectral radiance, in the unit of \(W/m^2 sr m\)
\[B_\lambda(T) = \frac{2hc^2}{\lambda^5}{\frac{1}{\exp{\frac{hc}{\lambda k_BT}}-1}}\]>>> sun = BlackBodyMksa(6000) >>> print('%.3e' % sun.spectral_radiance_per_wavelength(500e-9)) 3.176e+13
- irfpy.util.planck.SunProxy(temperature=5778.0)[source]¶
The Sun proxied by a black body.
The default temperature is 5778K, which is consdered as a average surface temperatuer of the Sun.
- Parameters:
temperature – Temperature in K.
>>> sun = SunProxy() >>> print('%.3e' % sun.Blambda(500e-9)) # At 200 nm 2.638e+13 >>> lamrng = np.array([200, 500, 1000, 2000]) * 1e-9 # 200-2000 nm >>> b = sun.Blambda(lamrng) / 1e9 # in W/m2 sr nm >>> print('%.2e %.2e %.2e %.2e' % (b[0], b[1], b[2], b[3])) 1.46e+03 2.64e+04 1.08e+04 1.50e+03