def plot_clusters(model, SX, angles, phi_scaler, psi_scaler, fragment, output_writer=None, output_dir=None): ramachandran_surface() X = SX.todense() # Start from 10 to avoid blacks colors = np.linspace(10, 255, model.n_clusters) for k, color in zip(range(model.n_clusters), colors): col = cm.spectral(int(color)) my_members = model.labels_ == k # cluster_center = model.cluster_centers_[k] plt.scatter(x=phi_scaler.inverse_transform(X[my_members, 0]), y=psi_scaler.inverse_transform(X[my_members, 1]), c=col, s=30, marker='o', alpha=0.5) plt.title('Clusters for {} (inertia: {:.2})'.format( fragment, model.inertia_)) if output_writer: output_writer.savefig(dpi=150) if output_dir: plt.savefig( os.path.join(output_dir, 'clustering', fragment + '.cluster.svg'), format='svg', dpi=300, ) plt.close()
def plot(self, index=None): from tests import plot_whiskers from pylab import cm cmap = lambda i: cm.spectral(i / float(len(self._paths))) if index is None: for i, p in enumerate(self._paths): plot_whiskers([e for e in p if e], color=cmap(i)) else: p = list(self._paths)[index] plot_whiskers([e for e in p if e], color=cmap(index))
def plot(self, index = None): from tests import plot_whiskers from pylab import cm cmap = lambda i: cm.spectral( i/float(len(self._paths)) ) if index is None: for i,p in enumerate(self._paths): plot_whiskers( [e for e in p if e], color = cmap(i) ) else: p = list(self._paths)[index] plot_whiskers( [e for e in p if e], color = cmap(index) )
def compute_pairwise_conflict_paths(a, b, prune): """ a and b are each tuples of (whisker, hitindex), as returned from CollisionTable.next() Returns a set of tuples. """ bnda, bndb = trace_overlap(a, b) la, ma, ra = breakout(a[0], bnda) lb, mb, rb = breakout(b[0], bndb) ownership = {a[0]: (la, ma, ra), b[0]: (lb, mb, rb)} if not ma or not mb or prune(ma) or prune(mb): ownership = {a[0]: None, b[0]: None} pset = set() return pset, ownership pset = [[la, ma, ra], [la, ma, mb, rb], [lb, mb, ma, ra], [lb, mb, rb]] #prune for p in pset: for i, w in enumerate(p): if w and prune(w): p[i] = None #transform to set of tuples pset = set([tuple(e) for e in pset]) #0. Path's must have legititmate middle nodes. for p in list(pset): if len(p) == 3 and p[1] is None: pset.remove(p) elif len(p) == 4 and (p[1] is None or p[2] is None): pset.remove(p) #reduction hasfullpath = False # 1. Remove if can't get from left to right for p in list(pset): if p[0] is None and p[-1] is None: pset.discard(p) if p[0] is not None and p[-1] is not None: hasfullpath = True # 2. if only overlap, return composite of overlap if len(pset ) == 0: #no endpoints - this happens for middle-only overlaps m = max((ma, mb), key=lambda w: w.scores.mean()) ownership = {a[0]: (None, m, None), b[0]: (None, m, None)} #ownership = {a[0]:None, b[0]:None} pset = set(((None, m, None), )) #return best scoring return pset, ownership # 3. if there is at least one path from left to right, remove paths that # don't if hasfullpath: for p in list(pset): if p[0] is None or p[-1] is None: pset.discard(p) else: # 4. if not, path's should not begin or end on merged middles for p in list(pset): if len(p) == 4 and (p[0] is None or p[-1] is None): pset.discard(p) if 0: from tests import plot_whiskers from pylab import cm, clf, show cmap = lambda i: cm.spectral(i / float(len(pset))) for i, p in enumerate(pset): plot_whiskers([e for e in p if e], color=cmap(i)) show() return pset, ownership
def compute_pairwise_conflict_paths( a, b, prune ): """ a and b are each tuples of (whisker, hitindex), as returned from CollisionTable.next() Returns a set of tuples. """ bnda,bndb = trace_overlap(a,b) la,ma,ra = breakout(a[0],bnda) lb,mb,rb = breakout(b[0],bndb) ownership = {a[0]:(la,ma,ra), b[0]:(lb,mb,rb)} if not ma or not mb or prune(ma) or prune(mb): ownership = {a[0]:None, b[0]:None} pset = set() return pset, ownership pset = [ [ la, ma, ra ], [ la, ma, mb, rb ], [ lb, mb, ma, ra ], [ lb, mb, rb ] ] #prune for p in pset: for i,w in enumerate(p): if w and prune(w): p[i] = None #transform to set of tuples pset = set( [tuple(e) for e in pset] ) #0. Path's must have legititmate middle nodes. for p in list(pset): if len(p)==3 and p[1] is None: pset.remove(p) elif len(p)==4 and ( p[1] is None or p[2] is None ): pset.remove(p) #reduction hasfullpath = False # 1. Remove if can't get from left to right for p in list(pset): if p[0] is None and p[-1] is None: pset.discard(p) if p[0] is not None and p[-1] is not None: hasfullpath = True # 2. if only overlap, return composite of overlap if len(pset)==0: #no endpoints - this happens for middle-only overlaps m = max( (ma,mb), key = lambda w: w.scores.mean() ) ownership = {a[0]:(None,m,None), b[0]:(None,m,None)} #ownership = {a[0]:None, b[0]:None} pset = set( ((None,m,None),) ) #return best scoring return pset, ownership # 3. if there is at least one path from left to right, remove paths that # don't if hasfullpath: for p in list(pset): if p[0] is None or p[-1] is None: pset.discard(p) else: # 4. if not, path's should not begin or end on merged middles for p in list(pset): if len(p)==4 and ( p[0] is None or p[-1] is None ): pset.discard(p) if 0: from tests import plot_whiskers from pylab import cm, clf, show cmap = lambda i: cm.spectral( i/float(len(pset)) ) for i,p in enumerate(pset): plot_whiskers([e for e in p if e], color = cmap(i)) show() return pset,ownership