[3] | 1 | import unittest |
---|
| 2 | import sys |
---|
| 3 | import bx.pwm.position_weight_matrix as pwm |
---|
| 4 | from StringIO import StringIO |
---|
| 5 | |
---|
| 6 | basicPwm = \ |
---|
| 7 | """>MA0101 c-REL REL |
---|
| 8 | 0 5 8 4 |
---|
| 9 | 0 1 15 1 |
---|
| 10 | 1 0 15 1 |
---|
| 11 | 5 1 9 2 |
---|
| 12 | 6 5 3 3 |
---|
| 13 | 5 1 1 10 |
---|
| 14 | 1 0 0 16 |
---|
| 15 | 2 0 0 15 |
---|
| 16 | 0 15 0 2 |
---|
| 17 | 1 16 0 0 |
---|
| 18 | """ |
---|
| 19 | |
---|
| 20 | transfacPwm = \ |
---|
| 21 | """ID TATA |
---|
| 22 | XX |
---|
| 23 | P0 A C G T |
---|
| 24 | 01 33 73 78 16 S |
---|
| 25 | 02 10 24 11 155 T |
---|
| 26 | 03 176 3 2 19 A |
---|
| 27 | 04 2 7 3 188 T |
---|
| 28 | 05 178 2 3 17 A |
---|
| 29 | 06 133 2 2 63 A |
---|
| 30 | 07 183 3 10 4 A |
---|
| 31 | 08 112 2 24 62 W |
---|
| 32 | 09 78 26 80 16 R |
---|
| 33 | 10 29 72 75 24 N |
---|
| 34 | 11 42 74 68 16 N |
---|
| 35 | 12 42 65 66 27 N |
---|
| 36 | 13 41 60 67 32 N |
---|
| 37 | 14 35 54 72 39 N |
---|
| 38 | 15 40 51 73 36 N |
---|
| 39 | XX |
---|
| 40 | """ |
---|
| 41 | |
---|
| 42 | background = { 'A':.28,'C':.21, 'G':.24, 'T':.27 } |
---|
| 43 | |
---|
| 44 | dSeq = "ACCGAGTTAGCGTAAA" |
---|
| 45 | dScoresExpected = "-15.3697 0.4240 -16.5309 0.4027" |
---|
| 46 | |
---|
| 47 | qSeq = [{'A':0.27,'C':0.34,'G':0.07,'T':0.32}, |
---|
| 48 | {'A':0.24,'C':0.32,'G':0.09,'T':0.35}, |
---|
| 49 | {'A':0.80,'C':0.11,'G':0.03,'T':0.06}, |
---|
| 50 | {'A':0.07,'C':0.22,'G':0.37,'T':0.34}, |
---|
| 51 | {'A':0.07,'C':0.44,'G':0.03,'T':0.46}, |
---|
| 52 | {'A':0.43,'C':0.04,'G':0.18,'T':0.35}, |
---|
| 53 | {'A':0.84,'C':0.14,'G':0.01,'T':0.01}, |
---|
| 54 | {'A':0.31,'C':0.52,'G':0.13,'T':0.04}, |
---|
| 55 | {'A':0.22,'C':0.22,'G':0.45,'T':0.11}, |
---|
| 56 | {'A':0.36,'C':0.15,'G':0.42,'T':0.07}, |
---|
| 57 | {'A':0.11,'C':0.78,'G':0.07,'T':0.04}, |
---|
| 58 | {'A':0.07,'C':0.16,'G':0.64,'T':0.13}, |
---|
| 59 | {'A':0.34,'C':0.59,'G':0.03,'T':0.04}, |
---|
| 60 | {'A':0.32,'C':0.15,'G':0.07,'T':0.46}, |
---|
| 61 | {'A':0.07,'C':0.03,'G':0.59,'T':0.31}] |
---|
| 62 | |
---|
| 63 | qScoresExpected = "4.1106 0.7810" |
---|
| 64 | |
---|
| 65 | class PWMTestCase (unittest.TestCase): |
---|
| 66 | |
---|
| 67 | def testReader(self): |
---|
| 68 | |
---|
| 69 | # test basic format: i.e. for jaspar |
---|
| 70 | wms = [wm for wm in pwm.Reader(StringIO(basicPwm),format="basic", \ |
---|
| 71 | background=background,score_correction=False)] |
---|
| 72 | assert len(wms) == 1 |
---|
| 73 | |
---|
| 74 | # test transfac format |
---|
| 75 | wms = [wm for wm in pwm.Reader(StringIO(transfacPwm),format="transfac", \ |
---|
| 76 | background=background,score_correction=False)] |
---|
| 77 | assert len(wms) == 1 |
---|
| 78 | |
---|
| 79 | wm = wms[0] |
---|
| 80 | dScores = wm.score_seq(dSeq) |
---|
| 81 | assert len(dScores) == 2 |
---|
| 82 | assert "%.4f %.4f %.4f %.4f" % (dScores[0][0],dScores[0][1],dScores[1][0],dScores[1][1]) == dScoresExpected |
---|
| 83 | |
---|
| 84 | qdSeq = [] |
---|
| 85 | for (ix,nt) in enumerate(dSeq): |
---|
| 86 | qdSeq.append(dict()) |
---|
| 87 | qdSeq[ix][nt] = 1.0 |
---|
| 88 | qScores = wm.score_seq(qdSeq) |
---|
| 89 | assert len(qScores) == 2 |
---|
| 90 | assert "%.4f %.4f %.4f %.4f" % (qScores[0][0],qScores[0][1],qScores[1][0],qScores[1][1]) == dScoresExpected |
---|
| 91 | |
---|
| 92 | qScores = wm.score_seq(qSeq) |
---|
| 93 | assert len(qScores) == 1 |
---|
| 94 | assert "%.4f %.4f" % (qScores[0][0],qScores[0][1]) == qScoresExpected |
---|
| 95 | |
---|
| 96 | test_classes = [PWMTestCase] |
---|
| 97 | suite = unittest.TestSuite ([unittest.makeSuite (c) for c in test_classes]) |
---|