在 GitHub 上编辑此页面

多重比对格式

多重比对格式,由 UCSC 描述,将一系列多重比对存储在一个文件中。适用于全基因组到全基因组的比对,可以存储元数据,例如源染色体、起始位置、大小和链。

Biopython 1.69 包含 MAF 阅读器和写入器,可通过 Bio.AlignIO 访问,以及可通过 Bio.AlignIO.MafIO 访问的索引器。

以下所有示例都使用 Multiz 与小鼠染色体 10 的 30 路比对,可从 UCSC 获取。

从 GitHub 获取 AlignIO 代码

如果您不能等待 Biopython 1.69 发布,请从 GitHub 获取最新的 Biopython

首先,使用命令行中的 git 克隆存储库,如下所示

git clone [email protected]:biopython/biopython.git

这将为您提供默认的 master 分支。然后从源代码安装。

读取 MAF 文件

解析 MAF 文件类似于 AlignIO 中的任何其他比对文件。但是,附加数据存储在返回的 MultipleSeqAlignment 对象所属的 SeqRecord.annotations 属性中的字典中。

SeqRecords 中可用的注释

类型
开始 整数 此比对在源序列中的起始位置
大小 整数 此序列的无间隙长度
枚举(“+”,“-”) 此序列在源序列/染色体上的来源链
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"],
            )
        )

MafIndex

Biopython 可能会很快提供一个接口,用于快速访问跨任意间隔的多个序列的多重比对:例如,mm9 中的 chr10:25,079,604-25,243,324。由于 MAF 文件适用于整个染色体,因此它们可以按染色体位置索引并随机访问。此功能将在 Bio.AlignIO.MafIO.MafIndex 类中可用。

创建或加载 MAF 索引

索引通过确定特定序列名称(通常是物种)的染色体起始和结束位置来创建,该名称必须出现在文件中的每个比对块中。一次只能为一个物种生成索引。在 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