コード例 #1
0
ファイル: alignlib.py プロジェクト: ongkong/compbio
 def align2local(self, i, clamp=False):
     if clamp:
         return self.align2localLookup[int(
             util.clamp(i, 0,
                        len(self.align2localLookup) - 1))]
     else:
         return self.align2localLookup[i]
コード例 #2
0
ファイル: alignlib.py プロジェクト: ongkong/compbio
 def local2align(self, i, clamp=False):
     if clamp:
         return self.local2alignLookup[int(
             util.clamp(i, 0,
                        len(self.local2alignLookup) - 1))]
     else:
         return self.local2alignLookup[i]
コード例 #3
0
ファイル: stats.py プロジェクト: mdrasmus/spimap
def percentile(vals, perc, rounding=-1, sort=True):
    """Give the value at a percentile
       
       rounding -- round down if -1 or round up for 1
    """

    if sort:
        vals2 = sorted(vals)
    else:
        vals2 = vals
    n = len(vals2)
    if rounding == -1:
        return vals2[util.clamp(int(perc * n), 0, n - 1)]
    elif rounding == 1:
        return vals2[util.clamp(int(ceil(perc * n)), 0, n - 1)]
    else:
        raise Exception("rounding must be 1 or -1")
コード例 #4
0
ファイル: stats.py プロジェクト: gofflab/biolib
def percentile(vals, perc, rounding=-1, sort=True):
    """Give the value at a percentile
       
       rounding -- round down if -1 or round up for 1
    """
    
    if sort:
        vals2 = sorted(vals)
    else:
        vals2 = vals
    n = len(vals2)
    if rounding == -1:
        return vals2[util.clamp(int(perc * n), 0, n-1)]
    elif rounding == 1:
        return vals2[util.clamp(int(ceil(perc * n)), 0, n-1)]
    else:
        raise Exception("rounding must be 1 or -1")
コード例 #5
0
    def getseq(self, key, start=1, end=None, strand=1):
        """Get a sequence (or subsequence) by key"""

        val = SeqDict.__getitem__(self, key)

        if val is None:
            # if val == None, then we are using fasta indexing
            return self.index.get(key, start, end, strand)

        else:
            start = util.clamp(start, 1, None)
            end = util.clamp(end, 1, None)
            val = val[start - 1:end]

            # reverse complement if needed
            if strand == -1:
                val = _revcomp(val)

            return val
コード例 #6
0
    def getseq(self, key, start=1, end=None, strand=1):
        """Get a sequence (or subsequence) by key"""
        
        val = SeqDict.__getitem__(self, key) 
        
        if val is None:
            # if val == None, then we are using fasta indexing
            return self.index.get(key, start, end, strand)

        else:
            start = util.clamp(start, 1, None)
            end = util.clamp(end, 1, None)
            val = val[start-1:end]
        
            # reverse complement if needed
            if strand == -1:
                val = _revcomp(val)
            
            return val
コード例 #7
0
ファイル: genomebrowser.py プロジェクト: xysheep/compbio
    def update(self):
        assert self.view != None, "Track view not initialized"

        win = self.get_window()

        if not self.shown or not self.multiscale.same_view():
            self.shown = True
            x, y = self.pos

            start2 = self.view.start
            start = int(
                max(0, start2 - 1, self.multiscale.worldx1 - x + start2))
            end = int(
                min(len(self.xdata), self.view.end,
                    self.multiscale.worldx2 - x + start2))
            step = max(1, (end - start) // 400)

            vis = []
            vis2 = []
            for i in xrange(start, end, step):
                dat = self.ydata[i:i + step]

                assert len(dat) > 0, (start, end, step)

                y1 = min(dat)
                y2 = max(dat)
                #y = self.ydata[i]
                y1 = (util.clamp(y1, .33, .66) - .33) / .33
                y2 = (util.clamp(y2, .33, .66) - .33) / .33
                vis.extend([self.xdata[i], y2 * self.size[1]])
                vis2.extend([self.xdata[i], y1 * self.size[1]])

            # draw curve on middle of base (.5)
            self.gid = win.replace_group(
                self.gid,
                group(
                    translate(
                        x - self.view.start + .5, y, color(0, 1, 0),
                        line_strip(*vis), line_strip(*vis2), color(0, 0, 0),
                        lines(self.view.start - 0.5, 0, self.view.end + 0.5, 0,
                              self.view.start - 0.5, self.size[1],
                              self.view.end + 0.5, self.size[1]))))
コード例 #8
0
    def update(self):
        assert self.view != None, "Track view not initialized"
        
        win = self.get_window()
    
        if not self.shown or not self.multiscale.same_view():
            self.shown = True
            x, y = self.pos
            
            start2 = self.view.start
            start = int(max(0, start2-1, self.multiscale.worldx1-x+start2))
            end = int(min(len(self.xdata), self.view.end, self.multiscale.worldx2-x+start2))
            step = max(1, (end - start) // 400)
            
            vis = []
            vis2 = []
            for i in xrange(start, end, step):
                dat = self.ydata[i:i+step]

                assert len(dat) > 0, (start, end, step)

                y1 = min(dat)
                y2 = max(dat)
                #y = self.ydata[i]
                y1 = (util.clamp(y1, .33, .66) - .33) / .33
                y2 = (util.clamp(y2, .33, .66) - .33) / .33                
                vis.extend([self.xdata[i], y2 * self.size[1]])
                vis2.extend([self.xdata[i], y1 * self.size[1]])

            # draw curve on middle of base (.5)
            self.gid = win.replace_group(self.gid, 
                group(translate(x - self.view.start + .5, y,
                      color(0,1,0), 
                      line_strip(* vis),
                      line_strip(* vis2),
                      color(0,0,0),
                      lines(self.view.start - 0.5, 0, self.view.end + 0.5, 0,
                            self.view.start - 0.5, self.size[1], 
                            self.view.end + 0.5, self.size[1]))))
コード例 #9
0
ファイル: phylo.py プロジェクト: sarab609/scraps
def midroot_recon(tree, stree, recon, events, params, generate):

    node1, node2 = tree.root.children

    specs1 = []
    specs2 = []
    
    # find nearest specs/genes
    def walk(node, specs):
        if events[node] == "dup":
            for child in node.children:
                walk(child, specs)
        else:
            specs.append(node)
    #walk(node1, specs1)
    #walk(node2, specs2)
    specs1 = node1.leaves()
    specs2 = node2.leaves()
    
    def getDists(start, end):
        exp_dist = 0
        obs_dist = 0

        sstart = recon[start]
        send = recon[end]
        while sstart != send:
            exp_dist += params[sstart.name][0]
            sstart = sstart.parent

        while start != end:
            obs_dist += start.dist
            start = start.parent

        return exp_dist, obs_dist / generate
    
    diffs1 = []
    for spec in specs1:
        if events[tree.root] == "spec":
            exp_dist1, obs_dist1 = getDists(spec, tree.root)
        else:
            exp_dist1, obs_dist1 = getDists(spec, node1)
        diffs1.append(obs_dist1 - exp_dist1)        

    diffs2 = []
    for spec in specs2:
        if events[tree.root] == "spec":
            exp_dist2, obs_dist2 = getDists(spec, tree.root)
        else:
            exp_dist2, obs_dist2 = getDists(spec, node2)
        diffs2.append(obs_dist2 - exp_dist2)
    
    totdist = (node1.dist + node2.dist) / generate

    left = node1.dist - stats.mean(diffs1)
    right =  totdist - node2.dist + stats.mean(diffs2)
    
    #print diffs1, diffs2    
    #print stats.mean(diffs1), stats.mean(diffs2)
    
    mid = util.clamp((left + right) / 2.0, 0, totdist)
    
    node1.dist = mid * generate
    node2.dist = (totdist - mid) * generate
コード例 #10
0
 def align2local(self, i, clamp=False):
     if clamp:
         return self.align2localLookup[
             int(util.clamp(i, 0, len(self.align2localLookup)-1))]
     else:
         return self.align2localLookup[i]
コード例 #11
0
 def local2align(self, i, clamp=False):
     if clamp:
         return self.local2alignLookup[
             int(util.clamp(i, 0, len(self.local2alignLookup)-1))]
     else:
         return self.local2alignLookup[i]