Как усовершенствовать скрипт на Python для запроса биоинформатики

Я довольно новичок в Python, и я был бы благодарен за некоторую помощь, если это возможно. Я сравниваю геномы двух близкородственных организмов [E_C & E_F] и пытаюсь определить некоторые основные вставки и делеции. Я провел парное выравнивание FASTA (glsearch36), используя последовательности из обоих организмов.

Ниже приведен раздел моего скрипта на python, где я смог идентифицировать 7 нуклеотидов (гептамер) в одной последовательности (базе данных), что соответствует пробелу в другой последовательности (запрос). Это пример того, что у меня есть:

ATGCACAA-ACCTGTATG # query
ATGCAGAGGAAGAGCAAG # database
9
GAGGAAG

Предположим, что разрыв находится в положении 9. Я пытаюсь уточнить сценарий, чтобы выбрать разрывы, которые расположены на расстоянии 20 или более нуклеотидов в обеих последовательностях, и только в том случае, если окружающие нуклеотиды также совпадают.

ATGCACAAGTAAGGTTACCG-ACCTGTATGTGAACTCAACA
                 ||| |||
GTGCTCGGGTCACCTTACCGGACCGCCCAGGGCGGCCCAAG
21
CCGGACC

Это раздел моего скрипта, верхняя часть которого посвящена открытию разных файлов. он также печатает словарь с количеством каждой последовательности в конце.

list_of_positions = []

for match in re.finditer(r'(?=(%s))' % re.escape("-"), dict_seqs[E_C]): 
    list_of_positions.append(match.start())

set_of_positions = set(list_of_positions)
for position in list_of_positions:
    list_no_indels = []
    for number in range(position-20, position) :
        list_no_indels.append(number)
    for number in range(position+1, position+21) :
        list_no_indels.append(number)
    set_no_indels = set(list_no_indels)
    if len(set_no_indels.intersection(set_of_positions))> 0 : continue

    if len(set_no_indels.intersection(set_of_positions_EF))> 0 : continue


    print position 
    #print match.start()

    print dict_seqs[E_F][position -3:position +3]

    key = dict_seqs[E_F][position -3: position +3]

    if nt_dict.has_key(key):
        nt_dict[key] += 1 
    else:
        nt_dict[key] = 1


print nt_dict

По сути, я пытался отредактировать результаты парных выравниваний, чтобы попытаться идентифицировать нуклеотиды напротив пробелов в последовательности запроса и базы данных, чтобы провести некоторый базовый анализ вставки / удаления.

Я смог решить одну из моих предыдущих проблем, увеличив расстояние между пробелами "-" до 20 нт, пытаясь уменьшить шум, это улучшило мои результаты. Скрипт отредактирован выше.

Это пример моих результатов, и в конце у меня есть словарь, в котором подсчитаны случаи каждой последовательности.

ATGCACAA-ACCTGTATG # query
ATGCAGAGGAAGAGCAAG # database
9 (position on the sequence)
GAGGAA (hexamer)


ATGCACAAGACCTGTATG # query
ATGCAGAG-AAGAGCAAG # database
9 (position)
CAAGAC (hexamer)

Тем не менее, я все еще пытаюсь исправить сценарий, где я получаю нуклеотиды вокруг пробела, чтобы точно соответствовать, как это, где | просто чтобы показать соответствующие NT на каждой последовательности:

GGTTACCG-ACCTGTATGTGAACTCAACA # query
     ||| ||
CCTTACCGGACCGCCCAGGGCGGCCCAAG # database

9
ACCGAC

Любая помощь с этим будет с благодарностью!

1 ответ

Решение

Я думаю, что понимаю, что вы пытаетесь сделать, но, как сказал @alko, комментарии в вашем коде определенно помогут.

Что касается нахождения точного соответствия вокруг пропуска, вы можете выполнить сравнение строк:

Что-то вроде:

if query[position -3: position] == database[position -3: position] and query[position +1: position +3] == database[position +1: position +3]:
   # Do something

Вам нужно будет заменить "query" и "database" на то, что вы назвали своими строками, которые вы хотите сравнить.

Другие вопросы по тегам