def METHOD_NAME(self, coarse_cluster_list):
    lines = []
    angles = []
    for i in range(len(coarse_cluster_list)):
        if len(coarse_cluster_list[i]) == 0:
            continue
        coarse_cluster_list[i] = np.array(coarse_cluster_list[i])
        distance = abs(coarse_cluster_list[i][:, 3] - coarse_cluster_list[i]
                       [:, 1]) + abs(coarse_cluster_list[i][:, 2] -
                                     coarse_cluster_list[i][:, 0])
        l = coarse_cluster_list[i][np.argmax(distance)]
        angles.append(self.get_angle(l))
        lines.append(l)
    if len(lines) == 0:
        return [], None
    if not self.filter_horizontal_flag:
        return lines, None
    #filter horizontal roads
    angles = np.array(angles)
    max_angle, min_angle = np.max(angles), np.min(angles)
    if (max_angle - min_angle) < self.horizontal_filtration_degree:
        return lines, np.mean(angles)
    thr_angle = (
        max_angle + min_angle) * self.horizontal_filtering_threshold
    lines = np.array(lines)
    min_angle_line = lines[np.where(angles < thr_angle)]
    max_angle_line = lines[np.where(angles >= thr_angle)]
    max_angle_line_pro = self.get_proportion(max_angle_line)
    min_angle_line_pro = self.get_proportion(min_angle_line)
    if max_angle_line_pro >= min_angle_line_pro:
        angle_list = angles[np.where(angles >= thr_angle)]
        return max_angle_line, np.mean(angle_list)
    else:
        angle_list = angles[np.where(angles < thr_angle)]
        return min_angle_line, np.mean(angle_list)