Пример #1
0
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'
Пример #2
0
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')
Пример #3
0
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
Пример #4
0
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")
Пример #5
0
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')))