def test_make_read_produces_unique_read_names(self): start = 0 read1 = test_utils.make_read('A', start=start) read2 = test_utils.make_read('A', start=start) self.assertGreater(len(read1.fragment_name), 0) self.assertGreater(len(read2.fragment_name), 0) self.assertNotEqual(read1.fragment_name, read2.fragment_name)
def test_read_end(self, update_cached_read_end_first): """Tests reads have their ends calculated correctly.""" start = 10000001 read = test_utils.make_read( 'AAACAG', chrom='chrX', start=start, cigar='2M1I3M', quals=range(10, 16), name='read1') if update_cached_read_end_first: # Explicitly update cached_end. read.cached_end = utils.read_end(read, use_cached_read_end=False) self.assertEqual( start + 5, read.cached_end) self.assertEqual( start + 5, utils.read_end(read)) read = test_utils.make_read( 'AAACAG', chrom='chrX', start=start, cigar='2M16D3M', quals=range(10, 16), name='read1') if update_cached_read_end_first: # Explicitly update cached_end. read.cached_end = utils.read_end(read, use_cached_read_end=False) self.assertEqual( start + 5 + 16, read.cached_end) self.assertEqual( start + 5 + 16, utils.read_end(read))
def test_make_read(self): bases = 'ACG' quals = [30, 40, 50] cigar = '3M' mapq = 42 chrom = 'chr10' start = 123 name = 'myname' read = test_utils.make_read(bases, quals=quals, cigar=cigar, mapq=mapq, chrom=chrom, start=start, name=name) self.assertEqual(read.aligned_sequence, bases) self.assertEqual(read.aligned_quality, quals) self.assertEqual(list(read.alignment.cigar), [ cigar_pb2.CigarUnit(operation_length=3, operation=cigar_pb2.CigarUnit.ALIGNMENT_MATCH) ]) self.assertEqual(read.alignment.mapping_quality, mapq) self.assertEqual(read.alignment.position.reference_name, chrom) self.assertEqual(read.alignment.position.position, start) self.assertEqual(read.fragment_name, name)
def test_read_end(self): """Tests reads have their ends calculated correctly.""" start = 10000001 read = test_utils.make_read('AAACAG', chrom='chrX', start=start, cigar='2M1I3M', quals=range(10, 16), name='read1') self.assertEqual(start + 5, utils.read_end(read)) read = test_utils.make_read('AAACAG', chrom='chrX', start=start, cigar='2M16D3M', quals=range(10, 16), name='read1') self.assertEqual(start + 5 + 16, utils.read_end(read))
def check_overlaps(chr1, start1, end1, chr2, start2, end2, expected): nbp = end1 - start1 read = test_utils.make_read( 'A' * nbp, chrom=chr1, start=start1, cigar='{}M'.format(nbp)) region = ranges.make_range(chr2, start2, end2) self.assertEqual(utils.read_overlaps_region(read, region), expected) # This check ensures we get the same result calling ranges.ranges_overlap. self.assertEqual( ranges.ranges_overlap(region, utils.read_range(read)), expected)
def setUp(self): self.read1 = test_utils.make_read(bases='ACCGT', chrom='chr1', start=10, cigar='5M', mapq=50, quals=range(30, 35), name='read1') self.read2 = test_utils.make_read(bases='AACCTT', chrom='chr2', start=15, cigar='7M', mapq=40, quals=range(20, 26), name='read2') self.contigs = [ reference_pb2.ContigInfo(name='chr1'), reference_pb2.ContigInfo(name='chr2'), ] self.header = reads_pb2.SamHeader()