2015-07-13 1 views
0

Я пытаюсь найти местоположение стоп-кодонов в последовательности.Код Python для поиска стоп-кодонов в последовательности

К сожалению, что-то не работает. Это код, который я создал:

def findStopCodons1(orf): 
catch = numpy.arange(0, len(orf), 3) 
x = [] 
w = [] 
for i in catch: 
    codon = orf[i:i+3] 
    if codon == 'ATG': 
     w.append(i+1) 
     catch1 = numpy.arange(i+1, len(orf), 3) 
     for i in catch1: 
      if codon == 'TAA' or codon == 'TAG' or codon == 'TGA': 
       x.append(i+1) 
       print i + 1 
mergedlist = w + x 
print mergedlist 
print NP.ediff1d(mergedlist) 
y = NP.ediff1d(mergedlist) 
print max(y) 

Это должно быть для чтения рамки 1. К сожалению, я думаю, что мои номера выключены. Какой-нибудь намек, что не так с моим кодом?

*** Редактировать: Я забыл ввести стартовый кодон, который является «ATG». К сожалению, мне нужно вернуться к моему коду и найти способ прочитать между кодонами start и stop.

Я добавил стартовый кодон, но я все еще в растерянности. Я не получаю правильные цифры.

+0

Пожалуйста, правильно отложите свой код, добавьте импорт «numpy», чтобы этот пример был автономным, и добавьте некоторые данные примера с ожидаемым результатом и результатом, который вы получите. – BioGeek

+0

Какой вывод вы получаете от 'print i + 1'? Это может помочь, если вы напечатаете 'orf [i: i + 3]', чтобы вы могли видеть, что он проверяет. Также 'if codon == 'TAA' или codon == 'TAG' или codon == 'TGA'' можно сократить до' if codon in (' TAA ',' TAG ',' TGA ') 'для того же результата , – SuperBiasedMan

+0

О, я пропустил открытую рамку для чтения, «ATG». Вероятно, это одна из причин, по которой у меня возникла проблема с поиском длины открытых кадров считывания. – statsguyz

ответ

1

Я не уверен на 100%, какой у вас желаемый результат, но если вы просто хотите собирать все потенциальные позиции начала кодонов и останавливать позиции кодонов в своих списках x и w (фактически, позвольте мне переименовать их startCodonPositions и stopCodonPositions), это достаточно просто.

На самом деле, кажется, что ваш код для startCodonPositions уже работает отлично. Почему бы просто не сделать то же самое с stopCodonPositions, вот так?

def findStopCodons1(orf): 
    catch = numpy.arange(0, len(orf), 3) 
    startCodonPositions = [] 
    stopCodonPositions = [] 
    for i in catch: 
     codon = orf[i:i + 3] 
     if codon == 'ATG': 
      startCodonPositions.append(i + 1) 
     if codon == 'TAA' or codon == 'TAG' or codon == 'TGA': 
      stopCodonPositions.append(i + 1) 
    return startCodonPositions, stopCodonPositions