def run_method(method, tree, m = 300, kappa = 2, mutation_rate=0.05, threshold = None, verbose = False): start_time = time.time() observations, taxa_meta = generation.simulate_sequences(m, tree_model=tree, seq_model=generation.HKY(kappa = kappa), mutation_rate=mutation_rate, alphabet="DNA") runtime = time.time() - start_time print("Simulation took %s seconds" % runtime) if method == "RaXML": raxml_HKY = reconstruct_tree.RAxML() start_time = time.time() tree_rec = raxml_HKY(observations, taxa_meta, raxml_args="-T 2 --HKY85 -c 1") if method == "SNJ": snj = reconstruct_tree.SpectralNeighborJoining(reconstruct_tree.HKY_similarity_matrix) start_time = time.time() tree_rec = snj(observations, taxa_meta) if method == "NJ": nj = reconstruct_tree.NeighborJoining(reconstruct_tree.HKY_similarity_matrix) start_time = time.time() tree_rec = nj(observations, taxa_meta) if method == "STR+NJ": spectral_method = reconstruct_tree.STDR(reconstruct_tree.NeighborJoining, reconstruct_tree.HKY_similarity_matrix) start_time = time.time() tree_rec = spectral_method.deep_spectral_tree_reconstruction(observations, reconstruct_tree.HKY_similarity_matrix, taxa_metadata = taxa_meta, threshhold = threshold, min_split = 5, verbose = verbose) if method == "STR+SNJ": spectral_method = reconstruct_tree.STDR(reconstruct_tree.SpectralNeighborJoining, reconstruct_tree.HKY_similarity_matrix) start_time = time.time() tree_rec = spectral_method.deep_spectral_tree_reconstruction(observations, reconstruct_tree.HKY_similarity_matrix, taxa_metadata = taxa_meta, threshhold = threshold, min_split = 5, verbose = verbose) if method == "STR+RaXML": spectral_method = reconstruct_tree.STDR(reconstruct_tree.RAxML, reconstruct_tree.HKY_similarity_matrix) start_time = time.time() tree_rec = spectral_method.deep_spectral_tree_reconstruction(observations, reconstruct_tree.HKY_similarity_matrix, taxa_metadata = taxa_meta, threshhold = threshold, raxml_args = "-T 2 --HKY85 -c 1", min_split = 5, verbose = verbose) runtime = time.time() - start_time RF,F1 = reconstruct_tree.compare_trees(tree_rec, tree) print(method) if threshold is not None: print(threshold) print("--- %s seconds ---" % runtime) print("RF = ",RF) print("F1% = ",F1) return([method, str(threshold), runtime, RF, F1])
sys.path.append(os.path.join(sys.path[0], 'spectraltree')) #import spectraltree import utils import generation import reconstruct_tree import str from dendropy.model.discrete import simulate_discrete_chars, Jc69 from dendropy.calculate.treecompare import symmetric_difference import cProfile N = 300 num_taxa = 512 threshold = 32 # jc = generation.Jukes_Cantor() hky = generation.HKY(kappa=2) mutation_rate = 0.05 # mutation_rate = [jc.p2t(0.95)] np.random.seed(0) # reference_tree = utils.unrooted_birth_death_tree(num_taxa, birth_rate=1) # reference_tree = utils.lopsided_tree(num_taxa) reference_tree = utils.balanced_binary(num_taxa) # for x in reference_tree.preorder_edge_iter(): # x.length = 1 np.random.seed(0) t0 = time.time() observations, meta = generation.simulate_sequences(N, tree_model=reference_tree, seq_model=hky, mutation_rate=mutation_rate, rng=np.random,