Bioinformatics/Rosalind

Open Reading Frames

Rafe 2019. 3. 2. 00:30

http://rosalind.info/problems/orf/

ORF를 찾는 문제.


Open Reading Frame은 개시코돈으로 시작하고 종결코돈으로 끝나는 seqence이다. 물론 triplet codon이어야하므로 ATGATAA같은경우는 ORF에 해당하지 않는다.


regex를 사용하면 간단하지만 겹쳐있는경우는 찾기가 어려워 그냥 dna sequence의 sub sequence들에서 전부 찾았다.


from util.read import read_fasta
from textwrap import wrap
import re
from util.func_tools import DNA_CODON_TABLE

seq = read_fasta('rosalind_orf.txt')[0][1]
complement = ''.join(list(map(lambda base: 'A' if base is 'T' else 'T' if base is 'A' else 'C' if base is 'G' else 'G', seq))[::-1])

result = set()
for idx in range(len(seq)):
try:
orf = re.search('ATG(...)*?(?=TAA|TAG|TGA)', seq[idx:]).group()
result.add(''.join(map(lambda triplet: DNA_CODON_TABLE[triplet], wrap(orf, 3))))
except:
pass
try:
orf = re.search('ATG(...)*?(?=TAA|TAG|TGA)', complement[idx:]).group()
result.add(''.join(map(lambda triplet: DNA_CODON_TABLE[triplet], wrap(orf, 3))))
except:
pass
print('\n'.join(result))

사실 이 정규식이 전부다.

ATG(...)*?(?=TAA|TAG|TGA)


https://github.com/elwlwlwk/Rosalind