コード例 #1
0
def spr_test(tree, traits):
    #node_opt.bm_brlen_optim(tree,traits,"bfgs")
    node_opt.update_all_brlens(tree, traits)
    for i in tree.iternodes():
        if i.length < 0.001:
            i.length = 0.1
    print tree.get_newick_repr(True)
    cur_best = calc_bm_likelihood.bm_prune(tree, traits)
    #rearrange.random_spr(tree)
    #cur_best = calc_bm_likelihood.bm_prune(tree,traits)
    #rearrange.random_spr(tree)
    for i in range(0, 20):
        print i
        print tree.nnodes("tips")
        last_tree = tree.get_newick_repr(True) + ";"
        rearrange.random_spr(tree)
        #print tree.get_newick_repr(True)
        cur_like = calc_bm_likelihood.bm_prune(tree, traits)
        print cur_like
        if cur_like < cur_best:
            print "reverting to previous tree"
            tree = tree_reader2.read_tree_string(last_tree)
        elif cur_like > cur_best:
            cur_best = cur_like
    return cur_best
コード例 #2
0
def calc_like_brlens(l, tree, ntraits, sigsq=1.):
    bad = tree.update_brlens_all(l)
    #bad = tree_utils2.assign_brlens(l,tree)
    if bad:
        return LARGE
    try:
        ll = -calc_bm_likelihood.bm_prune(tree, ntraits, sigsq)
    except:
        return LARGE
    return ll
コード例 #3
0
def calc_like_sigsq(sigsq, tree, traits):
    if sigsq < 0:
        return LARGE
    #tree_utils2.assign_sigsq(tree,sigsq)
    try:
        val = -calc_bm_likelihood.bm_prune(tree, traits, sigsq)
    except:
        return LARGE
    #print ht,val
    return val
コード例 #4
0
def calc_like_single_conditional_brlen(bl, node, tree, ntraits, sigsq=1.):
    #if bl[0] < 0.00001:
    #    return LARGE
    bad = node.update_child_brlens(bl)
    if bad:
        return LARGE
    try:
        ll = -calc_bm_likelihood.bm_prune(tree, ntraits, sigsq)
    except:
        return LARGE
    return ll
コード例 #5
0
def calc_like_brlens(l, tree, traits):
    for i in l:
        if i < 0:
            return LARGE
        bad = tree_utils.assign_brlens(l, tree)
        if bad:
            return LARGE
        try:
            ll = -calc_bm_likelihood.bm_prune(tree, traits)
        except:
            return LARGE
        return ll
コード例 #6
0
def calc_like_sigsq_brlens(l, tree, ntraits):
    bad = tree.update_brlens_all(l[1:])
    #bad = tree_utils2.assign_brlens(l,tree)
    if bad:
        return LARGE
    elif l[0] < 0:
        return LARGE
    try:
        ll = -calc_bm_likelihood.bm_prune(tree, ntraits, l[0])
    except:
        return LARGE
    return ll
コード例 #7
0
def calc_like_nodes(ht, tree, traits):
    for i in ht:
        if i < 0:
            return LARGE
    bad = tree_utils.assign_node_heights(ht, tree)
    #print [i.height for i in tree.iternodes()]
    if bad:
        return LARGE
    try:
        ll = -calc_bm_likelihood.bm_prune(tree, traits)
    except:
        return LARGE
    #print ht[0]
    #print (val,ht)
    return ll
コード例 #8
0
def nni_test(tree, traits):
    node_opt.bm_brlen_optim(tree, traits, "bfgs")
    #node_opt.update_all_brlens(tree,traits)
    #tree.get_newick_repr(True)

    for i in tree.iternodes(True):
        if i.length < 0:
            print i, i.get_newick_repr(True)

    cur_best = calc_bm_likelihood.bm_prune(tree, traits)

    for i in range(0, 10):
        last_tree = tree.get_newick_repr(True) + ";"
        rearrange.random_nni(tree)
        #rearrange.random_nni_optim(tree,traits)
        for node in tree.iternodes():
            if node.length < 0:
                print node.length, node.get_newick_repr(True)
        cur_like = calc_bm_likelihood.bm_prune(tree, traits)
        if cur_like < cur_best:
            tree = tree_reader2.read_tree_string(last_tree)
        elif cur_like > cur_best:
            cur_best = cur_like
    return cur_best
コード例 #9
0
def calc_like_nodes(ht, tree, traits):
    for i in ht:
        if i < 0:
            return LARGE
    z = 0
    while z < nrates:
        if ht[z] > 500:
            return LARGE
        z += 1
    bad = assign_node_heights(ht, tree)
    if bad:
        return LARGE
    try:
        val = -bm_like.bm_prune(tree, traits)
    except:
        return LARGE
    #print ht[0]
    #print (val,ht)
    return val
コード例 #10
0
def place_fossils(tree, traits, fossil_names, ntraits):
    for fossil in fossil_names:
        new = node2.Node()
        new.label = fossil
        new.length = 0.01
        new.cont_traits = traits[new.label]
        new.istip = True
        newpar = node2.Node()
        newpar.length = 0.01
        newpar.add_child(new)
        newpar.cont_traits = np.zeros(ntraits, dtype=np.double)
        nodels = [node for node in tree.iternodes() if node != tree]
        curbest = -10000000.
        for node in nodels:
            curlike = 0.
            node.parent.add_child(newpar)
            node.parent.remove_child(node)
            newpar.add_child(node)
            newpar.length = node.length / 2
            node.length = newpar.length

            #estimate brlens for placement and calculate the loglike
            calc_bm_likelihood.iterate_lengths(tree, ntraits, 2)
            #for n in tree.children:
            rr = tree.root_tree()
            tree = rr[0]
            curlike = calc_bm_likelihood.bm_prune(tree, ntraits)
            tree = tree.unroot_tree(rr[1])
            print curlike, tree.get_newick_repr(True)
            if curlike > curbest:
                curbest = curlike
                curtree = tree.get_newick_repr(True)

            #now restore the original tree and move to the next node
            newpar.parent.add_child(node)
            newpar.children.remove(node)
            newpar.parent.remove_child(newpar)
            node.length = node.length * 2
        print curtree
コード例 #11
0
def calc_like_sigsq_nodes(ht, tree, traits, nrates):
    for i in ht:
        if i < 0:
            return LARGE
    z = 0
    while z < nrates:
        if ht[z] > 500:
            return LARGE
        z += 1
    if nrates == 1:
        tree_utils.assign_sigsq(tree, ht[0])
    elif nrates > 1:
        tree_utils.assign_sigsq(tree, ht[0:nrates])
    bad = assign_node_heights(ht[nrates:], tree)
    if bad:
        return LARGE
    try:
        val = -bm_like.bm_prune(tree, traits)
    except:
        return LARGE
    #print ht[0]
    #print (val,ht)
    return val
コード例 #12
0
def calc_like_strat_bm(p,
                       tree,
                       strat,
                       traits,
                       nrates=1):  #p[0] should be lambda, p[1:nrates] = sig2
    for i in p:
        if i < 0:
            return LARGE
    hstart = nrates + 1
    if nrates == 1:
        tree_utils.assign_sigsq(tree, [p[1]])
    elif nrates > 1:
        tree_utils.assign_sigsq(tree, p[1:nrates])
    bad = tree_utils.assign_node_heights(p[hstart:], tree)
    if bad:
        return LARGE
    try:
        sll = -stratoML.hr97_loglike(tree, p[0])
        bmll = -calc_bm_likelihood.bm_prune(tree, traits)
        ll = sll + bmll
    except:
        return LARGE
    return ll