Mercurial > repos > yufei-luo > s_mart
comparison SMART/Java/Python/test/Test_FindOverlapsOptim.py @ 18:94ab73e8a190
Uploaded
| author | m-zytnicki |
|---|---|
| date | Mon, 29 Apr 2013 03:20:15 -0400 (2013-04-29) |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 17:b0e8584489e6 | 18:94ab73e8a190 |
|---|---|
| 1 import unittest | |
| 2 import os | |
| 3 from SMART.Java.Python.FindOverlapsOptim import FindOverlapsOptim | |
| 4 from SMART.Java.Python.ncList.NCListCursor import NCListCursor | |
| 5 from SMART.Java.Python.ncList.test.MockFindOverlapsWithSeveralIntervals import * | |
| 6 | |
| 7 REFERENCE = 0 | |
| 8 QUERY = 1 | |
| 9 | |
| 10 class Test_FindOverlapsOptim(unittest.TestCase): | |
| 11 | |
| 12 def setUp(self): | |
| 13 self._inputRefGff3FileName = 'sorted_Ref.gff3' | |
| 14 self._inputQueryGff3FileName = 'sorted_Query.gff3' | |
| 15 self._writeQueryGff3File(self._inputQueryGff3FileName) | |
| 16 self._outputGff3FileName = 'overlaps.gff3' | |
| 17 iMock = MockFindOverlapsWithServeralIntervals_case1() | |
| 18 iMock.write(self._inputRefGff3FileName) | |
| 19 self._iFOO = FindOverlapsOptim(0) | |
| 20 self._iFOO.setRefFileName(self._inputRefGff3FileName, "gff3") | |
| 21 self._iFOO.setQueryFileName(self._inputQueryGff3FileName, "gff3") | |
| 22 self._iFOO.setOutputFileName(self._outputGff3FileName) | |
| 23 self._iFOO.prepareIntermediateFiles() | |
| 24 self._iFOO.createNCLists() | |
| 25 self._queryNcList = self._iFOO._ncLists[QUERY]["chr1"] | |
| 26 self._refNcList = self._iFOO._ncLists[REFERENCE]["chr1"] | |
| 27 | |
| 28 def tearDown(self): | |
| 29 os.remove(self._inputRefGff3FileName) | |
| 30 os.remove(self._inputQueryGff3FileName) | |
| 31 os.remove(self._outputGff3FileName) | |
| 32 | |
| 33 def test_isOverlapping_true(self): | |
| 34 queryCursor = NCListCursor(None, self._queryNcList, 5, 0) | |
| 35 refCursor = NCListCursor(None, self._refNcList, 4, 0) | |
| 36 obs = self._iFOO.isOverlapping(queryCursor, refCursor) | |
| 37 exp = 0 | |
| 38 self.assertEquals(exp, obs) | |
| 39 | |
| 40 def test_isOverlapping_false_left(self): | |
| 41 queryCursor = NCListCursor(None, self._queryNcList, 5, 0) | |
| 42 refCursor = NCListCursor(None, self._refNcList, 2, 0) | |
| 43 obs = self._iFOO.isOverlapping(queryCursor, refCursor) | |
| 44 exp = -1 | |
| 45 self.assertEquals(exp, obs) | |
| 46 | |
| 47 def test_isOverlapping_false_right(self): | |
| 48 queryCursor = NCListCursor(None, self._queryNcList, 5, 0) | |
| 49 refCursor = NCListCursor(None, self._refNcList, 1, 0) | |
| 50 obs = self._iFOO.isOverlapping(queryCursor, refCursor) | |
| 51 exp = 1 | |
| 52 self.assertEquals(exp, obs) | |
| 53 | |
| 54 def test_isLastElement_true(self): | |
| 55 refCursor = NCListCursor(None, self._refNcList, 4, 0) | |
| 56 obsBool = refCursor.isLast() | |
| 57 expBool = True | |
| 58 self.assertEquals(expBool, obsBool) | |
| 59 | |
| 60 def test_isLastElement_false(self): | |
| 61 refCursor = NCListCursor(None, self._refNcList, 3, 0) | |
| 62 obsBool = refCursor.isLast() | |
| 63 expBool = False | |
| 64 self.assertEquals(expBool, obsBool) | |
| 65 | |
| 66 def test_isLastElement_highestLevel_true(self): | |
| 67 refCursor = NCListCursor(None, self._refNcList, 1, 0) | |
| 68 obsBool = refCursor.isLast() | |
| 69 expBool = True | |
| 70 self.assertEquals(expBool, obsBool) | |
| 71 | |
| 72 def test_isLastElement_highestLevel_false(self): | |
| 73 refCursor = NCListCursor(None, self._refNcList, 0, 0) | |
| 74 obsBool = refCursor.isLast() | |
| 75 expBool = False | |
| 76 self.assertEquals(expBool, obsBool) | |
| 77 | |
| 78 def test_findOverlapIter(self): | |
| 79 queryCursor = NCListCursor(None, self._queryNcList, 2, 0) | |
| 80 refCursor = NCListCursor(None, self._refNcList, 0, 0) | |
| 81 queryTranscript = queryCursor.getTranscript() | |
| 82 done = False | |
| 83 (cursor, done, empty) = self._iFOO.findOverlapIter(queryTranscript, refCursor, done) | |
| 84 obsFirstOverlapLAddr = (cursor._lIndex, done, empty) | |
| 85 expFirstOverlapLAddr = 4, True, False | |
| 86 self.assertEquals(expFirstOverlapLAddr, obsFirstOverlapLAddr) | |
| 87 | |
| 88 def test_not_findOverlapIter(self): | |
| 89 queryCursor = NCListCursor(None, self._queryNcList, 4, 0) | |
| 90 refCursor = NCListCursor(None, self._refNcList, 1, 0) | |
| 91 queryTranscript = queryCursor.getTranscript() | |
| 92 done = False | |
| 93 (cursor, done, empty) = self._iFOO.findOverlapIter(queryTranscript, refCursor, done) | |
| 94 obsFirstOverlapLAddr = (cursor._lIndex, done, empty) | |
| 95 expFirstOverlapLAddr = -1, False, True | |
| 96 self.assertEquals(expFirstOverlapLAddr, obsFirstOverlapLAddr) | |
| 97 | |
| 98 def test_findOverlapIter_not_the_first_RefOverlap(self): | |
| 99 queryCursor = NCListCursor(None, self._queryNcList, 3, 0) | |
| 100 refCursor = NCListCursor(None, self._refNcList, 4, 0) | |
| 101 queryTranscript = queryCursor.getTranscript() | |
| 102 done = True | |
| 103 (cursor, done, empty) = self._iFOO.findOverlapIter(queryTranscript, refCursor, done) | |
| 104 obsFirstOverlapLAddr = (cursor._lIndex, done, empty) | |
| 105 expFirstOverlapLAddr = 1, True, False | |
| 106 self.assertEquals(expFirstOverlapLAddr, obsFirstOverlapLAddr) | |
| 107 | |
| 108 def test_moveDown(self): | |
| 109 refCursor = NCListCursor(None, self._refNcList, 0, 0) | |
| 110 refCursor.moveDown() | |
| 111 expFirstChildLAddr = 2 | |
| 112 self.assertEquals(expFirstChildLAddr, refCursor._lIndex) | |
| 113 | |
| 114 def test_moveUp(self): | |
| 115 refCursor = NCListCursor(None, self._refNcList, 4, 0) | |
| 116 refCursor.moveUp() | |
| 117 expFirstChildLAddr = 0 | |
| 118 self.assertEquals(expFirstChildLAddr, refCursor._lIndex) | |
| 119 | |
| 120 def test_moveRight(self): | |
| 121 refCursor = NCListCursor(None, self._refNcList, 3, 0) | |
| 122 refCursor.moveRight() | |
| 123 expFirstChildLAddr = 4 | |
| 124 self.assertEquals(expFirstChildLAddr, refCursor._lIndex) | |
| 125 | |
| 126 def test_moveNext(self): | |
| 127 refCursor = NCListCursor(None, self._refNcList, 6, 0) | |
| 128 refCursor.moveNext() | |
| 129 expFirstChildLAddr = 1 | |
| 130 self.assertEquals(expFirstChildLAddr, refCursor._lIndex) | |
| 131 | |
| 132 def test_not_findOverlapIter_between2RefIntervals(self): | |
| 133 inputQueryGff3FileName = 'query2.gff3' | |
| 134 self._writeQueryGff3File2(inputQueryGff3FileName) | |
| 135 self._outputGff3FileName = 'overlaps.gff3' | |
| 136 iMock = MockFindOverlapsWithServeralIntervals_case1() | |
| 137 iMock.write(self._inputRefGff3FileName) | |
| 138 _iFOO = FindOverlapsOptim(0) | |
| 139 _iFOO.setRefFileName(self._inputRefGff3FileName, "gff3") | |
| 140 _iFOO.setQueryFileName(inputQueryGff3FileName, "gff3") | |
| 141 _iFOO.setOutputFileName(self._outputGff3FileName) | |
| 142 _iFOO.prepareIntermediateFiles() | |
| 143 _iFOO.createNCLists() | |
| 144 _queryNcList = _iFOO._ncLists[QUERY]["chr1"] | |
| 145 _refNcList = _iFOO._ncLists[REFERENCE]["chr1"] | |
| 146 queryCursor = NCListCursor(None, _queryNcList, 0, 0) | |
| 147 refCursor = NCListCursor(None, _refNcList, 0, 0) | |
| 148 queryTranscript = queryCursor.getTranscript() | |
| 149 done = True | |
| 150 (cursor, done, empty) = _iFOO.findOverlapIter(queryTranscript, refCursor, done) | |
| 151 lIndex = cursor._lIndex | |
| 152 obsFirstOverlapLAddr = (lIndex, done, empty) | |
| 153 expFirstOverlapLAddr = 1, False, True | |
| 154 self.assertEquals(expFirstOverlapLAddr, obsFirstOverlapLAddr) | |
| 155 os.remove(inputQueryGff3FileName) | |
| 156 | |
| 157 def _writeQueryGff3File2(self, fileName): | |
| 158 f = open(fileName, 'w') | |
| 159 f.write("chr1\tquery\ttest1\t1100\t1150\t126\t+\t.\tID=test1.1;Name=test1.1\n") | |
| 160 f.write("chr1\tquery\ttest2\t1250\t1300\t781\t+\t.\tID=test1.2;Name=test1.2\n") | |
| 161 f.close() | |
| 162 | |
| 163 def _writeQueryGff3File(self, fileName): | |
| 164 f = open(fileName, 'w') | |
| 165 f.write("chr1\tquery\ttest1.1\t25\t150\t126\t+\t.\tID=test1.1;Name=test1.1\n") | |
| 166 f.write("chr1\tquery\ttest1.2\t70\t850\t781\t+\t.\tID=test1.2;Name=test1.2\n") | |
| 167 f.write("chr1\tquery\ttest1.3\t550\t850\t201\t+\t.\tID=test1.3;Name=test1.3\n") | |
| 168 f.write("chr1\tquery\ttest1.4\t925\t1025\t101\t+\t.\tID=test1.4;Name=test1.4\n") | |
| 169 f.write("chr1\tquery\ttest1.5\t1201\t1210\t10\t+\t.\tID=test1.5;Name=test1.5\n") | |
| 170 f.write("chr1\tquery\ttest1.6\t1500\t1600\t101\t+\t.\tID=test1.6;Name=test1.6\n") | |
| 171 f.close() | |
| 172 | |
| 173 if __name__ == "__main__": | |
| 174 unittest.main() |
