def METHOD_NAME(cls, config_dict: ConfigDict) -> "AnalysisConfig":
    num_realization: int = config_dict.get(ConfigKeys.NUM_REALIZATIONS, 1)
    min_realization_str: str = config_dict.get(ConfigKeys.MIN_REALIZATIONS, "0")
    if "%" in min_realization_str:
        try:
            min_realization = ceil(
                num_realization * float(min_realization_str.strip("%")) / 100
            )
        except ValueError as err:
            raise ConfigValidationError.with_context(
                f"MIN_REALIZATIONS {min_realization_str!r} contained %"
                " but was not a valid percentage",
                min_realization_str,
            ) from err
    else:
        try:
            min_realization = int(min_realization_str)
        except ValueError as err:
            raise ConfigValidationError.with_context(
                f"MIN_REALIZATIONS value is not integer {min_realization_str!r}",
                min_realization_str,
            ) from err
    # Make sure min_realization is not greater than num_realization
    if min_realization == 0:
        min_realization = num_realization
    min_realization = min(min_realization, num_realization)
    config = cls(
        alpha=config_dict.get(ConfigKeys.ENKF_ALPHA, 3.0),
        std_cutoff=config_dict.get(ConfigKeys.STD_CUTOFF, 1e-6),
        stop_long_running=config_dict.get(ConfigKeys.STOP_LONG_RUNNING, False),
        max_runtime=config_dict.get(ConfigKeys.MAX_RUNTIME, 0),
        min_realization=min_realization,
        update_log_path=config_dict.get(ConfigKeys.UPDATE_LOG_PATH, "update_log"),
        analysis_iter_config=AnalysisIterConfig.METHOD_NAME(config_dict),
        analysis_set_var=config_dict.get(ConfigKeys.ANALYSIS_SET_VAR, []),
        analysis_select=config_dict.get(ConfigKeys.ANALYSIS_SELECT),
    )
    return config