Обрезать последовательности на основе выравнивания - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь отредактировать файл MSA (Multiple Sequence Alignment), созданный ClustalW, чтобы обрезать последовательности до консенсусного, используя BioPython. xxx относится к другим основам, не относящимся к делу

Вот пример ввода / вывода:

ВХОД

ITS_primer_fw               --------------------------------CGCGTCCACTMTCCAGTT
RBL67ITS_full_sequence      CCACCCCAACAAGGGCGGCCACGCGGTCCGCTCGCGTCCACTCTCCAGTTxxxxxxxxxxxxxxxxxxxxxxx
PRL2010                     ACACCCCCGAAAGGGCGTCC------CCTGCTCGCGTCCACTATCCAGTTxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BBF32_3                     ACACACCCACAAGGGCGAGCAGGCG----GCTCGCGTCCACTATCCAGTTxxxxxxxxxxxxxx
BBFCG32                     CAACACCACACCGGGCGAGCGGG-------CTCGCGTCCACTGTCGAGTTxxxxxxxxxxxxxxxxxxxxxx

ОЖИДАЕМЫЙ ВЫХОД

ITS_primer_fw               CGCGTCCACTMTCCAGTT
RBL67ITS_full_sequence      CGCGTCCACTCTCCAGTTxxxxxxxxxxxxxxxxxxxx
PRL2010                     CGCGTCCACTATCCAGTTxxxxxxxxxxxxxxxxxxxxx
BBF32_3                     CGCGTCCACTATCCAGTTxxxxxxxxxxxxxxxxxxx
BBFCG32                     CGCGTCCACTGTCGAGTTxxxxxxxxxxxxxxxxxxxx

Документированный код для AlignIO описывает просто способ извлечения последовательностей, рассматривая выравнивание как массив . В этом примере

align = AlignIO.read(input_file, "clustal")
sub_alignment = align[:,20:]

Мне удалось извлечь подстановку, сделанную всеми последовательностями (:), начиная с 20-го нуклеотида. Я ищу способ заменить 20 в примере положением первого нуклеотида консенсусной последовательности.

1 Ответ

0 голосов
/ 09 января 2019

Нашел ответ благодаря пользователю Biostars.

Подергивается в столбце, чтобы найти начальную точку, которая будет соответствовать ожидаемой после последнего '-'. По умолчанию в моем выравнивании первый ряд самый короткий и начинается с «-», прежде чем выравнивание станет хорошим.

Так вот код:

aln = AlignIO.read(input_file, "clustal")
for col in range(aln.get_alignment_length()):  # search into column
    res = list(aln[:,col])
    if not '-' in res:
        position = col                         # find start point
        print('First full column is {}'.format(col))
        break
print(aln[:,position::])                       # print the whole alignment starting from the position variable found
...