Source code for roentgen.lines.lines

import numpy as np

from astropy.table import Table
import astropy.units as u

import roentgen
from roentgen.util import get_atomic_number

__all__ = ["get_lines"]


[docs]@u.quantity_input(energy_low=u.keV, energy_high=u.keV, equivalencies=u.spectral()) def get_lines(energy_low, energy_high, element=None): """ Retrieve all emission lines in an energy range. Parameters ---------- energy_low : `astropy.units.Quantity` The low end of the energy range energy_high : `astropy.units.Quantity` The high end of the energy range element : str, optional Select only lines from a specific element Returns ------- line_list : `astropy.table.QTable` """ result = Table() # this is the default result em = roentgen.emission_lines energies = em[em.colnames[0]] bool_array = (energies < energy_high) * (energies > energy_low) if np.any(bool_array): result = em.loc[energy_low.to("eV").value : energy_high.to("eV").value] if len(result) > 1 and element is not None: # check to see if any lines from selected element exist in energy range if np.any(result["z"] == get_atomic_number(element)): result = result.loc["z", get_atomic_number(element)] return result