저는 생물 정보학을 가르치려고합니다. 컴퓨터 과학 및 고성능 컴퓨팅을 통해 파티에 도착합니다. (필자는 생물학을 배우려고 노력하고 있습니다.) 저는 최근에 BioPython을 발견했으며 지금까지는 훌륭하다고 생각합니다. 그러나 누군가가 BioPython에서 sequence 데이터를 변환하기 위해 translate() 메소드를 사용하는 이유를 알아 내면 도움이 될지 궁금합니다. ORF 후보와 아미노 단백질 사슬은 예상과 다르게 행동합니다.BioPython의 translate() 메서드를 사용한 ORF 및 아미노 식별 - 잘못된 번역?
다음은 올해의 DNA60 과제에서 왔으며 모든 ORF를 순서대로 찾아 정렬하고 아미노 사슬로 변환 한 다음 가장 긴 상위 15 개 사슬의 25 번째 아미노산을 사용하여 철자를 알아내는 것입니다. 문구. http://genomebiology.com/about/update/DNA60_TAGCGAC
그래서 몇 가지 조사를 수행 한 후, 내가 발견하고이 방법을 번역 사용하여 ORF의를 식별하기위한 튜토리얼에서 직접 코드를 사용하여 정착는 여기에서 찾을 :
http://www.bio-cloud.info/Biopython/en/ch16.html
다음 은 도전각 체인에 대해 25 번째 아미노산을 인쇄하고 체인 길이별로 출력을 정렬하도록 수정하면 (Linux 명령 행 도구 "sort"를 사용하여) 출력이 완전히 잘못됩니다.
답변이 무엇인지 알면서도 왜 이것이 작동하지 않는지 알 수 없었습니다. 그래서 ORF 식별 및 번역 작업을 수행하고 결과를 정렬하는 스크립트를 작성했습니다. (NCBI 표 1을 사용하여 최소 길이 25)
번역 방법에서 ORF 식별이 제대로 작동하지 않아 누군가가 그 이유를 알 수 있기를 바랍니다. 다음은 파이썬에서 ORF 식별을위한 내 코드는 (당신은 세 개의 프레임의 두 번째 세트에 대한 reverse_complement 전달) 매우 간단
def getORF(sequence, treshold, start_codons, stop_codons):
start_codon_index = 0
end_codon_index = 0
start_codon_found = False
orfs = []
for j in range(0, 3):
for indx in range(j, len(sequence), 3):
current_codon = sequence[indx:indx+3]
if current_codon in start_codons and not start_codon_found:
start_codon_found = True
start_codon_index = indx
if current_codon in stop_codons and start_codon_found:
end_codon_index = indx
length = end_codon_index - start_codon_index + 3
if length >= treshold * 3:
orfs.append(start_codon_index)
if length % 3 != 0:
#print "it's going to complain"
#print len(sequence)-end_codon_index-3
snippet = Seq(sequence[start_codon_index:end_codon_index])
proteins = Seq.translate(snippet)
if len(proteins) >= 25:
print "%i [%s]" % (length/3, proteins[24])
start_codon_found = False
start_codon_index = 0
end_codon_index = 0
start_codon_found = False
return len(orfs), orfs
합니다.
python orf.py | sort -k1,1n | tail -15
출력 : 당신이 당신에게 15 긴를 제공하기 위해 다음 명령을 사용하여 출력을 정렬 할 경우
f = open('genome.fa')
seqrecords = list(SeqIO.parse(f, 'fasta'))
rec = seqrecords[0]
seq = str(rec.seq)
comp_seq = str(rec.seq.reverse_complement())
start = ["ATG"]
stop = ["TAA","TAG","TGA"]
length_orf, orfs = getORF(seq, 25, start, stop)
length_orf_complement, orfs_complement = getComplementORF(comp_seq, 25, start, stop)
각 가닥에 대해 한 번씩이 작업을 수행 한 후 (초기 및 reverse_complement) : 여기의 나머지 부분입니다 is :
155 [E]
157 [F]
158 [I]
163 [L]
166 [F]
167 [Q]
170 [T]
171 [E]
173 [R]
175 [C]
176 [E]
187 [S]
201 [E]
211 [H]
234 [T]
올바른 문구입니다. 직선을 사용하는 결과는 다음과 같습니다.
TPKSSSILLRPCQCVSDRKHVTRTAYNFFI...KLA - length 178, strand 1, frame 2 [T]
EAQVRFPVFSSDCPLMMLFSRRLLIGLVRR...GRD - length 181, strand -1, frame 0 [L]
KSGGSTREFRGMSVPEAVRFLKILGNICEQ...RNS - length 181, strand 1, frame 2 [L]
YSLGQQGPEGGVSFEVIAVVVHPKTERGSR...TLA - length 181, strand 1, frame 2 [K]
TVDFQRHSLIVVVARNHLLSTRVQAGLSRD...SWG - length 183, strand -1, frame 0 [Q]
RGRLPDYKTTRACAENTIELRFPPSVYISE...TSN - length 185, strand 1, frame 0 [P]
YYSRLKETPPTQPNPAIMGRRSDETALTRQ...RSF - length 191, strand -1, frame 0 [E]
GPYLWFSCLARGTCKTGDIDYRNSSVVDPY...RPT - length 199, strand 1, frame 0 [S]
LHNQQAQECDDFCMRCRHEVSYSLLNKDGF...LIM - length 199, strand 1, frame 0 [L]
PWLHWESSLGNIFTLRPWVHGFYKEPGCNK...CLF - length 199, strand -1, frame 1 [K]
TQPVQFGLYLTHMAGVGTTREGLTQGLMLY...WHI - length 212, strand -1, frame 0 [T]
VSMVANTFIPLSMGCRYITHSICVSRHMRY...LPV - length 212, strand 1, frame 1 [V]
AVWTSGIELAVQQGTRDVILKNGRQIREVS...QSL - length 219, strand 1, frame 0 [R]
ELTRLDITVLSLCNVSPRNVYGINNASASQ...TIR - length 223, strand -1, frame 0 [N]
TRSKSNGLSMEDNRPLFALRRYWDTTSGSS...KGW - length 242, strand -1, frame 2 [D]
길이가 일치하지 않는 것을 확인할 수 있습니다. 여기서 무엇을 줄까요? 내가 놓친 게 있니?
당신이 질문을 할 수 http://www.biostars.org/ 너무 – Pierre