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
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
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
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
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
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
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
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
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
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
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
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