1 | """ |
---|
2 | Tests for `bx.align.score`. |
---|
3 | """ |
---|
4 | |
---|
5 | import bx.align.score |
---|
6 | import bx.align.maf |
---|
7 | import StringIO |
---|
8 | import unittest |
---|
9 | import sys |
---|
10 | |
---|
11 | from numpy import array, cumsum, allclose |
---|
12 | |
---|
13 | aligns = [ ( "CCACTAGTTTTTAAATAATCTACTATCAAATAAAAGATTTGTTAATAATAAATTTTAAATCATTAACACTT", |
---|
14 | "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGATTATTATTTAGCCATTAAGGACAAAT", |
---|
15 | -111 ), |
---|
16 | ( "CCACTAGTTTTTAAATAATCTAC-----AATAAAAGATTTGTTAATAAT---AAATTTTAAATCATTAA-----CACTT", |
---|
17 | "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGAT---TATTATTT-----AGCCATTAAGGACAAAT", |
---|
18 | -3626 ), |
---|
19 | ( "CCACTAGTTTTTGATTC", |
---|
20 | "CCATTTGGGTTC-----", |
---|
21 | -299 ), |
---|
22 | ( "CTTAGTTTTTGATCACC", |
---|
23 | "-----CTTGGGTTTACC", |
---|
24 | -299 ), |
---|
25 | ( "gggaattgaacaatgagaacacatggacacaggaaggggaacatcacacacc----------ggggcctgttgtggggtggggggaag", |
---|
26 | "ggaactagaacaagggagacacatacaaacaacaacaacaacaacacagcccttcccttcaaagagcttatagtctgatggaggagag", |
---|
27 | 1690 ) |
---|
28 | ] |
---|
29 | |
---|
30 | mafs = """##maf |
---|
31 | a score=2883.0 |
---|
32 | s hg17.chr1 6734 30 + 245522847 CTACCTCAGTGTGGAAGGTGGGCAGTTCTG |
---|
33 | s rheMac1.SCAFFOLD71394 9319 30 - 13789 CTACCTCAGTGTGGAAGGTGGGCAGTTCTG |
---|
34 | |
---|
35 | a score=8167.0 |
---|
36 | s hg17.chr1 41401 40 + 245522847 TGTGTGATTAATGCCTGAGACTGTGTGAAGTAAGAGATGG |
---|
37 | s panTro1.chr1 49673 40 + 229575298 TGCGTGATTAATGCCTGAGATTGTGTGAAGTAAAAGATGG |
---|
38 | s rheMac1.SCAFFOLD45837 26063 33 - 31516 TGTGTGATTAATGCCTGAGATTGTGTGAAGTAA------- |
---|
39 | """ |
---|
40 | |
---|
41 | nonsymm_scheme = bx.align.score.build_scoring_scheme ( """ A C G T |
---|
42 | 91 0 -31 -123 |
---|
43 | -114 100 -125 -31 |
---|
44 | -31 -125 100 -114 |
---|
45 | -123 -31 -114 91 """, 400, 30 ) |
---|
46 | |
---|
47 | aligns_for_nonsymm_scheme = [ ( "AAAACCCCGGGGTTTT", |
---|
48 | "ACGTACGTACGTACGT", |
---|
49 | -580 ) |
---|
50 | ] |
---|
51 | |
---|
52 | |
---|
53 | asymm_scheme = bx.align.score.build_scoring_scheme ( """ 01 02 A C G T |
---|
54 | 01 200 -200 -50 100 -50 100 |
---|
55 | 02 -200 200 100 -50 100 -50 """, |
---|
56 | 0, 0, gap1='\x00' ) |
---|
57 | |
---|
58 | aligns_for_asymm_scheme = [ ( "\x01\x01\x01\x01\x01\x01", |
---|
59 | "ACGT\x01\x02", |
---|
60 | 100 ) |
---|
61 | ] |
---|
62 | |
---|
63 | |
---|
64 | class BasicTests( unittest.TestCase ): |
---|
65 | |
---|
66 | def test_scoring_text( self ): |
---|
67 | ss = bx.align.score.hox70 |
---|
68 | for t1, t2, score in aligns: |
---|
69 | self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score ) |
---|
70 | |
---|
71 | def test_align( self ): |
---|
72 | ss = bx.align.score.hox70 |
---|
73 | for block in bx.align.maf.Reader( StringIO.StringIO( mafs ) ): |
---|
74 | self.assertEquals( bx.align.score.score_alignment( ss, block ), float( block.score ) ) |
---|
75 | |
---|
76 | def test_accumulate( self ): |
---|
77 | ss = bx.align.score.hox70 |
---|
78 | self.assert_( allclose( bx.align.score.accumulate_scores( ss, "-----CTTT", "CTTAGTTTA" ), |
---|
79 | cumsum( array( [ -430, -30, -30, -30, -30, -31, 91, 91, -123 ] ) ) ) ) |
---|
80 | self.assert_( allclose( bx.align.score.accumulate_scores( ss, "-----CTTT", "CTTAGTTTA", skip_ref_gaps=True ), |
---|
81 | cumsum( array( [ -581, 91, 91, -123 ] ) ) ) ) |
---|
82 | |
---|
83 | def test_nonsymm_scoring( self ): |
---|
84 | ss = nonsymm_scheme |
---|
85 | for t1, t2, score in aligns_for_nonsymm_scheme: |
---|
86 | self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score ) |
---|
87 | |
---|
88 | def test_asymm_scoring( self ): |
---|
89 | ss = asymm_scheme |
---|
90 | for t1, t2, score in aligns_for_asymm_scheme: |
---|
91 | self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score ) |
---|
92 | |
---|
93 | test_classes = [ BasicTests ] |
---|
94 | suite = unittest.TestSuite( [ unittest.makeSuite( c ) for c in test_classes ] ) |
---|