# Source code for ChiantiPy.tools.sources

"""
Blackbody temperature calculations
"""

import numpy as np

import ChiantiPy.tools.constants as const

[docs]class blackStar:
"""

Parameters
----------
temperature : ~numpy.ndarray
Temperature in Kelvin
radius : ~numpy.ndarray

Attributes
----------
Temperature : ~numpy.ndarray
Temperature in Kelvin
Radius : ~numpy.ndarray
Incident : ~numpy.ndarray
Blackbody photon distribution
"""

self.Temperature = temperature

[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)
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}