Я пытался построить эмпирическую матрицу замены кодонов с учетом множественного выравнивания последовательностей в формате 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) Я хотел бы получить матрицу замещения, которая учитывает три возможных рамки считывания
Любая помощь высоко ценится ,