def upload_newick():
    #n = "_".join(request.vars.name.strip().split())
    n = None
    age = request.vars.age.strip()
    if age:
        try:
            age = float(age)
        except:
            session.flash = "Age must be a number"
    s = request.vars.newick_string.strip()
    if s:
        r = None
        try:
            r = newick.parse(s)
        except:
            session.flash = "Problem with newick string"
        if r:
            m = current_model()
            m.treelist.append(s, name=n, age=age)
            t = m.treelist.trees[-1]
            t.parse()
            if not t.scaled:
                for n in t.root.iternodes():
                    if n.parent and (n.length is None):
                        n.length = 1
                t.calibrate()
                t.scaled = True
                t.newick = newick.tostring(t.root)+";"
                session.flash = "Branches without lengths assigned a value of 1"
            if not t.is_ultrametric():
                session.flash = "Tree is not ultrametric"
    redirect(URL(r=request, f=request.vars.f or "index"))
def upload_newick():
    #n = "_".join(request.vars.name.strip().split())
    n = None
    age = request.vars.age.strip()
    if age:
        try:
            age = float(age)
        except:
            session.flash = "Age must be a number"
    s = request.vars.newick_string.strip()
    if s:
        r = None
        try:
            r = newick.parse(s)
        except:
            session.flash = "Problem with newick string"
        if r:
            m = current_model()
            m.treelist.append(s, name=n, age=age)
            t = m.treelist.trees[-1]
            t.parse()
            if not t.scaled:
                for n in t.root.iternodes():
                    if n.parent and (n.length is None):
                        n.length = 1
                t.calibrate()
                t.scaled = True
                t.newick = newick.tostring(t.root) + ";"
                session.flash = "Branches without lengths assigned a value of 1"
            if not t.is_ultrametric():
                session.flash = "Tree is not ultrametric"
    redirect(URL(r=request, f=request.vars.f or "index"))
 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
     if scaled:
         for i, n in enumerate(self.root.iternodes(phylo.POSTORDER)):
             if n.length == 0:
                 n.length = 1e-05
     self.newick = newick.tostring(self.root) + ";"
     self.scaled = scaled
 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
     if scaled:
         for i, n in enumerate(self.root.iternodes(phylo.POSTORDER)):
             if n.length == 0:
                 n.length = 1e-05
     self.newick = newick.tostring(self.root)+";"
     self.scaled = scaled