Как построить эмпирическую матрицу замены кодонов из выравнивания нескольких последовательностей - PullRequest
1 голос
/ 23 апреля 2020

Я пытался построить эмпирическую матрицу замены кодонов с учетом множественного выравнивания последовательностей в формате fasta с использованием Bio python.

Это представляется относительно простым для матриц однонуклеотидного замещения с использованием модуля AlignInfo , когда выровненные последовательности имеют одинаковую длину. Вот что мне удалось сделать, используя python2 .7:

#!/usr/bin/env python 
import os
import argparse
from Bio import AlignIO
from Bio.Align import AlignInfo
from Bio import SubsMat
import sys

version = "0.0.1 (23.04.20)"
name = "Aln2SubMatrix.py"
parser=argparse.ArgumentParser(description="Outputs a codon substitution matrix given a multi-alignment in FastaFormat. Will raise error if alignments contain dots (\".\"), so replace those with dashes (\"-\") beforehand (e.g. using sed)")
parser.add_argument('-i','--input', action = "store", dest = "input", required = True, help = "(aligned) input fasta")
parser.add_argument('-o','--output', action = "store", dest = "output", help = "Output filename (default = <Input-file>.codonSubmatrix")
args=parser.parse_args()
if not args.output:
    args.output = args.input + ".codonSubmatrix"  #if no outputname was specified set outputname based on inputname

def main():
    infile = open(args.input, "r")
    outfile = open(args.output, "w")
    align = AlignIO.read(infile, "fasta")
    summary_align = AlignInfo.SummaryInfo(align)
    replace_info = summary_align.replacement_dictionary()
    mat = SubsMat.SeqMat(replace_info)
    print >> outfile, mat
    infile.close()
    outfile.close()
    sys.stderr.write("\nfinished\n")

main()

Используя файл многократного выравнивания последовательностей в формате fasta с последовательностями одинаковой длины (aln.fa), на выходе получается полуматрица соответствует числу нуклеотидных замен, выделенных в выравнивании (обратите внимание, что допускаются пробелы (-)):

python Aln2SubMatrix.py -i aln.fa

-   0
a 860 232
c 596  75 129
g 571 186  75 173
t 892  58 146  59 141
   -   a   c   g   t

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

Я попытался настроить функцию _pair_replacement модуля AlignInfo, чтобы принимать триплеты нуклеотидов, изменив:

строка 305 на 308

for residue_num in range(len(seq1)):
            residue1 = seq1[residue_num]
            try:
                residue2 = seq2[residue_num] 

до

for residue_num in range(0, len(seq1), 3):
            residue1 = seq1[residue_num:residue_num+3]
            try:
                residue2 = seq2[residue_num:residue_num+3]

На этом этапе он может извлечь кодоны из выравнивания, но жалуется на алфавит (модуль принимает только односимвольный алфавит?).

Обратите внимание, что

(i) Я хотел бы получить матрицу замещения, которая учитывает три возможных рамки считывания

Любая помощь высоко ценится ,

...