由 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 目录中。