annotate SMART/Java/Python/ncList/test/MockFindOverlaps_randomExample.py @ 6:769e306b7933

Change the repository level.
author yufei-luo
date Fri, 18 Jan 2013 04:54:14 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
1 import os
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
2 import random
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
3 from SMART.Java.Python.getRandomRegions import RandomRegionsGenerator
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
4 from commons.core.writer.TranscriptWriter import TranscriptWriter
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
5 from SMART.Java.Python.structure.Transcript import Transcript
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
6 from commons.core.parsing.GffParser import GffParser
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
7
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
8 class MockFindOverlaps_randomExample(object):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
9
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
10 def __init__(self, fileName, ID, numberOfReads, chromSize):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
11 self._fileName = fileName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
12 self._ID = ID
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
13 self._numberOfReads = numberOfReads
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
14 self._chromSize = chromSize
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
15
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
16 def write(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
17 iMFO_RE = MockFindOverlaps_randomExample_NonOrder(self._fileName, self._ID, self._numberOfReads, self._chromSize)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
18 iMFO_RE.write()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
19 cmd = 'sort -f -n -k4 -k5.4rn -o %s %s'%(self._fileName, self._fileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
20 os.system(cmd)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
21
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
22 class MockFindOverlaps_randomExample_NonOrder(object):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
23
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
24 def __init__(self, fileName, ID, numberOfReads, chromSize):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
25 self._fileName = fileName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
26 self._ID = ID
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
27 self._numberOfReads = numberOfReads
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
28 self._chromSize = chromSize
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
29
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
30 def write(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
31 iRRG = RandomRegionsGenerator(2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
32 iRRG.setMinSize(36)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
33 iRRG.setMaxSize(100)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
34 iRRG.setGenomeSize(self._chromSize)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
35 iRRG.setChromosomeName("chr1")
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
36 iRRG.setStrands(False)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
37 iRRG.setNumber(self._numberOfReads)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
38 iRRG.setOutputFile(self._fileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
39 iRRG.run()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
40
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
41
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
42 class MockFindOverlaps_randomExample_MOverlaps(object):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
43
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
44 def __init__(self, refFileName, queryFileName, overlapNumber, numberOfReads, chromSize):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
45 self._refFileName = refFileName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
46 self._queryFileName = queryFileName
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
47 self._overlapNumber = overlapNumber
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
48 self._numberOfReads = numberOfReads
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
49 self._chromSize = chromSize
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
50
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
51 def createRandomExample(self):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
52 id = 'reference'
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
53 iRSS = MockFindOverlaps_randomExample(self._refFileName, id, self._numberOfReads, self._chromSize)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
54 iRSS.write()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
55 self.queryWriter = TranscriptWriter(self._queryFileName , 'gff3')
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
56 totalOverlap = 0
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
57 while totalOverlap != self._overlapNumber:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
58 totalOverlap = 0
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
59 i = 0
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
60 while i < 10:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
61 query = self.createRandomTranscript(i, id)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
62 overlapNumber = self.getOverlapNumber(query, self._refFileName, totalOverlap)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
63 while overlapNumber > self._overlapNumber:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
64 query = self.createRandomTranscript(i, id)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
65 overlapNumber = self.getOverlapNumber(query, self._refFileName, totalOverlap)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
66 totalOverlap = overlapNumber
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
67 i += 1
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
68 self.queryWriter.addTranscript(query)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
69 self.queryWriter.write()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
70 self.queryWriter.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
71 # os.rename("%s.gff3" % (self._queryFileName), self._queryFileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
72
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
73 cmd = 'sort -f -n -k4 -k5.4rn -o %s %s'%(self._refFileName, self._refFileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
74 os.system(cmd)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
75 cmd = 'sort -f -n -k4 -k5.4rn -o %s %s'%(self._queryFileName, self._queryFileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
76 os.system(cmd)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
77
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
78 def createRandomTranscript(self, cpt, id):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
79 iRRG = RandomRegionsGenerator(2)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
80 strand = '+'
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
81 chromosome = 'chr1'
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
82 size = random.randint(36, 100)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
83 iRRG.setSize(size)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
84 start = random.randint(0, 1000-size)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
85 transcript = iRRG.createTranscript(chromosome, start, size, strand, cpt)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
86 IDdetail = '%s_%d'%(id,cpt)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
87 transcript.setTagValue('ID', IDdetail)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
88 transcript.setName(IDdetail)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
89 return transcript
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
90
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
91 def isOverlap(self, query, ref):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
92 if (query.getStart() <= ref.getEnd() and query.getEnd() >= ref.getStart()):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
93 return True
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
94 else:
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
95 return False
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
96
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
97 def getIntervalFromAdress(self, fileName, address):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
98 iParser = GffParser(fileName)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
99 iParser.gotoAddress(int(address))
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
100 iTranscrit = iParser.getNextTranscript()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
101 iParser.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
102 return iTranscrit
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
103
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
104 def getOverlapNumber(self, query, refFileName, totalOverlap):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
105 count = totalOverlap
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
106 fRef = open(refFileName, 'r')
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
107 address = fRef.tell()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
108 line = fRef.readline()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
109 while line != '':
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
110 ref = self.getIntervalFromAdress(refFileName, address)
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
111 if self.isOverlap(query, ref):
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
112 count += 1
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
113 address = fRef.tell()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
114 line = fRef.readline()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
115 fRef.close()
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
116 return count
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
117
769e306b7933 Change the repository level.
yufei-luo
parents:
diff changeset
118