Snippy
Snippy 是一个用于从细菌 NGS(高通量测序)数据中快速调用变异的工具。它将配对端(或单端)读段比对到参考基因组,然后调用 SNP(单核苷酸多态性)和 indel 变异。
官方仓库: https://github.com/tseemann/snippy
基本使用
Snippy支持多种数据输入,具体取决于你手上的数据类型(配对端读段、单端读段、contigs 或 BAM 文件)。
1. 基于 FASTQ 文件
2. 基于 contigs 文件
3. 基于 BAM 文件
参数解析
一般选项:
--help:显示帮助信息。--version:显示当前版本并退出。--citation:打印引用信息。--check:检查依赖项是否已安装。
输入选项:
--ref:参考基因组文件,支持FASTA、GenBank和EMBL格式,但不支持GFF。--R1:配对端读段的第一个文件(R1)。--R2:配对端读段的第二个文件(R2)。--se:单端读段的文件。--ctgs:如果没有读段,使用这些 contigs 进行分析。--bam:直接使用已有的 BAM 文件,而不是对读段进行比对。
输出选项:
--outdir:输出目录,用于存放结果。--prefix:输出文件的前缀,默认是snps。--report:生成带有视觉化比对的变异报告(默认关闭)。--cleanup:移除大部分不需要的文件(包括 BAM 文件)。
参数控制:
--cpus:指定使用的 CPU 核心数,默认 8。--ram:指定要使用的最大 RAM(内存)大小,单位为 GB。--mapqual:最小读段的比对质量,默认 60。--basequal:最小碱基质量,默认 13。--mincov:调用变异所需的最小覆盖度,默认 10。--minqual:VCF 文件第 6 列中的最小质量值,默认 100。--bwaopt:用于传递给BWA MEM的额外参数,如-x pacbio。--fbopt:用于传递给Freebayes的额外参数。
输出文件说明
Snippy 会生成多种格式的输出文件,用于不同的变异检测和后续分析任务。以下是各个文件的详细描述:
| 扩展名 | 描述 |
|---|---|
.tab |
一个简单的制表符分隔的文件,包含所有变异的摘要。 |
.csv |
一个以逗号分隔的文件,类似于 .tab 文件,包含所有变异的摘要。 |
.html |
.tab 文件的 HTML 版本,可用于浏览器查看。 |
.vcf |
最终注释的变异文件,VCF 格式,包含 SNPs 和 Indels。 |
.bed |
变异的 BED 格式文件,标记基因组中的变异位点。 |
.gff |
变异的 GFF3 格式文件,提供基因组注释信息。 |
.bam |
测序读段的比对结果,包含比对到参考基因组的读段,排除了重复的读段。 |
.bam.bai |
.bam 文件的索引文件,用于快速访问比对文件。 |
.log |
一个日志文件,包含运行 Snippy 时的所有命令和输出信息。 |
.aligned.fa |
比对后生成的参考基因组版本,低覆盖度位置用 N 表示,无变异位点用 - 表示。 |
.consensus.fa |
一个基于所有检测到的变异生成的参考基因组共识序列。 |
.consensus.subs.fa |
仅基于替换变异(SNPs)生成的共识序列。 |
.raw.vcf |
Freebayes 检测到的所有原始变异文件,未经过滤。 |
.filt.vcf |
经过 Freebayes 过滤后的变异文件,包含高置信度变异。 |
.vcf.gz |
经过 BGZIP 压缩的 VCF 文件,便于存储和后续处理。 |
.vcf.gz.csi |
.vcf.gz 文件的索引文件,生成于 bcftools index。 |
本地测试
snippy \
--outdir SRR21931770 \
--ref ~/test/data/Salmonella.fasta \
--R1 ~/test/data/SRR21931770_1.fq.gz \
--R2 ~/test/data/SRR21931770_2.fq.gz \
--mapqual 60 --mincov 10 --minfrac 0.9
报错处理
1. samtools 版本问题
问题描述:使用双端 fastq 文件作为输入时,运行 snippy 过程中报错。通过查看 snps.log 文件,发现报错信息为:
解决过程:
-
尝试使用 BAM 文件作为输入:基于
BAM文件输入时,能够成功运行snippy,这表明问题可能出现在samtools处理fastq文件时的某些步骤。 -
手动运行
samtools命令:当本地手动运行与snippy相同的 samtools 相关命令时,依然出现相同的报错。推测可能是 samtools 版本冲突 导致的问题。 -
依赖检查:通过运行以下命令检查
snippy及其依赖项是否正确配置: -
降级
samtools:尝试降级samtools版本至 1.15,使用以下命令进行降级:
降级 samtools 后,问题成功解决,snippy 在使用 fastq 文件作为输入时可以正常运行,不再出现 ms score tag 相关报错。
2. vt 版本问题
问题描述:通过 freebayes-parallel 生成的原始 VCF 文件包含变异信息,但最终过滤后的 VCF 文件不含变异信息。
初步排查:
-
推测过滤条件过于严格:最初推测是由于过滤条件过于严格,尝试调整参数并使其与 Galaxy 工作流中的设置一致,但过滤后的结果依然没有变异信息。
-
手动测试相关命令:为了进一步确认原因,手动测试以下过滤命令:
bcftools view --include 'FMT/GT="1/1" && QUAL>=100 && FMT/DP>=10 && (FMT/AO)/(FMT/DP)>=0.9' snps.raw.vcf | \ vt normalize -r reference/ref.fa - | \ bcftools annotate --remove '^INFO/TYPE,^INFO/DP,^INFO/RO,^INFO/AO,^INFO/AB,^FORMAT/GT,^FORMAT/DP,^FORMAT/RO,^FORMAT/AO,^FORMAT/QR,^FORMAT/QA,^FORMAT/GL' > snps.filt.vcf发现管道流中的
vt软件在运行时发生报错,导致最终过滤后的 VCF 文件无变异信息。 -
解决方法:更换为更稳定的
vt版本以解决报错。通过以下命令将vt版本降级为0.57721:降级
vt版本后,所有报错均得到解决,生成的输出结果与 Galaxy 工作流中一致。
Warning
为了避免以上情况,在使用bioconda安装snippy时,需要指定这两个软件的版本。否则自动会下载最新版相关依赖,最终导致冲突.
snippy-core
snippy-core 是 Snippy 的辅助工具,用于从多个 Snippy 结果目录中提取核心基因组 SNP 和生成适合构建系统发育树的文件。它特别适用于细菌基因组分析,能够快速提取共享的 SNP,并生成用于系统发育分析的标准格式文件。
基本使用
snippy-core --ref reference.fa snippy1 snippy2 snippy3 ...
# 示例
snippy-core --ref ~/00_data/bacterial_reseq/genome.fa 2_snippy/*
Snippy-core 参数解析
--help显示帮助信息并退出。--version显示版本信息并退出。--ref <file>指定参考基因组文件(FASTA 或 GenBank 格式)。--prefix <string>设置输出文件前缀,默认值为core。--maxhap <int>指定最大多倍体长度,默认值为100。--mask <file>提供 BED 文件,用于屏蔽特定区域。--gap-char <char>设置缺失位点的字符表示,默认值为-。--mask-char <char>设置屏蔽区域的字符表示,默认值为X。--inprefix <string>指定 Snippy 输出文件的前缀,默认值为snps。--debug输出调试信息,默认值为关闭。--check检查依赖是否满足并退出。
输出文件说明
运行 snippy-core 后,会生成以下文件(假设前缀为 core):
| 文件名 | 描述 |
|---|---|
core.aln |
核心 SNP 的多序列对齐文件,适合用于构建系统发育树(只包含所有样本共享的 SNP)。 |
core.full.aln |
全基因组对齐文件,包括核心 SNP 和非核心区域(插入、缺失和不变区域)。 |
core.ref.fa |
提取的参考基因组序列(包含核心 SNP 的注释)。 |
core.tab |
核心 SNP 的详细表格,包含变异位点、参考碱基、变异碱基、位置等信息。 |
core.txt |
核心 SNP 的摘要信息,包括变异数量和样本统计。 |
core.vcf |
核心 SNP 的 VCF 格式文件。 |
### 文件内容示例