Example #1
0
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()
Example #2
0
 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))
Example #3
0
 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) )
Example #4
0
    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
Example #5
0
  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