Matrix 如何从多序列比对建立经验密码子替换矩阵

Matrix 如何从多序列比对建立经验密码子替换矩阵,matrix,substitution,biopython,sequence-alignment,Matrix,Substitution,Biopython,Sequence Alignment,我一直在尝试建立一个经验密码子替换矩阵,给出了一个使用生物ython的fasta格式的多序列比对 当对齐的序列具有相同的长度时,使用该模块的单核苷酸替换矩阵似乎是相对严格的。以下是我使用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

我一直在尝试建立一个经验密码子替换矩阵,给出了一个使用生物ython的fasta格式的多序列比对

当对齐的序列具有相同的长度时,使用该模块的单核苷酸替换矩阵似乎是相对严格的。以下是我使用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()
我的目标是计算类似的经验替代矩阵,但对于多序列比对中存在的所有核苷酸三联体(密码子)

我尝试调整AlignInfo模块的功能,通过更改以下内容来接受核苷酸三联体:

第305至308行

在此阶段,它可以从比对中检索密码子,但会抱怨字母表(模块仅接受单字符字母表?)

请注意

(i) 我想得到一个替代矩阵,它可以解释三种可能的阅读框架

非常感谢您的帮助

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
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]