Source code for ChiantiPy.tools.sources

"""
Blackbody temperature calculations
"""

import numpy as np

import ChiantiPy.tools.constants as const

[docs]class blackStar: """ Calculate blackbody radiation Parameters ---------- temperature : `~numpy.ndarray` Temperature in Kelvin radius : `~numpy.ndarray` Stellar radius in cm Attributes ---------- Temperature : `~numpy.ndarray` Temperature in Kelvin Radius : `~numpy.ndarray` Stellar radius in cm Incident : `~numpy.ndarray` Blackbody photon distribution """ def __init__(self, temperature, radius): self.Temperature = temperature self.Radius = radius
[docs] def incident(self, distance, energy): """ Calculate photon distribution times the visible cross-sectional area. Parameters ---------- distance : `~numpy.ndarray` Distance to the stellar object in cm energy : `~numpy.ndarray` Energy range in erg Notes ----- This function returns the photon distribution instead of the distribution times the cross-sectional area. Is this correct? Why is the incident photon distribution calculated at all? """ print((' distance %10.2e energy '%(energy))) bb = blackbody(self.Temperature, energy) out = const.pi*(self.Radius/distance)**2*bb['photons'] self.Incident = bb
[docs]def blackbody(temperature, variable, hnu=1): """ Calculate the blackbody photon distribution as a function of energy (`hnu` = 1) or as a function of wavelength (`hnu` = 0) in units of :math:`\mathrm{photons}\,\mathrm{cm}^{-2}\,\mathrm{s}^{-1}\,\mathrm{str}^{-1}\,\mathrm{erg}^{-1}` Parameters ---------- temperature : `~numpy.float64` Temperature at which to calculate the blackbody photon distribution variable : `~numpy.ndarray` Either energy (in erg) or wavelength (in angstrom) hnu : `int` If 1, calculate distribution as a function of energy. Otherwise, calculate it as a function of wavelength Returns ------- {'photons', 'temperature', 'energy'} or {'photons', 'temperature', 'wvl'} : `dict` """ if hnu: energy = variable bb =(2./(const.planck*(const.hc**2)))*energy**2/(np.exp(energy/(const.boltzmann*temperature)) - 1.) return {'photons':bb, 'temperature':temperature, 'energy':energy} else: wvl = 1.e-8*variable bb = ((2.*const.pi*const.light)/wvl**4)/(np.exp(const.hc/(wvl*const.boltzmann*temperature)) - 1.) return {'photons':bb, 'temperature':temperature, 'wvl':wvl}