Types of configuration fields

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:

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:

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:

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.")