2011-04-16 9 views
6

मैं पहले से ही गठबंधन अनुक्रमों को स्कोर करने का प्रयास करता हूं। कहनाक्या कोई ऐसा फ़ंक्शन है जो संरेखण पैरामीटर दिए गए गठबंधन अनुक्रमों के लिए स्कोर की गणना कर सकता है?

seq1 = 'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE' 
seq2 = 'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE' 
दिए गए मापदंडों

substitution matrix : blosum62 
gap open penalty : -5 
gap extension penalty : -1 

मैं biopython रसोई की किताब के माध्यम से देखने के लिए किया था के साथ

करते हैं लेकिन सभी मैं प्राप्त कर सकते हैं प्रतिस्थापन मैट्रिक्स blogsum62 है, लेकिन मुझे लगता है कि यह किसी को पहले से ही पुस्तकालय के इस प्रकार से लागू किया होना आवश्यक है ।

तो क्या कोई मेरी पुस्तकालय या सबसे छोटा कोड सुझा सकता है जो मेरी समस्या का समाधान कर सकता है?

अग्रिम में Thx

+0

अपने कोड को ठीक से प्रारूपित करें। –

+0

क्यों आप इसे बस विस्फोट नहीं करते? आप बायोप्थॉन विस्फोट के साथ ऐसा कर सकते हैं। – joaquin

उत्तर

8

Jessada,

Blosum62 मैट्रिक्स (वर्तनी ध्यान दें;) Bio.SubsMat.MatrixInfo में है और (ताकि ('A', 'A') लायक 4 अंक है) tuples स्कोर को हल करने के साथ एक शब्दकोश है । इसमें अंतराल नहीं है, और यह मैट्रिक्स का केवल एक त्रिकोण है (इसलिए यह हो सकता है ('टी', 'ए') लेकिन नहीं ('ए', 'टी')। बायोप्थॉन में कुछ सहायक कार्य हैं, Bio.Pairwise में कुछ हैं, लेकिन इससे क्या मैं के साथ आया है एक जवाब के रूप:।

from Bio.SubsMat import MatrixInfo 

def score_match(pair, matrix): 
    if pair not in matrix: 
     return matrix[(tuple(reversed(pair)))] 
    else: 
     return matrix[pair] 

def score_pairwise(seq1, seq2, matrix, gap_s, gap_e): 
    score = 0 
    gap = False 
    for i in range(len(seq1)): 
     pair = (seq1[i], seq2[i]) 
     if not gap: 
      if '-' in pair: 
       gap = True 
       score += gap_s 
      else: 
       score += score_match(pair, matrix) 
     else: 
      if '-' not in pair: 
       gap = False 
       score += score_match(pair, matrix) 
      else: 
       score += gap_e 
    return score 

seq1 = 'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE' 
seq2 = 'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE' 

blosum = MatrixInfo.blosum62 

score_pairwise(seq1, seq2, blosum, -5, -1) 

कौन सा अपने संरेखण के लिए 82 देता है वहाँ लगभग certianly खूबसूरत तरीके यह सब करने के लिए है, लेकिन वह एक अच्छा होना चाहिए शुरू करते हैं।

5

blosum62 276 मदों की एक Dictonary है।

मैं, कमी आइटम के साथ पूरा करने के लिए है क्योंकि यह केवल 276 बदल जाता है की एक यात्रा का प्रतिनिधित्व करता है पसंद है, जबकि दृश्यों ar का विश्लेषण किया जाए ई 276 से अधिक तत्व होने की संभावना है। नतीजतन, यदि आपको फ़ंक्शन score_match() की सहायता से प्रत्येक जोड़ी का स्कोर मिलता है, तो इस फ़ंक्शन को अनुक्रमों के प्रत्येक तत्व के लिए परीक्षण if pair not in matrix करना होगा, जो निश्चित रूप से 276 बार से अधिक कहने के लिए है।

एक और चीज जो बहुत समय लेती है: प्रत्येक score += something एक नया पूर्णांक बनाता है और इस नई वस्तु के लिए स्कोर नाम देता है। प्रत्येक बाध्यकारी में उस समय की मात्रा होती है जो एक जेनरेटर द्वारा पूर्णांक की धारा के साथ मौजूद नहीं होती है जिसे तुरंत वर्तमान मात्रा में जोड़ा जाता है।

from Bio.SubsMat.MatrixInfo import blosum62 as blosum 
from itertools import izip 

blosum.update(((b,a),val) for (a,b),val in blosum.items()) 

def score_pairwise(seq1, seq2, matrix, gap_s, gap_e, gap = True): 
    for A,B in izip(seq1, seq2): 
     diag = ('-'==A) or ('-'==B) 
     yield (gap_e if gap else gap_s) if diag else matrix[(A,B)] 
     gap = diag 

seq1 = 'PAVKDLGAEG-ASDKGT--SHVVY----------TI-QLASTFE' 
seq2 = 'PAVEDLGATG-ANDKGT--LYNIYARNTEGHPRSTV-QLGSTFE' 

print sum(score_pairwise(seq1, seq2, blosum, -5, -1)) 

यह score_pairwise() है, क्योंकि उपज बजाय वापसी एक जनरेटर कार्य है।

संबंधित मुद्दे

 संबंधित मुद्दे