Source code for exosim.tasks.radiometric.computeTotalNoise

from copy import deepcopy

import astropy.units as u
import numpy as np

from exosim.tasks.task import Task


[docs]class ComputeTotalNoise(Task): """ It computes the total noise from a radiometric table Returns ------- table: :class:`astropy.table.QTable` total noise column """ def __init__(self): """ Parameters -------------- table: :class:`astropy.table.QTable` wavelength table with bin edge """ self.add_task_param("table", "wavelength table with bin edges")
[docs] def execute(self): table = self.get_task_param("table") total_variance = np.zeros(table["Wavelength"].size) * u.hr noise_k = [key for key in table.keys() if "noise" in key] for key in noise_k: # first iter on photon noise if "_photon_noise" in key and ( "source" not in key and "foreground" not in key ): continue if table[key].unit == u.ct / u.s: contrib = deepcopy( table[key].filled(0.0) if hasattr(table[key], "filled") else table[key] ) contrib /= table["source_signal_in_aperture"] total_variance += (contrib**2 / u.hr.to(u.s)) * u.hr table["total_noise"] = ( total_variance**0.5 ) # / table['source_signal_in_aperture'] total_variance = table["total_noise"] ** 2 for key in noise_k: # second iter on relative noise if table[key].unit == u.hr**0.5 or table[key].unit is None: contrib = ( table[key].filled(0.0) if hasattr(table[key], "filled") else table[key] ) total_variance += contrib**2 * u.hr table["total_noise"] = total_variance**0.5 self.set_output(table["total_noise"])