Esempio n. 1
0
def merge_clusters(chain, clusters, Dmax=0, min_size=0):
    """
    Due to the problem of chaining, some chains might overlap each other
    these need to be merged 
    """
    eclusters = make_range(clusters, extend=Dmax)

    mergeables = get_2D_overlap(chain, eclusters)

    merged_chain = []
    for mergeable in mergeables:
        merged_mother = min(mergeable)
        g = (clusters[x] for x in mergeable)
        merged_cluster = itertools.chain(*g)
        merged_cluster = list(set(merged_cluster))

        clusters[merged_mother] = merged_cluster
        if len(merged_cluster) >= min_size:
            merged_chain.append(merged_mother)

    # maintain the x-sort
    [cluster.sort() for cluster in clusters]

    print >> sys.stderr, "merging... (%d->%d)" % (len(chain),
                                                  len(merged_chain))

    return merged_chain
def merge_clusters(chain, clusters, Dmax=0, min_size=0):
    """
    Due to the problem of chaining, some chains might overlap each other
    these need to be merged 
    """
    eclusters = make_range(clusters, extend=Dmax)

    mergeables = get_2D_overlap(chain, eclusters)

    merged_chain = []
    for mergeable in mergeables:
        merged_mother = min(mergeable)
        g = (clusters[x] for x in mergeable)
        merged_cluster = itertools.chain(*g)
        merged_cluster = list(set(merged_cluster))

        clusters[merged_mother] = merged_cluster
        if len(merged_cluster) >= min_size:
            merged_chain.append(merged_mother)

    # maintain the x-sort
    [cluster.sort() for cluster in clusters]

    print >>sys.stderr, "merging... (%d->%d)" % (len(chain), len(merged_chain))

    return merged_chain
Esempio n. 3
0
def get_constraints(clusters, quota=(1, 1), Nmax=0):
    """
    Check pairwise cluster comparison, if they overlap then mark edge as conflict
    """
    qa, qb = quota
    eclusters = make_range(clusters, extend=-Nmax)
    # (1-based index, cluster score)
    nodes = [(i + 1, c[-1]) for i, c in enumerate(eclusters)]

    eclusters_x, eclusters_y, scores = zip(*eclusters)

    # represents the contraints over x-axis and y-axis
    constraints_x = get_1D_overlap(eclusters_x, qa)
    constraints_y = get_1D_overlap(eclusters_y, qb)

    return nodes, constraints_x, constraints_y
def get_constraints(clusters, quota=(1,1), Nmax=0):
    """
    Check pairwise cluster comparison, if they overlap then mark edge as conflict
    """
    qa, qb = quota
    eclusters = make_range(clusters, extend=-Nmax)
    # (1-based index, cluster score)
    nodes = [(i+1, c[-1]) for i, c in enumerate(eclusters)]

    eclusters_x, eclusters_y, scores = zip(*eclusters)

    # represents the contraints over x-axis and y-axis
    constraints_x = get_1D_overlap(eclusters_x, qa)
    constraints_y = get_1D_overlap(eclusters_y, qb)

    return nodes, constraints_x, constraints_y