Source code for exosim.tasks.astrosignal.findAstronomicalSignals

from collections import OrderedDict

from exosim.tasks.astrosignal.estimateAstronomicalSignal import (
    EstimateAstronomicalSignal,
)
from exosim.tasks.task import Task
from exosim.utils.klass_factory import find_task


[docs]class FindAstronomicalSignals(Task): """ This tasks find astronomical signals in the sky parameters dictionary. The signals are identified by the presence of the key "signal_task" in the dictionary. """ def __init__(self) -> None: """ Parameters ------------ sky_parameters: dict sky parameters dictionary """ self.add_task_param("sky_parameters", "sky parameters dictionary")
[docs] def execute(self) -> None: self.sky_parameters = self.get_task_param("sky_parameters") self.signals_dict = {} if isinstance(self.sky_parameters["source"], OrderedDict): for source in self.sky_parameters["source"].keys(): for effect in self.sky_parameters["source"][source].keys(): if isinstance( self.sky_parameters["source"][source][effect], dict ): self.find_signals( self.sky_parameters["source"][source][effect], source, effect, ) else: source = self.sky_parameters["source"]["value"] for effect in self.sky_parameters["source"].keys(): if isinstance(self.sky_parameters["source"][effect], dict): self.find_signals( self.sky_parameters["source"][effect], source, effect ) if len(self.signals_dict) > 1: self.error( "Astronomical signals found in more than one star. " "The current version of ExoSim applies all the astronomical signals found in the target star. " "Please, check your sky parameters dictionary." ) raise ValueError() self.set_output(self.signals_dict)
[docs] def find_signals(self, input_dict: dict, source: str, effect: str) -> None: """ Finds and stores the signal estimation task and parameters for a given source and effect. Parameters ---------- input_dict : dict The dictionary containing the configuration parameters, including the optional key 'signal_task' which specifies the task responsible for signal estimation. source : str The name of the source for which the signals are to be found. effect : str The name of the effect to be considered in the signal estimation. """ if "signal_task" in input_dict.keys(): signal_task = find_task( input_dict["signal_task"], EstimateAstronomicalSignal ) signal_dict = { "task": signal_task, "parsed_parameters": ( self.sky_parameters["source"][source] if source in self.sky_parameters["source"].keys() else self.sky_parameters["source"] ), } if source not in self.signals_dict.keys(): self.signals_dict.update({source: {effect: signal_dict}}) else: self.signals_dict[source].update({effect: signal_dict})