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
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