2012-10-28 15 views
12

में एक खुले पठन फ्रेम को कैसे ढूंढें I ORF (खुली पठन फ्रेम) खोजने के लिए पाइथन और नियमित अभिव्यक्ति का उपयोग कर रहा हूं।पायथन

एक उप-स्ट्रिंग एक स्ट्रिंग है केवल अक्षर ATGC (कोई रिक्तियों या नई रेखाओं) कि से बना है खोजें:

शुरू होता है ATG साथ, TAG या TAA या TGA साथ समाप्त होता है और से अनुक्रम पर विचार करना चाहिए पहला वर्ण, तो दूसरा और फिर तीसरे:

Seq= "CCTCAGCGAGGACAGCAAGGGACTAGCCAGGAGGGAGAACAGAAACTCCAGAACATCTTGGAAATAGCTCCCAGAAAAGC 
AAGCAGCCAACCAGGCAGGTTCTGTCCCTTTCACTCACTGGCCCAAGGCGCCACATCTCCCTCCAGAAAAGACACCATGA 
GCACAGAAAGCATGATCCGCGACGTGGAACTGGCAGAAGAGGCACTCCCCCAAAAGATGGGGGGCTTCCAGAACTCCAGG 
CGGTGCCTATGTCTCAGCCTCTTCTCATTCCTGCTTGTGGCAGGGGCCACCACGCTCTTCTGTCTACTGAACTTCGGGGT 
GATCGGTCCCCAAAGGGATGAGAAGTTCCCAAATGGCCTCCCTCTCATCAGTTCTATGGCCCAGACCCTCACACTCAGAT 
CATCTTCTCAAAATTCGAGTGACAAGCCTGTAGCCCACGTCGTAGCAAACCACCAAGTGGAGGAGCAGCTGGAGTGGCTG 
AGCCAGCGCGCCAACGCCCTCCTGGCCAACGGCATGGATCTCAAAGACAACCAACTAGTGGTGCCAGCCGATGGGTTGTA 
CCTTGTCTACTCCCAGGTTCTCTTCAAGGGACAAGGCTGCCCCGACTACGTGCTCCTCACCCACACCGTCAGCCGATTTG 
CTATCTCATACCAGGAGAAAGTCAACCTCCTCTCTGCCGTCAAGAGCCCCTGCCCCAAGGACACCCCTGAGGGGGCTGAG 
CTCAAACCCTGGTATGAGCCCATATACCTGGGAGGAGTCTTCCAGCTGGAGAAGGGGGACCAACTCAGCGCTGAGGTCAA 
TCTGCCCAAGTACTTAGACTTTGCGGAGTCCGGGCAGGTCTACTTTGGAGTCATTGCTCTGTGAAGGGAATGGGTGTTCA 
TCCATTCTCTACCCAGCCCCCACTCTGACCCCTTTACTCTGACCCCTTTATTGTCTACTCCTCAGAGCCCCCAGTCTGTA 
TCCTTCTAACTTAGAAAGGGGATTATGGCTCAGGGTCCAACTCTGTGCTCAGAGCTTTCAACAACTACTCAGAAACACAA 
GATGCTGGGACAGTGACCTGGACTGTGGGCCTCTCATGCACCACCATCAAGGACTCAAATGGGCTTTCCGAATTCACTGG 
AGCCTCGAATGTCCATTCCTGAGTTCTGCAAAGGGAGAGTGGTCAGGTTGCCTCTGTCTCAGAATGAGGCTGGATAAGAT 
CTCAGGCCTTCCTACCTTCAGACCTTTCCAGATTCTTCCCTGAGGTGCAATGCACAGCCTTCCTCACAGAGCCAGCCCCC 
CTCTATTTATATTTGCACTTATTATTTATTATTTATTTATTATTTATTTATTTGCTTATGAATGTATTTATTTGGAAGGC 
CGGGGTGTCCTGGAGGACCCAGTGTGGGAAGCTGTCTTCAGACAGACATGTTTTCTGTGAAAACGGAGCTGAGCTGTCCC 
CACCTGGCCTCTCTACCTTGTTGCCTCCTCTTTTGCTTATGTTTAAAACAAAATATTTATCTAACCCAATTGTCTTAATA 
ACGCTGATTTGGTGACCAGGCTGTCGCTACATCACTGAACCTCTGCTCCCCACGGGAGCCGTGACTGTAATCGCCCTACG 
GGTCATTGAGAGAAATAA" 

मैं क्या कोशिश की है:

# finding the stop codon here 

def stop_codon(seq_0): 

     for i in range(0,len(seq_0),3): 
      if (seq_0[i:i+3]== "TAA" and i%3==0) or (seq_0[i:i+3]== "TAG" and i%3==0) or (seq_0[i:i+3]== "TGA" and i%3==0) : 
       a =i+3 

       break 

      else: 
       a = None 

# finding the start codon here 

startcodon_find =[m.start() for m in re.finditer('ATG', seq_0)] 

मैं प्रारंभ कोडन को जांचने का तरीका कैसे ढूंढ सकता हूं और फिर पहला स्टॉप कोडन ढूंढ सकता हूं। इसके बाद अगली स्टार्ट कोडन और अगली स्टॉप कोडन पाएं।

मैं इसे तीन फ्रेम के लिए चलाने की इच्छा करता हूं। जैसा कि पहले बताया गया है कि तीन फ्रेम अनुक्रम के पहले, दूसरे और तीसरे पात्रों को शुरुआत के रूप में विचार करेंगे।

ATG TTT AAA ACA AAA TAT TTA TCT AAC CCA ATT GTC TTA ATA ACG CTG ATT TGA 

किसी भी मदद की सराहना की जाएगी:

इसके अलावा अनुक्रम 3. वहाँ के छोटे भागों में विभाजित किया जा करने के लिए यह इस तरह की कुछ बात होना चाहिए के लिए की जरूरत है।

मेरे अंतिम जवाब:

def orf_find(st0): 

    seq_0="" 
    for i in range(0,len(st0),3): 
     if len(st0[i:i+3])==3: 
      seq_0 = seq_0 + st0[i:i+3]+ " " 

    ms_1 =[m.start() for m in re.finditer('ATG', seq_0)] 
    ms_2 =[m.start() for m in re.finditer('(TAA)|(TAG)|(TGA)', seq_0)] 

    def get_next(arr,value): 
     for a in arr: 
      if a > value: 
       return a 
     return -1 




    codons = [] 
    start_codon=ms_1[0] 
    while (True): 
     stop_codon = get_next(ms_2,start_codon) 
     if stop_codon == -1: 
      break 
     codons.append((start_codon,stop_codon)) 
     start_codon = get_next(ms_1,stop_codon) 
     if start_codon==-1: 
      break 

    max_val = 0 
    selected_tupple =() 
    for i in codons: 
     k=i[1]-i[0] 
     if k > max_val: 
      max_val = k 
      selected_tupple = i 

    print "selected tupple is ", selected_tupple 

    final_seq=seq_0[selected_tupple[0]:selected_tupple[1]+3] 

    print final_seq 
    print "The longest orf length is " + str(max_val) 



output_file = open('Longorf.txt','w') 
output_file.write(str(orf_find(st0))) 

output_file.close() 

ऊपर लिखने समारोह किसी पाठ फ़ाइल में पर सामग्री लिखने में मेरी मदद नहीं करता है। मैं सब कुछ नहीं मिला .. यह त्रुटि क्यों .. क्या कोई मदद कर सकता है?

+0

आप समारोह से उत्पादन वापस लौटाना होगा। मैंने अभी अपना जवाब संपादित किया है। – MoRe

उत्तर

8

जैसा कि आपने इसे टैग किया है बायोप्थॉन मुझे लगता है कि आप बायोपीथॉन के बारे में जानते हैं। क्या आपने अभी तक डॉकू की जांच की है? http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc231 मदद कर सकता है।

from Bio.Seq import Seq 

seq = Seq("CCTCAGCGAGGACAGCAAGGGACTAGCCAGGAGGGAGAACAGAAACTCCAGAACATCTTGGAAATAGCTCCCAGAAAAGCAAGCAGCCAACCAGGCAGGTTCTGTCCCTTTCACTCACTGGCCCAAGGCGCCACATCTCCCTCCAGAAAAGACACCATGAGCACAGAAAGCATGATCCGCGACGTGGAACTGGCAGAAGAGGCACTCCCCCAAAAGATGGGGGGCTTCCAGAACTCCAGGCGGTGCCTATGTCTCAGCCTCTTCTCATTCCTGCTTGTGGCAGGGGCCACCACGCTCTTCTGTCTACTGAACTTCGGGGTGATCGGTCCCCAAAGGGATGAGAAGTTCCCAAATGGCCTCCCTCTCATCAGTTCTATGGCCCAGACCCTCACACTCAGATCATCTTCTCAAAATTCGAGTGACAAGCCTGTAGCCCACGTCGTAGCAAACCACCAAGTGGAGGAGCAGCTGGAGTGGCTGAGCCAGCGCGCCAACGCCCTCCTGGCCAACGGCATGGATCTCAAAGACAACCAACTAGTGGTGCCAGCCGATGGGTTGTACCTTGTCTACTCCCAGGTTCTCTTCAAGGGACAAGGCTGCCCCGACTACGTGCTCCTCACCCACACCGTCAGCCGATTTGCTATCTCATACCAGGAGAAAGTCAACCTCCTCTCTGCCGTCAAGAGCCCCTGCCCCAAGGACACCCCTGAGGGGGCTGAGCTCAAACCCTGGTATGAGCCCATATACCTGGGAGGAGTCTTCCAGCTGGAGAAGGGGGACCAACTCAGCGCTGAGGTCAATCTGCCCAAGTACTTAGACTTTGCGGAGTCCGGGCAGGTCTACTTTGGAGTCATTGCTCTGTGAAGGGAATGGGTGTTCATCCATTCTCTACCCAGCCCCCACTCTGACCCCTTTACTCTGACCCCTTTATTGTCTACTCCTCAGAGCCCCCAGTCTGTATCCTTCTAACTTAGAAAGGGGATTATGGCTCAGGGTCCAACTCTGTGCTCAGAGCTTTCAACAACTACTCAGAAACACAAGATGCTGGGACAGTGACCTGGACTGTGGGCCTCTCATGCACCACCATCAAGGACTCAAATGGGCTTTCCGAATTCACTGGAGCCTCGAATGTCCATTCCTGAGTTCTGCAAAGGGAGAGTGGTCAGGTTGCCTCTGTCTCAGAATGAGGCTGGATAAGATCTCAGGCCTTCCTACCTTCAGACCTTTCCAGATTCTTCCCTGAGGTGCAATGCACAGCCTTCCTCACAGAGCCAGCCCCCCTCTATTTATATTTGCACTTATTATTTATTATTTATTTATTATTTATTTATTTGCTTATGAATGTATTTATTTGGAAGGCCGGGGTGTCCTGGAGGACCCAGTGTGGGAAGCTGTCTTCAGACAGACATGTTTTCTGTGAAAACGGAGCTGAGCTGTCCCCACCTGGCCTCTCTACCTTGTTGCCTCCTCTTTTGCTTATGTTTAAAACAAAATATTTATCTAACCCAATTGTCTTAATAACGCTGATTTGGTGACCAGGCTGTCGCTACATCACTGAACCTCTGCTCCCCACGGGAGCCGTGACTGTAATCGCCCTACGGGTCATTGAGAGAAATAA") 


table = 1 
min_pro_len = 100 

for strand, nuc in [(+1, seq), (-1, seq.reverse_complement())]: 
    for frame in range(3): 
     for pro in nuc[frame:].translate(table).split("*"): 
      if len(pro) >= min_pro_len: 
       print "%s...%s - length %i, strand %i, frame %i" % (pro[:30], pro[-3:], len(pro), strand, frame) 

ओआरएफ भी अनुवाद किया है:

मैं थोड़ा अपने क्रम पर काम करने के लिए ऊपर दिए गए लिंक से कोड निकाला जाता है। आप एक अलग अनुवाद तालिका का चयन कर सकते हैं। शीर्ष मैं अपने स्ट्रिंग से बाहर एक दृश्य वस्तु बनाने पर

अधिकार: कोड का स्पष्टीकरण: http://biopython.org/DIST/docs/tutorial/Tutorial.html#sec:translation

संपादित करें देखें। seq = Seq("ACGT") पर ध्यान दें। दो फॉर-लूप 6 अलग-अलग फ्रेम बनाते हैं। आंतरिक फॉर-लूप चयनित फ्रेम तालिका के अनुसार प्रत्येक फ्रेम का अनुवाद करता है और एक एमिनो एसिड श्रृंखला देता है जहां प्रत्येक स्टॉप कोडन को * के रूप में कोड किया जाता है। split फ़ंक्शन इस स्ट्रिंग को इन प्लेसहोल्डर्स को हटा देता है जिसके परिणामस्वरूप संभावित प्रोटीन अनुक्रमों की एक सूची होती है। Min_pro_len को सेट करके आप प्रोटीन के लिए न्यूनतम एमिनो एसिड श्रृंखला की लंबाई को परिभाषित कर सकते हैं। 1 मानक तालिका है। http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi#SG1 देखें यहां देखें कि दीक्षा कोडन AUG (ATG के बराबर है) और अंत कोडन (* न्यूक्लियोटाइड अनुक्रम में) TAA, TAG, और TGA, जैसा कि आप चाहते थे। आप एक अलग अनुवाद तालिका का भी उपयोग कर सकते हैं।

PQRGQQGTSQEGEQKLQNILEIAPRKASSQPGRFCPFHSLAQGATSPSRKDTMSTESMIRDVELAEEALPQKMGGFQNSRRCLCLSLFSFLLVAGATTLFCLLNFGVIGPQRDEKFPNGLPLISSMAQTLTLRSSSQNSSDKPVAHVVANHQVEEQLEWLSQRANALLANGMDLKDNQLVVPADGLYLVYSQVLFKGQGCPDYVLLTHTVSRFAISYQEKVNLLSAVKSPCPKDTPEGAELKPWYEPIYLGGVFQLEKGDQLSAEVNLPKYLDFAESGQVYFGVIAL*REWVFIHSLPSPHSDPFTLTPLLSTPQSPQSVSF*LRKGIMAQGPTLCSELSTTTQKHKMLGQ*PGLWASHAPPSRTQMGFPNSLEPRMSIPEFCKGRVVRLPLSQNEAG*DLRPSYLQTFPDSSLRCNAQPSSQSQPPSIYICTYYLLFIYYLFICL*MYLFGRPGCPGGPSVGSCLQTDMFSVKTELSCPHLASLPCCLLFCLCLKQNIYLTQLS**R*FGDQAVATSLNLCSPREP*L*SPYGSLREI 

(तारक नोटिस स्टॉप कोडोन पदों पर हैं)

संपादित करें:

जब आप के लिए लूप दूसरा अंदर

print nuc[frame:].translate(table) 

सही जोड़ने आप की तरह कुछ मिलता है : आपके दूसरे प्रश्न का उत्तर:

आपको एक स्ट्रिंग वापस करनी होगी जिसे आप एक फ़ाइल में लिखना चाहते हैं। एक आउटपुट स्ट्रिंग बनाएँ और यह समारोह के अंत में वापसी:

output = "selected tupple is " + str(selected_tupple) + "\n" 
output += final_seq + "\n" 
output += "The longest orf length is " + str(max_val) + "\n" 
return output 
+0

मुझे एक त्रुटि देता है 'एसटीआर' में कोई विशेषता नहीं है 'reverse_complement' – Nodnin

+0

क्या आपने पोस्ट किए गए कोड की पहली 3 पंक्तियां देखी हैं? आपकी स्ट्रिंग से अनुक्रम-ऑब्जेक्ट में रूपांतरण है। – MoRe

+0

लेकिन मैं नहीं देख सकता, अनुक्रम "एटीजी" के साथ कैसे शुरू होगा और स्टॉप कोडन के साथ अंत कैसे होगा .. मैं एक पठन फ्रेम – Nodnin

9

आप-कोड सौंपने के लिए यह चाहते हैं:

import re 
from string import maketrans 

pattern = re.compile(r'(?=(ATG(?:...)*?)(?=TAG|TGA|TAA))') 

def revcomp(dna_seq): 
    return dna_seq[::-1].translate(maketrans("ATGC","TACG")) 

def orfs(dna): 
    return set(pattern.findall(dna) + pattern.findall(revcomp(dna))) 

print orfs(Seq)