예제 #1
0
def create_metrics(ref, test, ref_regrid, test_regrid, diff):
    """Creates the mean, max, min, rmse, corr in a dictionary"""
    metrics_dict = {}
    metrics_dict["ref"] = {
        "min": float(min_cdms(ref)),
        "max": float(max_cdms(ref)),
        "mean": float(mean(ref)),
    }
    metrics_dict["ref_regrid"] = {
        "min": float(min_cdms(ref_regrid)),
        "max": float(max_cdms(ref_regrid)),
        "mean": float(mean(ref_regrid)),
        "std": float(std(ref_regrid)),
    }
    metrics_dict["test"] = {
        "min": float(min_cdms(test)),
        "max": float(max_cdms(test)),
        "mean": float(mean(test)),
    }
    metrics_dict["test_regrid"] = {
        "min": float(min_cdms(test_regrid)),
        "max": float(max_cdms(test_regrid)),
        "mean": float(mean(test_regrid)),
        "std": float(std(test_regrid)),
    }
    metrics_dict["diff"] = {
        "min": float(min_cdms(diff)),
        "max": float(max_cdms(diff)),
        "mean": float(mean(diff)),
    }
    metrics_dict["misc"] = {
        "rmse": float(rmse(test_regrid, ref_regrid)),
        "corr": float(corr(test_regrid, ref_regrid)),
    }
    return metrics_dict
예제 #2
0
def create_metrics(ref, test, ref_regrid, test_regrid, diff):
    """Creates the mean, max, min, rmse, corr in a dictionary"""
    orig_bounds = cdms2.getAutoBounds()
    cdms2.setAutoBounds(1)
    lev = ref.getLevel()
    if lev is not None:
        lev.setBounds(None)

    lev = test.getLevel()
    if lev is not None:
        lev.setBounds(None)

    lev = test_regrid.getLevel()
    if lev is not None:
        lev.setBounds(None)

    lev = ref_regrid.getLevel()
    if lev is not None:
        lev.setBounds(None)

    lev = diff.getLevel()
    if lev is not None:
        lev.setBounds(None)
    cdms2.setAutoBounds(orig_bounds)

    metrics_dict = {}
    metrics_dict["ref"] = {
        "min": min_cdms(ref),
        "max": max_cdms(ref),
        "mean": mean(ref, axis="yz"),
    }
    metrics_dict["test"] = {
        "min": min_cdms(test),
        "max": max_cdms(test),
        "mean": mean(test, axis="yz"),
    }

    metrics_dict["diff"] = {
        "min": min_cdms(diff),
        "max": max_cdms(diff),
        "mean": mean(diff, axis="yz"),
    }
    metrics_dict["misc"] = {
        "rmse": rmse(test_regrid, ref_regrid, axis="yz"),
        "corr": corr(test_regrid, ref_regrid, axis="yz"),
    }

    return metrics_dict
예제 #3
0
def create_single_metrics_dict(values):
    d = {
        "min": float(min_cdms(values)),
        "max": float(max_cdms(values)),
        "mean": float(mean(values)),
        "std": float(std(values)),
    }
    return d
def create_metrics(ref_domain):
    """
    For this plotset, calculate the mean of the
    reference data and return a dict of that.
    """
    return {"mean": mean(ref_domain)}
예제 #5
0
def run_diag(parameter):
    variables = parameter.variables
    seasons = parameter.seasons
    ref_name = getattr(parameter, "ref_name", "")
    regions = parameter.regions

    test_data = utils.dataset.Dataset(parameter, test=True)
    ref_data = utils.dataset.Dataset(parameter, ref=True)

    for season in seasons:
        # Get the name of the data, appended with the years averaged.
        parameter.test_name_yrs = utils.general.get_name_and_yrs(
            parameter, test_data, season)
        parameter.ref_name_yrs = utils.general.get_name_and_yrs(
            parameter, ref_data, season)

        # Get land/ocean fraction for masking.
        try:
            land_frac = test_data.get_climo_variable("LANDFRAC", season)
            ocean_frac = test_data.get_climo_variable("OCNFRAC", season)
        except Exception:
            mask_path = os.path.join(e3sm_diags.INSTALL_PATH,
                                     "acme_ne30_ocean_land_mask.nc")
            with cdms2.open(mask_path) as f:
                land_frac = f("LANDFRAC")
                ocean_frac = f("OCNFRAC")

        for var in variables:
            print("Variable: {}".format(var))
            parameter.var_id = var

            mv1 = test_data.get_climo_variable(var, season)
            mv2 = ref_data.get_climo_variable(var, season)

            parameter.viewer_descr[var] = (mv1.long_name if hasattr(
                mv1, "long_name") else "No long_name attr in test data.")

            for region in regions:
                print("Selected region: {}".format(region))

                mv1_domain = utils.general.select_region(
                    region, mv1, land_frac, ocean_frac, parameter)
                mv2_domain = utils.general.select_region(
                    region, mv2, land_frac, ocean_frac, parameter)

                parameter.output_file = "-".join(
                    [ref_name, var, season, region])
                parameter.main_title = str(" ".join([var, season, region]))

                mv1_domain_mean = mean(mv1_domain)
                mv2_domain_mean = mean(mv2_domain)
                diff = mv1_domain_mean - mv2_domain_mean

                mv1_domain_mean.id = var
                mv2_domain_mean.id = var
                diff.id = var

                parameter.backend = (
                    "mpl"  # For now, there's no vcs support for this set.
                )
                plot(
                    parameter.current_set,
                    mv2_domain_mean,
                    mv1_domain_mean,
                    diff,
                    {},
                    parameter,
                )
                utils.general.save_ncfiles(
                    parameter.current_set,
                    mv1_domain,
                    mv2_domain,
                    diff,
                    parameter,
                )

    return parameter