Source code for vip_hci.objects.ppandromeda

#! /usr/bin/env python
"""Module for the post-processing ANDROMEDA algorithm."""

__author__ = "Thomas Bédrine, Carlos Alberto Gomez Gonzalez, Ralf Farkas"
__all__ = ["AndroBuilder", "PPAndromeda"]

from typing import Optional
from dataclasses import dataclass

import numpy as np
from dataclass_builder import dataclass_builder

from .dataset import Dataset
from .postproc import PostProc
from ..invprob import andromeda, ANDROMEDA_Params
from ..config.utils_conf import algo_calculates_decorator as calculates


[docs] @dataclass class PPAndromeda(PostProc, ANDROMEDA_Params): """Post-processing ANDROMEDA algorithm.""" _algo_name: str = "andromeda" contrast_map: np.ndarray = None likelihood_map: np.ndarray = None snr_map: np.ndarray = None snr_map_notnorm: np.ndarray = None stdcontrast_map: np.ndarray = None stdcontrast_map_notnorm: np.ndarray = None ext_radius: int = None detection_map: np.ndarray = None
[docs] @calculates( "frame_final", "contrast_map", "likelihood_map", "snr_map", "stdcontrast_map", "snr_map_notnorm", "stdcontrast_map_notnorm", "ext_radius", "detection_map", ) def run( self, dataset: Optional[Dataset] = None, nproc: Optional[int] = None, ): """ Run the ANDROMEDA algorithm for model PSF subtraction. Parameters ---------- dataset : Dataset, optional Dataset to process. If not provided, ``self.dataset`` is used (as set when initializing this object). nproc : int, optional Number of processes to use. verbose : bool, optional Print some parameter values for control. """ self.snr_map = None self._update_dataset(dataset) if self.dataset.fwhm is None: raise ValueError("`fwhm` has not been set") self._explicit_dataset() if nproc is not None: self.nproc = nproc params_dict = self._create_parameters_dict(ANDROMEDA_Params) all_params = {"algo_params": self} res = andromeda(**all_params) self.contrast_map = res[0] self.likelihood_map = res[5] self.ext_radius = res[6] # normalized/not normalized depending on nsmooth: self.snr_map = res[2] self.stdcontrast_map = res[4] if self.nsmooth_snr != 0: self.snr_map_notnorm = res[1] self.stdcontrast_map_notnorm = res[3] # general attributes: self.frame_final = self.contrast_map self.detection_map = self.snr_map if self.results is not None: self.results.register_session( params=params_dict, frame=self.frame_final, algo_name=self._algo_name, snr_map=self.snr_map, )
AndroBuilder = dataclass_builder(PPAndromeda)