示例#1
0
    def test_birthDeathPrior_large(self):
        """test birth death prior for large trees"""

        l = 0.000732
        u = 0.000859
        maxdoom = 20

        stree = treelib.read_tree("test/data/fungi.stree")
        gene2species = phylo.read_gene2species("test/data/fungi.smap")
        tree = treelib.read_tree("test/data/fungi/10169/10169.tree")
        recon = phylo.reconcile(tree, stree, gene2species)

        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print p
        self.assert_(p != -INF)
示例#2
0
    def test_birthDeathPrior_large(self):
        """test birth death prior for large trees"""
        
        l = 0.000732 
        u = 0.000859
        maxdoom = 20
        
        stree = treelib.read_tree("test/data/fungi.stree")
        gene2species = phylo.read_gene2species("test/data/fungi.smap")
        tree = treelib.read_tree("test/data/fungi/10169/10169.tree")
        recon = phylo.reconcile(tree, stree, gene2species)

        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print p
        self.assert_(p != -INF)
示例#3
0
    def test_birthDeathPriorFull(self):
        """test birth death prior with implied speciation nodes"""
        
        l = 2
        u = .5
        maxdoom = 10

        def gene2species(gene):
            return gene[:1].upper()

        stree = treelib.parse_newick("((A:1,B:1):1,((C:1,D:1):2,E:3):1);")
        tree = treelib.parse_newick("((((a1,a2),(a3,a4)),(b1,b2)),((c1,d1),(c2,c3)));")
        
        # test gene reconciling within species tree
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)
示例#4
0
    def test_birthDeathPriorFull(self):
        """test birth death prior with implied speciation nodes"""

        l = 2
        u = .5
        maxdoom = 10

        def gene2species(gene):
            return gene[:1].upper()

        stree = treelib.parse_newick("((A:1,B:1):1,((C:1,D:1):2,E:3):1);")
        tree = treelib.parse_newick(
            "((((a1,a2),(a3,a4)),(b1,b2)),((c1,d1),(c2,c3)));")

        # test gene reconciling within species tree
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)
示例#5
0
    def test_birthDeathPrior(self):
        """test birth death prior (simple)"""

        l = 2
        u = .5
        maxdoom = 10

        def gene2species(gene):
            return gene[:1].upper()

        stree = treelib.parse_newick("((A:1,B:1):1,((C:1,D:1):2,E:3):1);")

        tree = treelib.parse_newick(
            "((((a1,a2),(a3,a4)),(b1,b2)),(((c1,d1),(c2,d2)),e1));")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test gene reconciling within species tree
        tree = treelib.parse_newick(
            "((((a1,a2),(a3,a4)),(b1,b2)),((c1,d1),(c2,c3)));")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test gene reconciling within species tree
        tree = treelib.parseNewick("((a1,b1),c1);")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, l, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, l, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test case that occurred during simulation
        # non parsimonious reconciliation
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick("((a1,a2));")
        recon = {
            tree.nodes["a1"]: stree.nodes["A"],
            tree.nodes["a2"]: stree.nodes["A"],
            tree.nodes["a1"].parent: stree.nodes["A"].parent,
            tree.root: stree.root
        }
        events = {
            tree.nodes["a1"]: "gene",
            tree.nodes["a2"]: "gene",
            tree.nodes["a1"].parent: "dup",
            tree.root: "spec"
        }
        p = c_calcBirthDeathPrior(tree,
                                  stree,
                                  recon,
                                  l,
                                  u,
                                  maxdoom,
                                  events=events)
        p2 = calcBirthDeathPrior(tree,
                                 stree,
                                 recon,
                                 l,
                                 u,
                                 maxdoom,
                                 events=events)
        tree.write_newick(oneline=True)
        print "\nprior", p, p2
        fequal(p, p2)

        # complicated case
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick(
            "((((B2:1.072961,B8:1.072961):0.106756,((((A1:0.427377,(((A3:0.150067,A11:0.150067):0.038521,A2:0.188588):0.121082,A5:0.309671):0.117706):0.352590,A9:0.779967):0.113269,(A8:0.266488,A7:0.266488):0.626747):0.236597,(((B9:0.160640,B7:0.160640):0.098506,B4:0.259146):0.429865,B5:0.689011):0.440822):0.049885):0.714463,(B13:1.086980,((A10:1.000000,((B10:0.408524,(((B3:0.143778,B1:0.143778):0.023788,B6:0.167566):0.058639,B12:0.226204):0.182319):0.232105,B11:0.640629):0.359371):0.082149,(A6:0.277757,A4:0.277757):0.804392):0.004830):0.807201):0.105819,(C3:1.213803,(((C6:0.190132,C4:0.190132):0.011461,C5:0.201593):0.745740,(C1:0.017299,C2:0.017299):0.930034):0.266470):0.786197);"
        )
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        stree = treelib.parse_newick(
            "(((A:1,B:1):1,(C:1.5,D:1.5):0.5):.5,((E:.2,F:.2):.6):1.9);")
        tree = treelib.parse_newick(
            "(((A1:1.000000,B1:1.000000):1.000000,(((C2:0.718949,C1:0.718949):0.168784,C3:0.887733):0.612267,D1:1.500000):0.500000):0.500000,((F8:0.122975,F5:0.122975):6.518970,(((E4:0.200000,F6:0.200000):5.257236,((E3:0.200000,F7:0.200000):4.029009,(E2:0.200000,F1:0.200000):4.029009):1.228227):0.306982,(((E5:0.200000,F3:0.200000):1.068443,(E6:0.200000,F2:0.200000):1.068443):1.094596,(E1:0.200000,F4:0.200000):2.163039):3.401179):0.877727):1.458055);"
        )

        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test for overflow
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick(
            "((((C24:0.940136,C6:0.940136):0.140529,((((C37:0.374306,(C26:0.054540,C10:0.054540):0.319766):0.046428,(C15:0.009875,C29:0.009875):0.410860):0.112550,(C3:0.213709,C28:0.213709):0.319576):0.034152,C13:0.567437):0.513228):0.545124,((((C36:0.036428,C30:0.036428):1.402769,(((C33:0.038848,C19:0.038848):0.352795,(C9:0.282410,(C1:0.000411,C21:0.000411):0.281998):0.109233):0.452052,((C34:0.108366,C12:0.108366):0.332454,C35:0.440820):0.402875):0.595502):0.039525,((((((C40:0.082790,C23:0.082790):0.003327,(C11:0.021474,C14:0.021474):0.064643):0.031631,C31:0.117748):0.019433,C17:0.137181):0.619636,C39:0.756818):0.139581,(C4:0.160113,(C41:0.116482,C32:0.116482):0.043631):0.736286):0.582323):0.000255,(C5:0.389128,((C25:0.112569,C27:0.112569):0.127253,(C22:0.139232,C18:0.139232):0.100590):0.149306):1.089849):0.146811):0.299534,(C2:1.197153,(C7:0.690311,(C16:0.070431,((C20:0.000466,C8:0.000466):0.060700,C38:0.061165):0.009265):0.619881):0.506842):0.728170);"
        )
        print "leaves", len(tree.leaves())
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)
示例#6
0
    def test_birthDeathPrior(self):
        """test birth death prior (simple)"""
        
        l = 2
        u = .5
        maxdoom = 10

        def gene2species(gene):
            return gene[:1].upper()


        
        stree = treelib.parse_newick("((A:1,B:1):1,((C:1,D:1):2,E:3):1);")
        
        tree = treelib.parse_newick("((((a1,a2),(a3,a4)),(b1,b2)),(((c1,d1),(c2,d2)),e1));")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test gene reconciling within species tree
        tree = treelib.parse_newick("((((a1,a2),(a3,a4)),(b1,b2)),((c1,d1),(c2,c3)));")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        # test gene reconciling within species tree
        tree = treelib.parseNewick("((a1,b1),c1);")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, l, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, l, maxdoom)
        print "prior", p, p2
        fequal(p, p2)


        # test case that occurred during simulation
        # non parsimonious reconciliation
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick("((a1,a2));")
        recon = {tree.nodes["a1"]: stree.nodes["A"],
                 tree.nodes["a2"]: stree.nodes["A"],
                 tree.nodes["a1"].parent: stree.nodes["A"].parent,
                 tree.root: stree.root}
        events = {tree.nodes["a1"]: "gene",
                 tree.nodes["a2"]: "gene",
                 tree.nodes["a1"].parent: "dup",
                 tree.root: "spec"}
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom,
                                  events=events)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom,
                                 events=events)
        tree.write_newick(oneline=True)
        print "\nprior", p, p2
        fequal(p, p2)

        # complicated case
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick("((((B2:1.072961,B8:1.072961):0.106756,((((A1:0.427377,(((A3:0.150067,A11:0.150067):0.038521,A2:0.188588):0.121082,A5:0.309671):0.117706):0.352590,A9:0.779967):0.113269,(A8:0.266488,A7:0.266488):0.626747):0.236597,(((B9:0.160640,B7:0.160640):0.098506,B4:0.259146):0.429865,B5:0.689011):0.440822):0.049885):0.714463,(B13:1.086980,((A10:1.000000,((B10:0.408524,(((B3:0.143778,B1:0.143778):0.023788,B6:0.167566):0.058639,B12:0.226204):0.182319):0.232105,B11:0.640629):0.359371):0.082149,(A6:0.277757,A4:0.277757):0.804392):0.004830):0.807201):0.105819,(C3:1.213803,(((C6:0.190132,C4:0.190132):0.011461,C5:0.201593):0.745740,(C1:0.017299,C2:0.017299):0.930034):0.266470):0.786197);")
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)

        stree = treelib.parse_newick(
                "(((A:1,B:1):1,(C:1.5,D:1.5):0.5):.5,((E:.2,F:.2):.6):1.9);")
        tree = treelib.parse_newick("(((A1:1.000000,B1:1.000000):1.000000,(((C2:0.718949,C1:0.718949):0.168784,C3:0.887733):0.612267,D1:1.500000):0.500000):0.500000,((F8:0.122975,F5:0.122975):6.518970,(((E4:0.200000,F6:0.200000):5.257236,((E3:0.200000,F7:0.200000):4.029009,(E2:0.200000,F1:0.200000):4.029009):1.228227):0.306982,(((E5:0.200000,F3:0.200000):1.068443,(E6:0.200000,F2:0.200000):1.068443):1.094596,(E1:0.200000,F4:0.200000):2.163039):3.401179):0.877727):1.458055);")
        
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)


        # test for overflow
        stree = treelib.parse_newick("((A:1,B:1):1,C:2);")
        tree = treelib.parse_newick("((((C24:0.940136,C6:0.940136):0.140529,((((C37:0.374306,(C26:0.054540,C10:0.054540):0.319766):0.046428,(C15:0.009875,C29:0.009875):0.410860):0.112550,(C3:0.213709,C28:0.213709):0.319576):0.034152,C13:0.567437):0.513228):0.545124,((((C36:0.036428,C30:0.036428):1.402769,(((C33:0.038848,C19:0.038848):0.352795,(C9:0.282410,(C1:0.000411,C21:0.000411):0.281998):0.109233):0.452052,((C34:0.108366,C12:0.108366):0.332454,C35:0.440820):0.402875):0.595502):0.039525,((((((C40:0.082790,C23:0.082790):0.003327,(C11:0.021474,C14:0.021474):0.064643):0.031631,C31:0.117748):0.019433,C17:0.137181):0.619636,C39:0.756818):0.139581,(C4:0.160113,(C41:0.116482,C32:0.116482):0.043631):0.736286):0.582323):0.000255,(C5:0.389128,((C25:0.112569,C27:0.112569):0.127253,(C22:0.139232,C18:0.139232):0.100590):0.149306):1.089849):0.146811):0.299534,(C2:1.197153,(C7:0.690311,(C16:0.070431,((C20:0.000466,C8:0.000466):0.060700,C38:0.061165):0.009265):0.619881):0.506842):0.728170);")
        print "leaves", len(tree.leaves())
        recon = phylo.reconcile(tree, stree, gene2species)
        p = c_calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        p2 = calcBirthDeathPrior(tree, stree, recon, l, u, maxdoom)
        print "prior", p, p2
        fequal(p, p2)