Source code for slophep.Fitting.Parameter

import uuid

[docs] class Parameter: def __init__(self, name: str, val: float, limlo: float = None, limhi: float = None, fixed: bool = False): self._name = name self._val = val self._limlo = limlo self._limhi = limhi self._fixed = fixed self._constrain = False self._constraintvals = [] self._uuid = uuid.uuid5(uuid.NAMESPACE_DNS, name).hex @property def name(self) -> str: """Parameter name""" return self._name @property def val(self) -> float: """Parameter value""" return self._val @property def limlo(self) -> float: """Lower limit""" return self._limlo @property def limhi(self) -> float: """Upper limit""" return self._limhi @property def fixed(self) -> bool: """Whether parameter is fixed""" return self._fixed @property def constrain(self) -> bool: """Whether parameter is constrained""" return self._constrain @property def constraintvals(self) -> list[float]: """The values for gaussian constraint, in form [mu, sigma]""" return self._constraintvals @property def uuid(self) -> str: """Unique hash ID""" return self._uuid
[docs] def fix(self, val: float = None): """Fix parameter to val""" if val: self._val = val self._fixed = True
[docs] def setlim(self, lo: float, hi: float): """Set parameter limits""" if lo: self._limlo = lo if hi: self._limhi = hi
[docs] def constrainto(self, mu: float, sigma: float): """Set parameter constraints""" self._constrain = True self._constraintvals = [mu, sigma]
[docs] def setVal(self, val: float): """Set parameter value""" self._val = val
[docs] def getVal(self): """Return parameter value""" return self.val
[docs] class ParameterManager: def __init__(self): self._params = {} self._id_map = {} @property def params(self) -> dict[str, Parameter]: """Dictionary of all parameters in manager, indexed by their uniue hash ID""" return self._params @property def id_map(self) -> dict[str, str]: """Correspondence of parameter names to hash ID""" return self._id_map
[docs] def addParam(self, par: Parameter): """Add parameter to manager Parameters ---------- par : Parameter Raises ------ KeyError If there is already an existing parameter with the same name """ if par.uuid in self.id_map: raise KeyError(f"Please change parameter name, Parmeter {par.name} with ID {par.uuid} already exists") self._params[par.uuid] = par self._id_map[par.name] = par.uuid
[docs] def getVal(self, parname: str): """Get value of a parameter Parameters ---------- parname : str The name of the parameter """ uuid = self.id_map[parname] return self.params[uuid].getVal()
[docs] def setVal(self, parname: str, val: float): """Set value of a parameter Parameters ---------- parname : str The name of the parameter """ uuid = self.id_map[parname] self.params[uuid].setVal(val)
[docs] def setVals(self, parvals: dict): """Set value of several parameters Parameters ---------- parvals : dict Dictionary in form {parameter_name : value} """ for ipar in parvals: self.setVal(ipar, parvals[ipar])
[docs] def getParam(self, parname: str) -> Parameter: """Get Parameter object from manager Parameters ---------- parname : str Name of the parameter Returns ------- Parameter """ uuid = self._id_map[parname] return self.params[uuid]