多重比对格式,由 UCSC 描述,将一系列多重比对存储在一个文件中。适用于全基因组到全基因组的比对,可以存储元数据,例如源染色体、起始位置、大小和链。
Biopython 1.69 包含 MAF 阅读器和写入器,可通过 Bio.AlignIO
访问,以及可通过 Bio.AlignIO.MafIO
访问的索引器。
以下所有示例都使用 Multiz 与小鼠染色体 10 的 30 路比对,可从 UCSC 获取。
如果您不能等待 Biopython 1.69 发布,请从 GitHub 获取最新的 Biopython
首先,使用命令行中的 git 克隆存储库,如下所示
git clone [email protected]:biopython/biopython.git
这将为您提供默认的 master 分支。然后从源代码安装。
解析 MAF 文件类似于 AlignIO
中的任何其他比对文件。但是,附加数据存储在返回的 MultipleSeqAlignment
对象所属的 SeqRecord
的 .annotations
属性中的字典中。
键 | 类型 | 值 |
---|---|---|
开始 | 整数 | 此比对在源序列中的起始位置 |
大小 | 整数 | 此序列的无间隙长度 |
链 | 枚举(“+”,“-”) | 此序列在源序列/染色体上的来源链 |
srcSize | 整数 | 源序列/染色体的总长度 |
from Bio import AlignIO
for multiple_alignment in AlignIO.parse("chr10.maf", "maf"):
print("printing a new multiple alignment")
for seqrec in multiple_alignment:
print(
"starts at %s on the %s strand of a sequence %s in length, and runs for %s bp"
% (
seqrec.annotations["start"],
seqrec.annotations["strand"],
seqrec.annotations["srcSize"],
seqrec.annotations["size"],
)
)
Biopython 可能会很快提供一个接口,用于快速访问跨任意间隔的多个序列的多重比对:例如,mm9 中的 chr10:25,079,604-25,243,324。由于 MAF 文件适用于整个染色体,因此它们可以按染色体位置索引并随机访问。此功能将在 Bio.AlignIO.MafIO.MafIndex
类中可用。
索引通过确定特定序列名称(通常是物种)的染色体起始和结束位置来创建,该名称必须出现在文件中的每个比对块中。一次只能为一个物种生成索引。在 Multiz 生成的全基因组比对中,通常将一个物种的染色体用作其他物种比对的参考。此参考物种将出现在每个块中,应作为 target_seqname 参数使用。对于 UCSC multiz 文件,使用 species.chromosome 的形式。
要索引 MAF 文件或加载现有索引,请创建一个新的 MafIO.MafIndex
对象。如果索引数据库文件 sqlite_file 不存在,它将被创建,否则它将被加载。
# index mouse chr10 from UCSC and store it in a file for later use
from Bio.AlignIO import MafIO
# idx = MafIO.MafIndex(sqlite_file, maf_file, target_seqname)
idx = MafIO.MafIndex("chr10.mafindex", "chr10.maf", "mm9.chr10")
MafIO.MafIndex.search()
生成器函数接受起始位置和结束位置列表,并生成与给定间隔重叠的 MultipleSeqAlignment
对象。这对于获取单个转录本的多个外显子上的比对特别有用,从而无需检索整个基因座。
# count the number of bases in danRer5 (Zebrafish) that align to the
# Pcmt1 locus in mouse
from Bio.AlignIO.MafIO import MafIndex
idx = MafIndex("chr10.mafindex", "chr10.maf", "mm9.chr10")
results = idx.search([7350034], [7383048])
total_bases = 0
for multiple_alignment in results:
for seqrec in multiple_alignment:
if seqrec.id.startswith("danRer5"):
# don't count gaps as bases
total_bases += len(str(seqrec.seq).replace("-", ""))
print("a total of %s bases align" % total_bases)
MafIO.MafIndex.get_spliced()
函数接受代表外显子的起始位置和结束位置列表,并返回一个单个 MultipleSeqAlignment
对象,该对象是来自参考和所有比对序列的 in silico 拼接转录本。如果序列范围的一部分在比对的特定物种中找不到,则使用连字符 (“-”) 来填充间隙,或者如果序列在参考 (target_seqname) 序列中不存在,则使用“N”。如果 链 与参考序列中的链相反,则返回比对中的所有序列都将被反向互补。
# convert the alignment for mouse Foxo3 (NM_019740) from MAF to FASTA
from Bio import AlignIO
idx = AlignIO.MafIO.MafIndex("chr10.mafindex", "chr10.maf", "mm9.chr10")
multiple_alignment = idx.get_spliced(
[41905591, 41916271, 41994621, 41996331],
[41906101, 41917707, 41995347, 41996548],
strand="+",
)
AlignIO.write(multiple_alignment, "mm9_foxo3.fa", "fasta")
# find every gene on chr10 in the current UCSC refGene database,
# retrieve its spliced multiple alignment, and write it to
# a FASTA file in the current directory
#
# depends: MySQLdb
import MySQLdb
from Bio import AlignIO
# connect to UCSC's live MySQL database
mysql_conn = MySQLdb.connect(
host="genome-mysql.cse.ucsc.edu", user="genome", passwd="", db="mm9"
)
db_conn = mysql_conn.cursor(MySQLdb.cursors.DictCursor)
# load MAF index
idx = AlignIO.MafIO.MafIndex("chr10.mafindex", "chr10.maf", "mm9.chr10")
# fetch all records on chr10
db_conn.execute("SELECT * FROM refGene WHERE chrom = 'chr10'")
for record in db_conn.fetchall():
multiple_alignment = idx.get_spliced(
map(int, record["exonStarts"].split(",")[:-1]),
map(int, record["exonEnds"].split(",")[:-1]),
strand=record["strand"],
)
print("writing %s.fa" % record["name"])
AlignIO.write(multiple_alignment, "%s.fa" % record["name"], "fasta")
track name=euArc visibility=pack
##maf version=1 scoring=tba.v8
# tba.v8 (((human chimp) baboon) (mouse rat))
a score=23262.0
s hg18.chr7 27578828 38 + 158545518 AAA-GGGAATGTTAACCAAATGA---ATTGTCTCTTACGGTG
s panTro1.chr6 28741140 38 + 161576975 AAA-GGGAATGTTAACCAAATGA---ATTGTCTCTTACGGTG
s baboon 116834 38 + 4622798 AAA-GGGAATGTTAACCAAATGA---GTTGTCTCTTATGGTG
s mm4.chr6 53215344 38 + 151104725 -AATGGGAATGTTAAGCAAACGA---ATTGTCTCTCAGTGTG
s rn3.chr4 81344243 40 + 187371129 -AA-GGGGATGCTAAGCCAATGAGTTGTTGTCTCTCAATGTG
a score=5062.0
s hg18.chr7 27699739 6 + 158545518 TAAAGA
s panTro1.chr6 28862317 6 + 161576975 TAAAGA
s baboon 241163 6 + 4622798 TAAAGA
s mm4.chr6 53303881 6 + 151104725 TAAAGA
s rn3.chr4 81444246 6 + 187371129 taagga
a score=6636.0
s hg18.chr7 27707221 13 + 158545518 gcagctgaaaaca
s panTro1.chr6 28869787 13 + 161576975 gcagctgaaaaca
s baboon 249182 13 + 4622798 gcagctgaaaaca
s mm4.chr6 53310102 13 + 151104725 ACAGCTGAAAATA