def get_runoff_diff_composit(swe_table_intf=None, traf_table_intf=None,
                             swe_table_no_intf=None, traf_table_no_intf=None,
                             start_year=1980, end_year=2010):

    total_diff = None

    for year in range(start_year, end_year + 1):
        print("Processing year {}".format(year))

        # Get data for the simulation with interflow
        traf_intf = analysis.get_np_arr_sorted_for_year(year, traf_table_intf, level_index=0)
        swe_intf = analysis.get_np_arr_sorted_for_year(year, swe_table_intf, level_index=0)

        # Get data for the simulation with interflow
        traf_no_intf = analysis.get_np_arr_sorted_for_year(year, traf_table_no_intf, level_index=0)
        swe_no_intf = analysis.get_np_arr_sorted_for_year(year, swe_table_no_intf, level_index=0)

        nt, nx, ny = swe_intf.shape
        if total_diff is None:
            total_diff = np.zeros(swe_intf.shape[1:])

        for t in range(1, nt):
            place_where_melts = (swe_intf[t] < swe_intf[t - 1]) & (swe_no_intf[t] < swe_no_intf[t - 1])

            total_diff[place_where_melts] += traf_intf[t][place_where_melts] - traf_no_intf[t][place_where_melts]

        # print "Number of relevant points: ", np.count_nonzero(the_diff)
        print("Finished processing {}".format(year))
    return total_diff
def get_runoff_differences_composit(traf_table_intf=None,
                                    th_table_intf=None,
                                    traf_table_no_intf=None,
                                    th_table_no_intf=None,
                                    thbfc_field=None,
                                    start_year=None,
                                    end_year=None,
                                    dt=3 * 3600):
    """

    :param traf_table_intf:
    :param th_table_intf:
    :param traf_table_no_intf:
    :param th_table_no_intf:
    :param thbfc_field:
    :param start_year:
    :param end_year:
    :param dt:
    :return: mean annual surface runoff differences where bulk field capacity is smaller than the soil misture
    """
    level_index = 0

    total_diff = None
    for y in range(start_year, end_year + 1):
        th_no_intf = analysis.get_np_arr_sorted_for_year(
            y, th_table_no_intf, level_index=level_index)
        traf_no_intf = analysis.get_np_arr_sorted_for_year(
            y, traf_table_no_intf, level_index=level_index)

        th_intf = analysis.get_np_arr_sorted_for_year(y,
                                                      th_table_intf,
                                                      level_index=level_index)
        traf_intf = analysis.get_np_arr_sorted_for_year(
            y, traf_table_intf, level_index=level_index)

        if total_diff is None:
            total_diff = np.zeros(th_no_intf.shape[1:])

        for t in range(th_no_intf.shape[0]):
            th1 = th_no_intf[t]
            th2 = th_intf[t]

            r1 = traf_no_intf[t]
            r2 = traf_intf[t]

            cond = (th1 > thbfc_field) & (th2 > thbfc_field)
            total_diff[cond] += (r2 - r1)[cond]

        print("Finished processing : {} from {}-{}".format(
            y, start_year, end_year))

    total_diff *= dt
    total_diff /= float(end_year - start_year + 1)
    return total_diff
def get_runoff_differences_composit(traf_table_intf=None, th_table_intf=None,
                                    traf_table_no_intf=None, th_table_no_intf=None, thbfc_field=None,
                                    start_year=None, end_year=None, dt=3 * 3600):
    """

    :param traf_table_intf:
    :param th_table_intf:
    :param traf_table_no_intf:
    :param th_table_no_intf:
    :param thbfc_field:
    :param start_year:
    :param end_year:
    :param dt:
    :return: mean annual surface runoff differences where bulk field capacity is smaller than the soil misture
    """
    level_index = 0

    total_diff = None
    for y in range(start_year, end_year + 1):
        th_no_intf = analysis.get_np_arr_sorted_for_year(y, th_table_no_intf, level_index=level_index)
        traf_no_intf = analysis.get_np_arr_sorted_for_year(y, traf_table_no_intf, level_index=level_index)

        th_intf = analysis.get_np_arr_sorted_for_year(y, th_table_intf, level_index=level_index)
        traf_intf = analysis.get_np_arr_sorted_for_year(y, traf_table_intf, level_index=level_index)


        if total_diff is None:
            total_diff = np.zeros(th_no_intf.shape[1:])


        for t in range(th_no_intf.shape[0]):
            th1 = th_no_intf[t]
            th2 = th_intf[t]

            r1 = traf_no_intf[t]
            r2 = traf_intf[t]

            cond = (th1 > thbfc_field) & (th2 > thbfc_field)
            total_diff[cond] += (r2 - r1)[cond]

        print("Finished processing : {} from {}-{}".format(y, start_year, end_year))

    total_diff *= dt
    total_diff /= float(end_year - start_year + 1)
    return total_diff
def get_runoff_diff_composit(swe_table_intf=None,
                             traf_table_intf=None,
                             swe_table_no_intf=None,
                             traf_table_no_intf=None,
                             start_year=1980,
                             end_year=2010):

    total_diff = None

    for year in range(start_year, end_year + 1):
        print("Processing year {}".format(year))

        # Get data for the simulation with interflow
        traf_intf = analysis.get_np_arr_sorted_for_year(year,
                                                        traf_table_intf,
                                                        level_index=0)
        swe_intf = analysis.get_np_arr_sorted_for_year(year,
                                                       swe_table_intf,
                                                       level_index=0)

        # Get data for the simulation with interflow
        traf_no_intf = analysis.get_np_arr_sorted_for_year(year,
                                                           traf_table_no_intf,
                                                           level_index=0)
        swe_no_intf = analysis.get_np_arr_sorted_for_year(year,
                                                          swe_table_no_intf,
                                                          level_index=0)

        nt, nx, ny = swe_intf.shape
        if total_diff is None:
            total_diff = np.zeros(swe_intf.shape[1:])

        for t in range(1, nt):
            place_where_melts = (swe_intf[t] < swe_intf[t - 1]) & (
                swe_no_intf[t] < swe_no_intf[t - 1])

            total_diff[place_where_melts] += traf_intf[t][
                place_where_melts] - traf_no_intf[t][place_where_melts]

        # print "Number of relevant points: ", np.count_nonzero(the_diff)
        print("Finished processing {}".format(year))
    return total_diff