2 Created on Aug 30, 2010
9 from array import array
10 from erange import commoncode
11 from erange import Region
12 from cistematic.genomes import Genome
15 class TestCommoncode(unittest.TestCase):
16 logFile = "testLogFile"
17 celegansChroms = ["I", "II", "III", "IV", "V", "X", "MtDNA"]
18 genome = Genome("celegans")
26 os.remove(self.logFile)
31 def testGetReverseComplement(self):
32 self.assertEquals("T", commoncode.getReverseComplement("A"))
33 self.assertEquals("A", commoncode.getReverseComplement("T"))
34 self.assertEquals("C", commoncode.getReverseComplement("G"))
35 self.assertEquals("G", commoncode.getReverseComplement("C"))
36 self.assertEquals("N", commoncode.getReverseComplement("N"))
37 self.assertRaises(KeyError, commoncode.getReverseComplement, "")
38 self.assertRaises(KeyError, commoncode.getReverseComplement, "B")
41 def testCountDuplicatesInList(self):
43 self.assertEquals([], commoncode.countDuplicatesInList(testList))
46 result = [(0, 1), (1, 1)]
47 self.assertEquals(result, commoncode.countDuplicatesInList(testList))
50 result = [(0, 1), (1, 2)]
51 self.assertEquals(result, commoncode.countDuplicatesInList(testList))
53 testList = [0, 1, 2, 1]
54 result = [(0, 1), (1, 2), (2, 1)]
55 self.assertEquals(result, commoncode.countDuplicatesInList(testList))
58 def testWriteLog(self):
59 messenger = "testMessenger"
60 message = "testMessage"
62 commoncode.writeLog(self.logFile, messenger, message)
63 file = open(self.logFile)
64 line = file.readline()
66 self.assertEquals(fields[2], "[%s]" % messenger)
67 self.assertEquals(fields[3], message)
68 line = file.readline()
69 self.assertEquals("", line)
71 messenger2 = "testMessenger2"
72 message2 = "testMessage2"
74 commoncode.writeLog(self.logFile, messenger2, message2)
75 file = open(self.logFile)
76 line = file.readline()
78 self.assertEquals(fields[2], "[%s]" % messenger)
79 self.assertEquals(fields[3], message)
80 line = file.readline()
82 self.assertEquals(fields[2], "[%s]" % messenger2)
83 self.assertEquals(fields[3], message2)
84 line = file.readline()
85 self.assertEquals("", line)
87 os.remove(self.logFile)
89 commoncode.writeLog(self.logFile, messenger, message)
90 file = open(self.logFile)
91 line = file.readline()
93 self.assertEquals(fields[2], "[%s]" % messenger)
94 self.assertEquals(fields[3], message)
95 line = file.readline()
96 self.assertEquals("", line)
98 os.remove(self.logFile)
100 commoncode.writeLog(self.logFile, "", message)
101 file = open(self.logFile)
102 line = file.readline()
103 fields = line.split()
104 self.assertEquals(fields[2], "[]")
105 self.assertEquals(fields[3], message)
106 line = file.readline()
107 self.assertEquals("", line)
109 os.remove(self.logFile)
111 commoncode.writeLog(self.logFile, "", "")
112 file = open(self.logFile)
113 line = file.readline()
114 fields = line.split()
115 self.assertEquals(fields[2], "[]")
116 self.assertEquals(3, len(fields))
117 line = file.readline()
118 self.assertEquals("", line)
121 def testGetMergedRegions(self):
122 testfile = open("regionTestFile", "w")
123 regionEntry = string.join(["1", "chr1", "10", "20", "5"], "\t")
124 testfile.write(regionEntry)
126 result = commoncode.getMergedRegions("regionTestFile")
127 self.assertEquals(10, result["1"][0].start)
128 self.assertEquals(20, result["1"][0].stop)
129 self.assertEquals(10, result["1"][0].length)
130 os.remove("regionTestFile")
133 def testGetMergedRegionsFromList(self):
134 self.assertEquals({}, commoncode.getMergedRegionsFromList([]))
136 regionEntry = string.join(["1", "chr1", "10", "20", "5"], "\t")
137 regionList = [regionEntry]
138 result = commoncode.getMergedRegionsFromList(regionList)
139 self.assertEquals(10, result["1"][0].start)
140 self.assertEquals(20, result["1"][0].stop)
141 self.assertEquals(10, result["1"][0].length)
143 result = commoncode.getMergedRegionsFromList(regionList, pad=5)
144 self.assertEquals(5, result["1"][0].start)
145 self.assertEquals(25, result["1"][0].stop)
146 self.assertEquals(20, result["1"][0].length)
148 result = commoncode.getMergedRegionsFromList(regionList, pad=-2)
149 self.assertEquals(12, result["1"][0].start)
150 self.assertEquals(18, result["1"][0].stop)
151 self.assertEquals(6, result["1"][0].length)
153 result = commoncode.getMergedRegionsFromList(regionList, fullChrom=True)
154 self.assertEquals(10, result["chr1"][0].start)
155 self.assertEquals(20, result["chr1"][0].stop)
156 self.assertEquals(10, result["chr1"][0].length)
158 regionEntry = string.join(["1", "chr1:10-20", "5"], "\t")
159 regionList = [regionEntry]
160 result = commoncode.getMergedRegionsFromList(regionList, compact=True, scoreField=2)
161 self.assertEquals(10, result["1"][0].start)
162 self.assertEquals(20, result["1"][0].stop)
163 self.assertEquals(10, result["1"][0].length)
165 regionEntry = string.join(["1", "chr1", "10", "20", "5"], "\t")
166 regionList = [regionEntry]
167 regionEntry = string.join(["2", "chr1", "15", "40", "10"], "\t")
168 regionList.append(regionEntry)
169 result = commoncode.getMergedRegionsFromList(regionList)
170 self.assertEquals(10, result["1"][0].start)
171 self.assertEquals(40, result["1"][0].stop)
172 self.assertEquals(30, result["1"][0].length)
174 result = commoncode.getMergedRegionsFromList(regionList, doMerge=False)
175 self.assertEquals(10, result["1"][0].start)
176 self.assertEquals(20, result["1"][0].stop)
177 self.assertEquals(10, result["1"][0].length)
178 self.assertEquals(15, result["1"][1].start)
179 self.assertEquals(40, result["1"][1].stop)
180 self.assertEquals(25, result["1"][1].length)
182 result = commoncode.getMergedRegionsFromList(regionList, doMerge=False, keepLabel=True)
183 self.assertEquals(10, result["1"][0].start)
184 self.assertEquals(20, result["1"][0].stop)
185 self.assertEquals(10, result["1"][0].length)
186 self.assertEquals("1", result["1"][0].label)
187 self.assertEquals(15, result["1"][1].start)
188 self.assertEquals(40, result["1"][1].stop)
189 self.assertEquals(25, result["1"][1].length)
190 self.assertEquals("2", result["1"][1].label)
192 regionEntry = string.join(["1", "spacer", "chr1", "10", "20", "5"], "\t")
193 regionList = [regionEntry]
194 regionEntry = string.join(["2", "spacer2", "chr1", "15", "40", "10"], "\t")
195 regionList.append(regionEntry)
196 result = commoncode.getMergedRegionsFromList(regionList, doMerge=False, keepLabel=True, chromField=2)
197 self.assertEquals(10, result["1"][0].start)
198 self.assertEquals(20, result["1"][0].stop)
199 self.assertEquals(10, result["1"][0].length)
200 self.assertEquals("1\tspacer", result["1"][0].label)
201 self.assertEquals(15, result["1"][1].start)
202 self.assertEquals(40, result["1"][1].stop)
203 self.assertEquals(25, result["1"][1].length)
204 self.assertEquals("2\tspacer2", result["1"][1].label)
206 regionEntry = string.join(["1", "chr1", "10", "20", "5"], "\t")
207 regionList = [regionEntry]
208 regionEntry = string.join(["2", "chr1", "2030", "2040", "15"], "\t")
209 regionList.append(regionEntry)
210 result = commoncode.getMergedRegionsFromList(regionList)
211 self.assertEquals(10, result["1"][0].start)
212 self.assertEquals(20, result["1"][0].stop)
213 self.assertEquals(10, result["1"][0].length)
214 self.assertEquals(2030, result["1"][1].start)
215 self.assertEquals(2040, result["1"][1].stop)
216 self.assertEquals(10, result["1"][1].length)
218 result = commoncode.getMergedRegionsFromList(regionList, maxDist=3000)
219 self.assertEquals(10, result["1"][0].start)
220 self.assertEquals(2040, result["1"][0].stop)
221 self.assertEquals(2030, result["1"][0].length)
223 result = commoncode.getMergedRegionsFromList(regionList, minHits=5)
224 self.assertEquals(10, result["1"][0].start)
225 self.assertEquals(20, result["1"][0].stop)
226 self.assertEquals(10, result["1"][0].length)
227 self.assertEquals(2030, result["1"][1].start)
228 self.assertEquals(2040, result["1"][1].stop)
229 self.assertEquals(10, result["1"][1].length)
231 result = commoncode.getMergedRegionsFromList(regionList, minHits=12)
232 self.assertEquals(2030, result["1"][0].start)
233 self.assertEquals(2040, result["1"][0].stop)
234 self.assertEquals(10, result["1"][0].length)
235 result = commoncode.getMergedRegionsFromList(regionList, minHits=12)
236 self.assertEquals(2030, result["1"][0].start)
237 self.assertEquals(2040, result["1"][0].stop)
238 self.assertEquals(10, result["1"][0].length)
240 regionEntry = string.join(["1", "chr1", "10", "20", "+", "5"], "\t")
241 regionList = [regionEntry]
242 regionEntry = string.join(["2", "chr2", "15", "40", "+", "15"], "\t")
243 regionList.append(regionEntry)
244 result = commoncode.getMergedRegionsFromList(regionList, scoreField=5, minHits=12)
245 self.assertEquals(15, result["2"][0].start)
246 self.assertEquals(40, result["2"][0].stop)
247 self.assertEquals(25, result["2"][0].length)
248 self.assertRaises(IndexError, commoncode.getMergedRegionsFromList, regionList, scoreField=6, returnTop=1)
249 self.assertEquals({}, commoncode.getMergedRegionsFromList(regionList, scoreField=6))
250 self.assertEquals({}, commoncode.getMergedRegionsFromList(regionList, scoreField=1))
252 regionEntry = string.join(["1", "chr1", "10", "20", "5", "3", "40"], "\t")
253 regionList = [regionEntry]
254 result = commoncode.getMergedRegionsFromList(regionList)
255 self.assertEquals(10, result["1"][0].start)
256 self.assertEquals(20, result["1"][0].stop)
257 self.assertEquals(10, result["1"][0].length)
259 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True)
260 self.assertEquals(10, result["1"][0].start)
261 self.assertEquals(20, result["1"][0].stop)
262 self.assertEquals(10, result["1"][0].length)
263 self.assertEquals(3, result["1"][0].peakPos)
264 self.assertEquals(40, result["1"][0].peakHeight)
266 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, keepLabel=True)
267 self.assertEquals(10, result["1"][0].start)
268 self.assertEquals(20, result["1"][0].stop)
269 self.assertEquals(10, result["1"][0].length)
270 self.assertEquals(3, result["1"][0].peakPos)
271 self.assertEquals(40, result["1"][0].peakHeight)
272 self.assertEquals("1", result["1"][0].label)
274 regionEntry = string.join(["2", "chr2", "15", "40", "32", "17"], "\t")
275 regionList.append(regionEntry)
276 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, keepLabel=True)
277 self.assertEquals(10, result["1"][0].start)
278 self.assertEquals(20, result["1"][0].stop)
279 self.assertEquals(10, result["1"][0].length)
280 self.assertEquals(3, result["1"][0].peakPos)
281 self.assertEquals(40, result["1"][0].peakHeight)
282 self.assertEquals("1", result["1"][0].label)
283 self.assertEquals(15, result["2"][0].start)
284 self.assertEquals(40, result["2"][0].stop)
285 self.assertEquals(25, result["2"][0].length)
286 self.assertEquals(32, result["2"][0].peakPos)
287 self.assertEquals(17, result["2"][0].peakHeight)
288 self.assertEquals("2", result["2"][0].label)
290 regionEntry = string.join(["3", "chr1", "15", "40", "32", "17"], "\t")
291 regionList.append(regionEntry)
292 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, keepLabel=True)
293 self.assertEquals(10, result["1"][0].start)
294 self.assertEquals(40, result["1"][0].stop)
295 self.assertEquals(30, result["1"][0].length)
296 self.assertEquals(3, result["1"][0].peakPos)
297 self.assertEquals(40, result["1"][0].peakHeight)
298 self.assertEquals("3", result["1"][0].label)
299 self.assertEquals(15, result["2"][0].start)
300 self.assertEquals(40, result["2"][0].stop)
301 self.assertEquals(25, result["2"][0].length)
302 self.assertEquals(32, result["2"][0].peakPos)
303 self.assertEquals(17, result["2"][0].peakHeight)
304 self.assertEquals("2", result["2"][0].label)
306 regionEntry = string.join(["4", "chr2", "65", "88", "72", "7"], "\t")
307 regionList.append(regionEntry)
308 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, keepLabel=True)
309 self.assertEquals(10, result["1"][0].start)
310 self.assertEquals(40, result["1"][0].stop)
311 self.assertEquals(30, result["1"][0].length)
312 self.assertEquals(3, result["1"][0].peakPos)
313 self.assertEquals(40, result["1"][0].peakHeight)
314 self.assertEquals("3", result["1"][0].label)
315 self.assertEquals(15, result["2"][0].start)
316 self.assertEquals(88, result["2"][0].stop)
317 self.assertEquals(73, result["2"][0].length)
318 self.assertEquals(32, result["2"][0].peakPos)
319 self.assertEquals(17, result["2"][0].peakHeight)
320 self.assertEquals("4", result["2"][0].label)
322 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, keepLabel=True, doMerge=False)
323 self.assertEquals(10, result["1"][0].start)
324 self.assertEquals(20, result["1"][0].stop)
325 self.assertEquals(10, result["1"][0].length)
326 self.assertEquals(3, result["1"][0].peakPos)
327 self.assertEquals(40, result["1"][0].peakHeight)
328 self.assertEquals("1", result["1"][0].label)
329 self.assertEquals(15, result["1"][1].start)
330 self.assertEquals(40, result["1"][1].stop)
331 self.assertEquals(25, result["1"][1].length)
332 self.assertEquals(32, result["1"][1].peakPos)
333 self.assertEquals(17, result["1"][1].peakHeight)
334 self.assertEquals("3", result["1"][1].label)
335 self.assertEquals(15, result["2"][0].start)
336 self.assertEquals(40, result["2"][0].stop)
337 self.assertEquals(25, result["2"][0].length)
338 self.assertEquals(32, result["2"][0].peakPos)
339 self.assertEquals(17, result["2"][0].peakHeight)
340 self.assertEquals("2", result["2"][0].label)
341 self.assertEquals(65, result["2"][1].start)
342 self.assertEquals(88, result["2"][1].stop)
343 self.assertEquals(23, result["2"][1].length)
344 self.assertEquals(72, result["2"][1].peakPos)
345 self.assertEquals(7, result["2"][1].peakHeight)
346 self.assertEquals("4", result["2"][1].label)
348 regionList = ["# comment"]
349 regionEntry = string.join(["1", "chr1", "10", "20", "5", "3", "40"], "\t")
350 regionList.append(regionEntry)
351 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True)
352 self.assertEquals(10, result["1"][0].start)
353 self.assertEquals(20, result["1"][0].stop)
354 self.assertEquals(10, result["1"][0].length)
355 self.assertEquals(3, result["1"][0].peakPos)
356 self.assertEquals(40, result["1"][0].peakHeight)
358 regionList = ["# pvalue"]
359 regionEntry = string.join(["1", "chr1", "10", "20", "5", "3", "40", "any value"], "\t")
360 regionList.append(regionEntry)
361 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True)
362 self.assertEquals(10, result["1"][0].start)
363 self.assertEquals(20, result["1"][0].stop)
364 self.assertEquals(10, result["1"][0].length)
365 self.assertEquals(3, result["1"][0].peakPos)
366 self.assertEquals(40, result["1"][0].peakHeight)
368 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, returnTop=1)
369 self.assertEquals(10, result["1"][0].start)
370 self.assertEquals(20, result["1"][0].stop)
371 self.assertEquals(10, result["1"][0].length)
372 self.assertEquals(3, result["1"][0].peakPos)
373 self.assertEquals(40, result["1"][0].peakHeight)
375 regionList = ["# readShift"]
376 regionEntry = string.join(["1", "chr1", "10", "20", "5", "3", "40", "any value"], "\t")
377 regionList.append(regionEntry)
378 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True)
379 self.assertEquals(10, result["1"][0].start)
380 self.assertEquals(20, result["1"][0].stop)
381 self.assertEquals(10, result["1"][0].length)
382 self.assertEquals(3, result["1"][0].peakPos)
383 self.assertEquals(40, result["1"][0].peakHeight)
385 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, returnTop=1)
386 self.assertEquals(10, result["1"][0].start)
387 self.assertEquals(20, result["1"][0].stop)
388 self.assertEquals(10, result["1"][0].length)
389 self.assertEquals(3, result["1"][0].peakPos)
390 self.assertEquals(40, result["1"][0].peakHeight)
392 regionList = ["# pvalue readShift"]
393 regionEntry = string.join(["1", "chr1", "10", "20", "5", "3", "40", "any value", "any shift"], "\t")
394 regionList.append(regionEntry)
395 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True)
396 self.assertEquals(10, result["1"][0].start)
397 self.assertEquals(20, result["1"][0].stop)
398 self.assertEquals(10, result["1"][0].length)
399 self.assertEquals(3, result["1"][0].peakPos)
400 self.assertEquals(40, result["1"][0].peakHeight)
402 result = commoncode.getMergedRegionsFromList(regionList, keepPeak=True, returnTop=1)
403 self.assertEquals(10, result["1"][0].start)
404 self.assertEquals(20, result["1"][0].stop)
405 self.assertEquals(10, result["1"][0].length)
406 self.assertEquals(3, result["1"][0].peakPos)
407 self.assertEquals(40, result["1"][0].peakHeight)
409 #Test fails - the header line is required if there are fields after the peak which isn't so good
410 #self.assertEquals(result, commoncode.getMergedRegionsFromList(regionList[1:], keepPeak=True))
413 def testRegionsOverlap(self):
414 self.assertTrue(commoncode.regionsOverlap(100, 200, 1, 300))
415 self.assertTrue(commoncode.regionsOverlap(100, 200, 150, 300))
416 self.assertTrue(commoncode.regionsOverlap(100, 500, 1, 300))
417 self.assertTrue(commoncode.regionsOverlap(100, 200, 110, 160))
419 self.assertFalse(commoncode.regionsOverlap(100, 200, 250, 300))
420 self.assertFalse(commoncode.regionsOverlap(100, 200, 1, 60))
422 self.assertFalse(commoncode.regionsOverlap(-200, -100, 1, 300))
423 self.assertFalse(commoncode.regionsOverlap(100, 200, -300, -1))
425 self.assertTrue(commoncode.regionsOverlap(-200, -100, -300, -1))
427 self.assertTrue(commoncode.regionsOverlap(-100, -200, -300, -1))
428 self.assertTrue(commoncode.regionsOverlap(-200, -100, -1, -300))
429 self.assertTrue(commoncode.regionsOverlap(-100, -200, -1, -300))
432 def testRegionsAreWithinDistance(self):
433 self.assertTrue(commoncode.regionsAreWithinDistance(10, 20, 40, 50, 30))
434 self.assertTrue(commoncode.regionsAreWithinDistance(10, 20, 1, 5, 5))
435 self.assertTrue(commoncode.regionsAreWithinDistance(10, 20, 25, 50, 10))
436 self.assertTrue(commoncode.regionsAreWithinDistance(10, 20, 1, 5, 5))
438 self.assertFalse(commoncode.regionsAreWithinDistance(10, 20, 100, 150, 5))
439 self.assertFalse(commoncode.regionsAreWithinDistance(100, 200, 10, 15, 5))
441 self.assertTrue(commoncode.regionsAreWithinDistance(20, 10, 30, 150, 10))
442 self.assertFalse(commoncode.regionsAreWithinDistance(20, 10, 100, 150, 5))
443 self.assertFalse(commoncode.regionsAreWithinDistance(10, 20, 150, 100, 5))
447 def testFindPeak(self):
449 result = commoncode.findPeak(hitList, 0, 0)
450 self.assertEquals([], result.topPos)
451 self.assertEquals(0.0, result.numHits)
452 self.assertEquals(array("f"), result.smoothArray)
453 self.assertEquals(0.0, result.numPlus)
455 hitList= [{"start": 4, "sense": "+", "weight": 0.5}]
456 result = commoncode.findPeak(hitList, 0, 10)
457 self.assertEquals([6, 7], result.topPos)
458 self.assertEquals(1.0, result.numHits)
459 self.assertEquals(array("f", [0.0, 0.0, 0.1111111119389534, 0.3333333432674408, 0.66666668653488159, 0.8888888955116272, 1.0, 1.0, 0.0, 0.0]), result.smoothArray)
460 self.assertEquals(1.0, result.numPlus)
462 result = commoncode.findPeak(hitList, 0, 10, doWeight=True)
463 self.assertEquals([6, 7], result.topPos)
464 self.assertEquals(0.5, result.numHits)
465 self.assertEquals(array('f', [0.0, 0.0, 0.0555555559694767, 0.1666666716337204, 0.3333333432674408, 0.4444444477558136, 0.5, 0.5, 0.0, 0.0]), result.smoothArray)
466 self.assertEquals(0.5, result.numPlus)
468 result = commoncode.findPeak(hitList, 0, 10, shift="auto")
469 self.assertEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], result.topPos)
470 self.assertEquals(0.0, result.numHits)
471 self.assertEquals(array("f", [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), result.smoothArray)
472 self.assertEquals(0.0, result.numPlus)
474 result = commoncode.findPeak(hitList, 0, 10, shift="auto")
475 self.assertEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], result.topPos)
476 self.assertEquals(0.0, result.numHits)
477 self.assertEquals(array("f", [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]), result.smoothArray)
478 self.assertEquals(0.0, result.numPlus)
479 self.assertEquals(6, result.shift)
481 hitList= [{"start": 4, "sense": "+", "weight": 0.5}]
482 result = commoncode.findPeak(hitList, 0, 10, shift=3)
483 self.assertEquals([7], result.topPos)
484 self.assertEquals(1.0, result.numHits)
485 self.assertEquals(array('f', [0.0, 0.0, 0.0, 0.0, 0.0, 0.1111111119389534, 0.3333333432674408, 0.66666668653488159, 0.0, 0.0]), result.smoothArray)
486 self.assertEquals(1.0, result.numPlus)
487 self.assertEquals(3, result.shift)
489 hitList= [{"start": 4, "sense": "+", "weight": 0.5}]
490 result = commoncode.findPeak(hitList, 0, 10, leftPlus=True)
491 self.assertEquals([6, 7], result.topPos)
492 self.assertEquals(1.0, result.numHits)
493 self.assertEquals(array('f', [0.0, 0.0, 0.1111111119389534, 0.3333333432674408, 0.66666668653488159, 0.8888888955116272, 1.0, 1.0, 0.0, 0.0]), result.smoothArray)
494 self.assertEquals(1.0, result.numPlus)
495 self.assertEquals(1.0, result.numLeftPlus)
497 result = commoncode.findPeak(hitList, 0, 10, leftPlus=True, shift=3)
498 self.assertEquals([7], result.topPos)
499 self.assertEquals(1.0, result.numHits)
500 self.assertEquals(array('f', [0.0, 0.0, 0.0, 0.0, 0.0, 0.1111111119389534, 0.3333333432674408, 0.66666668653488159, 0.0, 0.0]), result.smoothArray)
501 self.assertEquals(1.0, result.numPlus)
502 self.assertEquals(1.0, result.numLeftPlus)
503 self.assertEquals(3, result.shift)
507 def testGetBestShiftForRegion(self):
508 hitList = [{"start": 14, "sense": "-", "weight": 1.0},
509 {"start": 16, "sense": "-", "weight": 1.0},
510 {"start": 24, "sense": "+", "weight": 1.0},
511 {"start": 26, "sense": "+", "weight": 10.0}
513 self.assertEquals(74, commoncode.getBestShiftForRegion(hitList, 0, 100))
514 self.assertEquals(16, commoncode.getBestShiftForRegion(hitList, 0, 100, maxShift=30))
515 self.assertEquals(0, commoncode.getBestShiftForRegion(hitList, 0, 100, maxShift=10))
519 def testFindPeakSequenceArray(self):
524 def testGetPeakPositionList(self):
529 def testGetFeaturesByChromDict(self):
530 firstFeatures = {"I": (4123, 4219, "Y74C9A.3", "R", "3UTR"),
531 "II": (1866, 1910, "2L52.1", "F", "CDS"),
532 "III": (1270, 1506, "cTel54X.1", "R", "CDS"),
533 "IV": (694, 1064, "Y38C1AB.4", "F", "CDS"),
534 "V": (1479, 1578, "cTel3X.1", "F", "CDS"),
535 "X": (3622, 4099, "CE7X_3.1", "F", "CDS"),
536 "MtDNA": (112, 543, "MTCE.3", "F", "CDS")
538 featureDict = commoncode.getFeaturesByChromDict(self.genome)
539 for chrom in featureDict.keys():
540 self.assertTrue(chrom in self.celegansChroms)
541 self.assertEquals(firstFeatures[chrom], featureDict[chrom][0])
543 restrictList = ["almost certainly not a value feature"]
544 featureDict = commoncode.getFeaturesByChromDict(self.genome, restrictList=restrictList)
545 self.assertEquals({}, featureDict)
547 restrictList = ["Y74C9A.3"]
548 featureDict = commoncode.getFeaturesByChromDict(self.genome, restrictList=restrictList)
549 self.assertEquals(["I"], featureDict.keys())
550 featureDict, complementDict = commoncode.getFeaturesByChromDict(self.genome, restrictList=restrictList, regionComplement=True)
551 result = {"I": [(0, 4123, "nonExon1", "F", "nonExon"),
552 (4219, 4220, "nonExon2", "F", "nonExon"),
553 (4357, 5194, "nonExon3", "F", "nonExon"),
554 (5295, 6036, "nonExon4", "F", "nonExon"),
555 (6326, 9726, "nonExon5", "F", "nonExon"),
556 (9845, 10094, "nonExon6", "F", "nonExon"),
557 (10147, 10148, "nonExon7", "F", "nonExon"),
558 (10231, 250000000, "nonExon8", "F", "nonExon")]
560 self.assertEquals(result, complementDict)
562 additionalRegion = Region.Region(100, 150)
563 additionalRegion.label = "new feature"
564 regionDict = {"I": [additionalRegion]}
565 featureDict = commoncode.getFeaturesByChromDict(self.genome, additionalRegionsDict=regionDict)
566 result = (100, 150, "new feature", "+", "custom")
567 self.assertEquals(result, featureDict["I"][0])
571 def testGetLocusByChromDict(self):
572 firstLoci = {"I": (4123, 10231, "Y74C9A.3", 6108),
573 "II": (1866, 4662, "2L52.1", 2796),
574 "III": (1270, 2916, "cTel54X.1", 1646),
575 "IV": (694, 14925, "Y38C1AB.4", 14231),
576 "V": (1479, 3038, "cTel3X.1", 1559),
577 "X": (3622, 7153, "CE7X_3.1", 3531),
578 "MtDNA": (112, 548, "MTCE.3", 436)
581 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, useCDS=False))
582 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, upstream=1, downstream=1, useCDS=False))
583 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, upstream=-1, downstream=-1, useCDS=False, lengthCDS=1))
584 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, upstreamSpanTSS=True, lengthCDS=1))
585 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, downstream=1, lengthCDS=1))
586 self.assertEquals({}, commoncode.getLocusByChromDict(self.genome, upstream=1, lengthCDS=-1))
588 locusDict = commoncode.getLocusByChromDict(self.genome)
589 for chrom in locusDict.keys():
590 self.assertTrue(chrom in self.celegansChroms)
591 self.assertEquals(firstLoci[chrom], locusDict[chrom][0])
593 additionalRegion = Region.Region(100, 150)
594 additionalRegion.label = "new region"
595 regionDict = {"I": [additionalRegion]}
596 locusDict = commoncode.getLocusByChromDict(self.genome, additionalRegionsDict=regionDict)
597 self.assertEquals((100, 150, "new region", 50), locusDict["I"][0])
598 locusDict = commoncode.getLocusByChromDict(self.genome, additionalRegionsDict=regionDict, keepSense=True)
599 self.assertEquals((100, 150, "new region", 50, "+"), locusDict["I"][0])
602 #locusDict = commoncode.getLocusByChromDict(self.genome, additionalRegionsDict=regionDict, useCDS=False, upstream=100)
603 #self.assertEquals((150, 250, "new region", 100), locusDict["I"][0])
606 #locusDict = commoncode.getLocusByChromDict(self.genome, additionalRegionsDict=regionDict, useCDS=False, downstream=10)
607 #self.assertEquals((90, 100, "new region", 10), locusDict["I"][0])
610 def testComputeRegionBins(self):
611 regionsByChromDict = {}
616 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
618 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
619 result = ({"regionID": [0.0, 0.0, 0.0, 0.0]}, {})
620 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
622 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
623 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}]}
624 result = ({"regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
625 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
627 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")],
628 "2": [("regionID2", 1, 1000, 1000, "F")]
630 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}],
631 "2": [{"start": 1, "sense": "+", "weight": 1.0}]
633 result = ({"regionID2": [1.0, 0.0, 0.0, 0.0], "regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID2": 1000, "regionID": 100})
634 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
636 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
637 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 80, "sense": "+", "weight": 0.5}]}
638 result = ({"regionID": [1.0, 0.0, 0.0, 0.5]}, {"regionID": 100})
639 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
641 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
642 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 80, "sense": "+", "weight": 0.5}, {"start": 15, "sense": "+", "weight": 1.0}]}
643 result = ({"regionID": [2.0, 0.0, 0.0, 0.5]}, {"regionID": 100})
644 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
646 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
647 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 80, "sense": "+", "weight": 0.5}, {"start": 200, "sense": "+", "weight": 2.0}]}
648 result = ({"regionID": [1.0, 0.0, 0.0, 0.5]}, {"regionID": 100})
649 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
651 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
652 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}]}
653 regionList = ["regionID"]
654 result = ({"regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
655 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, regionList))
657 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
658 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}]}
659 regionList = ["empty region"]
660 result = ({"empty region": [0.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
661 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, regionList))
663 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")],
664 "2": [("regionID2", 1, 1000, 1000, "F")]
666 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}],
667 "2": [{"start": 1, "sense": "+", "weight": 1.0}]
669 regionList = ["regionID", "regionID2"]
670 result = ({"regionID2": [1.0, 0.0, 0.0, 0.0], "regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID2": 1000, "regionID": 100})
671 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, regionList))
673 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")],
674 "2": [("regionID2", 1, 1000, 1000, "F")]
676 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}],
677 "2": [{"start": 1, "sense": "+", "weight": 1.0}]
679 regionList = ["empty region", "regionID2"]
680 result = ({"regionID2": [1.0, 0.0, 0.0, 0.0], "empty region": [0.0, 0.0, 0.0, 0.0]}, {"regionID2": 1000, "regionID": 100})
681 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, regionList))
683 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")],
684 "2": [("regionID2", 1, 1000, 1000, "F")]
686 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}],
687 "2": [{"start": 1, "sense": "+", "weight": 1.0}]
689 regionList = ["regionID2"]
690 result = ({"regionID2": [1.0, 0.0, 0.0, 0.0]}, {"regionID2": 1000, "regionID": 100})
691 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, regionList))
693 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
694 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}]}
695 result = ({"regionID": [2.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
696 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, normalizedTag=2.0))
698 regionsByChromDict = {"1": [(1, 100, "regionID", 100, "F")]}
699 hitDict = {"1": [{"start": 1, "sense": "+", "weight": 1.0}]}
700 result = ({"regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
701 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, defaultRegionFormat=False))
703 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
704 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}]}
706 result = ({"regionID": [1.0, 0.0, 0.0, 0.0]}, {"regionID": 100})
707 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
709 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
710 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}]}
712 result = ({"regionID": [0.0, 1.0, 0.0, 0.0]}, {"regionID": 100})
713 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
715 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
716 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 85, "sense": "+", "weight": 0.5}]}
718 result = ({"regionID": [1.0, 0.5, 0.0, 0.0]}, {"regionID": 100})
719 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
721 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
722 hitDict = {"1": [{"start": 80, "sense": "+", "weight": 1.0}, {"start": 85, "sense": "+", "weight": 0.5}]}
724 result = ({"regionID": [0.0, 1.5, 0.0, 0.0]}, {"regionID": 100})
725 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
727 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
728 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 85, "sense": "+", "weight": 0.5}]}
730 result = ({"regionID": [1.0, 0.0, 0.0, 0.5]}, {"regionID": 100})
731 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
733 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
734 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 85, "sense": "+", "weight": 0.5}]}
736 result = ({"regionID": [1.0, 0.5, 0.0, 0.0]}, {"regionID": 100})
737 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
739 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
740 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 85, "sense": "+", "weight": 0.5}]}
742 result = ({"regionID": [1.0, 0.0, 0.0, 0.5]}, {"regionID": 100})
743 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
745 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "F")]}
746 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 40, "sense": "+", "weight": 0.7}, {"start": 85, "sense": "+", "weight": 0.5}]}
748 result = ({"regionID": [1.0, 0.0, 0.7, 0.5]}, {"regionID": 100})
749 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
751 regionsByChromDict = {"1": [("regionID", 1, 100, 100, "R")]}
752 hitDict = {"1": [{"start": 10, "sense": "+", "weight": 1.0}, {"start": 40, "sense": "+", "weight": 0.7}, {"start": 85, "sense": "+", "weight": 0.5}]}
753 result = ({"regionID": [0.5, 0.0, 0.7, 1.0]}, {"regionID": 100})
754 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen))
755 result = ({"regionID": [0.5, 0.0, 0.7, 1.0]}, {"regionID": 100})
757 result = ({"regionID": [0.0, 2.2, 0.0, 0.0]}, {"regionID": 100})
758 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
760 result = ({"regionID": [0.5, 1.7, 0.0, 0.0]}, {"regionID": 100})
761 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, fixedFirstBin=fixedFirstBin))
763 result = ({"regionID": [0.5, 1.7, 0.0, 0.0]}, {"regionID": 100})
764 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
766 result = ({"regionID": [0.0, 0.5, 0.0, 1.7]}, {"regionID": 100})
767 self.assertEquals(result, commoncode.computeRegionBins(regionsByChromDict, hitDict, bins, readlen, binLength=binLength))
771 suite = unittest.TestSuite()
772 suite.addTest(unittest.makeSuite(TestCommoncode))
777 if __name__ == "__main__":
778 #import sys;sys.argv = ['', 'Test.testName']