class SimpleVisitor(object): def __init__(self): self.sam = SamFormatter() self.output = StringIO.StringIO() def process(self, pair): for hit in pair: print >>self.output, self.sam.format(hit)
class EmitSamLink(HitProcessorChainLink): def __init__(self, context, event_monitor, next_link=None): super(type(self), self).__init__(next_link) self.ctx = context self.output_formatter = SamFormatter(strip_pe_tag=True) self.event_monitor = event_monitor def process(self, pair): for hit in pair: if hit: k, v = self.output_formatter.format(hit).split("\t", 1) self.ctx.emit(str(k), str(v)) self.event_monitor.count("emitted sam records", 1) super(type(self), self).process(pair) # forward pair to next element in chain
class EmitSamLink(HitProcessorChainLink): def __init__(self, context, event_monitor, next_link = None): super(type(self), self).__init__(next_link) self.ctx = context self.output_formatter = SamFormatter(strip_pe_tag=True) self.event_monitor = event_monitor def process(self, pair): for hit in pair: if hit: k, v = self.output_formatter.format(hit).split("\t", 1) self.ctx.emit(str(k), str(v)) self.event_monitor.count("emitted sam records", 1) super(type(self), self).process(pair) # forward pair to next element in chain
class TestSamFormatter(unittest.TestCase): def setUp(self): self.mapping = SimpleMapping() self.f = SamFormatter() def test_default(self): self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_name(self): self.mapping.set_name("my name") self.assertEqual("\t".join( map(str, ["my name", 0, "*", 0, 0, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_flag(self): self.mapping.flag = 163 self.assertEqual("\t".join( map(str, ['', 163, "*", 0, 0, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_reference(self): self.mapping.tid = "chr21" self.assertEqual("\t".join( map(str, ['', 0, "chr21", 0, 0, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_mate_reference(self): self.mapping.mtid = "chr21" self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "chr21", 0, 0, "", "" ])), self.__do_format()) self.mapping.mtid = "=" self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "=", 0, 0, "", "" ])), self.__do_format()) def test_pos(self): self.mapping.pos = 1234 self.assertEqual("\t".join( map(str, ['', 0, "*", 1234, 0, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_mate_pos(self): self.mapping.mpos = 1234 self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 1234, 0, "", "" ])), self.__do_format()) def test_mapq(self): self.mapping.qual = 55 self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 55, "*", "*", 0, 0, "", "" ])), self.__do_format()) def test_cigar(self): self.mapping.set_cigar([ (100, 'M') ]) self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "100M", "*", 0, 0, "", "" ])), self.__do_format()) self.mapping.set_cigar([ (80, 'M'), (20, 'S') ]) self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "80M20S", "*", 0, 0, "", "" ])), self.__do_format()) def test_isize(self): self.mapping.isize = 273 self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, 273, "", "" ])), self.__do_format()) self.mapping.isize = -273 self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, -273, "", "" ])), self.__do_format()) def test_seq(self): self.mapping.set_seq_5("AGCTNN") self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, 0, "AGCTNN", "" ])), self.__do_format()) def test_qual(self): bq = array.array('B', [22, 33, 45]) self.mapping.set_base_qualities(bq) self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, 0, "", "7BN" ])), self.__do_format()) def test_tags(self): self.mapping.add_tag( ("XC", 'i', 18) ) self.mapping.add_tag( ("HI", 'Z', "llo") ) self.assertEqual("\t".join( map(str, ['', 0, "*", 0, 0, "*", "*", 0, 0, "", "", "XC:i:18", "HI:Z:llo" ])), self.__do_format()) def __do_format(self): return self.f.format(self.mapping)