Source code for exosim.tasks.radiometric.computeSubFrgSignalsChannel
import astropy.units as u
from astropy.table import QTable
from exosim.tasks.task import Task
from .aperturePhotometry import AperturePhotometry
[docs]class ComputeSubFrgSignalsChannel(Task):
"""
It iteratively estimates the radiometric signals on the foregrounds sub focal planes for a channel
and returns a table with all the contributions.
Returns
--------
:class:`astropy.table.QTable`
signal table
Raises
--------
TypeError:
if the output is not :class:`~astropy.table.QTable`
Notes
-----
This is a default class with standardised inputs and outputs.
The user can load this class and overwrite the "model" method
to implement a custom Task to replace this.
"""
def __init__(self):
"""
Parameters
----------
table: :class:`astropy.table.QTable`
apertures table
ch_name: str
channel name
input_file: :class:`~exosim.output.output.Output`
input HDF5 file
parameters: dict
dictionary contained the channel parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions`
"""
self.add_task_param("table", "channel table")
self.add_task_param("ch_name", "channel name")
self.add_task_param(
"input_file", "input file containing the focal planes"
)
self.add_task_param("parameters", "channel parameters dict", None)
[docs] def execute(self):
table = self.get_task_param("table")
ch = self.get_task_param("ch_name")
input_file = self.get_task_param("input_file")
parameters = self.get_task_param("parameters")
self.debug("Computing foreground signals table for {}".format(ch))
new_table = self.model(ch, table, input_file, parameters)
if not isinstance(new_table, QTable):
self.error("wrong output format")
raise TypeError("wrong output format")
self.set_output(new_table)
[docs] def model(self, ch, table, input_file, parameters):
"""
It iteratively estimates the radiometric signals on the foregrounds sub focal plane for a channel
and returns a table with all the contributions.
It uses :func:`photutils.aperture.aperture_photometry` with the apertures
from :class:`~exosim.tasks.radiometric.estimateApertures.EstimateApertures`.
Parameters
----------
table: :class:`astropy.table.QTable`
apertures table
ch_name: str
channel name
input_file: :class:`~exosim.output.output.Output`
input HDF5 file
parameters: dict
dictionary contained the channel parameters. This is usually parsed from :class:`~exosim.tasks.load.loadOptions.LoadOptions`
Returns
--------
:class:`astropy.table.QTable`
signal table
"""
new_table = QTable()
with input_file.open() as f:
if "sub_focal_planes" in f["channels"][ch].keys():
for frg in f["channels"][ch]["sub_focal_planes"].keys():
# prepare the focal plane
self.debug(
"extracting {} focal plane. Oversampling removed".format(
frg
)
)
sub_f = f["channels"][ch]["sub_focal_planes"][frg]
osf = sub_f["metadata"]["oversampling"][()]
focal_plane_units = u.Unit(sub_f["data_units"][()])
focal_plane = (
sub_f["data"][0, osf // 2 :: osf, osf // 2 :: osf]
* focal_plane_units
)
aperturePhotometry = AperturePhotometry()
self.debug(
"aperture photometry for {} focal plane".format(frg)
)
signal_in_phot = aperturePhotometry(
table=table, focal_plane=focal_plane
)
name = frg.split("_")[-1]
new_table["{}_signal_in_aperture".format(name)] = (
signal_in_phot * focal_plane_units
)
return new_table