Source code for nectarchain.makers.component.spe.parameters

import copy
import logging

import astropy.units as u
import numpy as np

logging.basicConfig(format="%(asctime)s %(name)s %(levelname)s %(message)s")
log = logging.getLogger(__name__)


__all__ = ["Parameter", "Parameters"]


[docs] class Parameter: def __init__( self, name: str, value, min=np.nan, max=np.nan, error=np.nan, unit=u.dimensionless_unscaled, frozen: bool = False, ) -> None: self.__name = name self.__value = value self.__error = error self.__min = min self.__max = max self.__unit = unit self.__frozen = frozen @classmethod def from_instance(cls, parameter): return cls( parameter.name, parameter.value, parameter.min, parameter.max, parameter.unit, parameter.frozen, ) def __str__(self): return ( f"name : {self.__name}, value : {self.__value}, error : {self.__error}," f"unit : {self.__unit}, min : {self.__min}, max : {self.__max}," f"frozen : {self.__frozen}" ) @property def name(self): return self.__name @name.setter def name(self, value: str): self.__name = value @property def value(self): return self.__value @value.setter def value(self, value): self.__value = value @property def min(self): return self.__min @min.setter def min(self, value): self.__min = value @property def max(self): return self.__max @max.setter def max(self, value): self.__max = value @property def unit(self): return self.__unit @unit.setter def unit(self, value: u.Unit): self.__unit = value @property def error(self): return self.__error @error.setter def error(self, value): self.__error = value @property def frozen(self): return self.__frozen @frozen.setter def frozen(self, value: bool): self.__frozen = value
[docs] class Parameters: def __init__(self, parameters_liste: list = []) -> None: self.__parameters = copy.deepcopy(parameters_liste) def append(self, parameter: Parameter) -> None: self.__parameters.append(parameter) def __getitem__(self, key: str): for parameter in self.__parameters: if parameter.name == key: return parameter return [] def __str__(self): string = "" for parameter in self.__parameters: string += str(parameter) + "\n" return string @property def parameters(self): return self.__parameters @property def size(self): return len(self.__parameters) @property def parnames(self): return [parameter.name for parameter in self.__parameters] @property def parvalues(self): return [parameter.value for parameter in self.__parameters] @property def unfrozen(self): parameters = Parameters() for parameter in self.__parameters: if not (parameter.frozen): parameters.append(parameter) return parameters