def check_if_enriched(S,G,source, target,nCr_lookup_table,fact_lookup_table, accur,G_internal_colors,S_colors): reds_under_source = G_internal_colors[source.label][0] blacks_under_source = G_internal_colors[source.label][1] reds_under_target = G_internal_colors[target.label][0] blacks_under_target = G_internal_colors[target.label][1] total_source = reds_under_source + blacks_under_source total_target = reds_under_target + blacks_under_target total_red = S_colors[S.seed_node.label][0] total_black = S_colors[S.seed_node.label][1] num_of_leafs = tree_operations.number_of_leafs(S, 'S') Pr_red = total_red / num_of_leafs Pr_black = total_black / num_of_leafs #print('source: %s, target: %s, reds_under_source: %s, blacks_under_source: %s, reds_under_target: %s, blacks_under_target: %s' % (str(source),str(target),str(reds_under_source), str(blacks_under_source),str(reds_under_target),str(blacks_under_target))) p_value_source_red, nCr_lookup_table, fact_lookup_table = utiles.p_value_calculation(reds_under_source, total_source, nCr_lookup_table, fact_lookup_table, accur, Pr_red, Pr_black, source.label) p_value_source_black, nCr_lookup_table, fact_lookup_table = utiles.p_value_calculation(blacks_under_source, total_source, nCr_lookup_table, fact_lookup_table, accur, Pr_black, Pr_red, source.label) p_value_target_red, nCr_lookup_table, fact_lookup_table = utiles.p_value_calculation(reds_under_target, total_target, nCr_lookup_table, fact_lookup_table, accur, Pr_red, Pr_black, target.label) p_value_target_black, nCr_lookup_table, fact_lookup_table = utiles.p_value_calculation(blacks_under_target, total_target, nCr_lookup_table, fact_lookup_table, accur, Pr_black, Pr_red, target.label) #print(' p_value_source_red: %s\n p_value_target_red:%s' % ( #str(p_value_source_red), str(p_value_target_red))) #print(' p_value_source_black: %s\n p_value_target_black:%s' % ( #str(p_value_source_black), str(p_value_target_black))) if p_value_source_red < p and p_value_target_red < p: return nCr_lookup_table,fact_lookup_table,'red-to-red' if p_value_source_black < p and p_value_target_black < p: return nCr_lookup_table,fact_lookup_table,'black-to-black' else: return nCr_lookup_table,fact_lookup_table,'nothing-to-nothing'
def create_tree_for_color_noise(parameters): print('Creating noise in colors') noise = parameters[0] G_internal_colors = parameters[2] S_colors = parameters[3] number_of_leaves = parameters[6] number_of_random_changes = number_of_leaves * (noise / 100) random_for_prec = random_for_precentage for rand_num in range(0, random_for_prec): input = open(path + '/0/sigma0.0' + '.txt', 'r') sigma = [] for line in input: sigma.append(eval(line)) sigma = sigma[0] input = open(path + '/0/colors0.0' + '.txt', 'r') colors = [] for line in input: colors.append(eval(line)) colors = colors[0] S = tr.Tree.get_from_path(path + "/phyliptree(binary,all).phy", schema="newick") G = tr.Tree.get_from_path(path + "/GeneTree(binary)_local.txt", schema="newick") S = utiles.init_internal_labels(S, 'x', sigma, path) G = utiles.init_internal_labels(G, 'u', sigma, path) G = tree_operations.collapse_edges(G) S = tree_operations.collapse_edges(S) S_labels_table, G_labels_table,sigma = inits.init_taxon_to_label_table(S, G, sigma) sigma, old_sigma = inits.update_sigma(S, G, 0, sigma, False, path, True, S_labels_table, G_labels_table) colors, old_colors = inits.update_colors(S, colors, True) i = 0 while i < number_of_random_changes: G_internal_colors = tree_operations.color_tree(G, 'G', G_internal_colors, colors, sigma) S_colors = tree_operations.color_tree(S, 'S', S_colors, colors, sigma) number_of_nodes = tree_operations.number_of_leafs(G, 'G') random_vertex_to_change_color = randome_leave_from_tree(G, number_of_nodes, True) colors = change_color_of_vertex(random_vertex_to_change_color, colors, None, sigma, True) i += 1 old_colors = return_color_to_taxon(S, colors) save_data(old_sigma, old_colors, {}, noise, rand_num,compare,path+'/color')
def choose_planted_vertex (S_dis_matrix,new_G,S,G,G_internal_colors,TH_edges_in_subtree,compare_subtrees,TH_compare_subtrees,sigma,k,both,TH_both,vertex_number,sol,accur,nCr_lookup_table,fact_lookup_table,all_random_sources,colors,S_colors,max_dis): total_red = S_colors[S.seed_node.label][0] total_black = S_colors[S.seed_node.label][1] num_of_leafs = tree_operations.number_of_leafs(S,'S') Pr_red = total_red / num_of_leafs Pr_black = total_black / num_of_leafs for u in list(reversed(list(nx.topological_sort(new_G)))): old_colors = colors.copy() old_internal_G_colors = G_internal_colors.copy() old_S = S old_S_colors = S_colors.copy() ##this is the random vertex outgoing_edges = new_G.out_edges([u], data=True) outgoing_edges = [e for e in outgoing_edges] u = new_G.nodes(data=True)[u] if len(outgoing_edges) == 2: if compare_subtrees: if u['edges_in_subtree'] > TH_edges_in_subtree and not check_if_vertex_was_chosen(vertex_number,sol,u['label']): print('\n***\nVertex ' + str(u) + ' was chosen to be marked.') if not both: number_of_HT = number_of_HT_needed(G,u, all_random_sources, TH_compare_subtrees, 'red') nCr_lookup_table, fact_lookup_table,ans = create_good_HT(G, S, nCr_lookup_table,fact_lookup_table,number_of_HT, u, u, Pr_red, Pr_black, 'red', max_dis,S_dis_matrix,new_G,G_internal_colors) if ans[0] == u['label']: return nCr_lookup_table,fact_lookup_table,ans,colors else: number_of_HT = number_of_HT_needed(G, u, all_random_sources, TH_compare_subtrees, 'black') nCr_lookup_table, fact_lookup_table, ans = create_good_HT(G, S, nCr_lookup_table, fact_lookup_table, number_of_HT, u, u, Pr_red, Pr_black, 'black', max_dis, S_dis_matrix, new_G, G_internal_colors) colors = old_colors G_internal_colors = old_internal_G_colors S = old_S S_colors = old_S_colors print('No vertex could be planted.') return nCr_lookup_table,fact_lookup_table,(False,False),colors
def create_tree_for_HT_and_colors_noise(parameters): print('Creating noise in HT and colors') noise = parameters[0] number_of_HT_under_planted = parameters[1] G_internal_colors = parameters[2] S_colors = parameters[3] nCr_lookup_table = parameters[4] fact_lookup_table = parameters[5] number_of_leaves = parameters[6] number_of_random_changes = number_of_leaves * (noise / 100) random_for_prec = random_for_precentage for rand_num in range(0, random_for_prec): input = open(path + '/0/sigma0.0' + '.txt', 'r') sigma = [] for line in input: sigma.append(eval(line)) sigma = sigma[0] input = open(path + '/0/colors0.0' + '.txt', 'r') colors = [] for line in input: colors.append(eval(line)) colors = colors[0] S = tr.Tree.get_from_path(path + "/phyliptree(binary,all).phy", schema="newick") G = tr.Tree.get_from_path(path + "/GeneTree(binary)_local.txt", schema="newick") S = utiles.init_internal_labels(S, 'x', sigma, path) G = utiles.init_internal_labels(G, 'u', sigma, path) G = tree_operations.collapse_edges(G) S = tree_operations.collapse_edges(S) S_labels_table, G_labels_table,sigma = inits.init_taxon_to_label_table(S, G, sigma) sigma, old_sigma = inits.update_sigma(S, G, 0, sigma, False, path, True, S_labels_table, G_labels_table) colors, old_colors = inits.update_colors(S, colors, True) i = 0 all_random_sources_red_to_red = [] all_random_sources_black_to_black = [] all_random_nutral = [] while i < number_of_random_changes: G_internal_colors = tree_operations.color_tree(G, 'G', G_internal_colors, colors, sigma) S_colors = tree_operations.color_tree(S, 'S', S_colors, colors, sigma) number_of_nodes = tree_operations.number_of_leafs(G, 'G') random_source = random_vertex_in_tree(number_of_nodes, G) random_target = random_vertex_in_tree(number_of_nodes, G) random_vertex_to_change_color = randome_leave_from_tree(G, number_of_nodes, True) sigma, old_sigma, changed = change_sigma(sigma, old_sigma, S, G, [(random_source.label, random_target.label)], number_of_HT_under_planted,S_labels_table,G_labels_table) colors = change_color_of_vertex(random_vertex_to_change_color, colors, None, sigma, True) nCr_lookup_table, fact_lookup_table, enriched = check_if_enriched(S,G,random_source, random_target, nCr_lookup_table, fact_lookup_table, accur, G_internal_colors,S_colors) if enriched == 'red-to-red': all_random_sources_red_to_red.append(random_source) elif enriched == 'black_to_balck': all_random_sources_black_to_black.append(random_source) else: all_random_nutral.append(random_source) i += changed old_colors = return_color_to_taxon(S, colors) save_data(old_sigma, old_colors, {}, noise, rand_num,compare,path+"/colors_and_HT")
S = utiles.init_internal_labels(S, 'x', sigma, path) G = utiles.init_internal_labels(G, 'u', sigma, path) G = tree_operations.collapse_edges(G) S = tree_operations.collapse_edges(S) S_labels_table, G_labels_table, sigma = inits.init_taxon_to_label_table(S, G, sigma) sigma, old_sigma = inits.update_sigma(sigma, True, S_labels_table, G_labels_table) G.prune_taxa_with_labels(tree_operations.remove_unsigma_genes(G, sigma, False)) colors, old_colors = inits.update_colors(S, colors, True) new_G = nx.DiGraph() new_G = tree_operations.copy_G(G,new_G) if draw_S: draw.draw_tree(S, 'S', old_sigma, colors, sigma,path,color,x_axis,y_axis,lables_flag) quit() if 'D' in p1[0]: draw_new_doup(marked_nodes, colors, sigma, new_G, G, old_sigma, 0, 0, path, True, False, ext, pattern_name, big_size, ['D'], True, 1,S_labels_table) else: draw_new_HT(marked_nodes, colors, sigma, new_G, G, old_sigma, 0, 0, path, True, False, ext, pattern_name, big_size, ['HT'], True, 1,S_labels_table) print('Number of leafs of S: '+str(tree_operations.number_of_leafs(S,'S'))) print('Number of leafs of G: '+str(tree_operations.number_of_leafs(G,'G')))