.. py:currentmodule:: lsst.pex.config ############################# Types of configuration fields ############################# .. TODO: improve this page to summarize the purpose of each field, and then have a dedicated section for each field. https://jira.lsstcorp.org/browse/DM-17196 Attributes of the configuration object must be subclasses of `Field`. A number of these are predefined: `Field`, `RangeField`, `ChoiceField`, `ListField`, `ConfigField`, `ConfigChoiceField`, `RegistryField` and `ConfigurableField`. Example of `RangeField`: .. code-block:: python class BackgroundConfig(pexConfig.Config): """Parameters for controlling background estimation. """ binSize = pexConfig.RangeField( doc=("How large a region of the sky should be " "used for each background point."), dtype=int, default=256, min=10 ) Example of `ListField` and `Config` inheritance: .. code-block:: python class OutlierRejectedCoaddConfig(CoaddTask.ConfigClass): """Additional parameters for outlier-rejected coadds. """ subregionSize = pexConfig.ListField( dtype=int, doc=("width, height of stack subregion size; make " "small enough that a full stack of images will " "fit into memory at once."), length=2, default=(200, 200), optional=None, ) Examples of `ChoiceField` and `ConfigField` and the use of the `Config` object's `Config.setDefaults` and `Config.validate` methods: .. code-block:: python class InitialPsfConfig(pexConfig.Config): """A config that describes the initial PSF used for detection and measurement (before PSF determination is done). """ model = pexConfig.ChoiceField( dtype=str, doc="PSF model type.", default="SingleGaussian", allowed={ "SingleGaussian": "Single Gaussian model", "DoubleGaussian": "Double Gaussian model", }, ) class CalibrateConfig(pexConfig.Config): """A config to configure the calibration of an Exposure. """ initialPsf = pexConfig.ConfigField( dtype=InitialPsfConfig, doc=InitialPsfConfig.__doc__) detection = pexConfig.ConfigField( dtype=measAlg.SourceDetectionTask.ConfigClass, doc="Initial (high-threshold) detection phase for calibration." ) def setDefaults(self): self.detection.includeThresholdMultiplier = 10.0 def validate(self): pexConfig.Config.validate(self) if self.doComputeApCorr and not self.doPsf: raise ValueError("Cannot compute aperture correction " "without doing PSF determination.")