2016-11-30 2 views
0

ambiguous symbols (IUPAC)과 함께 dna 서열을 포함하는 FASTA 파일을 입력해야만한다. FASTA 파일의 이름과 모호하지 않은 DNA 문자열을 감안할 때 주어진 시퀀스가 ​​서브 시퀀스 일 수있는 시퀀스 식별자 ('>' 헤더)를 작성하고 싶습니다. 가능한 모든 시퀀스를 생성하지 않고이 구현하고 싶습니다 및 하위 시퀀스 FASTA 파일의 시퀀스뿐만 아니라 모호한 기호가있을 수 있습니다. 예 : "ACC"시퀀스는 "CGMBHTW"의 서브 시퀀스 일 수 있습니다. 누군가 나를 도와 줄 수 있습니까?fasta 서열 내에서 뉴클레오티드 서브 서열을 찾는다

+1

시도는 무엇입니까? -> 지금까지 코드 표시 – shash678

+1

시작하려면 * 어떤 * 코드도 제공 할 수 있습니까? 나에 관해서는, 나는이 질문 뒤에 생물학에 대해 전혀 모른다. 그래서 당신이 해결하려고하는 문제에 대한 더 명확한 것이 도움이 될 것이다. – davedwards

+0

각 테스트에 대한 입력과 올바른 결과를 보여주는 몇 가지 테스트 예제를 제공 할 수 있는가? ? – Steve

답변

0

"일반화 된"뉴클레오타이드를 나타내는 문자 세트로 정의한 다음 해당 세트의 목록에서 시퀀스를 변환하고 다른 시퀀스와 호환되는 위치가 있는지 한 시퀀스를 스캔 할 수 있습니다.

다음은 가장 효율적인 코드는 아니지만 작동하는 것처럼 보입니다. (이중 루핑 인덱스가 올바른지 ...).

A = {"A"} 
C = {"C"} 
G = {"G"} 
T = {"T"} 
R = A | G 
Y = C | T 
S = G | C 
W = A | T 
K = G | T 
M = A | C 
B = C | G | T 
D = A | G | T 
H = A | C | T 
V = A | C | G 
N = {"A", "C", "G", "T"} 

letter2nucl = { 
    "A" : A, 
    "C" : C, 
    "G" : G, 
    "T" : T, 
    "R" : R, 
    "Y" : Y, 
    "S" : S, 
    "W" : W, 
    "K" : K, 
    "M" : M, 
    "B" : B, 
    "D" : D, 
    "H" : H, 
    "V" : V, 
    "N" : N} 

def is_subseq(seq1, seq2): 
    l1 = len(seq1) 
    l2 = len(seq2) 
    nucls1 = [letter2nucl[letter] for letter in seq1] 
    nucls2 = [letter2nucl[letter] for letter in seq2] 
    i = 0 
    while i < 1 + l2 - l1: 
     subseq = True 
     for j, nucl in enumerate(nucls1): 
      if not (nucls2[i+j] & nucl): 
       # empty set intersection 
       subseq = False 
       break 
     if subseq: 
      return True 
     i += 1 
    return False 

seq1 = "ACC" 
seq2 = "CGMBHTW" 

if is_subseq(seq1, seq2): 
    print("%s is subsequence of %s" % (seq1, seq2)) 

seq1 = "GRT" 
seq2 = "AATCBAT" 

if is_subseq(seq1, seq2): 
    print("%s is subsequence of %s" % (seq1, seq2)) 

결과는 다음과 같습니다

ACC is subsequence of CGMBHTW 
GRT is subsequence of AATCBAT 

그런 다음, 바이오 파이썬의 SeqIO 기능을 사용하여 읽기 시퀀스에 사용할 수 있습니다.

관련 문제