Exemplo n.º 1
0
Arquivo: default.py Projeto: rhr/tred
def printer_prune_taxa():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
        t = tlist.trees[i]
    except:
        session.flash = "no tree '%s'" % i
        redirect("index")
    v = request.vars.nodeselect
    if v:
        nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        ## for n in nodes:
        while nodes:
            n = nodes[0]
            if n.parent:
                p = n.parent
                p.children.remove(n)
                if p.parent and len(p.children) == 1:
                    gp = p.parent
                    c = p.children[0]
                    if p.length:
                        c.length += p.length
                    c.parent = gp
                    gp.children.insert(gp.children.index(p), c)
                    gp.children.remove(p)
            nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        t.newick = newick.tostring(t.root) + ";"
        t.count_nodes()
    redirect(URL(r=request, f="printer", vars=dict(i=i)))
Exemplo n.º 2
0
def printer_prune_taxa():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
        t = tlist.trees[i]
    except:
        session.flash = "no tree '%s'" % i
        redirect("index")
    v = request.vars.nodeselect
    if v:
        nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        ## for n in nodes:
        while nodes:
            n = nodes[0]
            if n.parent:
                p = n.parent
                p.children.remove(n)
                if p.parent and len(p.children) == 1:
                    gp = p.parent
                    c = p.children[0]
                    if p.length:
                        c.length += p.length
                    c.parent = gp
                    gp.children.insert(gp.children.index(p), c)
                    gp.children.remove(p)
            nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        t.newick = newick.tostring(t.root) + ";"
        t.count_nodes()
    redirect(URL(r=request, f="printer", vars=dict(i=i)))
Exemplo n.º 3
0
 def parse(self, s=None):
     if s:
         self.newick = s
     self.root = newick.parse(self.newick)
     scaled = True
     for i, n in enumerate(self.root.iternodes(phylo.POSTORDER)):
         n.number = i
         if (not n.istip) and (not n.label):
             n.label = "N%s" % n.number
         n.age = None
         if n.parent and (n.length is None):
             scaled = False
     self.newick = newick.tostring(self.root)+";"
     self.scaled = scaled
Exemplo n.º 4
0
def printer_reroot():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
        t = tlist.trees[i]
    except:
        session.flash = "no tree '%s'" % i
        redirect("index")
    v = request.vars.nodeselect
    if v:
        nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        newroot = t.root.mrca([n.label for n in nodes])
        if newroot:
            newroot = phylo.reroot(t.root, newroot)
            t.newick = newick.tostring(newroot) + ";"
            t.parse()
    redirect(URL(r=request, f="printer", vars=dict(i=i)))
Exemplo n.º 5
0
Arquivo: default.py Projeto: rhr/tred
def printer_reroot():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
        t = tlist.trees[i]
    except:
        session.flash = "no tree '%s'" % i
        redirect("index")
    v = request.vars.nodeselect
    if v:
        nodes = [n for n in t.root.iternodes() if str(n.id) in v]
        newroot = t.root.mrca([n.label for n in nodes])
        if newroot:
            newroot = phylo.reroot(t.root, newroot)
            t.newick = newick.tostring(newroot) + ";"
            t.parse()
    redirect(URL(r=request, f="printer", vars=dict(i=i)))
Exemplo n.º 6
0
def printer():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
    except TypeError:
        redirect("index")
    try:
        t = tlist.trees[i]
    except IndexError:
        session.flash = "no tree '%s'" % i
        redirect("index")

    if request.vars.ladderize:
        t.root.order_subtrees_by_size(recurse=True,
                                      reverse=bool(request.vars.rev))
        t.newick = newick.tostring(t.root) + ";"

    fname = "tred-" + response.session_id
    opts = t.printopts
    v = request.vars

    if v.parsevars:
        t.labelfilter = v.labelfilter or ""
        t.labeltype = v.labeltype or t.labeltype
        t.labelsort = v.labelsort or t.labelsort

        opts.title = v.title or opts.title or "%s-%s" % (t.source, t.name)
        opts.pagesize = v.pagesize or opts.pagesize or "letter"
        #print opts.pagesize
        opts.draw_phylogram = v.draw_phylogram and t.phylogram
        opts.baseheight = float(v.baseheight or 0) or opts.baseheight
        opts.unitwidth = float(v.unitwidth or 0) or opts.unitwidth
        opts.border = float(v.border or 0) or opts.border
        opts.vpad = float(v.vpad or 1.1)
        if v.draw_intlabels and "intlabel" not in opts.visible:
            opts.visible.append("intlabel")
        if (not v.draw_intlabels) and "intlabel" in opts.visible:
            opts.visible.remove("intlabel")

    node, mapping = drawtree.traverse(t.root, opts)
    thicken_branches(node)

    node.set_attr("vpad", opts.vpad, 1)
    d = drawtree.draw(node, opts)
    t.drawing = d
    buf = StringIO()
    npages, scalefact = drawtree.render_multipage(d, opts, buf)
    f = open("/tmp/%s.pdf" % fname, "w")
    f.write(buf.getvalue())
    f.close()
    # use graphicsmagick convert (page numbers *.png.0, *.png.1, ...)
    commands.getoutput("rm /tmp/%s*.png*" % fname)
    cmd = "convert /tmp/%s.pdf /tmp/%s.png" % (fname, fname)
    exit, out = commands.getstatusoutput(cmd)
    # pngs = glob.glob("/tmp/%s*.png*" % fname)
    if npages > 1:
        pngs = ['%s.png.%s' % (fname, i) for i in range(npages)]
    else:
        pngs = ['%s.png' % fname]
    if scalefact < 1.0:
        response.flash = "To fit the page width, "\
                         "the drawing has been scaled by %0.2f" % scalefact
    return dict(tree=t, pngs=pngs)
Exemplo n.º 7
0
Arquivo: default.py Projeto: rhr/tred
def printer():
    tlist = get_treelist()
    try:
        i = int(request.vars.i)
    except TypeError:
        redirect("index")
    try:
        t = tlist.trees[i]
    except IndexError:
        session.flash = "no tree '%s'" % i
        redirect("index")

    if request.vars.ladderize:
        t.root.order_subtrees_by_size(recurse=True, reverse=bool(request.vars.rev))
        t.newick = newick.tostring(t.root) + ";"

    fname = "tred-" + response.session_id
    opts = t.printopts
    v = request.vars

    if v.parsevars:
        t.labelfilter = v.labelfilter or ""
        t.labeltype = v.labeltype or t.labeltype
        t.labelsort = v.labelsort or t.labelsort

        opts.title = v.title or opts.title or "%s-%s" % (t.source, t.name)
        opts.pagesize = v.pagesize or opts.pagesize or "letter"
        # print opts.pagesize
        opts.draw_phylogram = v.draw_phylogram and t.phylogram
        opts.baseheight = float(v.baseheight or 0) or opts.baseheight
        opts.unitwidth = float(v.unitwidth or 0) or opts.unitwidth
        opts.border = float(v.border or 0) or opts.border
        opts.vpad = float(v.vpad or 1.1)
        if v.draw_intlabels and "intlabel" not in opts.visible:
            opts.visible.append("intlabel")
        if (not v.draw_intlabels) and "intlabel" in opts.visible:
            opts.visible.remove("intlabel")

    node, mapping = drawtree.traverse(t.root, opts)
    thicken_branches(node)

    node.set_attr("vpad", opts.vpad, 1)
    d = drawtree.draw(node, opts)
    t.drawing = d
    buf = StringIO()
    npages, scalefact = drawtree.render_multipage(d, opts, buf)
    f = open("/tmp/%s.pdf" % fname, "w")
    f.write(buf.getvalue())
    f.close()
    # use graphicsmagick convert (page numbers *.png.0, *.png.1, ...)
    commands.getoutput("rm /tmp/%s*.png*" % fname)
    cmd = "convert /tmp/%s.pdf /tmp/%s.png" % (fname, fname)
    exit, out = commands.getstatusoutput(cmd)
    # pngs = glob.glob("/tmp/%s*.png*" % fname)
    if npages > 1:
        pngs = ["%s.png.%s" % (fname, i) for i in range(npages)]
    else:
        pngs = ["%s.png" % fname]
    if scalefact < 1.0:
        response.flash = "To fit the page width, " "the drawing has been scaled by %0.2f" % scalefact
    return dict(tree=t, pngs=pngs)