news 2026/11/4 2:29:40

STR软件在NGS数据中的对比测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STR软件在NGS数据中的对比测试

在 Ubuntu / zsh 环境下用 NASTRA、STRspy、LongTR 与自研软件做系统对比

无论后续用哪款工具,建议都先用 minimap2 把同一批 ONT reads 比对到同一个参考基因组(如 GRCh38),生成排序并建索引的 BAM,作为 NASTRA 和 LongTR 的共同输入;STRspy 如果用 FASTQ 模式,也让它使用同一套 minimap2 参数,避免“比对器不同”成为混杂变量。

# 示例:ONT reads → sorted BAM

minimap2 -ax map-ont -t 16 --MD -Y -L --secondary=no \

GRCh38.fa sample.fastq.gz \

| samtools sort -@ 8 -o sample.sorted.bam

samtools index sample.sorted.bam

🧬 NASTRA:基于 BAM 的 allele reference-free 分型

NASTRA 的核心特点是不依赖 allele 序列数据库,而是根据已知 repeat motif 递归推断每个 read 的重复结构,再做聚类分型。它的输入只需要 BAM,外加可选的 factsheet、panel 和阈值配置文件。

📦 安装

NASTRA 官方推荐用 conda 管理环境,并先安装 samtools v1.9(注意:ARM 环境下不能通过 conda 装 samtools,但你用的是常规 x86 Ubuntu 服务器,不受影响)。

git clone https://github.com/renzilin/NASTRA.git

git clone https://ghfast.top/https://github.com/renzilin/NASTRA.git

cd NASTRA

conda env create -n nastra_env -f env.yaml

conda activate nastra_env

最小用法只需要指定 BAM 和输出文件:

python NASTRA/nastra.py call \ -b sample.sorted.bam \ -o sample.nastra.txt

如果要复现论文级别的结果,应显式指定三份配置文件:

python NASTRA/nastra.py call \ -b sample.sorted.bam \ -f NASTRA/cfgs/repeat_structure.pat \ -p NASTRA/cfgs/panel_forenseq.csv \ -c NASTRA/cfgs/threshold.cfg \ -o sample.nastra.txt

STRspy:基于 alignment + quantification 的分型

STRspy 是专门为长读长 forensic STR 分型设计的工具,支持 ONT 和 PacBio,输入可以是 FASTQ 或 BAM。它的逻辑是:先把 reads 比对到 STR 参考等位基因库,再统计每个 allele 的支持 reads 数,取最高的两个作为基因型。

📦 安装

STRspy 有一组第三方依赖需要预先满足:gnu parallel >=20210222、samtools >=v1.12、bedtools >=v2.30.0、minimap2 >=v2.18-r1015、xatlas >=v0.2.1。官方提供了 setup 脚本,会自动创建 conda 环境:

git clone git@github.com:unique379r/strspy.gitcd strspybash setup/STRspy_setup.shconda activate strspy_envbash setup/MakeToolConfig.shmv UserToolsConfig.txt config/conda deactivate

如果 STRspy_setup.sh 在你的环境里因权限或网络问题失败,也可以手动建环境后逐项安装上述依赖。

🛠️ 配置与运行

STRspy 把参数分成两个配置文件:InputConfig.txt 和 ToolsConfig.txt。前者描述数据,后者描述各依赖的可执行文件路径。

InputConfig.txt 的关键字段:

字段 含义 INPUT_DIR 输入目录,放 FASTQ 或 BAM INPUT_BAM yes 或 no,指示输入是否为 BAM READ_TYPE ont 或 pb STR_FASTA 每个 STR 区域序列的 FASTA,需含 ±500 bp 侧翼 STR_BED 每个 STR 区域的 BED,同样需含侧翼 GENOME_FASTA 参考基因组 FASTA,FASTQ 输入时必须提供 REGION_BED 所有 STR 区域合并后的单个 BED,用于覆盖度计算 NORM_CUTOFF 归一化阈值,用于选 top two alleles,常用 0.4 OUTPUT_DIR 空目录,用于写结果

配置好后运行:

bash ./STRspy_run_v1.0.sh config/InputConfig.txt config/ToolsConfig.txt

STRspy 仓库自带 testset.tar.gz,官方说明测试数据在简单终端下 <12 秒 即可完成,适合先跑通再上真实数据。如果遇到 wrapper 与 gnu parallel 通信导致流程提前退出的问题,可以改为直接运行 scripts/STRspy_v1.0.sh。

STRspy 需要注意的一点是:它默认使用自己构建的 STR 数据库(v1.0 主要是常染色体 forensic 位点;STRspy2.0 已扩展到 ChrY 并更新了数据库)。如果你的自研软件覆盖的位点集与 STRspy 数据库不一致,比较时应取交集位点,否则覆盖率差异会被误读为灵敏度差异。

LongTR:HipSTR 的长读长版本,输出 VCF

LongTR 是 HipSTR 的长读长改造版,同时支持 STR 和 VNTR,输入为 BAM/CRAM + 参考 FASTA + TR 区域 BED,输出 bgzipped VCF。它更适合做基因组范围的 TR 分型,而不是像 NASTRA/STRspy 那样偏向 forensic panel。

📦 安装

推荐 conda 安装,最省事:

conda install -c conda-forge -c bioconda longtr

如需从源码编译,需要 gcc 7+、cmake 3.12+、zlib 和 googletest 1.10.0+;spoa 和 HTSLIB 会在 make 过程中自动拉取。

git clone git@github.com:gymrek-lab/LongTR.gitcd LongTRmake./LongTR --help

🛠️ 运行

基础命令:

LongTR \ --bams sample.sorted.bam \ --fasta GRCh38.fa \ --regions tr_regions.bed \ --tr-vcf sample.longtr.vcf.gz

STRinNGS v2.1 提供两种安装路径。在服务器环境下,Docker 是首选,因为源码安装的依赖链比较重。🐳 Docker(推荐)```zshdocker pull bioinformatician/strinngs2```Docker 镜像内已打包所有依赖,无需在宿主机上单独安装 samtools、hisat2 等。运行容器时把数据目录挂载进去即可。🔧 源码安装(Linux)STRinNGS v2.1 的外部依赖明确且版本敏感:依赖 版本要求Python 3.6(含 pip)samtools 1.9hisat2 2.1.0stringtie 2.0.3agrep 需可用T.R.E. 0.8.0安装命令:```zsh# 1. 安装 Python 依赖wget https://bitbucket.org/rirgabiss/strinngs/downloads/requirements.txtpip install -r requirements.txt# 2. 下载并解压 STRinNGS v2.1wget https://bitbucket.org/rirgabiss/strinngs/downloads/strinngs_v2.1.tar.gztar -xvf strinngs_v2.1.tar.gz && rm strinngs_v2.1.tar.gzcd strinngs_v2.1```Python 3.6 这一点需要特别注意:现代 Ubuntu 服务器默认的 Python 版本通常远高于 3.6,直接用系统 Python 安装 requirements.txt 很可能因包版本冲突而失败。建议用 conda 专门建一个 Python 3.6 环境来跑源码安装,或者直接走 Docker 路线绕开这个问题。🧪 测试集验证官方提供了约 290 MB(解压后)的测试集,包含 chr12 参考序列、test.fastq.gz 和 test.ini,以及预期结果:```zshwget https://bitbucket.org/rirgabiss/strinngs/downloads/test_set.tar.gztar -xvf test_set.tar.gz && rm test_set.tar.gz```先跑通测试集,确认环境无误后再上真实数据。---🛠 运行用法📝 最小命令```zsh./src/STRinNGS.py \ -i test_set/test.fastq.gz \ -o ./results/test \ -r test_set/chr12.fa \ -n test_set/test.ini```四个必填参数:· -i / --input:输入文件,必须是 BAM 或 FASTQ 格式。· -o / --outdir:输出目录。· -r / --ref:参考基因组 FASTA。· -n / --nom:.ini 格式的配置文件。⚙ 常用可选参数参数 作用 默认值-t / --threads 多核并行数 1-m / --mism 在 ini 设定基础上额外增加允许的错配数 0-w / --women 判定女性的最大 reads 数 25-s / --snpcheck 已知 SNP 的 VCF,用于补充 rs 编号 None-d / --dir 输入为目录时,指定要搜索的文件类型(如 fastq) None-f / --force 覆盖已有输出 关闭-t 的官方建议是线程数尽量与位点数一致,因为 STRinNGS 的并行是按位点拆分的。---📄 配置文件(.ini):STRinNGS 的核心STRinNGS 不依赖 BED,而是靠 .ini 文件告诉程序每个位点的位置和侧翼信息。每个位点至少需要 4 个必填参数:```ini[locus1]start = 123456 ; STR 起始位置前的最后一个碱基stop = 123499 ; STR 区域的最后一个碱基chr = 4 ; 染色体名称,必须与参考 FASTA 中的写法完全一致```侧翼参数(可选但强烈建议显式设置):· flank_up_length / flank_down_length:默认各 25 bp,用于识别位点和分析侧翼变异。· mism_up / mism_down:允许的错配数,包含替换、插入和缺失。最容易踩的坑是 chr 的写法:如果你的参考 FASTA 里染色体写作 >1,ini 里就必须写 chr = 1;如果写作 >chr1,就必须写 chr = chr1,不匹配会导致程序找不到位点。对于纳米孔数据,建议把 mism_up / mism_down 比默认值调高,因为 ONT 的侧翼区错误率高于 MPS;或者不修改 ini,改用 -m 参数在运行时全局增加错配容忍度。官方也明确建议在测试新群体时用 -m 而不是直接改 ini。---📥 输入与 📤 输出输入格式:FASTQ、FASTA、SAM、BAM、CRAM 均支持;BAM/CRAM 需要配套的 .bai / .crai 索引;.gz 压缩自动识别;不支持 paired-end,因为 STRinNGS 的扩增子逻辑是单端读段。核心输出:· Results.csv:最终结果,包含去噪、注释和计算,可直接用于 STRidER 数据库上传。· Raw_results.csv:原始信息(不含 locus balance 和杂合子平衡)。· Log_日期时间.txt:运行日志。

第一,输入层面的公平性。NASTRA 和 LongTR 直接吃 BAM,STRspy 可以吃 FASTQ 或 BAM。STRinNGS 虽然也支持 BAM,但它的设计初衷是直接从 FASTQ 的侧翼序列识别位点,并不依赖 minimap2 的全基因组比对。如果你为了“统一输入”而强行把 STRinNGS 也指向同一个 minimap2 BAM,需要确认它的内部流程是否仍然会按自己的逻辑重新处理;更稳妥的做法是让 STRinNGS 走 FASTQ 原生模式,并在方法学中明确说明“STRinNGS 使用 FASTQ 输入,其余 BAM 类工具使用统一 minimap2 比对结果”,把这一差异作为已知变量报告,而不是假装完全对齐。第二,位点集取交集。STRinNGS 的 .ini 配置文件决定了它能分析哪些位点。如果你的 .ini 覆盖的位点与 NASTRA 的 panel、STRspy 的数据库、LongTR 的 BED 不完全一致,最终的四工具比较必须限定在四者都能调用的位点交集上,否则覆盖率差异会被误读为灵敏度差异。第三,阈值与过滤策略要报告。STRinNGS 内部有 read depth、noise、locus balance、heterozygote balance 等多层质控;LongTR 有 --min-reads 和 --min-mean-qual;STRspy 有 NORM_CUTOFF。这些阈值各自独立,论文中应给出每款工具实际使用的阈值,并在补充材料中说明是否为了纳米孔数据做过调整。近期那项评估中 STRinNGS 准确性胜出的前提,正是它在复杂等位基因上的序列层面判别能力,而这一优势只有在不把序列差异过度过滤掉的阈值设置下才能体现出来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 2:29:39

大语言模型推理效率的多维优化与部署取舍

大语言模型的推理成本&#xff0c;正在成为决定其能否从演示走向规模化部署的核心变量。一个参数规模达到数百亿的模型&#xff0c;单次生成可能涉及数十次前向传播&#xff0c;每一次都需要将全部权重从显存搬运到计算单元。当并发请求数量上升时&#xff0c;这种重复的权重搬…

作者头像 李华
网站建设 2026/11/4 2:29:23

node.js基础(AI回答)

通常nodejs开发中包含哪些文件和目录&#xff0c;哪些文件和目录是Node.js用的&#xff0c;哪些是npm用的在现代 Node.js 工程中&#xff0c;一个典型的项目目录结构如下所示。为了让你清晰理解&#xff0c;我们先看一张标准项目全景图&#xff0c;然后详细拆解哪些归 Node.js、…

作者头像 李华
网站建设 2026/11/4 2:28:50

KnowWork v0.0.3 发布:智能体底座全部开源,知识库为什么闭源

KnowWork 是基于 DeepSeek Harness&#xff08;下文简称 DSH&#xff09;的企业私有化 Agent 平台。v0.0.3 今天发布&#xff0c;这一版带来多工作空间、IM 机器人和问答大盘。同时我们把一件一直没说透的事讲清楚&#xff1a;KnowWork 哪些开源、哪些闭源&#xff0c;为什么这…

作者头像 李华
网站建设 2026/11/4 2:28:19

C语言:动态数组

前言 本文面向编程零基础的小白&#xff0c;简单了解C语言中动态数组的用法。 正文 数据结构:数组(动态数组\列表)&#xff0c;链表(双向链表/环形链表)&#xff0c;堆/栈&#xff0c;队列 数组&#xff1a;数组长度一旦确定不可更改(连续的内存) 动态数组&#xff1a;可以根据…

作者头像 李华
网站建设 2026/11/4 2:26:27

信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 绪论+概念内涵与治理现状调查

1 绪论1.1 研究背景在全球数字化与绿色化两大转型交汇的背景下&#xff0c;数字经济已从一种新兴经济形态成长为国民经济的重要组成部分&#xff0c;而低碳治理则因气候变化的刚性约束上升为国家战略议题。降碳、减污、扩绿、增长被要求协同推进。城市是人口、产业与能源消费…

作者头像 李华
网站建设 2026/11/4 2:25:20

给AI接股票数据源,第一轮验收什么?用悟道MCP跑一份检查报告

我现在给股票Agent接数据&#xff0c;第一件事不是让它写复盘&#xff0c;而是让它证明自己刚才拿到了什么。 “调用成功”很容易让人放下戒心。但连得上和用得对&#xff0c;中间还隔着日期、字段、单位和缺失处理。这次我用悟道MCP做了一轮小样本检查&#xff0c;把能确认的…

作者头像 李华