Пример #1
0
 def test_round_trip(self):
     test_bam = resource_stream(__name__, 'data/minitest.bam')
     # get raw uncompressed content
     content = gzip.open(test_bam).read()
     # go back to start of file and parse with Filereader
     test_bam.seek(0)
     the_bam = bam.FileReader(gzip.open(test_bam))
     out_file = NamedTemporaryFile(delete=False)
     out_file_name = out_file.name
     with bam.FileWriter(out_file_name) as out_bam:
         out_bam.raw_header = the_bam.raw_header
         out_bam.raw_refs = the_bam.raw_refs
         out_bam.write_header()
         self.assertRaises(RuntimeError,out_bam.write_header,None)
         for align in the_bam:
             out_bam.write(align)
     # parse the new temporary file
     new_bam = bam.FileReader(gzip.open(out_file_name))
     self.assertEqual(the_bam.header,new_bam.header)
     try:
         while True:
             align = next(the_bam)
             align2 = next(the_bam)
             self.assertEqual(align,align2)
     except StopIteration:
         pass
Пример #2
0
 def test_FileReader_init(self):
     test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam')
     the_bam = bam.FileReader(gzip.open(test_bam))
     self.assertEqual(the_bam.raw_header, RAW_HEADER)
     self.assertEqual(the_bam.raw_refs, RAW_REFS)
     self.assertEqual(the_bam.refs, REFS)
     self.assertEqual(the_bam.header, HEADER)
     self.assertEqual(the_bam.index_to_ref, INDEX_TO_REF)
     self.assertEqual(the_bam.ref_to_index, REF_TO_INDEX)
     self.assertEqual(the_bam.sort_order, 'unsorted')
     the_bam.close()
     test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam')
     with bam.FileReader(gzip.open(test_bam)) as the_bam:
         self.assertEqual(the_bam.header, HEADER)
         first_read = next(the_bam)
         the_bam.reset_alignments()
         self.assertEqual(first_read,next(the_bam))
     self.assertRaises(ValueError, bam.FileReader, test_bam)
Пример #3
0
 def test_FileReader_iteration(self):
     test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam')
     the_bam = bam.FileReader(gzip.open(test_bam))
     self.assertEqual(next(the_bam), ALIGN0)
     for i in range(41):
         next(the_bam)
     self.assertEqual(next(the_bam), ALIGN42)
     for align in the_bam:
         pass
Пример #4
0
 def test_update_header_length(self):
     test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam')
     the_bam = bam.FileReader(gzip.open(test_bam))
     the_bam.raw_header = the_bam.raw_header+b'@CO\tThis is an extra comment\n'
     the_bam.update_header_length()
     self.assertEqual(len(the_bam.raw_header[4:]),
                      struct.unpack("<i", the_bam.raw_header[:4])[0])
     header_with_incorrect_len = struct.pack("<i",42)+RAW_HEADER[4:]
     self.assertEqual(the_bam.update_header_length(header_with_incorrect_len)[:4],
                      RAW_HEADER[:4])
Пример #5
0
 def test_get_updated_header(self):
     test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam')
     the_bam = bam.FileReader(gzip.open(test_bam))
     the_bam.raw_header = the_bam.raw_header+b'@CO\tThis is an extra comment\n'
     the_bam.update_header_length()
     updated_header = the_bam.get_updated_header(id='test',
                                      program='test',
                                      version='88.88.8',
                                      command="--argumentative")
     self.assertEqual(updated_header[4:], #skip 4 bytes as len changed
                      (RAW_HEADER[4:]
                      + b'@PG\tID:test\tPN:test\tVN:88.88.8\tPP:bowtie2\t'
                      + b'CL:--argumentative\n'
                      + b'@CO\tThis is an extra comment\n')
                      )