在 GitHub 上编辑此页面

使用 Bio.SeqUtils.Mapper 模块映射基因坐标。

由 Lenna X. Peterson 贡献

在不同的坐标系之间映射基因位置是许多基因组分析中必不可少的一部分。这是对 SeqMapper 模块的简要介绍。

注意:这使用当前在我的 分支 上可用的坐标映射器。这反过来又是彼得分支的一个分支,引入了 CompoundLocations。它不适用于旧样式的 SeqFeature。

配置

映射器和映射位置将所有位置存储在 Python 坐标中,即 0 索引。许多用户使用的是 1 索引的数据,例如 GenBank 或 HGVS。每个地图位置类型都有一个“to_hgvs”和“to_genbank”方法,方便转换。还可以将映射位置的默认打印表示设置为这些格式中的任何一个。

from Bio.SeqUtils.Mapper import MapPosition


def use_genbank(self):
    return str(self.to_genbank())


MapPosition.__str__ = use_genbank

映射

使用映射器的第一步是从 GenBank 或类似文件获取外显子。映射器将接受外显子作为一对序列、带有 CDS 特征的 SeqRecord 或 CDS SeqFeature。本示例中使用的文件位于 Biopython 源代码的 Tests 目录中。

from Bio.SeqUtils.Mapper import CoordinateMapper
from Bio import SeqIO


def get_first_CDS(parser):
    for rec in parser:
        for feat in rec.features:
            if feat.type == "CDS" and len(feat.location.parts) > 1:
                return feat


exons = get_first_CDS(SeqIO.parse("GenBank/cor6_6.gb", "genbank"))
cm = CoordinateMapper(exons)

构建映射器后,可以使用其方法来转换位于给定 CDS 内的位置。请注意,尝试转录和翻译不在 CDS 内的基因组位置将引发异常。还要注意,打印列表将显示位置的 repr,它们位于 Python 0 索引坐标中。

sample_g_values = [50, 150, 250, 350, 450, 550, 650]

protein_positions = []
for raw_g_pos in sample_g_values:
    # EAFP method
    try:
        # Dialect argument converts g_pos from Genbank to Python coordinates
        p_pos = cm.g2p(raw_g_pos, dialect="genbank")
    except ValueError:
        p_pos = None
    protein_positions.append(p_pos)
print(protein_positions)

以下是一个示例函数,它根据给定的坐标映射器和基因组值列表打印基因组、CDS 和蛋白质坐标表。

from Bio.SeqUtils.Mapper import GenomePosition


def gcp_table(mapper, g_list):
    """Print a table of genomic, CDS, and protein coordinates"""
    # Print header
    print("%4s | %6s | %2s" % ("g", "CDS", "p"))
    print("-" * 20)
    for g_pos in g_list:
        # Directly convert g_pos from Genbank to Python coordinates
        g_pos = GenomePosition.from_dialect("genbank", g_pos)
        c_pos = mapper.g2c(g_pos)
        # LBYL method:
        if c_pos.pos_type == "exon":
            p_pos = mapper.c2p(c_pos)
        else:
            p_pos = ""
        # Print formatted row
        print("%4s | %6s | %2s" % (g_pos, c_pos, p_pos))


gcp_table(cm, sample_g_values)

此示例中显示的代码可以从此处下载:https://gist.github.com/lennax/10600113。使用的示例文件位于 Biopython 源代码的 Tests 目录中。