
在 Ubuntu / zsh 环境下用 NASTRA、STRspy、LongTR 与自研软件做系统对比无论后续用哪款工具建议都先用 minimap2 把同一批 ONT reads 比对到同一个参考基因组如 GRCh38生成排序并建索引的 BAM作为 NASTRA 和 LongTR 的共同输入STRspy 如果用 FASTQ 模式也让它使用同一套 minimap2 参数避免“比对器不同”成为混杂变量。# 示例ONT reads → sorted BAMminimap2 -ax map-ont -t 16 --MD -Y -L --secondaryno \GRCh38.fa sample.fastq.gz \| samtools sort - 8 -o sample.sorted.bamsamtools 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.gitgit clone https://ghfast.top/https://github.com/renzilin/NASTRA.gitcd NASTRAconda env create -n nastra_env -f env.yamlconda 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.txtSTRspy基于 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 gitgithub.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 参考基因组 FASTAFASTQ 输入时必须提供 REGION_BED 所有 STR 区域合并后的单个 BED用于覆盖度计算 NORM_CUTOFF 归一化阈值用于选 top two alleles常用 0.4 OUTPUT_DIR 空目录用于写结果配置好后运行bash ./STRspy_run_v1.0.sh config/InputConfig.txt config/ToolsConfig.txtSTRspy 仓库自带 testset.tar.gz官方说明测试数据在简单终端下 12 秒 即可完成适合先跑通再上真实数据。如果遇到 wrapper 与 gnu parallel 通信导致流程提前退出的问题可以改为直接运行 scripts/STRspy_v1.0.sh。STRspy 需要注意的一点是它默认使用自己构建的 STR 数据库v1.0 主要是常染色体 forensic 位点STRspy2.0 已扩展到 ChrY 并更新了数据库。如果你的自研软件覆盖的位点集与 STRspy 数据库不一致比较时应取交集位点否则覆盖率差异会被误读为灵敏度差异。LongTRHipSTR 的长读长版本输出 VCFLongTR 是 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.0spoa 和 HTSLIB 会在 make 过程中自动拉取。git clone gitgithub.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.gzSTRinNGS v2.1 提供两种安装路径。在服务器环境下Docker 是首选因为源码安装的依赖链比较重。 Docker推荐zshdocker pull bioinformatician/strinngs2Docker 镜像内已打包所有依赖无需在宿主机上单独安装 samtools、hisat2 等。运行容器时把数据目录挂载进去即可。 源码安装LinuxSTRinNGS v2.1 的外部依赖明确且版本敏感依赖 版本要求Python 3.6含 pipsamtools 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.1Python 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 的并行是按位点拆分的。--- 配置文件.iniSTRinNGS 的核心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 里染色体写作 1ini 里就必须写 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 直接吃 BAMSTRspy 可以吃 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-qualSTRspy 有 NORM_CUTOFF。这些阈值各自独立论文中应给出每款工具实际使用的阈值并在补充材料中说明是否为了纳米孔数据做过调整。近期那项评估中 STRinNGS 准确性胜出的前提正是它在复杂等位基因上的序列层面判别能力而这一优势只有在不把序列差异过度过滤掉的阈值设置下才能体现出来。