Matrix 如何从多序列比对建立经验密码子替换矩阵
我一直在尝试建立一个经验密码子替换矩阵,给出了一个使用生物ython的fasta格式的多序列比对 当对齐的序列具有相同的长度时,使用该模块的单核苷酸替换矩阵似乎是相对严格的。以下是我使用python2.7所做的工作: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
#!/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]