Mercurial > repos > yufei-luo > s_mart
diff SMART/Java/Python/test/Test_F_RestrictFromCoverage.py @ 18:94ab73e8a190
Uploaded
author | m-zytnicki |
---|---|
date | Mon, 29 Apr 2013 03:20:15 -0400 (2013-04-29) |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SMART/Java/Python/test/Test_F_RestrictFromCoverage.py Mon Apr 29 03:20:15 2013 -0400 @@ -0,0 +1,133 @@ +import unittest +import os, os.path +from optparse import OptionParser +from SMART.Java.Python.misc import Utils +from SMART.Java.Python.structure.Transcript import Transcript +from commons.core.writer.Gff3Writer import Gff3Writer +from commons.core.parsing.GffParser import GffParser +from SMART.Java.Python.RestrictFromCoverage import RestrictFromCoverage + +REFERENCE = 0 +QUERY = 1 + +class Test_F_Clusterize(unittest.TestCase): + + def setUp(self): + self._queryFileName = "testQuery.gff3" + self._refFileName = "testRef.gff3" + self._outputFileName = "output.gff3" + self._parsers = {QUERY: Gff3Writer(self._queryFileName, 0), REFERENCE: Gff3Writer(self._refFileName, 0)} + self._writeQuery() + + def tearDown(self): + for file in (self._queryFileName, self._refFileName, self._outputFileName): + if os.path.exists(file): + os.remove(file) + + def _writeQuery(self): + self._addTranscript(QUERY, 1, 1000, 2000, "+") + self._parsers[QUERY].close() + + def _writeReferences(self, values): + for value in values: + self._addTranscript(REFERENCE, value["cpt"], value["start"], value["end"], value["strand"]) + self._parsers[REFERENCE].close() + + def _addTranscript(self, type, cpt, start, end, strand): + t = Transcript() + t.setChromosome("chr1") + t.setName("test%d" % (cpt)) + t.setStart(start) + t.setEnd(end) + t.setDirection(strand) + self._parsers[type].addTranscript(t) + + def _checkTranscript(self, transcript, start, end, strand): + self.assertEquals(transcript.getStart(), start) + self.assertEquals(transcript.getEnd(), end) + self.assertEquals(transcript.getDirection(), strand) + + def _startTool(self, minNucleotides = None, maxNucleotides = None, minPercent = None, maxPercent = None, minOverlap = None, maxOverlap = None, strands = False): + rfc = RestrictFromCoverage(0) + rfc.setInputFileName(self._queryFileName, "gff3", QUERY) + rfc.setInputFileName(self._refFileName, "gff3", REFERENCE) + rfc.setOutputFileName(self._outputFileName) + rfc.setNbNucleotides(minNucleotides, maxNucleotides) + rfc.setPercent(minPercent, maxPercent) + rfc.setOverlap(minOverlap, maxOverlap) + rfc.setStrands(strands) + rfc.run() + return GffParser(self._outputFileName, 0) + + def test_simple(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 2000, "strand": "+"}]) + parser = self._startTool() + self.assertEquals(parser.getNbTranscripts(), 1) + for transcript in parser.getIterator(): + self._checkTranscript(transcript, 1000, 2000, 1) + + def test_nbOverlapsMin_pos(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 2000, "strand": "+"}, {"cpt": 2, "start": 1000, "end": 2000, "strand": "+"}]) + parser = self._startTool(1, None, None, None, 2) + self.assertEquals(parser.getNbTranscripts(), 1) + for transcript in parser.getIterator(): + self._checkTranscript(transcript, 1000, 2000, 1) + + def test_nbOverlapsMin_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 2000, "strand": "+"}]) + parser = self._startTool(1, None, None, None, 2) + self.assertEquals(parser.getNbTranscripts(), 0) + + def test_nbOverlapsMax_pos(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 2000, "strand": "+"}]) + parser = self._startTool(1, None, None, None, None, 1) + self.assertEquals(parser.getNbTranscripts(), 1) + for transcript in parser.getIterator(): + self._checkTranscript(transcript, 1000, 2000, 1) + + def test_nbOverlapsMax_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 2000, "strand": "+"}, {"cpt": 2, "start": 1000, "end": 2000, "strand": "+"}]) + parser = self._startTool(1, None, None, None, None, 1) + self.assertEquals(parser.getNbTranscripts(), 0) + + def test_nbNucleotidesMin_pos(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1100, "strand": "+"}]) + parser = self._startTool(100, None, None, None, 1) + self.assertEquals(parser.getNbTranscripts(), 1) + for transcript in parser.getIterator(): + self._checkTranscript(transcript, 1000, 2000, 1) + + def test_nbNucleotidesMin_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1100, "strand": "+"}]) + parser = self._startTool(200, None, None, None, 1) + self.assertEquals(parser.getNbTranscripts(), 0) + + def test_PercentMin_pos(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1500, "strand": "+"}]) + parser = self._startTool(None, None, 50, None, 1) + self.assertEquals(parser.getNbTranscripts(), 1) + for transcript in parser.getIterator(): + self._checkTranscript(transcript, 1000, 2000, 1) + + def test_PercentMin_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1500, "strand": "+"}]) + parser = self._startTool(None, None, 100, None, 1) + self.assertEquals(parser.getNbTranscripts(), 0) + + def test_NoStrand_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1500, "strand": "-"}]) + parser = self._startTool(1, None, None, None, 1) + self.assertEquals(parser.getNbTranscripts(), 1) + + def test_strand_pos(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1500, "strand": "+"}]) + parser = self._startTool(1, None, None, None, 1, None, True) + self.assertEquals(parser.getNbTranscripts(), 1) + + def test_strand_neg(self): + self._writeReferences([{"cpt": 1, "start": 1000, "end": 1500, "strand": "-"}]) + parser = self._startTool(1, None, None, None, 1, None, True) + self.assertEquals(parser.getNbTranscripts(), 0) + +if __name__ == "__main__": + unittest.main()