def write_bias(channel, part1, part2, xname, ymd, dict_bias, day_or_night):
    """
    生成 RMD 日数据文件和月数据文件
    :param channel:
    :param part1:
    :param part2:
    :param xname:
    :param ymd:
    :param dict_bias:
    :param day_or_night:
    :return:
    """
    if not (xname in ["ref", "tbb"]):
        return

    for chan in channel:
        o_path = os.path.join(ABR_DIR, "%s_%s" % (part1, part2), "BIAS")
        file_name_monthly = os.path.join(
            o_path, "%s_%s_%s_%s_%s_Monthly.txt" %
            (part1, part2, xname.upper(), chan, day_or_night))
        file_name_daily = os.path.join(
            o_path, "%s_%s_%s_%s_%s_Daily.txt" %
            (part1, part2, xname.upper(), chan, day_or_night))

        # 写入日数据
        bias = dict_bias[xname][chan][0]
        md = dict_bias[xname][chan][1]
        title_daily = ("{:15}    " * 3).format("YMD", "Bias", "MD") + "\n"
        data_daily = ("{:15}    " * 3).format(ymd, bias, md) + "\n"
        day_data_write(title_daily, data_daily, file_name_daily)

        # 写入月数据
        title_monthly = ("{:15}    " * 5).format("YMD", "Bias", "Bias_STD",
                                                 "MD", "MD_STD") + "\n"
        bias_data = get_bias_data(file_name_daily)
        date_data = bias_data["date"]
        bias_day_data = np.vstack(bias_data["bias"])
        md_day_data = np.vstack(bias_data["md"])

        if len(date_data) <= 2:  # 如果小于2天的数据,不计算月平均
            continue

        bias_md_data = np.concatenate((bias_day_data, md_day_data), axis=1)
        data_monthly = month_average(date_data, bias_md_data)  # 计算月平均和STD

        for data in data_monthly:
            ymd_monthly = data[0]
            bias_mean_monthly = data[1]
            md_mean_monthly = data[2]
            bias_std_monthly = data[3]
            md_std_monthly = data[4]

            data_str = ("{:15}    " * 5).format(
                ymd_monthly, bias_mean_monthly, bias_std_monthly,
                md_mean_monthly, md_std_monthly) + "\n"
            day_data_write(title_monthly, data_str, file_name_monthly)
        print file_name_daily
        print file_name_monthly
示例#2
0
def write_cabr(channel, part1, part2, o_name, ymd,
               dict_cabr, day_or_night):
    """
    生成 CABR 数据文件
    :param channel:
    :param part1:
    :param part2:
    :param o_name:
    :param ymd:
    :param dict_cabr:
    :param day_or_night:
    :return:
    """
    for chan in channel:
        o_path = os.path.join(ABR_DIR, "%s_%s" % (part1, part2), "CABR")
        file_name_monthly = os.path.join(
            o_path, "%s_%s_%s_%s_%s_Monthly.txt" % (
                part1, part2, o_name, chan, day_or_night))
        file_name_daily = os.path.join(
            o_path, "%s_%s_%s_%s_%s_Daily.txt" % (
                part1, part2, o_name, chan, day_or_night))

        # 写入日数据
        title_daily = ("{:15}  " * 5).format("YMD", "Count", "Slope", "Intercept",
                                             "RSquared") + "\n"
        c, a, b, r = dict_cabr[o_name][chan]
        data_daily = ("{:15}  " * 5).format(ymd, c, a, b, r) + "\n"
        day_data_write(title_daily, data_daily, file_name_daily)

        # 写入月数据
        cabr_data = get_cabr_data(file_name_daily)
        title_monthly = ("{:15}  " * 8).format("YMD", "Count", "Slope", "Slope_STD",
                                               "Intercept", "Intercept_STD", "RSquared",
                                               "RSquared_STD") + "\n"
        date_data = cabr_data["date"]

        if len(date_data) <= 2:  # 如果小于2天的数据,不计算月平均
            continue

        c_data = cabr_data["count"]
        s_data = np.vstack(cabr_data["slope"])
        i_data = np.vstack(cabr_data["intercept"])
        r_data = np.vstack(cabr_data["rsquared"])

        abr_data = np.concatenate((s_data, i_data, r_data), axis=1)  # 合并 a b c 数据

        count_monthly = month_count(date_data, c_data)  # 计算月总数
        abr_monthly = month_average(date_data, abr_data)[:, 1:]  # 计算月平均和STD
        data_monthly = np.concatenate((count_monthly, abr_monthly), axis=1)

        for data in data_monthly:
            ymd_monthly = data[0]
            count_monthly = data[1]
            slope_mean_monthly = data[2]
            intercept_mean_monthly = data[3]
            rsquared_mean_monthly = data[4]

            slope_std_monthly = data[5]
            intercept_std_monthly = data[6]
            rsquared_std_monthly = data[7]

            data_str = ("{:15}  " * 8).format(ymd_monthly, count_monthly, slope_mean_monthly,
                                              slope_std_monthly,
                                              intercept_mean_monthly, intercept_std_monthly,
                                              rsquared_mean_monthly, rsquared_std_monthly) + "\n"
            day_data_write(title_monthly, data_str, file_name_monthly)
        print file_name_daily
        print file_name_monthly