INNER CODE UNIT · Python
extract_repeats
BirolLab/straglr · extract_repeats.py:27
def extract_repeats(bam, support, flank_size=10):
seqs = {}
for locus in support:
seqs[locus] = []
chrom, start, end = re.split('[:-]', locus)
for aln in bam.fetch(chrom, int(start), int(end)):
if aln.query_name in support[locus] and not aln.query_name in seqs:
rlen = aln.infer_read_length()
if support[locus][aln.query_name][2] == '+':
start, end = support[locus][aln.query_name][0], support[locus][aln.query_name][0] + support[locus][aln.query_name][1]
else:
start = rlen - (support[locus][aln.query_name][0] + support[locus][aln.query_name][1])
end = start + support[locus][aln.query_name][1]
try:
repeat_seq = aln.query_sequence[start:end].lower()
left = max(0, start - flank_size), start
right = end, min(end + flank_size, rlen)