6
|
1 import unittest
|
|
2 import os, os.path
|
|
3 from SMART.Java.Python.ncList.FindOverlapsWithSeveralIntervals import FindOverlapsWithSeveralIntervals
|
|
4 from SMART.Java.Python.misc import Utils
|
|
5
|
|
6 class Test_F_FindOverlapsWithSeveralIntervals(unittest.TestCase):
|
|
7
|
|
8 def setUp(self):
|
|
9 self._inputRefGff3FileName = 'sorted_Ref.gff3'
|
|
10 self._inputQueryGff3FileName = 'sorted_Query.gff3'
|
|
11 self._outputGff3FileName = 'output.gff3'
|
|
12 self._expOutputFileName = 'expOutGff3.gff3'
|
|
13 self._writeQueryGff3File(self._inputQueryGff3FileName)
|
|
14 self._writeGFF3File(self._inputRefGff3FileName)
|
|
15 self._iFOWSI = FindOverlapsWithSeveralIntervals(0)
|
|
16 self._iFOWSI.setRefFileName(self._inputRefGff3FileName, "gff3")
|
|
17 self._iFOWSI.setQueryFileName(self._inputQueryGff3FileName, "gff3")
|
|
18 self._iFOWSI.setOutputFileName(self._outputGff3FileName)
|
|
19 self._iFOWSI.prepareIntermediateFiles()
|
|
20 self._iFOWSI.createNCLists()
|
|
21
|
|
22 def tearDown(self):
|
|
23 for fileName in (self._inputRefGff3FileName, self._inputQueryGff3FileName, self._outputGff3FileName, self._expOutputFileName):
|
|
24 if os.path.exists(fileName):
|
|
25 os.remove(fileName)
|
|
26
|
|
27 def test_run_general(self):
|
|
28 self._writeQueryGff3File(self._inputQueryGff3FileName)
|
|
29 self._writeGFF3File(self._inputRefGff3FileName)
|
|
30 self._iFOWSI = FindOverlapsWithSeveralIntervals(0)
|
|
31 self._iFOWSI.setRefFileName(self._inputRefGff3FileName, "gff3")
|
|
32 self._iFOWSI.setQueryFileName(self._inputQueryGff3FileName, "gff3")
|
|
33 self._iFOWSI.setOutputFileName(self._outputGff3FileName)
|
|
34 self._iFOWSI.prepareIntermediateFiles()
|
|
35 self._iFOWSI.createNCLists()
|
|
36 self._iFOWSI.compare()
|
|
37 self._iFOWSI.close()
|
|
38 self._writeExpOutFile_general(self._expOutputFileName)
|
|
39 self.assertTrue(Utils.diff(self._expOutputFileName, self._outputGff3FileName))
|
|
40
|
|
41 def test_run_general_asScript(self):
|
|
42 cmd = 'python ../FindOverlapsWithSeveralIntervals.py -i %s -f gff3 -j %s -g gff3 -o %s -v 0' % (self._inputQueryGff3FileName, self._inputRefGff3FileName, self._outputGff3FileName)
|
|
43 os.system(cmd)
|
|
44 self._writeExpOutFile_general(self._expOutputFileName)
|
|
45 self.assertTrue(Utils.diff(self._expOutputFileName, self._outputGff3FileName))
|
|
46
|
|
47
|
|
48 def test_run_overlap_special_case(self):
|
|
49 inputQueryGff3FileName = 'query2.gff3'
|
|
50 self._writeQueryGff3File2(inputQueryGff3FileName)
|
|
51 self._iFOWSI = FindOverlapsWithSeveralIntervals(0)
|
|
52 self._iFOWSI.setRefFileName(self._inputRefGff3FileName, "gff3")
|
|
53 self._iFOWSI.setQueryFileName(inputQueryGff3FileName, "gff3")
|
|
54 self._iFOWSI.setOutputFileName(self._outputGff3FileName)
|
|
55 self._iFOWSI.prepareIntermediateFiles()
|
|
56 self._iFOWSI.createNCLists()
|
|
57 self._iFOWSI.compare()
|
|
58 self._iFOWSI.close()
|
|
59 self._writeExpOutFile_special_case(self._expOutputFileName)
|
|
60 self.assertTrue(Utils.diff(self._expOutputFileName, self._outputGff3FileName))
|
|
61 os.remove(inputQueryGff3FileName)
|
|
62
|
|
63 def test_run_overlap_special_case_asScript(self):
|
|
64 inputQueryGff3FileName = 'query2.gff3'
|
|
65 self._writeQueryGff3File2(inputQueryGff3FileName)
|
|
66 cmd = 'python ../FindOverlapsWithSeveralIntervals.py -i %s -f gff3 -j %s -g gff3 -o %s -v 0' % (inputQueryGff3FileName, self._inputRefGff3FileName, self._outputGff3FileName)
|
|
67 os.system(cmd)
|
|
68 self._writeExpOutFile_special_case(self._expOutputFileName)
|
|
69 self.assertTrue(Utils.diff(self._expOutputFileName, self._outputGff3FileName))
|
|
70 os.remove(inputQueryGff3FileName)
|
|
71
|
|
72 def _writeExpOutFile_special_case(self, fileName):
|
|
73 f = open(fileName, 'w')
|
|
74 f.write("chr1 S-MART test2 1250 1300 781 + . nbOverlaps=1;overlapsWith=test2.7;ID=query_2;Name=test1.2\n")
|
|
75 f.close()
|
|
76
|
|
77 def _writeExpOutFile_general(self, fileName):
|
|
78 f = open(fileName, 'w')
|
|
79 f.write("""chr1 S-MART test1.1 25 150 126 + . nbOverlaps=3;overlapsWith=test2.1--test2.2--test2.3;ID=query_1;Name=test1.1
|
|
80 chr1 S-MART test1.2 70 850 781 + . nbOverlaps=6;overlapsWith=test2.1--test2.2--test2.3--test2.4--test2.5--test2.6;ID=query_2;Name=test1.2
|
|
81 chr1 S-MART test1.3 550 850 201 + . nbOverlaps=4;overlapsWith=test2.1--test2.3--test2.5--test2.6;ID=query_3;Name=test1.3
|
|
82 chr1 S-MART test1.4 925 1025 101 + . nbOverlaps=2;overlapsWith=test2.1--test2.5;ID=query_4;Name=test1.4
|
|
83 chr1 S-MART test1.5 1201 1210 10 + . nbOverlaps=1;overlapsWith=test2.7;ID=query_5;Name=test1.5
|
|
84 """)
|
|
85 f.close()
|
|
86
|
|
87 def _writeExpOutFile_cas_1(self, fileName):
|
|
88 f = open(fileName, 'w')
|
|
89 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_3;score=1001;feature=test2.1;ID=test2.1\n")
|
|
90 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_3;score=501;feature=test2.3;ID=test2.3\n")
|
|
91 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_3;score=251;feature=test2.5;ID=test2.5\n")
|
|
92 f.write("chr1\tS-MART\ttest2.6\t800\t900\t101\t+\t.\tName=test2.6;OverlapWith=query_3;score=101;feature=test2.6;ID=test2.6\n")
|
|
93 f.close()
|
|
94
|
|
95 def _writeExpOutFile_cas_2(self, fileName):
|
|
96 f = open(fileName, 'w')
|
|
97 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_2;score=1001;feature=test2.1;ID=test2.1\n")
|
|
98 f.write("chr1\tS-MART\ttest2.2\t50\t350\t301\t+\t.\tName=test2.2;OverlapWith=query_2;score=301;feature=test2.2;ID=test2.2\n")
|
|
99 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_2;score=501;feature=test2.3;ID=test2.3\n")
|
|
100 f.write("chr1\tS-MART\ttest2.4\t200\t450\t251\t+\t.\tName=test2.4;OverlapWith=query_2;score=251;feature=test2.4;ID=test2.4\n")
|
|
101 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_2;score=251;feature=test2.5;ID=test2.5\n")
|
|
102 f.write("chr1\tS-MART\ttest2.6\t800\t900\t101\t+\t.\tName=test2.6;OverlapWith=query_2;score=101;feature=test2.6;ID=test2.6\n")
|
|
103 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_3;score=1001;feature=test2.1;ID=test2.1\n")
|
|
104 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_3;score=501;feature=test2.3;ID=test2.3\n")
|
|
105 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_3;score=251;feature=test2.5;ID=test2.5\n")
|
|
106 f.write("chr1\tS-MART\ttest2.6\t800\t900\t101\t+\t.\tName=test2.6;OverlapWith=query_3;score=101;feature=test2.6;ID=test2.6\n")
|
|
107 f.close()
|
|
108
|
|
109 def _writeExpOutFile_all_overlap(self, fileName):
|
|
110 f = open(fileName, 'w')
|
|
111 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_2;score=1001;feature=test2.1;ID=test2.1\n")
|
|
112 f.write("chr1\tS-MART\ttest2.2\t50\t350\t301\t+\t.\tName=test2.2;OverlapWith=query_2;score=301;feature=test2.2;ID=test2.2\n")
|
|
113 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_2;score=501;feature=test2.3;ID=test2.3\n")
|
|
114 f.write("chr1\tS-MART\ttest2.4\t200\t450\t251\t+\t.\tName=test2.4;OverlapWith=query_2;score=251;feature=test2.4;ID=test2.4\n")
|
|
115 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_2;score=251;feature=test2.5;ID=test2.5\n")
|
|
116 f.write("chr1\tS-MART\ttest2.6\t800\t900\t101\t+\t.\tName=test2.6;OverlapWith=query_2;score=101;feature=test2.6;ID=test2.6\n")
|
|
117 f.close()
|
|
118
|
|
119 def _writeExpOutFile_overlap_to_children(self, fileName):
|
|
120 f = open(fileName, 'w')
|
|
121 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_3;score=1001;feature=test2.1;ID=test2.1\n")
|
|
122 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_3;score=501;feature=test2.3;ID=test2.3\n")
|
|
123 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_3;score=251;feature=test2.5;ID=test2.5\n")
|
|
124 f.write("chr1\tS-MART\ttest2.6\t800\t900\t101\t+\t.\tName=test2.6;OverlapWith=query_3;score=101;feature=test2.6;ID=test2.6\n")
|
|
125 f.close()
|
|
126
|
|
127 def _writeExpOutFile_not_overlap_to_children(self, fileName):
|
|
128 f = open(fileName, 'w')
|
|
129 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_1;score=1001;feature=test2.1;ID=test2.1\n")
|
|
130 f.write("chr1\tS-MART\ttest2.2\t50\t350\t301\t+\t.\tName=test2.2;OverlapWith=query_1;score=301;feature=test2.2;ID=test2.2\n")
|
|
131 f.write("chr1\tS-MART\ttest2.3\t100\t600\t501\t+\t.\tName=test2.3;OverlapWith=query_1;score=501;feature=test2.3;ID=test2.3\n")
|
|
132 f.write("chr1\tS-MART\ttest2.1\t9\t1000\t1001\t+\t.\tName=test2.1;OverlapWith=query_4;score=1001;feature=test2.1;ID=test2.1\n")
|
|
133 f.write("chr1\tS-MART\ttest2.5\t700\t950\t251\t+\t.\tName=test2.5;OverlapWith=query_4;score=251;feature=test2.5;ID=test2.5\n")
|
|
134 f.close()
|
|
135
|
|
136 def _writeExpOutFile_no_overlap_right(self, fileName):
|
|
137 f = open(fileName, 'w')
|
|
138 f.close()
|
|
139
|
|
140 def _writeExpOutFile_one_overlap(self, fileName):
|
|
141 f = open(fileName, 'w')
|
|
142 f.write("chr1\tS-MART\ttest2.7\t1200\t1300\t101\t+\t.\tName=test2.7;OverlapWith=query_5;score=101;feature=test2.7;ID=test2.7\n")
|
|
143 f.close()
|
|
144
|
|
145 def _writeQueryGff3File2(self, fileName):
|
|
146 f = open(fileName, 'w')
|
|
147 f.write("chr1\tquery\ttest1\t1100\t1150\t126\t+\t.\tID=query_1;Name=test1.1\n")
|
|
148 f.write("chr1\tquery\ttest2\t1250\t1300\t781\t+\t.\tID=query_2;Name=test1.2\n")
|
|
149 f.close()
|
|
150
|
|
151 def _writeQueryGff3File(self, fileName):
|
|
152 f = open(fileName, 'w')
|
|
153 f.write("chr1\tquery\ttest1.1\t25\t150\t126\t+\t.\tID=query_1;Name=test1.1\n")
|
|
154 f.write("chr1\tquery\ttest1.2\t70\t850\t781\t+\t.\tID=query_2;Name=test1.2\n")
|
|
155 f.write("chr1\tquery\ttest1.3\t550\t850\t201\t+\t.\tID=query_3;Name=test1.3\n")
|
|
156 f.write("chr1\tquery\ttest1.4\t925\t1025\t101\t+\t.\tID=query_4;Name=test1.4\n")
|
|
157 f.write("chr1\tquery\ttest1.5\t1201\t1210\t10\t+\t.\tID=query_5;Name=test1.5\n")
|
|
158 f.write("chr1\tquery\ttest1.6\t1500\t1600\t101\t+\t.\tID=query_6;Name=test1.6\n")
|
|
159 f.close()
|
|
160
|
|
161 def _writeGFF3File(self, fileName):
|
|
162 f = open(fileName, "w")
|
|
163 f.write("chr1\ttest\ttest2.1\t9\t1000\t1001\t+\t.\tID=test2.1;Name=test2.1\n")
|
|
164 f.write("chr1\ttest\ttest2.2\t50\t350\t301\t+\t.\tID=test2.2;Name=test2.2\n")
|
|
165 f.write("chr1\ttest\ttest2.3\t100\t600\t501\t+\t.\tID=test2.3;Name=test2.3\n")
|
|
166 f.write("chr1\ttest\ttest2.4\t200\t450\t251\t+\t.\tID=test2.4;Name=test2.4\n")
|
|
167 f.write("chr1\ttest\ttest2.5\t700\t950\t251\t+\t.\tID=test2.5;Name=test2.5\n")
|
|
168 f.write("chr1\ttest\ttest2.6\t800\t900\t101\t+\t.\tID=test2.6;Name=test2.6\n")
|
|
169 f.write("chr1\ttest\ttest2.7\t1200\t1300\t101\t+\t.\tID=test2.7;Name=test2.7\n")
|
|
170 f.close()
|
|
171
|
|
172 if __name__ == "__main__":
|
|
173 unittest.main()
|