Mercurial > repos > yufei-luo > s_mart
comparison smart_toolShed/commons/core/coord/test/Test_PathUtils.py @ 0:e0f8dcca02ed
Uploaded S-MART tool. A toolbox manages RNA-Seq and ChIP-Seq data.
author | yufei-luo |
---|---|
date | Thu, 17 Jan 2013 10:52:14 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e0f8dcca02ed |
---|---|
1 # Copyright INRA (Institut National de la Recherche Agronomique) | |
2 # http://www.inra.fr | |
3 # http://urgi.versailles.inra.fr | |
4 # | |
5 # This software is governed by the CeCILL license under French law and | |
6 # abiding by the rules of distribution of free software. You can use, | |
7 # modify and/ or redistribute the software under the terms of the CeCILL | |
8 # license as circulated by CEA, CNRS and INRIA at the following URL | |
9 # "http://www.cecill.info". | |
10 # | |
11 # As a counterpart to the access to the source code and rights to copy, | |
12 # modify and redistribute granted by the license, users are provided only | |
13 # with a limited warranty and the software's author, the holder of the | |
14 # economic rights, and the successive licensors have only limited | |
15 # liability. | |
16 # | |
17 # In this respect, the user's attention is drawn to the risks associated | |
18 # with loading, using, modifying and/or developing or reproducing the | |
19 # software by the user in light of its specific status of free software, | |
20 # that may mean that it is complicated to manipulate, and that also | |
21 # therefore means that it is reserved for developers and experienced | |
22 # professionals having in-depth computer knowledge. Users are therefore | |
23 # encouraged to load and test the software's suitability as regards their | |
24 # requirements in conditions enabling the security of their systems and/or | |
25 # data to be ensured and, more generally, to use and operate it in the | |
26 # same conditions as regards security. | |
27 # | |
28 # The fact that you are presently reading this means that you have had | |
29 # knowledge of the CeCILL license and that you accept its terms. | |
30 | |
31 | |
32 import unittest | |
33 import os | |
34 import time | |
35 from commons.core.coord.PathUtils import PathUtils | |
36 from commons.core.coord.Path import Path | |
37 from commons.core.coord.Set import Set | |
38 from commons.core.utils.FileUtils import FileUtils | |
39 from commons.core.coord.Range import Range | |
40 from commons.core.coord.Align import Align | |
41 | |
42 | |
43 class Test_PathUtils ( unittest.TestCase ): | |
44 | |
45 def test_getSetListFromQueries( self ): | |
46 set1 = Set(1,"TE2","chr1",1,10) | |
47 set2 = Set(1,"TE2","chr1",10,1) | |
48 set3 = Set(1,"TE3","chr4",12,22) | |
49 | |
50 expList = [set1, set2, set3] | |
51 | |
52 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
53 tuple2 = ("1","chr1","10","1","TE2","11","17","1e-20","30","90.2") | |
54 tuple3 = ("1","chr4","12","22","TE3","11","17","1e-20","30","90.2") | |
55 | |
56 pathList = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
57 | |
58 obsList = PathUtils.getSetListFromQueries( pathList ) | |
59 | |
60 self.assertEquals( expList, obsList ) | |
61 | |
62 | |
63 def test_getSetListFromQueries_on_empty_list( self ): | |
64 expList = [] | |
65 obsList = PathUtils.getSetListFromQueries( [] ) | |
66 | |
67 self.assertEquals( expList, obsList ) | |
68 | |
69 | |
70 def test_getSetListFromQueries_on_list_size1( self ): | |
71 set1 = Set(1,"TE2","chr1",1,10) | |
72 | |
73 expList = [set1] | |
74 | |
75 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
76 path1 = Path() | |
77 path1.setFromTuple(tuple1) | |
78 | |
79 pathList = [path1] | |
80 obsList = PathUtils.getSetListFromQueries( pathList ) | |
81 | |
82 self.assertEquals( expList, obsList ) | |
83 | |
84 | |
85 def test_getRangeListFromSubjects_initiallyOrdered_directStrand( self ): | |
86 tuple1 = ("1","chr1","1","10","TE2","1","10","1e-20","30","90.2") | |
87 tuple2 = ("1","chr1","21","30","TE2","11","20","1e-20","30","90.2") | |
88 tuple3 = ("1","chr1","41","50","TE2","21","30","1e-20","30","90.2") | |
89 lPaths = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
90 | |
91 iSet1 = Range( "TE2", 1, 10 ) | |
92 iSet2 = Range( "TE2", 11, 20 ) | |
93 iSet3 = Range( "TE2", 21, 30 ) | |
94 lExp = [ iSet1, iSet2, iSet3 ] | |
95 | |
96 lObs = PathUtils.getRangeListFromSubjects( lPaths ) | |
97 | |
98 self.assertEquals( lExp, lObs ) | |
99 | |
100 | |
101 def test_getRangeListFromSubjects_initiallyUnordered_directStrand( self ): | |
102 tuple1 = ("1","chr1","1","10","TE2","1","10","1e-20","30","90.2") | |
103 tuple2 = ("1","chr1","41","50","TE2","21","30","1e-20","30","90.2") | |
104 tuple3 = ("1","chr1","21","30","TE2","11","20","1e-20","30","90.2") | |
105 lPaths = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
106 | |
107 iSet1 = Range( "TE2", 1, 10 ) | |
108 iSet2 = Range( "TE2", 11, 20 ) | |
109 iSet3 = Range( "TE2", 21, 30 ) | |
110 lExp = [ iSet1, iSet2, iSet3 ] | |
111 | |
112 lObs = PathUtils.getRangeListFromSubjects( lPaths ) | |
113 | |
114 self.assertEquals( lExp, lObs ) | |
115 | |
116 | |
117 def test_getRangeListFromSubjects_initiallyUnordered_reverseStrand( self ): | |
118 tuple1 = ("1","chr1","1","10","TE2","10","1","1e-20","30","90.2") | |
119 tuple2 = ("1","chr1","41","50","TE2","30","21","1e-20","30","90.2") | |
120 tuple3 = ("1","chr1","21","30","TE2","20","11","1e-20","30","90.2") | |
121 lPaths = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
122 | |
123 iSet3 = Range( "TE2", 30, 21 ) | |
124 iSet2 = Range( "TE2", 20, 11 ) | |
125 iSet1 = Range( "TE2", 10, 1 ) | |
126 lExp = [ iSet1, iSet2, iSet3 ] | |
127 | |
128 lObs = PathUtils.getRangeListFromSubjects( lPaths ) | |
129 | |
130 self.assertEquals( lExp, lObs ) | |
131 | |
132 | |
133 def test_getQueryMinMaxFromPathList( self ): | |
134 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
135 tuple2 = ("1","chr1","10","1","TE2","11","17","1e-20","30","90.2") | |
136 tuple3 = ("1","chr4","12","22","TE3","11","17","1e-20","30","90.2") | |
137 | |
138 pathList = self._makePathListFromTupleList([tuple1, tuple2, tuple3]) | |
139 | |
140 obsTuple = PathUtils.getQueryMinMaxFromPathList( pathList ) | |
141 expTuple = (1,22) | |
142 | |
143 self.assertEquals(expTuple, obsTuple) | |
144 | |
145 def test_getQueryMinMaxFromPathList_on_empty_list( self ): | |
146 obsTuple = PathUtils.getQueryMinMaxFromPathList( [] ) | |
147 expTuple = (-1,-1) | |
148 self.assertEquals( expTuple, obsTuple ) | |
149 | |
150 def test_getQueryMinMaxFromPathList_on_list_size1( self ): | |
151 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
152 path1 = Path() | |
153 path1.setFromTuple(tuple1) | |
154 | |
155 pathList = [path1] | |
156 obsTuple = PathUtils.getQueryMinMaxFromPathList( pathList ) | |
157 | |
158 expTuple = (1,10) | |
159 | |
160 self.assertEquals(expTuple, obsTuple) | |
161 | |
162 def test_getSubjectMinMaxFromPathList( self ): | |
163 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
164 tuple2 = ("1","chr1","10","1","TE2","17","11","1e-20","30","90.2") | |
165 tuple3 = ("1","chr4","12","22","TE3","22","34","1e-20","30","90.2") | |
166 | |
167 pathList = self._makePathListFromTupleList([tuple1, tuple2, tuple3]) | |
168 obsTuple = PathUtils.getSubjectMinMaxFromPathList(pathList) | |
169 | |
170 expTuple = (11,34) | |
171 | |
172 self.assertEquals(expTuple, obsTuple) | |
173 | |
174 def test_getSubjectMinMaxFromPathList_on_empty_list( self ): | |
175 obsTuple = PathUtils.getSubjectMinMaxFromPathList([]) | |
176 expTuple = (-1,-1) | |
177 self.assertEquals(expTuple, obsTuple) | |
178 | |
179 def test_getSubjectMinMaxFromPathList_on_list_size1( self ): | |
180 tuple1 = ("1","chr1","1","10","TE2","11","17","1e-20","30","90.2") | |
181 path1 = Path() | |
182 path1.setFromTuple(tuple1) | |
183 | |
184 pathList = [path1] | |
185 obsTuple = PathUtils.getSubjectMinMaxFromPathList(pathList) | |
186 | |
187 expTuple = (11,17) | |
188 | |
189 self.assertEquals(expTuple, obsTuple) | |
190 | |
191 def test_areQueriesOverlappingBetweenPathLists_list2_empty( self ): | |
192 tuple1 = ("1","chr1","100","110","TE2","15","10","1e-20","30","90.2") | |
193 tuple2 = ("1","chr1","200","220","TE2","15","10","1e-20","30","90.2") | |
194 tuple3 = ("1","chr1","300","330","TE2","15","10","1e-20","30","90.2") | |
195 pathList1 = self._makePathListFromTupleList([tuple1, tuple2, tuple3]) | |
196 | |
197 pathList2 = [] | |
198 | |
199 expRes = False | |
200 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
201 | |
202 self.assertEquals( expRes, obsRes ) | |
203 | |
204 def test_areQueriesOverlappingBetweenPathLists_list2_size1( self ): | |
205 tuple1 = ("1","chr1","9","11","TE2","150","200","1e-20","30","90.2") | |
206 tuple2 = ("1","chr1","20","22","TE2","150","200","1e-20","30","90.2") | |
207 tuple3 = ("1","chr1","30","33","TE2","150","200","1e-20","30","90.2") | |
208 pathList1 = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
209 | |
210 tuple11 = ("1","chr1","8","11","TE2","150","200","1e-20","30","90.2") | |
211 pathList2 = self._makePathListFromTupleList( [ tuple11 ] ) | |
212 | |
213 expRes = True | |
214 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
215 | |
216 self.assertEquals( expRes, obsRes ) | |
217 | |
218 def test_areQueriesOverlappingBetweenPathLists_list1_greater_list2( self ): | |
219 tuple1 = ("1","chr1","100","110","TE2","15","10","1e-20","30","90.2") | |
220 tuple2 = ("1","chr1","200","220","TE2","15","10","1e-20","30","90.2") | |
221 tuple3 = ("1","chr1","300","330","TE2","15","10","1e-20","30","90.2") | |
222 pathList1 = self._makePathListFromTupleList( [ tuple1, tuple2, tuple3 ] ) | |
223 | |
224 tuple11 = ("1","chr1","10","11","TE2","150","200","1e-20","30","90.2") | |
225 tuple22 = ("1","chr1","20","22","TE2","150","200","1e-20","30","90.2") | |
226 tuple33 = ("1","chr1","30","33","TE2","150","200","1e-20","30","90.2") | |
227 pathList2 = self._makePathListFromTupleList( [ tuple11, tuple22, tuple33 ] ) | |
228 | |
229 expRes = False | |
230 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
231 | |
232 self.assertEquals( expRes, obsRes ) | |
233 | |
234 def test_areQueriesOverlappingBetweenPathLists_unordered_first_item_of_list1_greater_second_item_smaller( self ): | |
235 tuple1 = ("1","chr1","400","440","TE2","15","10","1e-20","30","90.2") | |
236 tuple2 = ("1","chr1","1","11","TE2","15","10","1e-20","30","90.2") | |
237 pathList1 = self._makePathListFromTupleList( [ tuple1, tuple2 ] ) | |
238 | |
239 tuple11 = ("1","chr1","15","17","TE2","150","200","1e-20","30","90.2") | |
240 tuple22 = ("1","chr1","20","22","TE2","150","200","1e-20","30","90.2") | |
241 tuple33 = ("1","chr1","30","33","TE2","150","200","1e-20","30","90.2") | |
242 pathList2 = self._makePathListFromTupleList( [ tuple11, tuple22, tuple33 ] ) | |
243 | |
244 expRes = False | |
245 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
246 | |
247 self.assertEquals( expRes, obsRes ) | |
248 | |
249 def test_areQueriesOverlappingBetweenPathLists_unorderd_second_item_of_list1_overlap_first_item( self ): | |
250 tuple1 = ("1","chr1","400","440","TE2","15","10","1e-20","30","90.2") | |
251 tuple2 = ("1","chr1","1","18","TE2","15","10","1e-20","30","90.2") | |
252 pathList1 = self._makePathListFromTupleList( [ tuple1, tuple2 ] ) | |
253 | |
254 tuple11 = ("1","chr1","15","17","TE2","150","200","1e-20","30","90.2") | |
255 tuple22 = ("1","chr1","20","22","TE2","150","200","1e-20","30","90.2") | |
256 tuple33 = ("1","chr1","30","33","TE2","150","200","1e-20","30","90.2") | |
257 pathList2 = self._makePathListFromTupleList( [ tuple11, tuple22, tuple33 ] ) | |
258 | |
259 expRes = True | |
260 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
261 | |
262 self.assertEquals( expRes, obsRes ) | |
263 | |
264 def test_areQueriesOverlappingBetweenPathLists_last_item_list1_overlap_last_item_list2( self ): | |
265 tuple1 = ("1","chr1","400","440","TE2","15","10","1e-20","30","90.2") | |
266 tuple2 = ("1","chr1","320","340","TE2","15","10","1e-20","30","90.2") | |
267 pathList1 = self._makePathListFromTupleList( [ tuple1, tuple2 ] ) | |
268 | |
269 tuple11 = ("1","chr1","100","110","TE2","150","200","1e-20","30","90.2") | |
270 tuple22 = ("1","chr1","200","220","TE2","150","200","1e-20","30","90.2") | |
271 tuple33 = ("1","chr1","300","330","TE2","150","200","1e-20","30","90.2") | |
272 pathList2 = self._makePathListFromTupleList( [ tuple11, tuple22, tuple33 ] ) | |
273 | |
274 expRes = True | |
275 obsRes = PathUtils.areQueriesOverlappingBetweenPathLists( pathList1, pathList2 ) | |
276 | |
277 self.assertEquals( expRes, obsRes ) | |
278 | |
279 def test_writeListInFile( self ): | |
280 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
281 line2 = ("1\tchr1\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
282 line3 = ("1\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
283 | |
284 expFileName = "expFileName.path" | |
285 expFileHandle = open ( expFileName, 'w' ) | |
286 expFileHandle.write(line1) | |
287 expFileHandle.write(line2) | |
288 expFileHandle.write(line3) | |
289 expFileHandle.close() | |
290 | |
291 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
292 line2 = ("1\tchr1\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
293 line3 = ("1\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
294 | |
295 obsFileName = "obsFileName.path" | |
296 obsPathList = self._makePathListFromStringList( [ line1, line2, line3 ] ) | |
297 | |
298 PathUtils.writeListInFile( obsPathList, obsFileName ) | |
299 | |
300 self.assertTrue( FileUtils.are2FilesIdentical( expFileName, obsFileName ) ) | |
301 | |
302 os.remove( obsFileName ) | |
303 os.remove( expFileName ) | |
304 | |
305 def test_writeListInFile_in_append_mode( self ): | |
306 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
307 line2 = ("1\tchr1\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
308 line3 = ("1\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
309 line4 = ("1\tchr1\t400\t410\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
310 line5 = ("1\tchr1\t500\t520\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
311 line6 = ("1\tchr1\t600\t630\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
312 | |
313 expFileName = "expFileName.path" | |
314 expFileHandle = open ( expFileName, 'w' ) | |
315 expFileHandle.write(line1) | |
316 expFileHandle.write(line2) | |
317 expFileHandle.write(line3) | |
318 expFileHandle.write(line4) | |
319 expFileHandle.write(line5) | |
320 expFileHandle.write(line6) | |
321 expFileHandle.close() | |
322 | |
323 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
324 line2 = ("1\tchr1\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
325 line3 = ("1\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.200000\n") | |
326 line4 = ("1\tchr1\t400\t410\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
327 line5 = ("1\tchr1\t500\t520\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
328 line6 = ("1\tchr1\t600\t630\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
329 | |
330 obsFileName = "obsFileName.path" | |
331 obsFileHandle = open( obsFileName, 'w' ) | |
332 obsFileHandle.write(line1) | |
333 obsFileHandle.write(line2) | |
334 obsFileHandle.write(line3) | |
335 obsFileHandle.close() | |
336 | |
337 obsPathList = self._makePathListFromStringList( [ line4, line5, line6 ] ) | |
338 | |
339 PathUtils.writeListInFile( obsPathList, obsFileName, "a" ) | |
340 | |
341 self.assertTrue( FileUtils.are2FilesIdentical( expFileName, obsFileName ) ) | |
342 | |
343 os.remove(obsFileName) | |
344 os.remove(expFileName) | |
345 | |
346 def test_getPathListWithoutDuplicates_empty_list( self ): | |
347 pathList = [] | |
348 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
349 | |
350 expPathList = [] | |
351 | |
352 self.assertEquals( expPathList, obsPathList ) | |
353 | |
354 def test_getPathListWithoutDuplicates_list_size1( self ): | |
355 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
356 pathList = self._makePathListFromStringList([line1]) | |
357 | |
358 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
359 | |
360 expPathList = pathList | |
361 | |
362 self.assertEquals( expPathList, obsPathList ) | |
363 | |
364 def test_getPathListWithoutDuplicates_list_with_only_doublons( self ): | |
365 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
366 line2 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
367 line3 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
368 line4 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
369 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4 ] ) | |
370 | |
371 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
372 | |
373 expPathList = self._makePathListFromStringList( [ line1 ] ) | |
374 | |
375 self.assertEquals( expPathList, obsPathList ) | |
376 | |
377 def test_getPathListWithoutDuplicates_list_with_doublons_at_start_and_at_end( self ): | |
378 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
379 line2 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
380 line3 = ("1\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
381 line4 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
382 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4 ] ) | |
383 | |
384 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
385 | |
386 expPathList = self._makePathListFromStringList( [ line1, line2, line3 ] ) | |
387 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
388 | |
389 self.assertEquals( expPathList, obsPathList ) | |
390 | |
391 def test_getPathListWithoutDuplicates_list_with_contiguus_doublons( self ): | |
392 line1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
393 line2 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
394 line3 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
395 line4 = ("1\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
396 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4 ] ) | |
397 | |
398 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
399 | |
400 expPathList = self._makePathListFromStringList( [ line1, line2, line4 ] ) | |
401 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
402 | |
403 self.assertEquals( expPathList, obsPathList ) | |
404 | |
405 def test_getPathListWithoutDuplicates_list_with_one_doublon( self ): | |
406 line1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
407 line2 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
408 line3 = ("1\tchr1\t210\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
409 line4 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
410 line5 = ("1\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
411 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line5 ] ) | |
412 | |
413 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
414 | |
415 expPathList = self._makePathListFromStringList( [ line1, line2, line3, line5 ] ) | |
416 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
417 | |
418 self.assertEquals( expPathList, obsPathList ) | |
419 | |
420 def test_getPathListWithoutDuplicates_list_with_two_doublons( self ): | |
421 line1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
422 line2 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
423 line3 = ("1\tchr1\t210\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
424 line4 = ("1\tchr1\t230\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
425 line5 = ("1\tchr1\t210\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
426 line6 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
427 line7 = ("1\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
428 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line5, line6, line7 ] ) | |
429 | |
430 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
431 | |
432 expPathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line7 ] ) | |
433 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
434 | |
435 self.assertEquals( expPathList, obsPathList ) | |
436 | |
437 def test_getPathListWithoutDuplicates_list_with_two_doublons_useOnlyCoord_is_False_different_id( self ): | |
438 line1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
439 line2 = ("2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
440 line3 = ("3\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
441 line4 = ("4\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
442 line5 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
443 line6 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
444 line7 = ("5\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
445 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line5, line6, line7 ] ) | |
446 | |
447 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList ) | |
448 | |
449 expPathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line7 ] ) | |
450 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
451 | |
452 self.assertEquals( expPathList, obsPathList ) | |
453 | |
454 def test_getPathListWithoutDuplicates_list_with_two_doublons_useOnlyCoord_is_True_different_id( self ): | |
455 line1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
456 line2 = ("2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
457 line3 = ("3\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
458 line4 = ("4\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
459 line5 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
460 line6 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
461 line7 = ("5\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
462 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line5, line6, line7 ] ) | |
463 | |
464 obsPathList = PathUtils.getPathListWithoutDuplicates( pathList, True ) | |
465 | |
466 expPathList = self._makePathListFromStringList( [ line1 ] ) | |
467 expPathList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( expPathList ) | |
468 | |
469 self.assertEquals( expPathList, obsPathList ) | |
470 | |
471 def test_path_getDictOfListsWithIdAsKey_empty_list( self ): | |
472 pathList = [] | |
473 | |
474 obsDict = PathUtils.getDictOfListsWithIdAsKey( pathList ) | |
475 expDict = {} | |
476 | |
477 self.assertEquals( expDict, obsDict ) | |
478 | |
479 def test_path_getDictOfListsWithIdAsKey_list_size1( self ): | |
480 line1 = ( "1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
481 pathList = self._makePathListFromStringList( [ line1 ] ) | |
482 | |
483 obsDict = PathUtils.getDictOfListsWithIdAsKey( pathList ) | |
484 | |
485 expPathInstance = Path() | |
486 expPathInstance.setFromString( line1 ) | |
487 expDict = { 1: [ expPathInstance ] } | |
488 | |
489 self.assertEquals( expDict, obsDict ) | |
490 | |
491 def test_getDictOfListsWithIdAsKey_ids_only_once( self ): | |
492 line1 = ( "1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
493 line2 = ( "2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
494 line3 = ( "3\tchr1\t210\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
495 | |
496 pathList = self._makePathListFromStringList( [ line1, line2, line3 ] ) | |
497 | |
498 obsDict = PathUtils.getDictOfListsWithIdAsKey( pathList ) | |
499 | |
500 expPathInstance1 = Path() | |
501 expPathInstance1.setFromString( line1 ) | |
502 | |
503 expPathInstance2 = Path() | |
504 expPathInstance2.setFromString( line2 ) | |
505 | |
506 expPathInstance3 = Path() | |
507 expPathInstance3.setFromString( line3 ) | |
508 | |
509 expDict = { 1: [ expPathInstance1 ], 2: [ expPathInstance2 ], 3: [ expPathInstance3 ] } | |
510 | |
511 self.assertEquals( expDict, obsDict ) | |
512 | |
513 def test_getDictOfListsWithIdAsKey_ids_more_than_only_once( self ): | |
514 line1 = ( "1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
515 line2 = ( "2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
516 line3 = ( "3\tchr1\t210\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
517 | |
518 line4 = ( "1\tchr1\t100\t120\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
519 line5 = ( "2\tchr1\t200\t220\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
520 line6 = ( "3\tchr1\t210\t260\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
521 | |
522 line7 = ( "1\tchr1\t110\t120\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
523 line8 = ( "2\tchr1\t210\t220\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
524 line9 = ( "3\tchr1\t220\t260\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
525 | |
526 pathList = self._makePathListFromStringList( [ line1, line2, line3, line4, line5, line6, line7, line8, line9 ] ) | |
527 | |
528 obsDict = PathUtils.getDictOfListsWithIdAsKey( pathList ) | |
529 | |
530 expPathInstance1 = Path() | |
531 expPathInstance1.setFromString( line1 ) | |
532 | |
533 expPathInstance2 = Path() | |
534 expPathInstance2.setFromString( line2 ) | |
535 | |
536 expPathInstance3 = Path() | |
537 expPathInstance3.setFromString( line3 ) | |
538 | |
539 expPathInstance4 = Path() | |
540 expPathInstance4.setFromString( line4 ) | |
541 | |
542 expPathInstance5 = Path() | |
543 expPathInstance5.setFromString( line5 ) | |
544 | |
545 expPathInstance6 = Path() | |
546 expPathInstance6.setFromString( line6 ) | |
547 | |
548 expPathInstance7 = Path() | |
549 expPathInstance7.setFromString( line7 ) | |
550 | |
551 expPathInstance8 = Path() | |
552 expPathInstance8.setFromString( line8 ) | |
553 | |
554 expPathInstance9 = Path() | |
555 expPathInstance9.setFromString( line9 ) | |
556 | |
557 expDict = { 1: [ expPathInstance1, expPathInstance4, expPathInstance7 ], 2 :[ expPathInstance2, expPathInstance5, expPathInstance8 ], 3: [ expPathInstance3, expPathInstance6, expPathInstance9 ] } | |
558 | |
559 self.assertEquals( expDict, obsDict ) | |
560 | |
561 def test_getPathListUnjoinedBasedOnQuery_listToKeep_empty_listToUnjoin_empty( self ): | |
562 pathListToKeep = [] | |
563 pathListToUnjoin = [] | |
564 | |
565 expList = [] | |
566 | |
567 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
568 | |
569 self.assertEquals( expList, obsList ) | |
570 | |
571 def test_getPathListUnjoinedBasedOnQuery_listToKeep_empty_listToUnjoin_size1( self ): | |
572 pathListToKeep = [] | |
573 | |
574 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
575 pathListToUnjoin = self._makePathListFromStringList( [ line1 ] ) | |
576 | |
577 expList = [ pathListToUnjoin ] | |
578 | |
579 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
580 | |
581 self.assertEquals( expList, obsList ) | |
582 | |
583 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_empty( self ): | |
584 lineKeep1 = ("1\tchr1\t1\t11\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
585 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
586 | |
587 pathListToUnjoin = [] | |
588 | |
589 expList = [] | |
590 | |
591 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
592 | |
593 self.assertEquals( expList, obsList ) | |
594 | |
595 def test_getPathListUnjoinedBasedOnQuery_listToKeep_empty( self ): | |
596 pathListToKeep = [] | |
597 | |
598 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
599 line2 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
600 line3 = ("1\tchr1\t250\t280\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
601 pathListToUnjoin = self._makePathListFromStringList( [ line1, line2, line3 ] ) | |
602 | |
603 expList = [ pathListToUnjoin ] | |
604 | |
605 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
606 | |
607 self.assertEquals( expList, obsList ) | |
608 | |
609 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_size1( self ): | |
610 lineKeep1 = ("1\tchr1\t1\t11\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
611 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
612 | |
613 lineUnjoin1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
614 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1 ] ) | |
615 | |
616 expList = [ pathListToUnjoin ] | |
617 | |
618 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
619 | |
620 self.assertEquals( expList, obsList ) | |
621 | |
622 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_size2_noSplit_minKeep( self ): | |
623 lineKeep1 = ("1\tchr1\t1\t10\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
624 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
625 | |
626 lineUnjoin1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
627 lineUnjoin2 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
628 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) | |
629 | |
630 expList = [ pathListToUnjoin ] | |
631 | |
632 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
633 | |
634 self.assertEquals( expList, obsList ) | |
635 | |
636 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_size3_noSplit_minKeep( self ): | |
637 lineKeep1 = ("1\tchr1\t1\t10\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
638 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
639 | |
640 lineUnjoin1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
641 lineUnjoin2 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
642 lineUnjoin3 = ("1\tchr1\t250\t280\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
643 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2, lineUnjoin3 ] ) | |
644 | |
645 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
646 | |
647 expList = [ pathListToUnjoin ] | |
648 | |
649 self.assertEquals( expList, obsList ) | |
650 | |
651 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_size2_noSplit_minUnjoin( self ): | |
652 lineKeep1 = ("1\tchr1\t101\t150\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
653 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
654 | |
655 lineUnjoin1 = ("1\tchr1\t1\t10\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
656 lineUnjoin2 = ("1\tchr1\t21\t40\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
657 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) | |
658 | |
659 expList = [ pathListToUnjoin ] | |
660 | |
661 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
662 | |
663 self.assertEquals( expList, obsList ) | |
664 | |
665 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size3_listToUnjoin_size2_oneSplit_minKeep( self ): | |
666 lineKeep1 = ("1\tchr1\t1\t10\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
667 lineKeep2 = ("1\tchr1\t21\t30\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
668 lineKeep3 = ("1\tchr1\t61\t70\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
669 pathListToKeep = self._makePathListFromStringList( [ lineKeep1, lineKeep2, lineKeep3 ] ) | |
670 | |
671 lineUnjoin1 = ("1\tchr1\t41\t50\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
672 lineUnjoin2 = ("1\tchr1\t81\t90\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
673 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) | |
674 | |
675 expList = [] | |
676 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
677 expList.append( self._makePathListFromStringList( [ lineUnjoin2 ] ) ) | |
678 | |
679 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
680 | |
681 self.assertEquals( expList, obsList ) | |
682 | |
683 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size3_listToUnjoin_size3_twoSplits_minUnjoin( self ): | |
684 lineKeep1 = ("1\tchr1\t21\t30\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
685 lineKeep2 = ("1\tchr1\t41\t50\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
686 lineKeep3 = ("1\tchr1\t81\t90\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
687 pathListToKeep = self._makePathListFromStringList( [ lineKeep1, lineKeep2, lineKeep3 ] ) | |
688 | |
689 lineUnjoin1 = ("1\tchr1\t1\t10\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
690 lineUnjoin2 = ("1\tchr1\t61\t70\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
691 lineUnjoin3 = ("1\tchr1\t101\t110\tTE2\t150\t90\t0.000000\t30\t90.200000\n") | |
692 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2, lineUnjoin3 ] ) | |
693 | |
694 expList = [] | |
695 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
696 expList.append( self._makePathListFromStringList( [ lineUnjoin2 ] ) ) | |
697 expList.append( self._makePathListFromStringList( [ lineUnjoin3 ] ) ) | |
698 | |
699 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
700 | |
701 self.assertEquals( expList, obsList ) | |
702 | |
703 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_size2_split( self ): | |
704 lineKeep1 = ("1\tchr1\t51\t80\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
705 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
706 | |
707 lineUnjoin1 = ("1\tchr1\t21\t40\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
708 lineUnjoin2 = ("1\tchr1\t101\t150\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
709 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) | |
710 | |
711 expList = [] | |
712 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
713 expList.append( self._makePathListFromStringList( [ lineUnjoin2 ] ) ) | |
714 | |
715 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
716 | |
717 self.assertEquals( expList, obsList ) | |
718 | |
719 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size2_listToUnjoin_size2_split( self ): | |
720 lineKeep1 = ("1\tchr1\t1\t15\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
721 lineKeep2 = ("1\tchr1\t81\t130\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
722 pathListToKeep = self._makePathListFromStringList( [ lineKeep1, lineKeep2 ] ) | |
723 | |
724 lineUnjoin1 = ("1\tchr1\t21\t40\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
725 lineUnjoin2 = ("1\tchr1\t201\t250\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
726 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) | |
727 | |
728 expList = [] | |
729 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
730 expList.append( self._makePathListFromStringList( [ lineUnjoin2 ] ) ) | |
731 | |
732 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
733 | |
734 self.assertEquals( expList, obsList ) | |
735 | |
736 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_ordered_OneSplit( self ): | |
737 lineKeep1 = ("1\tchr1\t120\t180\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
738 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
739 | |
740 lineUnjoin1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
741 lineUnjoin2 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
742 lineUnjoin3 = ("1\tchr1\t250\t280\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
743 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2, lineUnjoin3 ] ) | |
744 | |
745 expList = [] | |
746 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
747 expList.append( self._makePathListFromStringList( [ lineUnjoin2, lineUnjoin3 ] ) ) | |
748 | |
749 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
750 | |
751 self.assertEquals( expList, obsList ) | |
752 | |
753 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size1_listToUnjoin_unordered_OneSplit( self ): | |
754 lineKeep1 = ("1\tchr1\t120\t180\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
755 pathListToKeep = self._makePathListFromStringList( [ lineKeep1 ] ) | |
756 | |
757 lineUnjoin1 = ("1\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
758 lineUnjoin2 = ("1\tchr1\t250\t280\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
759 lineUnjoin3 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
760 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2, lineUnjoin3 ] ) | |
761 | |
762 expList = [] | |
763 expList.append( self._makePathListFromStringList( [ lineUnjoin3 ] ) ) | |
764 expList.append( self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2 ] ) ) | |
765 | |
766 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
767 | |
768 self.assertEquals( expList, obsList ) | |
769 | |
770 def test_getPathListUnjoinedBasedOnQuery_listToKeep_size2_listToUnjoin_size4_twoSplits( self ): | |
771 lineKeep1 = ("1\tchr1\t21\t30\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
772 lineKeep2 = ("1\tchr1\t81\t90\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
773 pathListToKeep = self._makePathListFromStringList( [ lineKeep1, lineKeep2 ] ) | |
774 | |
775 lineUnjoin1 = ("1\tchr1\t1\t10\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
776 lineUnjoin2 = ("1\tchr1\t41\t50\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
777 lineUnjoin3 = ("1\tchr1\t61\t70\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
778 lineUnjoin4 = ("1\tchr1\t101\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
779 pathListToUnjoin = self._makePathListFromStringList( [ lineUnjoin1, lineUnjoin2, lineUnjoin3, lineUnjoin4 ] ) | |
780 | |
781 expList = [] | |
782 expList.append( self._makePathListFromStringList( [ lineUnjoin1 ] ) ) | |
783 expList.append( self._makePathListFromStringList( [ lineUnjoin2, lineUnjoin3 ] ) ) | |
784 expList.append( self._makePathListFromStringList( [ lineUnjoin4 ] ) ) | |
785 | |
786 obsList = PathUtils.getPathListUnjoinedBasedOnQuery( pathListToKeep, pathListToUnjoin ) | |
787 | |
788 self.assertEquals( expList, obsList ) | |
789 | |
790 def test_changeIdInList_empty_list ( self ): | |
791 pathList = [] | |
792 | |
793 PathUtils.changeIdInList(pathList,1) | |
794 | |
795 obsList = pathList | |
796 expList = [] | |
797 | |
798 self.assertEquals(expList, obsList) | |
799 | |
800 def test_changeIdInList_list_size1 ( self ): | |
801 line1 = ("1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
802 line2 = ("2\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n") | |
803 | |
804 pathList = self._makePathListFromStringList([line1]) | |
805 PathUtils.changeIdInList(pathList,2) | |
806 | |
807 expPathList = pathList | |
808 | |
809 obsPathList = self._makePathListFromStringList([line2]) | |
810 | |
811 self.assertEquals(expPathList, obsPathList) | |
812 | |
813 def test_changeIdInList( self ): | |
814 line1 = ( "1\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
815 line2 = ( "2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
816 line3 = ( "3\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
817 | |
818 pathList = self._makePathListFromStringList( [ line1, line2, line3 ] ) | |
819 PathUtils.changeIdInList( pathList, 2 ) | |
820 obsPathList = pathList | |
821 | |
822 line11 = ( "2\tchr1\t100\t110\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
823 line22 = ( "2\tchr1\t200\t210\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
824 line33 = ( "2\tchr1\t300\t310\tTE2\t150\t200\t0.000000\t30\t90.200000\n" ) | |
825 | |
826 expPathList = self._makePathListFromStringList( [ line11, line22, line33 ] ) | |
827 | |
828 self.assertEquals( expPathList, obsPathList ) | |
829 | |
830 | |
831 def test_getIdentityFromPathList( self ): | |
832 p1 = Path() | |
833 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
834 p2 = Path() | |
835 p2.setFromTuple( ( "2", "qry1", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
836 lPaths = [ p1, p2 ] | |
837 exp = ( 90.0 * ( 100-1+1) + 91.2 * (350-121+1) ) / ( (100-1+1) + (350-121+1) ) # 90.836363636363643 | |
838 obs = PathUtils.getIdentityFromPathList( lPaths ) | |
839 self.assertEqual( exp, obs ) | |
840 | |
841 | |
842 def test_getIdentityFromPathList_withOverlap( self ): | |
843 p1 = Path() | |
844 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
845 p2 = Path() | |
846 p2.setFromTuple( ( "2", "qry1", "21", "80", "sbj1", "21", "80", "0.0", "176", "91.2" ) ) | |
847 p3 = Path() | |
848 p3.setFromTuple( ( "2", "qry1", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
849 lPaths = [ p1, p2, p3 ] | |
850 exp = ( 91.2 * ( 100-1+1) + 91.2 * (350-121+1) ) / ( (100-1+1) + (350-121+1) ) | |
851 obs = PathUtils.getIdentityFromPathList( lPaths ) | |
852 self.assertEqual( exp, obs ) | |
853 | |
854 | |
855 def test_getIdentityFromPathList_diffQueries( self ): | |
856 p1 = Path() | |
857 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
858 p2 = Path() | |
859 p2.setFromTuple( ( "2", "qry2", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
860 lPaths = [ p1, p2 ] | |
861 try: | |
862 obs = PathUtils.getIdentityFromPathList( lPaths ) | |
863 except: | |
864 pass | |
865 | |
866 | |
867 def test_getIdentityFromPathList_diffSubjects_check( self ): | |
868 p1 = Path() | |
869 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
870 p2 = Path() | |
871 p2.setFromTuple( ( "1", "qry1", "121", "350", "sbj2", "101", "200", "0.0", "176", "91.2" ) ) | |
872 lPaths = [ p1, p2 ] | |
873 try: | |
874 obs = PathUtils.getIdentityFromPathList( lPaths, True ) | |
875 except: | |
876 pass | |
877 | |
878 | |
879 def test_getIdentityFromPathList_diffSubjects_noCheck( self ): | |
880 p1 = Path() | |
881 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
882 p2 = Path() | |
883 p2.setFromTuple( ( "1", "qry1", "121", "350", "sbj2", "101", "200", "0.0", "176", "91.2" ) ) | |
884 lPaths = [ p1, p2 ] | |
885 exp = ( 90.0 * ( 100-1+1) + 91.2 * (350-121+1) ) / ( (100-1+1) + (350-121+1) ) # 90.836363636363643 | |
886 obs = PathUtils.getIdentityFromPathList( lPaths, False ) | |
887 self.assertEqual( exp, obs ) | |
888 | |
889 | |
890 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_alreadyOrdered_diffIdentifier( self ): | |
891 p1 = Path() | |
892 p1.setFromTuple( ( "1", "qry1", "1", "10", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
893 p2 = Path() | |
894 p2.setFromTuple( ( "2", "qry1", "21", "30", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
895 lPaths = [ p1, p2 ] | |
896 | |
897 expList = [ p1, p2 ] | |
898 | |
899 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
900 | |
901 self.assertEqual( expList, obsList ) | |
902 | |
903 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_unordered_diffIdentifier( self ): | |
904 p1 = Path() | |
905 p1.setFromTuple( ( "2", "qry1", "21", "30", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
906 p2 = Path() | |
907 p2.setFromTuple( ( "1", "qry1", "1", "10", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
908 lPaths = [ p1, p2 ] | |
909 | |
910 expList = [ p2, p1 ] | |
911 | |
912 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
913 | |
914 self.assertEqual( expList, obsList ) | |
915 | |
916 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_unordered_sameIdentifier( self ): | |
917 p1 = Path() | |
918 p1.setFromTuple( ( "1", "qry1", "21", "30", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
919 p2 = Path() | |
920 p2.setFromTuple( ( "1", "qry1", "1", "10", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
921 lPaths = [ p1, p2 ] | |
922 | |
923 expList = [ p2, p1 ] | |
924 | |
925 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
926 | |
927 self.assertEqual( expList, obsList ) | |
928 | |
929 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_unordered_overlapping( self ): | |
930 p1 = Path() | |
931 p1.setFromTuple( ( "1", "qry1", "6", "15", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
932 p2 = Path() | |
933 p2.setFromTuple( ( "2", "qry1", "1", "10", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
934 lPaths = [ p1, p2 ] | |
935 | |
936 expList = [ p2, p1 ] | |
937 | |
938 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
939 | |
940 self.assertEqual( expList, obsList ) | |
941 | |
942 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_unordered_sameMin_threeSets( self ): | |
943 p1 = Path() | |
944 p1.setFromTuple( ( "1", "qry1", "1", "15", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
945 p2 = Path() | |
946 p2.setFromTuple( ( "2", "qry1", "1", "10", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
947 p3 = Path() | |
948 p3.setFromTuple( ( "2", "qry1", "1", "12", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
949 lPaths = [ p1, p2, p3 ] | |
950 | |
951 expList = [ p2, p3, p1 ] | |
952 | |
953 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
954 | |
955 self.assertEqual( expList, obsList ) | |
956 | |
957 def test_getPathListSortedByIncreasingMinQueryThenMaxQuery_unordered_included( self ): | |
958 p1 = Path() | |
959 p1.setFromTuple( ( "1", "qry1", "2", "4", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
960 p2 = Path() | |
961 p2.setFromTuple( ( "2", "qry1", "1", "5", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
962 lPaths = [ p1, p2 ] | |
963 | |
964 expList = [ p2, p1 ] | |
965 | |
966 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQuery( lPaths ) | |
967 | |
968 self.assertEqual( expList, obsList ) | |
969 | |
970 def test_getPathListSortedByIncreasingMinQueryThenMaxQueryThenIdentifier_sameCoord_diffId( self ): | |
971 p1 = Path() | |
972 p1.setFromTuple( ( "1", "qry1", "1", "5", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
973 p2 = Path() | |
974 p2.setFromTuple( ( "2", "qry1", "1", "5", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
975 lPaths = [ p2, p1 ] | |
976 | |
977 expList = [ p1, p2 ] | |
978 | |
979 obsList = PathUtils.getPathListSortedByIncreasingMinQueryThenMaxQueryThenIdentifier( lPaths ) | |
980 | |
981 self.assertEqual( expList, obsList ) | |
982 | |
983 def test_getListOfDistinctIdentifiers( self ): | |
984 p1 = Path() | |
985 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
986 p2 = Path() | |
987 p2.setFromTuple( ( "2", "qry1", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
988 p3 = Path() | |
989 p3.setFromTuple( ( "2", "qry1", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
990 lPaths = [ p1, p2, p3 ] | |
991 lExp = [ 1, 2 ] | |
992 lObs = PathUtils.getListOfDistinctIdentifiers( lPaths ) | |
993 lExp.sort() | |
994 lObs.sort() | |
995 self.assertEqual( lObs, lExp ) | |
996 | |
997 def test_getListOfDistinctQueryNames( self ): | |
998 p1 = Path() | |
999 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
1000 p2 = Path() | |
1001 p2.setFromTuple( ( "2", "qry2", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
1002 p3 = Path() | |
1003 p3.setFromTuple( ( "2", "qry2", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
1004 lPaths = [ p1, p2, p3 ] | |
1005 lExp = [ "qry1", "qry2" ] | |
1006 lObs = PathUtils.getListOfDistinctQueryNames( lPaths ) | |
1007 lExp.sort() | |
1008 lObs.sort() | |
1009 self.assertEqual( lObs, lExp ) | |
1010 | |
1011 def test_getListOfDistinctSubjectNames( self ): | |
1012 p1 = Path() | |
1013 p1.setFromTuple( ( "1", "qry1", "1", "100", "sbj1", "1", "100", "0.0", "239", "90.0" ) ) | |
1014 p2 = Path() | |
1015 p2.setFromTuple( ( "2", "qry2", "121", "350", "sbj1", "101", "200", "0.0", "176", "91.2" ) ) | |
1016 p3 = Path() | |
1017 p3.setFromTuple( ( "2", "qry2", "121", "350", "sbj2", "101", "200", "0.0", "176", "91.2" ) ) | |
1018 lPaths = [ p1, p2, p3 ] | |
1019 lExp = [ "sbj1", "sbj2" ] | |
1020 lObs = PathUtils.getListOfDistinctSubjectNames( lPaths ) | |
1021 lExp.sort() | |
1022 lObs.sort() | |
1023 self.assertEqual( lObs, lExp ) | |
1024 | |
1025 def test_getListOfJoinCoordinatesOnQuery_returnCoord( self ): | |
1026 p1a = Path() | |
1027 p1a.setFromTuple( ( "1", "qry1", "1", "500", "sbj1", "1", "500", "0.0", "532", "95.0" ) ) | |
1028 p1b = Path() | |
1029 p1b.setFromTuple( ( "1", "qry1", "701", "900", "sbj1", "501", "700", "0.0", "232", "95.3" ) ) | |
1030 lExp = [ [ 501, 700 ] ] | |
1031 lPaths = [ p1a, p1b ] | |
1032 lObs = PathUtils.getListOfJoinCoordinatesOnQuery( lPaths ) | |
1033 lExp.sort() | |
1034 lObs.sort() | |
1035 self.assertEqual( lObs, lExp ) | |
1036 | |
1037 def test_getListOfJoinCoordinatesOnQuery_overlap( self ): | |
1038 p1a = Path() | |
1039 p1a.setFromTuple( ( "1", "qry1", "1", "500", "sbj1", "1", "500", "0.0", "532", "95.0" ) ) | |
1040 p1b = Path() | |
1041 p1b.setFromTuple( ( "1", "qry1", "491", "900", "sbj1", "501", "770", "0.0", "232", "95.3" ) ) | |
1042 lExp = [] | |
1043 lPaths = [ p1a, p1b ] | |
1044 minLength = 100 | |
1045 lObs = PathUtils.getListOfJoinCoordinatesOnQuery( lPaths, minLength ) | |
1046 lExp.sort() | |
1047 lObs.sort() | |
1048 self.assertEqual( lObs, lExp ) | |
1049 | |
1050 def test_getListOfJoinCoordinates_tooShort( self ): | |
1051 p1a = Path() | |
1052 p1a.setFromTuple( ( "1", "qry1", "1", "500", "sbj1", "1", "500", "0.0", "532", "95.0" ) ) | |
1053 p1b = Path() | |
1054 p1b.setFromTuple( ( "1", "qry1", "551", "900", "sbj1", "501", "750", "0.0", "232", "95.3" ) ) | |
1055 lExp = [] | |
1056 lPaths = [ p1a, p1b ] | |
1057 minLength = 100 | |
1058 lObs = PathUtils.getListOfJoinCoordinatesOnQuery( lPaths, minLength ) | |
1059 lExp.sort() | |
1060 lObs.sort() | |
1061 self.assertEqual( lObs, lExp ) | |
1062 | |
1063 def test_getLengthOnQueryFromPathList( self ): | |
1064 p1 = Path() | |
1065 p1.setFromTuple( ( "1", "qry1", "1", "70", "sbj1", "1", "70", "0.0", "132", "95.0" ) ) | |
1066 p2 = Path() | |
1067 p2.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1068 lPaths = [ p1, p2 ] | |
1069 exp = 90 | |
1070 obs = PathUtils.getLengthOnQueryFromPathList( lPaths ) | |
1071 self.assertEqual( obs, exp ) | |
1072 | |
1073 def test_convertPathFileIntoAlignFile( self ): | |
1074 pathFile = "dummyPathFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1075 pathFileHandler = open( pathFile, "w" ) | |
1076 pathFileHandler.write( "3\tchr2\t250\t151\tseq5\t1\t100\t1e-31\t147\t98.3\n" ) | |
1077 pathFileHandler.close() | |
1078 | |
1079 expFile = "dummyExpFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1080 expFileHandler = open( expFile, "w" ) | |
1081 expFileHandler.write( "chr2\t151\t250\tseq5\t100\t1\t1e-31\t147\t98.300000\n" ) | |
1082 expFileHandler.close() | |
1083 | |
1084 obsFile = "dummyObsFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1085 | |
1086 PathUtils.convertPathFileIntoAlignFile( pathFile, obsFile ) | |
1087 | |
1088 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1089 | |
1090 for f in [ pathFile, expFile, obsFile ]: | |
1091 if os.path.exists( f ): | |
1092 os.remove ( f ) | |
1093 | |
1094 def test_convertPathFileIntoMapFileWithQueryCoordsOnly( self ): | |
1095 pathFile = "dummyPathFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1096 pathFileHandler = open( pathFile, "w" ) | |
1097 pathFileHandler.write( "3\tchr2\t250\t151\tseq5\t1\t100\t1e-31\t147\t98.3\n" ) | |
1098 pathFileHandler.write( "4\tchr2\t191\t230\tseq8\t237\t387\t1e-11\t187\t95.3\n" ) | |
1099 pathFileHandler.write( "3\tchr2\t500\t301\tseq5\t101\t300\t1e-81\t247\t96.2\n" ) | |
1100 pathFileHandler.close() | |
1101 | |
1102 expFile = "dummyExpFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1103 expFileHandler = open( expFile, "w" ) | |
1104 expFileHandler.write( "seq5\tchr2\t250\t151\n" ) | |
1105 expFileHandler.write( "seq8\tchr2\t191\t230\n" ) | |
1106 expFileHandler.write( "seq5\tchr2\t500\t301\n" ) | |
1107 expFileHandler.close() | |
1108 | |
1109 obsFile = "dummyObsFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1110 | |
1111 PathUtils.convertPathFileIntoMapFileWithQueryCoordsOnly( pathFile, obsFile ) | |
1112 | |
1113 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1114 | |
1115 for f in [ pathFile, expFile, obsFile ]: | |
1116 if os.path.exists( f ): | |
1117 os.remove( f ) | |
1118 | |
1119 | |
1120 def test_mergeMatchesOnQueries( self ): | |
1121 pathFile = "dummyPathFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1122 pathFileHandler = open( pathFile, "w" ) | |
1123 pathFileHandler.write( "3\tchr2\t250\t151\tseq5\t1\t100\t1e-31\t147\t98.3\n" ) | |
1124 pathFileHandler.write( "4\tchr2\t230\t191\tseq8\t237\t387\t1e-11\t187\t95.3\n" ) | |
1125 pathFileHandler.write( "3\tchr2\t500\t301\tseq5\t101\t300\t1e-81\t247\t96.2\n" ) | |
1126 pathFileHandler.close() | |
1127 | |
1128 expFile = "dummyExpFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1129 expFileHandler = open( expFile, "w" ) | |
1130 expFileHandler.write( "0\tchr2\t151\t250\tseq5\t0\t0\t0.0\t0\t0\n" ) | |
1131 expFileHandler.write( "0\tchr2\t301\t500\tseq5\t0\t0\t0.0\t0\t0\n" ) | |
1132 expFileHandler.close() | |
1133 | |
1134 obsFile = "dummyObsFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1135 | |
1136 PathUtils.mergeMatchesOnQueries( pathFile, obsFile ) | |
1137 | |
1138 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1139 | |
1140 for f in [ pathFile, expFile, obsFile ]: | |
1141 if os.path.exists( f ): | |
1142 os.remove( f ) | |
1143 | |
1144 | |
1145 def test_filterPathListOnChainLength( self ): | |
1146 p1a = Path() | |
1147 p1a.setFromTuple( ( "1", "qry1", "1", "12", "sbj1", "1", "12", "0.0", "132", "95.0" ) ) | |
1148 p1b = Path() | |
1149 p1b.setFromTuple( ( "1", "qry1", "15", "30", "sbj1", "13", "28", "0.0", "132", "95.0" ) ) | |
1150 p2 = Path() | |
1151 p2.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1152 p3 = Path() | |
1153 p3.setFromTuple( ( "3", "qry2", "1", "12", "sbj3", "15", "1", "0.0", "132", "95.0" ) ) | |
1154 lPaths = [ p1a, p1b, p2, p3 ] | |
1155 lExp = [ p1a, p1b, p2 ] | |
1156 lObs = PathUtils.filterPathListOnChainLength( lPaths, 20 ) | |
1157 self.assertEqual( lExp, lObs ) | |
1158 | |
1159 def test_getPathListFromFile(self): | |
1160 file = "dummyFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1161 fileHandler = open( file, "w" ) | |
1162 fileHandler.write( "1\tchr2\t151\t250\tseq5\t0\t0\t0.0\t0\t0\n" ) | |
1163 fileHandler.write( "2\tchr2\t301\t500\tseq5\t0\t0\t0.0\t0\t0\n" ) | |
1164 fileHandler.close() | |
1165 p1 = Path() | |
1166 p1.setFromTuple( ( "1", "chr2", "151", "250", "seq5", "0", "0", "0.0", "0", "0" ) ) | |
1167 p2 = Path() | |
1168 p2.setFromTuple( ( "2", "chr2", "301", "500", "seq5", "0", "0", "0.0", "0", "0" ) ) | |
1169 expLPath = [ p1, p2 ] | |
1170 obsLPath = PathUtils.getPathListFromFile(file) | |
1171 expLPathSorted = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength(expLPath) | |
1172 obsLPathSorted = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength(obsLPath) | |
1173 os.remove(file) | |
1174 self.assertEqual( expLPathSorted, obsLPathSorted ) | |
1175 | |
1176 def test_getPathListFromFile_empty_file(self): | |
1177 file = "dummyFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1178 fileHandler = open( file, "w" ) | |
1179 fileHandler.close() | |
1180 expLPath = [] | |
1181 obsLPath = PathUtils.getPathListFromFile(file) | |
1182 expLPathSorted = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength(expLPath) | |
1183 obsLPathSorted = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength(obsLPath) | |
1184 os.remove(file) | |
1185 self.assertEqual( expLPathSorted, obsLPathSorted ) | |
1186 | |
1187 def test_convertPathFileIntoAlignFileViaPathrange_sortedInput( self ): | |
1188 p1a = Path() | |
1189 p1a.setFromTuple( ( "1", "qry1", "1", "12", "sbj1", "1", "12", "0.0", "132", "95.0" ) ) | |
1190 p1b = Path() | |
1191 p1b.setFromTuple( ( "1", "qry1", "16", "30", "sbj1", "13", "28", "1e-270", "150", "97.0" ) ) | |
1192 p2 = Path() | |
1193 p2.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1194 inFile = "dummyInFile" | |
1195 inF = open( inFile, "w" ) | |
1196 for iPath in [ p1a, p1b, p2 ]: | |
1197 iPath.write( inF ) | |
1198 inF.close() | |
1199 | |
1200 expFile = "dummyExpFile" | |
1201 expF = open( expFile, "w" ) | |
1202 a1 = Align() | |
1203 a1.setFromTuple( ( "qry1", "1", "30", "sbj1", "1", "28", "0.0", "282", str((95*12+97*15)/float(12+15)) ) ) | |
1204 a2 = Align() | |
1205 a2.setFromTuple( ( "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1206 for iAlign in [ a1, a2 ]: | |
1207 iAlign.write( expF ) | |
1208 expF.close() | |
1209 | |
1210 obsFile = "dummyObsFile" | |
1211 | |
1212 PathUtils.convertPathFileIntoAlignFileViaPathrange( inFile, obsFile, 0 ) | |
1213 | |
1214 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1215 | |
1216 for f in [ inFile, expFile, obsFile ]: | |
1217 os.remove( f ) | |
1218 | |
1219 | |
1220 def test_convertPathFileIntoAlignFileViaPathrange_unsortedInput( self ): | |
1221 p1a = Path() | |
1222 p1a.setFromTuple( ( "1", "qry1", "1", "12", "sbj1", "1", "12", "0.0", "132", "95.0" ) ) | |
1223 p1b = Path() | |
1224 p1b.setFromTuple( ( "1", "qry1", "16", "30", "sbj1", "13", "28", "0.0", "150", "97.0" ) ) | |
1225 p2 = Path() | |
1226 p2.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1227 inFile = "dummyInFile" | |
1228 inF = open( inFile, "w" ) | |
1229 for iPath in [ p1b, p2, p1a ]: | |
1230 iPath.write( inF ) | |
1231 inF.close() | |
1232 | |
1233 expFile = "dummyExpFile" | |
1234 expF = open( expFile, "w" ) | |
1235 a1 = Align() | |
1236 a1.setFromTuple( ( "qry1", "1", "30", "sbj1", "1", "28", "0.0", "282", str((95*12+97*15)/float(12+15)) ) ) | |
1237 a2 = Align() | |
1238 a2.setFromTuple( ( "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1239 for iAlign in [ a1, a2 ]: | |
1240 iAlign.write( expF ) | |
1241 expF.close() | |
1242 | |
1243 obsFile = "dummyObsFile" | |
1244 | |
1245 PathUtils.convertPathFileIntoAlignFileViaPathrange( inFile, obsFile, 0 ) | |
1246 | |
1247 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1248 | |
1249 for f in [ inFile, expFile, obsFile ]: | |
1250 os.remove( f ) | |
1251 | |
1252 | |
1253 def test_convertPathFileIntoAlignFileViaPathrange_sortedInput_subjectReverseStrand( self ): | |
1254 p1a = Path() | |
1255 p1a.setFromTuple( ( "1", "qry1", "1", "12", "sbj1", "12", "1", "0.0", "132", "95.0" ) ) | |
1256 p1b = Path() | |
1257 p1b.setFromTuple( ( "1", "qry1", "16", "30", "sbj1", "28", "13", "0.0", "150", "97.0" ) ) | |
1258 p2 = Path() | |
1259 p2.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1260 inFile = "dummyInFile" | |
1261 inF = open( inFile, "w" ) | |
1262 for iPath in [ p1a, p1b, p2 ]: | |
1263 iPath.write( inF ) | |
1264 inF.close() | |
1265 | |
1266 expFile = "dummyExpFile" | |
1267 expF = open( expFile, "w" ) | |
1268 a1 = Align() | |
1269 a1.setFromTuple( ( "qry1", "1", "30", "sbj1", "28", "1", "0.0", "282", str((95*12+97*15)/float(12+15)) ) ) | |
1270 a2 = Align() | |
1271 a2.setFromTuple( ( "qry1", "51", "90", "sbj2", "40", "1", "0.0", "132", "95.0" ) ) | |
1272 for iAlign in [ a1, a2 ]: | |
1273 iAlign.write( expF ) | |
1274 expF.close() | |
1275 | |
1276 obsFile = "dummyObsFile" | |
1277 | |
1278 PathUtils.convertPathFileIntoAlignFileViaPathrange( inFile, obsFile, 0 ) | |
1279 | |
1280 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1281 | |
1282 for f in [ inFile, expFile, obsFile ]: | |
1283 os.remove( f ) | |
1284 | |
1285 | |
1286 def test_splitPathListByQueryName_empty_list( self ): | |
1287 lPath = [] | |
1288 | |
1289 obsLPath = PathUtils.splitPathListByQueryName( lPath ) | |
1290 | |
1291 expLPath = [] | |
1292 | |
1293 self.assertEquals( expLPath, obsLPath ) | |
1294 | |
1295 | |
1296 def test_splitPathListByQueryName( self ): | |
1297 iPath1 = Path() | |
1298 iPath1.setFromString("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1299 iPath2 = Path() | |
1300 iPath2.setFromString("2\tchr2\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1301 iPath3 = Path() | |
1302 iPath3.setFromString("3\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1303 lPath = [ iPath1, iPath2, iPath3 ] | |
1304 | |
1305 obsLPath = PathUtils.splitPathListByQueryName( lPath ) | |
1306 | |
1307 expLPath = [ [ iPath1, iPath3 ], | |
1308 [ iPath2 ] ] | |
1309 | |
1310 self.assertEquals( expLPath, obsLPath ) | |
1311 | |
1312 | |
1313 def test_splitPathListByQueryName_last_align_alone( self ): | |
1314 iPath1 = Path() | |
1315 iPath1.setFromString("1\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1316 iPath2 = Path() | |
1317 iPath2.setFromString("2\tchr2\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1318 iPath3 = Path() | |
1319 iPath3.setFromString("3\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1320 iPath4 = Path() | |
1321 iPath4.setFromString("4\tchr3\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1322 iPath5 = Path() | |
1323 iPath5.setFromString("5\tchr2\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1324 iPath6 = Path() | |
1325 iPath6.setFromString("6\tchr1\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1326 iPath7 = Path() | |
1327 iPath7.setFromString("7\tchr1\t100\t110\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1328 iPath8 = Path() | |
1329 iPath8.setFromString("8\tchr2\t200\t220\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1330 iPath9 = Path() | |
1331 iPath9.setFromString("9\tchr4\t300\t330\tTE2\t150\t200\t1e-20\t30\t90.2\n") | |
1332 lPath = [ iPath1, iPath2, iPath3, iPath4, iPath5, iPath6, iPath7, iPath8, iPath9 ] | |
1333 | |
1334 obsLPath = PathUtils.splitPathListByQueryName( lPath ) | |
1335 | |
1336 expLPath = [ [ iPath1, iPath3, iPath6, iPath7 ], | |
1337 [ iPath2, iPath5, iPath8 ], | |
1338 [ iPath4 ], | |
1339 [ iPath9 ] ] | |
1340 | |
1341 self.assertEquals( expLPath, obsLPath ) | |
1342 | |
1343 | |
1344 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_alreadyOrdered_diffIdentifier( self ): | |
1345 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1346 iPath2 = Path( 2, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) | |
1347 lPaths = [ iPath1, iPath2 ] | |
1348 | |
1349 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ), | |
1350 Path( 2, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) ] | |
1351 | |
1352 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1353 | |
1354 self.assertEquals( lExp, lObs ) | |
1355 | |
1356 | |
1357 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_unordered_diffIdentifier( self ): | |
1358 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1359 iPath2 = Path( 2, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) | |
1360 lPaths = [ iPath2, iPath1 ] | |
1361 | |
1362 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ), | |
1363 Path( 2, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) ] | |
1364 | |
1365 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1366 | |
1367 self.assertEquals( lExp, lObs ) | |
1368 | |
1369 | |
1370 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_unordered_sameIdentifier( self ): | |
1371 iPath1a = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1372 iPath1b = Path( 1, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) | |
1373 lPaths = [ iPath1b, iPath1a ] | |
1374 | |
1375 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ), | |
1376 Path( 1, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) ] | |
1377 | |
1378 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1379 | |
1380 self.assertEquals( lExp, lObs ) | |
1381 | |
1382 | |
1383 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_unordered_overlapping( self ): | |
1384 iPath1 = Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ) | |
1385 iPath2 = Path( 2, Range("qry1",5,10), Range("sbj1",5,10), 0.0, 10, 98.7 ) | |
1386 lPaths = [ iPath2, iPath1 ] | |
1387 | |
1388 lExp = [ Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ), | |
1389 Path( 2, Range("qry1",5,10), Range("sbj1",5,10), 0.0, 10, 98.7 ) ] | |
1390 | |
1391 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1392 | |
1393 self.assertEquals( lExp, lObs ) | |
1394 | |
1395 | |
1396 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_threePaths_2sameMin( self ): | |
1397 iPath1 = Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ) | |
1398 iPath2 = Path( 2, Range("qry1",5,12), Range("sbj1",5,12), 0.0, 10, 98.7 ) | |
1399 iPath3 = Path( 3, Range("qry1",5,10), Range("sbj1",5,10), 0.0, 10, 98.7 ) | |
1400 lPaths = [ iPath3, iPath2, iPath1 ] | |
1401 | |
1402 lExp = [ Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ), | |
1403 Path( 2, Range("qry1",5,12), Range("sbj1",5,12), 0.0, 10, 98.7 ), | |
1404 Path( 3, Range("qry1",5,10), Range("sbj1",5,10), 0.0, 10, 98.7 ) ] | |
1405 | |
1406 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1407 | |
1408 self.assertEquals( lExp, lObs ) | |
1409 | |
1410 | |
1411 def test_getPathListSortedByIncreasingQueryMinThenInvQueryLength_unordered_included( self ): | |
1412 iPath1 = Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ) | |
1413 iPath2 = Path( 2, Range("qry1",2,5), Range("sbj1",2,5), 0.0, 10, 98.7 ) | |
1414 lPaths = [ iPath2, iPath1 ] | |
1415 | |
1416 lExp = [ Path( 1, Range("qry1",1,6), Range("sbj1",1,6), 0.0, 10, 98.7 ), | |
1417 Path( 2, Range("qry1",2,5), Range("sbj1",2,5), 0.0, 10, 98.7 ) ] | |
1418 | |
1419 lObs = PathUtils.getPathListSortedByIncreasingQueryMinThenInvQueryLength( lPaths ) | |
1420 | |
1421 self.assertEquals( lExp, lObs ) | |
1422 | |
1423 | |
1424 def test_mergePathsInList_emptyList( self ): | |
1425 lPaths = [] | |
1426 lExp = [] | |
1427 lObs = PathUtils.mergePathsInList( lPaths ) | |
1428 self.assertEquals( lExp, lObs ) | |
1429 | |
1430 | |
1431 def test_mergePathsInList_onePath( self ): | |
1432 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1433 lPaths = [ iPath1 ] | |
1434 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) ] | |
1435 lObs = PathUtils.mergePathsInList( lPaths ) | |
1436 self.assertEquals( lExp, lObs ) | |
1437 | |
1438 | |
1439 def test_mergePathsInList_noOverlap( self ): | |
1440 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1441 iPath2 = Path( 1, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) | |
1442 lPaths = [ iPath1, iPath2 ] | |
1443 | |
1444 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ), | |
1445 Path( 1, Range("qry1",21,30), Range("sbj1",11,20), 0.0, 10, 98.7 ) ] | |
1446 | |
1447 lObs = PathUtils.mergePathsInList( lPaths ) | |
1448 | |
1449 self.assertEquals( lExp, lObs ) | |
1450 | |
1451 | |
1452 def test_mergePathsInList_withOverlap( self ): | |
1453 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1454 iPath2 = Path( 1, Range("qry1",6,15), Range("sbj1",6,15), 0.0, 10, 98.7 ) | |
1455 lPaths = [ iPath2, iPath1 ] | |
1456 | |
1457 lExp = [ Path( 1, Range("qry1",1,15), Range("sbj1",1,15), 0.0, 10, 98.7 ) ] | |
1458 | |
1459 lObs = PathUtils.mergePathsInList( lPaths ) | |
1460 | |
1461 self.assertEquals( lExp, lObs ) | |
1462 | |
1463 | |
1464 def test_mergePathsInList_withOverlap_reverseOnly( self ): | |
1465 iPath1 = Path( 1, Range("qry1",10,1), Range("sbj1",10,1), 0.0, 10, 98.7 ) | |
1466 iPath2 = Path( 1, Range("qry1",15,6), Range("sbj1",15,6), 0.0, 10, 98.7 ) | |
1467 lPaths = [ iPath2, iPath1 ] | |
1468 | |
1469 lExp = [ Path( 1, Range("qry1",15,1), Range("sbj1",15,1), 0.0, 10, 98.7 ) ] | |
1470 | |
1471 lObs = PathUtils.mergePathsInList( lPaths ) | |
1472 | |
1473 self.assertEquals( lExp, lObs ) | |
1474 | |
1475 | |
1476 def test_mergePathsInList_withOverlap_directAndReverse( self ): | |
1477 iPath1 = Path( 1, Range("qry1",10,1), Range("sbj1",10,1), 0.0, 10, 98.7 ) | |
1478 iPath2 = Path( 1, Range("qry1",15,6), Range("sbj1",15,6), 0.0, 10, 98.7 ) | |
1479 iPath3 = Path( 1, Range("qry1",2,5), Range("sbj1",2,5), 0.0, 10, 98.7 ) | |
1480 lPaths = [ iPath3, iPath2, iPath1 ] | |
1481 | |
1482 lExp = [ Path( 1, Range("qry1",15,1), Range("sbj1",15,1), 0.0, 10, 98.7 ) ] | |
1483 | |
1484 lObs = PathUtils.mergePathsInList( lPaths ) | |
1485 | |
1486 self.assertEquals( lExp, lObs ) | |
1487 | |
1488 | |
1489 def test_mergePathsInList_diffQueries_withOverlap( self ): | |
1490 iPath1 = Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ) | |
1491 iPath2 = Path( 2, Range("qry2",6,15), Range("sbj1",6,15), 0.0, 10, 98.7 ) | |
1492 lPaths = [ iPath2, iPath1 ] | |
1493 | |
1494 lExp = [ Path( 1, Range("qry1",1,10), Range("sbj1",1,10), 0.0, 10, 98.7 ), | |
1495 Path( 2, Range("qry2",6,15), Range("sbj1",6,15), 0.0, 10, 98.7 ) ] | |
1496 | |
1497 lObs = PathUtils.mergePathsInList( lPaths ) | |
1498 | |
1499 self.assertEquals( lExp, lObs ) | |
1500 | |
1501 | |
1502 def test_mergePathsInList_nonOverlappingSubjects( self ): | |
1503 iPath1 = Path( 1, Range("qry1",398,491), Range("sbj1",10,112), 0.0, 10, 98.7 ) | |
1504 iPath2 = Path( 1, Range("qry1",451,492), Range("sbj1",124,169), 0.0, 10, 98.7 ) | |
1505 iPath3 = Path( 1, Range("qry1",493,531), Range("sbj1",249,294), 0.0, 10, 98.7 ) | |
1506 lPaths = [ iPath3, iPath2, iPath1 ] | |
1507 | |
1508 lExp = [ Path( 1, Range("qry1",398,491), Range("sbj1",10,112), 0.0, 10, 98.7 ), | |
1509 Path( 1, Range("qry1",451,492), Range("sbj1",124,169), 0.0, 10, 98.7 ), | |
1510 Path( 1, Range("qry1",493,531), Range("sbj1",249,294), 0.0, 10, 98.7 ) ] | |
1511 | |
1512 lObs = PathUtils.mergePathsInList( lPaths ) | |
1513 | |
1514 self.assertEquals( lExp, lObs ) | |
1515 | |
1516 | |
1517 def test_mergePathsInListUsingQueryCoordsOnly( self ): | |
1518 iPath1 = Path( 1, Range("qry1",398,491), Range("sbj1",10,112), 0.0, 10, 98.7 ) | |
1519 iPath2 = Path( 1, Range("qry1",451,492), Range("sbj1",124,169), 0.0, 10, 98.7 ) | |
1520 iPath3 = Path( 1, Range("qry1",493,531), Range("sbj1",249,294), 0.0, 10, 98.7 ) | |
1521 lPaths = [ iPath3, iPath2, iPath1 ] | |
1522 | |
1523 lExp = [ Path( 1, Range("qry1",398,492), Range("sbj1",10,169), 0.0, 10, 98.7 ), | |
1524 Path( 1, Range("qry1",493,531), Range("sbj1",249,294), 0.0, 10, 98.7 ) ] | |
1525 | |
1526 lObs = PathUtils.mergePathsInListUsingQueryCoordsOnly( lPaths ) | |
1527 | |
1528 self.assertEquals( lExp, lObs ) | |
1529 | |
1530 | |
1531 def test_convertPathFileIntoGffFile( self ): | |
1532 p1 = Path() | |
1533 p1.setFromTuple( ( "1", "qry1", "12", "1", "sbj1", "1", "12", "0.0", "132", "95.0" ) ) | |
1534 p2a = Path() | |
1535 p2a.setFromTuple( ( "2", "qry1", "16", "30", "sbj2", "1", "15", "1e-270", "150", "97.0" ) ) | |
1536 p2b = Path() | |
1537 p2b.setFromTuple( ( "2", "qry1", "51", "90", "sbj2", "21", "60", "0.0", "132", "95.9" ) ) | |
1538 inFile = "dummyInFile" | |
1539 PathUtils.writeListInFile( [ p1, p2a, p2b ], inFile, "w" ) | |
1540 | |
1541 expFile = "dummyExpFile" | |
1542 expF = open( expFile, "w" ) | |
1543 expF.write( "qry1\tREPET\tmatch\t1\t12\t0\t-\t.\tID=1;Target=sbj1 1 12\n" ) | |
1544 expF.write( "qry1\tREPET\tmatch\t16\t90\t0\t+\t.\tID=ms2;Target=sbj2 1 60\n" ) | |
1545 expF.write( "qry1\tREPET\tmatch_part\t16\t30\t1e-270\t+\t.\tID=mp2-1;Parent=ms2;Target=sbj2 1 15\n" ) | |
1546 expF.write( "qry1\tREPET\tmatch_part\t51\t90\t0\t+\t.\tID=mp2-2;Parent=ms2;Target=sbj2 21 60\n" ) | |
1547 expF.close() | |
1548 | |
1549 obsFile = "dummyObsFile" | |
1550 | |
1551 PathUtils.convertPathFileIntoGffFile( inFile, obsFile ) | |
1552 | |
1553 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1554 | |
1555 for f in [ inFile, expFile, obsFile ]: | |
1556 os.remove( f ) | |
1557 | |
1558 | |
1559 def test_convertPathFileIntoSetFile( self ): | |
1560 pathFile = "dummyPathFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1561 pathFileHandler = open( pathFile, "w" ) | |
1562 pathFileHandler.write( "3\tchr2\t250\t151\tseq5\t1\t100\t1e-31\t147\t98.3\n" ) | |
1563 pathFileHandler.close() | |
1564 | |
1565 expFile = "dummyExpFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1566 expFileHandler = open( expFile, "w" ) | |
1567 expFileHandler.write( "3\tseq5\tchr2\t250\t151\n" ) | |
1568 expFileHandler.close() | |
1569 | |
1570 obsFile = "dummyObsFile_%s_%s" % ( time.strftime("%Y%m%d%H%M%S"), os.getpid() ) | |
1571 | |
1572 PathUtils.convertPathFileIntoSetFile( pathFile, obsFile ) | |
1573 | |
1574 self.assertTrue( FileUtils.are2FilesIdentical( expFile, obsFile ) ) | |
1575 | |
1576 for f in [ pathFile, expFile, obsFile ]: | |
1577 if os.path.exists( f ): | |
1578 os.remove ( f ) | |
1579 | |
1580 | |
1581 def test_removeInPathFileDuplicatedPathOnQueryNameQueryCoordAndSubjectName(self): | |
1582 pathFile = "dummyPathFile" | |
1583 f = open(pathFile, "w") | |
1584 f.write("1\tG4\t1\t3856\tAtha5Chr4_Pals_Piler_3590_69_MAP_3\t1\t3856\t0\t7642\t99.9741\n") | |
1585 f.write("1\tG4\t1\t3856\tAtha5Chr4_Pals_Piler_3590_69_MAP_3\t100\t3956\t0\t7642\t99.9741\n") | |
1586 f.write("2\trooA\t1\t386\tAtha5Chr4_Pals_Piler_3589_69_MAP_3\t1\t386\t6.3e-220\t758\t99.4819\n") | |
1587 f.write("3\trooA\t7236\t7621\tAtha5Chr4_Pals_Piler_3536_69_MAP_3\t1\t386\t6.3e-220\t758\t99.4819\n") | |
1588 f.write("4\trooA\t387\t7235\tAtha5Chr4_Pals_Piler_3596_69_MAP_3\t1\t6849\t0\t13580\t99.9854\n") | |
1589 f.write("5\taurora-element\t4046\t4257\tAtha5Chr4_Pals_Piler_3540_69_MAP_3\t1\t204\t6.1e-80\t300\t96.5686\n") | |
1590 f.write("6\taurora-element\t274\t381\tAtha5Chr4_Pals_Piler_3595_23_MAP_3\t177\t284\t0\t191\t97.2222\n") | |
1591 f.write("6\taurora-element\t116\t287\tAtha5Chr4_Pals_Piler_3595_30_MAP_3\t3\t170\t0\t290\t98.8095\n") | |
1592 f.write("7\taurora-element\t393\t902\tAtha5Chr4_Pals_Piler_3595_31_MAP_3\t1467\t1945\t0\t873\t97.2441\n") | |
1593 f.write("7\taurora-element\t393\t902\tAtha5Chr4_Pals_Piler_3595_31_MAP_3\t276\t100784\t0\t869\t98.1211\n") | |
1594 f.write("7\taurora-element\t1387\t2271\tAtha5Chr4_Pals_Piler_3595_31_MAP_3\t276\t10780\t0\t1576\t97.6244\n") | |
1595 f.write("8\taurora-element\t2486\t2828\tAtha5Chr4_Pals_Piler_3595_50_MAP_3\t4301\t4641\t0\t585\t97.3607\n") | |
1596 f.write("9\taurora-element\t2265\t2483\tAtha5Chr4_Pals_Piler_3595_62_MAP_3\t3999\t4218\t0\t361\t96.347\n") | |
1597 f.write("10\taurora-element\t2834\t4045\tAtha5Chr4_Pals_Piler_3595_69_MAP_3\t4800\t6011\t0\t2074\t97.0248\n") | |
1598 f.write("11\taurora-element\t2\t113\tAtha5Chr4_Pals_Piler_3598_69_MAP_3\t205\t317\t8.5e-37\t157\t93.75\n") | |
1599 f.write("11\taurora-element\t2\t113\tAtha5Chr4_Pals_Piler_3598_69_MAP_3\t305\t417\t8.5e-37\t157\t93.75\n") | |
1600 f.write("11\taurora-element\t2\t113\tAtha5Chr4_Pals_Piler_3598_69_MAP_3\t305\t417\t8.5e-37\t157\t93.75\n") | |
1601 f.close() | |
1602 | |
1603 obsPathFile = "obsDummyPathFile" | |
1604 PathUtils.removeInPathFileDuplicatedPathOnQueryNameQueryCoordAndSubjectName(pathFile, obsPathFile) | |
1605 | |
1606 expPathFile = "expDummyPathFile" | |
1607 f = open(expPathFile, "w") | |
1608 f.write("1\tG4\t1\t3856\tAtha5Chr4_Pals_Piler_3590_69_MAP_3\t1\t3856\t0\t7642\t99.974100\n") | |
1609 f.write("2\trooA\t1\t386\tAtha5Chr4_Pals_Piler_3589_69_MAP_3\t1\t386\t6.3e-220\t758\t99.481900\n") | |
1610 f.write("3\trooA\t7236\t7621\tAtha5Chr4_Pals_Piler_3536_69_MAP_3\t1\t386\t6.3e-220\t758\t99.481900\n") | |
1611 f.write("4\trooA\t387\t7235\tAtha5Chr4_Pals_Piler_3596_69_MAP_3\t1\t6849\t0\t13580\t99.985400\n") | |
1612 f.write("5\taurora-element\t4046\t4257\tAtha5Chr4_Pals_Piler_3540_69_MAP_3\t1\t204\t6.1e-80\t300\t96.568600\n") | |
1613 f.write("6\taurora-element\t274\t381\tAtha5Chr4_Pals_Piler_3595_23_MAP_3\t177\t284\t0\t191\t97.222200\n") | |
1614 f.write("6\taurora-element\t116\t287\tAtha5Chr4_Pals_Piler_3595_30_MAP_3\t3\t170\t0\t290\t98.809500\n") | |
1615 f.write("7\taurora-element\t393\t902\tAtha5Chr4_Pals_Piler_3595_31_MAP_3\t1467\t1945\t0\t873\t97.244100\n") | |
1616 f.write("7\taurora-element\t1387\t2271\tAtha5Chr4_Pals_Piler_3595_31_MAP_3\t276\t10780\t0\t1576\t97.624400\n") | |
1617 f.write("8\taurora-element\t2486\t2828\tAtha5Chr4_Pals_Piler_3595_50_MAP_3\t4301\t4641\t0\t585\t97.360700\n") | |
1618 f.write("9\taurora-element\t2265\t2483\tAtha5Chr4_Pals_Piler_3595_62_MAP_3\t3999\t4218\t0\t361\t96.347000\n") | |
1619 f.write("10\taurora-element\t2834\t4045\tAtha5Chr4_Pals_Piler_3595_69_MAP_3\t4800\t6011\t0\t2074\t97.024800\n") | |
1620 f.write("11\taurora-element\t2\t113\tAtha5Chr4_Pals_Piler_3598_69_MAP_3\t205\t317\t8.5e-37\t157\t93.750000\n") | |
1621 f.close() | |
1622 | |
1623 self.assertTrue(FileUtils.are2FilesIdentical(expPathFile, obsPathFile)) | |
1624 | |
1625 os.remove(pathFile) | |
1626 os.remove(expPathFile) | |
1627 os.remove(obsPathFile) | |
1628 | |
1629 | |
1630 def test_getPathListWithoutDuplicatesOnQueryCoord(self): | |
1631 iPath1 = Path(1, Range("qry1",398,491), Range("sbj1",10,112), 0.0, 10, 98.7) | |
1632 iPath2 = Path(1, Range("qry1",451,492), Range("sbj1",124,169), 0.0, 10, 98.7) | |
1633 iPath3 = Path(1, Range("qry1",451,492), Range("sbj1",249,294), 0.0, 10, 98.7) | |
1634 lPaths = [iPath3, iPath2, iPath1] | |
1635 | |
1636 obslPaths = PathUtils.getPathListWithoutDuplicatesOnQueryCoord(lPaths) | |
1637 | |
1638 explPaths = [iPath1, iPath3] | |
1639 | |
1640 self.assertEquals(explPaths, obslPaths) | |
1641 | |
1642 | |
1643 def _makePathListFromTupleList ( self, tupleList ): | |
1644 pathList = [] | |
1645 for tuple in tupleList: | |
1646 path = Path() | |
1647 path.setFromTuple(tuple) | |
1648 pathList.append(path) | |
1649 return pathList | |
1650 | |
1651 def _makePathListFromStringList (self, stringList): | |
1652 pathList = [] | |
1653 for string in stringList: | |
1654 path = Path() | |
1655 path.setFromString(string) | |
1656 pathList.append(path) | |
1657 return pathList | |
1658 | |
1659 def _show (self, list): | |
1660 for item in list: | |
1661 print item.toString() | |
1662 | |
1663 | |
1664 test_suite = unittest.TestSuite() | |
1665 test_suite.addTest( unittest.makeSuite( Test_PathUtils ) ) | |
1666 if __name__ == "__main__": | |
1667 unittest.TextTestRunner(verbosity=2).run( test_suite ) |