mcpField
G
genomic-coordinates

genomic-coordinates

github.com/k-dense-ai数据与数据库55.1k980 次安装2 天前更新
代码仓库

关于 genomic-coordinates

为基因组学研究人员提供坐标转换、变异规范化和文件核查方法,适用于格式、参考基因组或转录本边界之间的坐标处理。它强调同时记录坐标值、约定和组装版本,并提供诊断脚本发现易被忽略的错误。

主要功能

  1. 01转换常见坐标约定
  2. 02规范化并比较 VCF 变异
  3. 03检查参考组装与 contig 冲突
  4. 04审计区间文件中的坐标问题
  5. 05说明转录本、CDS 与蛋白位置关系

适用场景

  1. 01在 BED 与 GFF 等格式间转换区间
  2. 02比较变异前先统一等位基因表示
  3. 03核查变异与注释文件的参考组装
  4. 04排查区间文件中的偏移和命名错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/k-dense-ai/scientific-agent-skills --skill genomic-coordinates

安装后在 Claude Code 中输入/genomic-coordinates确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
format-conventions.md
reference-builds.md
transcript-coordinates.md
variant-representation.md
scripts/
_common.py
audit_intervals.py
check_contigs.py
convert_coords.py
normalize_variant.py

详细介绍

基因组坐标

何时使用

任何时候坐标跨越了边界:两种文件格式之间、两个工具之间、两个装配版本之间,或基因组与转录本之间。

规则

一个坐标是三个事实,而不是一个:数字、它所采用的约定,以及它所依据的装配版本。 三者缺一,这个数字就无法解释。

坐标错误是基因组学中最隐蔽的一类 bug。一个差一位的 BED 文件能正常解析、排序和求交集,毫无怨言。一个 GRCh37 的 VCF 与 GRCh38 的注释做连接也会返回行。一个右移的 indel 只是刚好匹配不上它在 ClinVar 中的条目,结果就被报告为新变异。没有任何地方报错;答案就是错的,而且错的方向看起来还很合理。

所以:用表格来转换,不要凭记忆,并且只要参考序列可用,就对照参考序列进行验证。

两种转换

1-based inclusive  ->  0-based half-open :  start - 1,  end
0-based half-open  ->  1-based inclusive :  start + 1,  end

这些公式适用于同一参考序列和同一条链上的非空区间。它们不涉及插入、环形回绕、liftover 或转录本映射。

哪种格式是哪种

0 起始,半开1 起始,闭区间
BED、bedGraph、bigWig、narrowPeakGFF3、GTF、VCF
BAM(二进制 POS)、BCF(二进制 POS)SAM 文本 POS、CRAM 绝对比对起始位置
PSL、genePred、refFlatWIG、Picard interval_list
MAF(UCSC 多序列比对)MAF(TCGA 突变注释)
PyRanges、pybedtoolsGRanges/IRanges、samtools 与 UCSC 与 Ensembl 区域字符串

两种 "MAF" 格式都存在,它们含义不同,而且彼此不一致。UCSC 通过一个 1 起始的浏览器框来提供 0 起始的文件。references/format-conventions.md 中有包含各格式细节的完整表格。

cd skills/genomic-coordinates/scripts

python3 convert_coords.py --list                          # the table
python3 convert_coords.py --from bed --to gff chr1 999 1000
python3 convert_coords.py --from ucsc --to bed "chr7:5,530,601-5,530,625"
python3 convert_coords.py --from granges --to pyranges --input regions.tsv
contig  input                 output           length  status  detail
chr7    chr7:5530601-5530625  5530600-5530625  25      ok

零长度的 BED 特征(chromStart == chromEnd,一个合法的插入点)对于闭区间目标会被报告为 unrepresentable,因为转换器缺少特征语义。GFF3 可以用相等的端点和特征类型来编码插入位点;这与普通的单碱基区间不同。输出无效或无法表示时退出码为 1;有效的零长度半开输出退出码为 0。输出是诊断用的 TSV/JSON 表格,而不是重写后的 GFF/VCF。

--input 可解析 BED/bedGraph、GFF/GTF、字面等位基因 VCF REF 区间、显式区域字符串,以及三列的 GRanges/PyRanges/Python TSV。其他表格行仅为约定:用原生解析器提取区间并传入一个三元组。所有内置文本读取器都要求未压缩的文件。

变异不是区间

对于简单的 VCF indel,POS 通常标识事件之前未改变的填充碱基。在 contig 位置 1,填充碱基可以位于事件之后。复杂替换不一定需要未改变的锚定碱基。而且同一个改变可以有多种写法: chr1:7:CAC:C、chr1:3:CAC:C 和 chr1:2:GCA:G 是同一个缺失。在归一化之前进行合并、去重或查找变异,会悄无声息地丢失真实匹配,而且会优先在重复区域中丢失它们,而 indel 恰恰富集在这些区域。

在进行任何比较之前,先归一化 —— 修剪至最简形式,然后相对于参考序列左对齐:

python3 normalize_variant.py --fasta ref.fa chr1 7 CAC C
python3 normalize_variant.py --fasta ref.fa --split --input cohort.vcf
python3 normalize_variant.py --fasta ref.fa --compare chr1:7:CAC:C chr1:2:GCA:G
input         normalized    type      pos_shift  ref_check  changed
chr1:7:CAC:C  chr1:2:GCA:G  deletion  5          ok         yes

字面等位基因会使用精确的 contig 名称与 FASTA 进行比对检查。MISMATCH 可能表示组装、序列、链或坐标错误;请停止操作,并使用 check_contigs.py 和序列来源进行调查。该辅助工具拒绝未拆分的 ALT 列表:请使用 --split 以获得独立归一化的等位基因键。其 TSV 会丢弃基因型和注释;如需用于生产环境的 VCF 重写,请使用 bcftools norm。符号型/断点型/缺失型/跨越缺失型等位基因会以 skipped 形式透传,不进行 REF 或结构验证。

默认左移窗口为 1,000 bp。如果它导致无法完成,该辅助工具会返回 incomplete,以退出码 1 退出,并拒绝给出等价性判定。请增大 --window 并重新运行。匹配归一化后的键测试的是单个字面等位基因,而不是跨多条记录的单倍型等价性。

HGVS 对所描述的参考序列应用 3' 最规则。对于转录本 c./n. 记法,这意味着在正链基因上基因组坐标递增,在负链基因上坐标递减。因此负链方向可能与 VCF 左对齐一致;基因组 g. 记法则朝向 contig 末端偏移。细节和例外:references/variant-representation.md。

在信任连接之前先检查组装

python3 check_contigs.py --identify unknown.fa.fai
python3 check_contigs.py variants.vcf annotation.gtf --genome GRCh38.fa.fai
file          kind    contigs  naming        assembly  detail
ref.fa.fai    sizes   25       plain         GRCh37    24/24 primary chromosome lengths match;
                                                       chrM is 16569 bp, i.e. GRCh37/38 (rCRS MT)

该脚本会读取 .fai、.chrom.sizes、VCF 头部、SAM 头部、FASTA、BED 和 GTF/GFF,根据主染色体长度识别组装,并报告可检测到的冲突:命名不匹配、长度冲突、坐标超出 contig 末端、仅存在于一个文件中的 contig。检测到冲突时退出码为 1。unknown/ambiguous 且退出码为 0 并不能证明兼容性;长度无法检测到长度相同的序列变化或屏蔽。参考 contig 超集是预期情况。比较时会同时检查 VCF 头部和记录范围;SV/gVCF 跨度需要原生验证器。

GRCh37 和 hg19 共享主核坐标,但线粒体参考不同 —— 16,569 bp(rCRS)对 16,571 bp。核坐标完全相同,因此混合流水线可以正常运行,只有 mtDNA 结果会出错。check_contigs.py 会报告它找到的是哪一个。构建、命名方案、ALT contig 和 liftover 陷阱:references/reference-builds.md。

对照文件自身格式审计文件

python3 audit_intervals.py peaks.bed
python3 audit_intervals.py gencode.gtf --genome hg38.chrom.sizes
python3 audit_intervals.py cohort.vcf --genome GRCh38.fa.fai

查找坐标错误留下的证据:

发现解读
GFF/GTF 中的 start_below_one起始位置无效;约定错误是可能的原因之一
BED 中的 many_zero_length可能是插入位点或错误编码的单碱基特征
past_contig_end组装错误,或 contig 边缘的差一错误
mixed_contig_naming对照预期参考检查精确名称
first_block_offsetBED12 的 blockStarts 被写成了绝对坐标
not_parsimonious未修剪的等位基因;在连接前先归一化
bad_alt_alleleVCF 中的 Ensembl/VEP - 记法,没有锚定碱基

出现任何致命发现时退出码为 1。这是一次有针对性的坐标审计,而不是完整的格式验证器。特殊的 VCF 等位基因会产生 structural_extent_unchecked;环形 GFF3 跨度需要具备特征感知能力的验证。narrowPeak/broadPeak 读取器不会将信号列解释为 BED 的 thickStart/thickEnd。

转录本、CDS 与蛋白质位置

c.742 和 chr17:7,674,220 都是 "位置",但两者不能通过算术相互转换。转录本坐标按转录顺序计算剪接后的碱基——负链上基因组坐标递减——而 c.1 是起始密码子 ATG 的 A,不是转录本的起点。

容易被记错的规则:不存在 c.0;5' UTR 位置为负数,3' UTR 位置带 *;GFF phase 计算的是在 CDS 片段内定位下一个完整密码子时需要跳过的碱基数量(拼接编码外显子时保留这些碱基),而不是 start % 3;没有带版本号的转录本登录号,c. 描述就毫无意义,因为同一变异在不同转录本中的编号不同。references/transcript-coordinates.md 中有转换流程和边界情况。

使用 VEP、Mutalyzer 或 hgvs 包,并搭配匹配的转录本模型来进行 HGVS 转换。bcftools csq 注释单倍型感知的编码效应;它不是通用的基因组到 HGVS 转换器。

报告结果

每次都要在坐标旁注明组装版本。 chr7:5,530,601-5,530,625 不是一个位置;chr7:5,530,601-5,530,625 (GRCh38) 才是。说明坐标列采用的是哪种约定,写在列标题或文件的文档中。当转换产生了结果时,说明转换的方向。

已验证范围

于 2026-10-01 审阅了当前的 VCF 4.5、SAM/BAM、CRAM 3、GFF3、UCSC、HGVS、Ensembl REST 和 bcftools 手册。内置的标准库辅助工具在合成测试数据上经过测试;标准化结果与 bcftools 1.24 交叉核对。转录本注释和 liftover 工具是文档中记载的替代方案,而非实际执行的全基因组工作流。源链接见下方参考文献。

参考文献

  • references/format-conventions.md — 每种格式的约定,包含各格式细节、BED12 块规则、区域字符串语法和工具行为。
  • references/variant-representation.md — VCF 等位基因约定、标准化算法、等价性检查、多等位基因拆分,以及 HGVS 与 VCF 的分歧之处。
  • references/reference-builds.md — 组装版本特征、GRCh37 与 hg19、ALT contig、命名方案,以及 liftover 失败模式。
  • references/transcript-coordinates.md — 基因组 ↔ 转录本 ↔ CDS ↔ 蛋白质、HGVS 编号、phase 和转录本选择。

引用 Scientific Agent Skills

本技能是 K-Dense 出品的 Scientific Agent Skills 的一部分。如果它对某篇手稿、报告、演示或代码发布有实质性贡献,请将该论文添加到参考文献或软件部分,并告知用户你已这样做:

Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065

始终引用当前版本。DOI 和 https://arxiv.org/abs/2609.00065 解析到最新的 arXiv 版本,因此切勿附加诸如 v1 之类的版本后缀。当网络可用时,在撰写参考文献之前先获取 https://arxiv.org/abs/2609.00065(或 http://export.arxiv.org/api/query?id_list=2609.00065),并从该记录中获取作者列表、年份和版本。如果该记录列出了期刊参考文献或出版商 DOI,则改为引用已发表的版本。

评论

支持 Markdown