Variant calling 流程

这篇笔记整理了根据项目实战来学习variant calling(SNP和InDel)的流程。

重测序一键SOP配置参数

参数 参考格式 意义
partition P3  
only_QC F  
ref_db /path/to/genome_db/Sus_scrofa/Ensembl_V111/03_genome/genome.fa 参考基因组序列
ref_anno /path/to/genome_db/Sus_scrofa/Ensembl_V111/03_genome/genome.gff 参考基因组注释
ref_annotation NA  
SnpEff_version Sus_scrofa_Ensembl_V111  
chr_num 65 若 >65 则认为 scaffold 多,设 $link="link",否则 "no"
rmdup T  
population T  
tool H  
node NA  
interval 30  
maxFailed 0  
maxProc 10000  
INPUT Input  
CLEANDATA CleanData  
PROCESSDATA ProcessData  
OUTPUT Output  
DONE Done  
SAMPLE_INFO Sample_Info.txt  
data_QC_threads 2  
n_base_limit 5  
overlap_len_require 30  
length_requried 15  
map_soft GPU  
mapping_threads 4  
min_seed_len 32  
sort_mem 768M  
rmdup_mem 30G  
max_depth 150  
numGPUs 1  
GPU GPU2  
GATK_threads 10  
GATK_mem 20G  
ploidy 2  
cut_len 5000000  
cut_num 800  
QD “QD < 2.0”  
QUAL “QUAL < 30.0”  
SOR “SOR > 3.0”  
FS “FS > 60.0”  
MQ “MQ < 40.0”  
MQRankSum “MQRankSum < -12.5”  
ReadPosRankSum “ReadPosRankSum < -8.0”  
QD_indel “QD < 2.0”  
QUAL_indel “QUAL < 30.0”  
FS_indel “FS > 200.0”  
ReadPosRankSum_indel “ReadPosRankSum < -20.0”  
SnpEff_db /path/to/snpEff_4.3/snpEff SnpEff 安装目录
anno_mem 80G  
ud 1000  
SV T  
CNV T  
minExpectedGC 0.35  
maxExpectedGC 0.55  

上述参数传递到ACGT101_Reseq.sh,保存为parameter_ACGT101_ReSeq.txt文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
##------------------核心参数----------------------
#-----------------分析集群----------------------
partition=P3
#-----------------是否只质控项目-------------------
##如果是只质控项目,后续所有参数都不需要填写
only_QC=F
#-------------------参考基因组信息------------------
ref_db=/path/to/genome_db/Sus_scrofa/Ensembl_V111/03_genome/genome.fa
ref_anno=/path/to/genome_db/Sus_scrofa/Ensembl_V111/03_genome/genome.gff
ref_annotation=NA
SnpEff_version=Sus_scrofa_Ensembl_V111

#-------------------染色体条数-----------
chr_num=65
#-------------------是否去dup(非简化基因组项目去dup)-------------------
rmdup=T
#--------------------------个体重测序还是群体重测序----------------------
population=T
#---------------变异检测方式,UnifiedGenotyper(U) 或者 HaplotypeCaller(H)
#混池样本一定用U!
tool=H


##------------------集群配置----------------------
node=NA
interval=30
maxFailed=0
maxProc=10000

##------------------主要文件夹----------------------
INPUT=Input
CLEANDATA=CleanData
PROCESSDATA=ProcessData
OUTPUT=Output
DONE=Done

##-----------------样本信息------------------------
#样本信息文件
SAMPLE_INFO=Sample_Info.txt

##----------------原始数据质控参数------------------
#这里的质控参数,一般针对PE150的重测序项目,是不需要修改的
data_QC_threads=2
n_base_limit=5
overlap_len_require=30
length_required=15

##-------------------比对参数----------------------
#这里的参数一般也不需要修改,如果基因组特别大,或者有单条染色体特别大,可以把sort_mem改大一些(2G左右)即可
map_soft=GPU
mapping_threads=4
min_seed_len=32
sort_mem=768M
rmdup_mem=30G

##-------------------比对结果绘图----------------
#各深度下位点比例图、各深度下位点比例累积图, 图上展示的横坐标最大深度(仅用于画图,深度高的不会展示出来)
max_depth=150

##-----------------call变异(SNP & InDel)----------
numGPUs=1
GPU=GPU2
GATK_threads=10
GATK_mem=20G
ploidy=2
#用于切割染色体
cut_len=5000000
#用于切割样本数,尽量平均
cut_num=800
#------------------SNP过滤--------------------
QD="QD < 2.0"
QUAL="QUAL < 30.0"
SOR="SOR > 3.0"
FS="FS > 60.0"
MQ="MQ < 40.0"
MQRankSum="MQRankSum < -12.5"
ReadPosRankSum="ReadPosRankSum < -8.0"

#------------------INDEL过滤---------------------
QD_indel="QD < 2.0"
QUAL_indel="QUAL < 30.0"
FS_indel="FS > 200.0"
ReadPosRankSum_indel="ReadPosRankSum < -20.0"

#-------------------SnpEff注释参数----------------
SnpEff_db=/path/to/snpEff_4.3/snpEff
anno_mem=80G
#Set upstream downstream interval length (in base)
ud=1000

#------------------call SV----------------------
SV=T

#------------------call CNV---------------------
CNV=T
minExpectedGC=0.35
maxExpectedGC=0.55

脚本整体功能

脚本用途

ACGT101_ReSeq_4.6_gpu.pl 是一个自动化重测序(Reseq)分析流程,基于 Slurm + Singularity 容器,在集群环境中完成从原始测序数据到变异结果与统计报告的全流程分析。支持:

  • 单个体或群体重测序
  • CPU 或 GPU 加速比对(Parabricks)
  • GATK UnifiedGenotyper / HaplotypeCaller 两种变异检测模式
  • 自动完成 SNP / InDel / SV / CNV 检测与注释,并生成各类统计图表和汇总报告。

主流程步骤

参数读取与环境准备

  • 通过 -i parameter_ACGT101_ReSeq.txt 读取参数文件(get_params 子函数)。
  • 加载:
  • 集群配置(队列、CPU、内存、GPU 等)
  • 输入输出目录(INPUT / CLEANDATA / PROCESSDATA / OUTPUT / DONE
  • 样本信息文件(SAMPLE_INFO
  • 参考基因组与注释文件
  • 各软件路径与容器配置(config.plsing_config.pl
  • 创建必要目录:
  • 原始数据:INPUT
  • 质控后数据:CLEANDATA
  • 中间结果:PROCESSDATA
  • 最终结果:OUTPUT
  • 标记步骤完成的 DONE 目录
  • 当次运行的 shell、log、error 目录:sh_xxx / log_xxx / error

样本信息与数据列表构建

  • sample_info(SAMPLE_INFO)

Sample_Info.txt 读取样本名和文库名,输出逗号分隔的样本列表 smp_list

  • fastq_list
  • INPUT 下根据 smp_list 搜索各样本的 R1/R2 fastq.gz,生成 input_list.txt(样本名与对应双端文件路径)。
    • 输出:
      • ./input_list.txt
      • DONE/fastq_list_PE.done
  • 后续在 CLEANDATA 中再次调用,得到 cleandata_list.txt
    • 输出:
      • OUTPUT/cleandata_list.txt
      • DONE/fastq_list_PE.done(同名 done 文件,表示该步骤完成)

原始数据质控(fastp + FastQC)

  1. fastp 质控(data_QC
    • input_list.txt 中每个样本的 PE 读长进行质控:
    • 去接头、剪切低质量碱基、去 N 碱基等。
    • 输出:
    • Clean reads(CLEANDATA/<sample>/<sample>_CleanData_R1/2.fastq.gz
    • fastp 统计 json/htmlOUTPUT/fastp_result
      • 具体文件名格式:
    • CLEANDATA/<sample>/<sample>_CleanData_R1.fastq.gz
    • CLEANDATA/<sample>/<sample>_CleanData_R2.fastq.gz
    • OUTPUT/fastp_result/<sample>/<sample>_fastp.json
    • OUTPUT/fastp_result/<sample>/<sample>_fastp.html
    • DONE/fastp/<sample>_fastp.done
  2. 质控统计汇总(data_stat
    • 调用 fastp_stat.py,对所有样本 fastp 报告进行整合,生成 OUTPUT/data_stat.txt
      • 输出:
    • OUTPUT/data_stat.txt
    • DONE/data_stat.done
  3. FastQC 质控报告(data_FastQC
    • 对 Clean data 运行 FastQC,输出 zip/html 报告于 OUTPUT/FastQC_result
      • 具体文件名格式(每个样本):
    • OUTPUT/FastQC_result/<sample>/<sample>_CleanData_R1_fastqc.zip
    • OUTPUT/FastQC_result/<sample>/<sample>_CleanData_R2_fastqc.zip
    • DONE/FastQC/<sample>_R1_FastQC.done
    • DONE/FastQC/<sample>_R2_FastQC.done

only_QC=T,脚本在比对前退出,只完成 QC 部分。

参考基因组处理与索引构建

  1. 染色体 GC/长度计算(ref_GC_len
    • ref_db 计算 GC 含量、序列长度,输出 genome.fa.len
      • 输出:
    • OUTPUT/ref_len/genome.fa.len
    • DONE/ref_GC_len.done
  2. 主要染色体选择与 ID 列表
    • 统计注释 GFF 中染色体条数 uu,若 >65 认为 scaffold 多,需要“连接处理”(link 模式)。
    • 根据 chr_num 从长度信息中筛选主染色体,生成 chr_id.txt
      • 输出:
    • OUTPUT/ref_len/chr_id.txt
  3. 参考基因组精简与重命名(prepare_ref
    • ref_dir/Ref 下生成:
    • ref.genome.fa(按主染色体重排/重命名后的参考)
    • ref.genome.gff(复制原 GFF)
    • 重新计算 GC/len
      • 输出(当 link 模式触发时会生成/使用):
    • <ref_dir>/Ref/ref.genome.fa
    • <ref_dir>/Ref/ref.genome.gff
    • <ref_dir>/Ref/ref.genome.fa.len
    • <ref_dir>/Ref/<原ref文件basename>(拷贝一份原参考到 Ref 目录)
    • <ref_dir>/Ref/id_table.txt(后续坐标还原会用到)
    • DONE/refine_ref.done
  4. 构建索引
    • bwa_indexbwa index -a bwtsw ref.genome.fa
    • samtools_indexsamtools faidx ref.genome.fa
    • picard_indexCreateSequenceDictionary 生成 .dict
      • 输出(以 ref.genome.fa 为例):
    • BWA:ref.genome.fa.pac / .amb / .ann / .bwt(以及其它 bwa index 相关文件)
    • samtools:ref.genome.fa.fai
    • Picard:ref.genome.dict
    • DONE/bwa_index.doneDONE/samtools_index.doneDONE/picard_index.done

若 scaffold 数量不多(<=65),则直接使用原始 ref_db

比对(CPU 或 GPU)

  • 判断 map_soft
  • CPU:CPU
  • mappingbwa memsamtools viewsamtools sort,输出 *.sort.bam
    • 输出(每个样本):
      • OUTPUT/<sample>/<sample>.bam
      • OUTPUT/<sample>/<sample>.sort.bam
      • DONE/mapping/<sample>_sam.doneDONE/mapping/<sample>_bam.doneDONE/mapping/<sample>_sort.done
    • 备注:中间的 OUTPUT/<sample>/<sample>.sam 会在 sort 完成后被清理删除。
  • mark_dup:Picard MarkDuplicates,输出 *.rmdup.bam 和 metrics。
    • 输出(每个样本):
      • OUTPUT/<sample>/<sample>.rmdup.bam
      • OUTPUT/<sample>/<sample>.metrics
      • DONE/mark_dup/<sample>_mark_dup.done
  • GPU:GPU
  • mapping_gpu:调用 Parabricks pbrun fq2bam,直接完成比对 + 排序 + MarkDuplicates,输出 *.rmdup.bam。 (Parabricks是一款由 NVIDIA 开发的基于 GPU 加速的基因组学分析软件套件,专门用于新一代测序 (NGS) 数据处理的二级分析。它通过 GPU 并行计算将传统的 BWA-MEM、GATK、Mutect2 等 CPU 软件的运行速度提升数十倍,能在一小时内完成全基因组 (WGS) 分析。该软件不仅显著降低了计算成本,还保证了与业界标准工具完全一致的准确性,适用于种系变异、体细胞变异、RNA 序列分析等多种应用场景。)
    • 输出(每个样本):
      • OUTPUT/<sample>/<sample>.rmdup.bam
      • OUTPUT/<sample>/<sample>.OUT_DUPLICATE_METRICS.txt
      • DONE/mapping/<sample>_sort.markdup.done

插入片段、比对质量与深度统计

  • insertsize:Picard CollectInsertSizeMetrics,按样本输出插入片段分布图和表。
    • 输出:
      • OUTPUT/InsertSize_result/<sample>/<sample>.InsertSizePlot.pdf
      • OUTPUT/InsertSize_result/<sample>/<sample>.InsertSizeMetrics.txt
  • mapped_statsamtools flagstat,输出每个样本的比对统计。
    • 输出:
      • OUTPUT/<sample>/<sample>_aln_stat.txt
  • depth_per_sitedepth_stat
  • samtools depth 生成碱基水平深度文件。
    • 输出(中间文件,后续可能会被清理):
      • OUTPUT/<sample>/<sample>.depth
  • depth_stat.pl 汇总成 per-chrom/全基因组平均深度、不同深度的覆盖比例等。
    • 输出:
      • OUTPUT/<sample>/<sample>.mean_depth.txt
      • OUTPUT/<sample>/<sample>.depth_frac.txt
      • OUTPUT/<sample>/<sample>.depth_frac_cum.txt
      • OUTPUT/<sample>/<sample>.sample_mean_depth.txt
  • mean_depth_plot / depth_frac_plot / coverage_stat / coverage_plot
  • 取所有样本或子集(>10 个样本时取 10 个子样本)绘制:
  • 每条染色体平均深度柱状图
    • 输出:
      • OUTPUT/mean_depth_barplot.txt
  • 各深度覆盖位点比例曲线图
    • 输出:
      • OUTPUT/depth_frac.png
  • 覆盖度统计与总览图
    • 输出:
      • OUTPUT/coverage_stat_4plot.txt
      • OUTPUT/coverage_plot.png ![[Pasted image 20260311095854.png]]

BAM 索引与整体对齐统计汇总

  • index_bam:对 rmdup.bamsort.bam 生成 .bai 索引。
    • 输出(每个样本,取决于 rmdup 参数):
      • OUTPUT/<sample>/<sample>.rmdup.bam.baiOUTPUT/<sample>/<sample>.sort.bam.bai
      • DONE/index_bam/<sample>_index_bam.done
  • mapped_cover_stat / mapped_cover_statupload
  • 汇总数据量、比对率、去重率、平均深度、覆盖度等到 mapped_cover_stat.txt
    • 输出:
      • OUTPUT/mapped_cover_stat.txt
      • DONE/mapped_cover_stat.done
  • 调用 PHP/awk 脚本生成可上传的统计表。
    • 输出(项目根目录下):
      • ./data_Stat_tmp.txt
      • ./data_Stat_<run_start_time>.txt(带“文库名称/分析路径/运行时间”等列,供上传/展示)

变异检测:SNP & InDel

根据 toolpopulation 分两大分支。

UnifiedGenotyper 模式(tool=U

  1. Realign(realign
    • rmdup.bamsort.bam 做 GATK3 RealignerTargetCreator + IndelRealigner,输出 *.realign.bam
      • 输出(每个样本):
    • OUTPUT/<sample>/<sample>.realign.intervals
    • OUTPUT/<sample>/<sample>.realign.bam
    • DONE/realign/<sample>_realign_target.done
    • DONE/realign/<sample>_realign.done
  2. Call 变异
    • population=T
    • gatk_pop:对所有样本联合调用(按染色体拆分),最后 CatVariants 合并为 OUTPUT/pop_variants/pop.vcf
      • 输出:
    • PROCESSDATA/pop_variants/pop.<chr>.gatk.vcf(按染色体拆分的中间 VCF)
    • OUTPUT/pop_variants/pop.vcf(合并后的群体 VCF)
    • DONE/gatk_pop_chr/<chr>_gatk_pop.done
    • DONE/pop_vcf.done - 若 population=F: - gatk_single:对每个样本单独调用,输出 sample.vcf。 - 输出(每个样本):
    • OUTPUT/<sample>/<sample>.vcf
    • DONE/gatk_unified_smp/<sample>_gatk_unified_smp.done
  3. 按类型拆分
    • select_snp_gatk3 / select_indel_gatk3
    • 使用 GATK3 SelectVariants 将 VCF 拆成 SNP/INDEL VCF。
      • 输出:
    • *.snp.vcf
    • *.indel.vcf
    • DONE/select_snp/*_select_snp.done
    • DONE/select_indel/*_select_indel.done
  4. 变异过滤
    • filter_snp_gatk3 / filter_indel_gatk3
    • GATK3 VariantFiltration 打标签,再用 awk 保留 PASS 记录,得到 .filtered.vcf
      • 输出:
    • *.filter_label.vcf(带过滤标签)
    • *.filtered.vcf(只保留 PASS)
    • DONE/filter_snp/*_filter_snp.doneDONE/filter_snp/*_filter_snp_awk.done
    • DONE/filter_indel/*_filter_indel.doneDONE/filter_indel/*_filter_indel_awk.done

HaplotypeCaller 模式(tool=H

  1. GVCF 生成(支持 GPU)
    • 推荐使用 GPU 版 gatk_gvcf_gpu
    • 对每个样本的 rmdup.bam 调用 Parabricks haplotypecaller,输出 sample.g.vcf.gz
      • 输出(每个样本):
    • OUTPUT/<sample>/<sample>.g.vcf.gz
    • OUTPUT/<sample>/<sample>.g.vcf.gz.tbi
    • DONE/gatk_gvcf_chr/<sample>_gatk_gvcf.done
    • PROCESSDATA/<sample>/(Parabricks 临时目录)
  2. 合并 Genotype(genotype_vcf_pop / genotype_vcf_single
    • population=T
    • 调用 easy_JVC.pl 按染色体与区间切分 gVCF,生成多个 CombineGVCFs/GenotypeGVCFs 的 shell,最后汇总成 Final.GenotypeGVCFs.vcf.gz,gunzip 为 pop.vcf
      • 输出(群体):
    • OUTPUT/gvcfs.list
    • PROCESSDATA/pop_variants/gatk/shell/CombineGVCFs.sh
    • PROCESSDATA/pop_variants/gatk/shell/GenotypeGVCFs.sh
    • PROCESSDATA/pop_variants/gatk/shell/GenotypeGVCFs_cat.sh
    • PROCESSDATA/pop_variants/gatk/gatk/Final.GenotypeGVCFs.vcf.gz
    • OUTPUT/pop_variants/pop.vcf
    • DONE/pop_vcf_gunzip.done - 若 population=F: - 对单样本 GenotypeGVCFs 输出 sample.vcf。 - 输出(每个样本):
    • OUTPUT/<sample>/<sample>.vcf
    • DONE/genotype_vcf_smp/<sample>_genotype_vcf.done
  3. 按类型拆分 + 过滤
    • select_snp / select_indel:GATK4 SelectVariants 拆分出 SNP/INDEL VCF。
    • filter_snp / filter_indel:GATK4 VariantFiltration + awk PASS,输出 .filtered.vcf
      • 输出:
    • *.snp.vcf / *.indel.vcf
    • *.filter_label.vcf / *.filtered.vcf
    • DONE/select_snp/*_select_snp.doneDONE/select_indel/*_select_indel.done
    • DONE/filter_snp/*_filter_snp.doneDONE/filter_indel/*_filter_indel.done
  • 若参考基因组使用 link 模式(大量 scaffold 被重新拼接),则:
  • filter_pos_convert / result_pos_convert
  • 利用 id_table.txt 将在精简参考上的坐标转换回原参考坐标。
  • 转换后的 VCF 覆盖原 filtered VCF 供后续注释与统计使用。
    • 输出(在过滤结果目录下生成转换目录):
      • <filtered_vcf_dir>/snp_posconvert/ConvertPos.vcf
      • <filtered_vcf_dir>/indel_posconvert/ConvertPos.vcf
      • DONE/convertpos.done

SnpEff 建库与功能注释

  1. 建库(SnpEff_build
    • 调用 SnpEff_db_build.pl,利用 ref_db + ref_anno$SnpEff_db 下生成 snpEffectPredictor.bin
      • 输出:
    • <SnpEff_db>/data/<SnpEff_version>/snpEffectPredictor.bin
    • DONE/SnpEff_build.done
  2. 注释(anno_variant
  • 对过滤后的 SNP / InDel VCF:

  • SnpEff ann 生成功能注释 VCF 和统计 csv/html

  • extract_ANN.pl 提取 ANN 字段生成 *.anno.txt

  • 返回所有样本/群体的 *.anno.csv 列表。

    • 输出(对每个输入 VCF,按 prefix 生成):
      • <prefix>.anno.vcf
      • <prefix>.anno.html
      • <prefix>.anno.csv-csvStats 输出)
      • <prefix>.anno.txt(提取 ANN 后的文本)
      • DONE/anno_variant/*_anno.doneDONE/anno_variant/*_snp_txt.done

变异统计与绘图

  • snp_mut_stat:对 SNP VCF 计算 Ti/Tv、Het/Hom 比例等,输出列表和统计。
    • 输出(每个 SNP VCF):
      • <prefix>.list
      • <prefix>.stat.txt
  • snp_stat / indel_stat

  • 基于 *.anno.csv 统计变异在不同基因区域(exon/intron/UTR…)与功能类别(synonymous/nonsynonymous…)的分布。
    • 输出(每个 *.anno.csv,按 prefix 生成):
      • <prefix>_pos.txt
      • <prefix>_effect.txt
  • snp_plot / indel_plot

  • 调用 R 脚本 PieChart.R 绘制 SNP / INDEL 功能注释的饼图。
    • 输出(每个 *.anno.csv,按 prefix 生成):
      • <prefix>_PieChart.png

SV 与 CNV 检测

SV(SV=T

  • call_sv

  • 利用 samtools 提取配对异常/拆分比对 reads,调用 lumpy 生成结构变异 VCF(DEL/INS/INV 等)。
    • 输出(每个样本,位于 OUTPUT/SV_result/<sample>/):
      • <sample>.discordants.unsorted.bam
      • <sample>.discordants.bam
      • <sample>.splitters.unsorted.bam
      • <sample>.splitters.bam
      • <sample>.sv.vcf
      • DONE/call_sv/<sample>_*.done(view/sort/split/split_sort/lumpy 等)
  • sv_stat

  • SV_stat.pl 对 SV 类型、大小、数量等进行统计。
    • 输出:
      • OUTPUT/SV_result/<sample>/<sample>.sv.stat
      • DONE/sv_stat/<sample>_sv_stat.done

CNV(CNV=T

  • split_fa_chr:将参考基因组按染色体拆分。
    • 输出:
      • <ref_dir>/chrs/<chr>.fa(拆分后的每条染色体 fasta)
  • call_CNV

  • 调用 call_CNV.pl,利用 rmdup.bam、参考序列和 GC 区间,检测 CNV,输出拷贝数变异结果和 ratio 文件。
    • 输出(每个样本,位于 OUTPUT/CNV_result/<sample>/):
      • <sample>.bam_CNVs
      • <sample>.bam_ratio.txt
      • <sample>.bam.anno_CNVs(与 GFF 交集注释后的 CNV)
      • DONE/call_cnv/<sample>_call_cnv.done
  • 后续用 bedtools 与 GFF 注释(基因区域中 CNV)。

总结报告

  • 单样本:summary_single

  • 调用 summary_sig.pl 生成 Summary 报告。
    • 输出:
      • ./Summary/(汇总目录,脚本参数 -od Summary
      • DONE/summary_single.done
  • 群体:summary_pop

  • 调用 summary.pl 汇总全项目的各类统计与结果。
    • 输出:
      • ./Summary/
      • DONE/summary_pop.done

参数说明与选取建议

下表按照模块分类,重点给出用途实务建议。如无特别说明,默认值一般为经验值,可不改。

核心/项目级参数

参数 用途/含义 选取建议
partition Slurm 队列名(分区) 保持集群管理员给定默认值(如 P3);超大项目可换大内存/大 GPU 分区
only_QC 是否只做质控;T 时 QC 后退出,不做比对与变异 只想预览数据质量设 T;正式分析设 F
population 是否群体重测序(多样本联合变异检测) 多样本联合分析设 T;单样本或只关心单样本可设 F
tool 变异检测方式:U=UnifiedGenotyper,H=HaplotypeCaller 混池样本必须 U;常规个体/群体推荐 H(更常用/更准确)
chr_num 按参考序列长度排序后,保留最长的 N 条序列作为“主染色体”(用于参考精简、后续分析);不是 scaffold/contig 总数 猪:18 常染色体 + X + Y → chr_num=20;其他物种按“常染色体 + 性染色体”填写(如人 24、牛 31)

参考基因组与注释

参数 用途/含义 选取建议
ref_db 参考基因组 FASTA 与注释、SnpEff 版本一致;尽量用同一来源同一版本(Ensembl/NCBI)
ref_anno 注释 GFF/GTF 必须与 ref_db 坐标体系一致;若为 GTF,需确认建库脚本支持
ref_annotation 额外注释占位(脚本中未直接使用) 保持 NA,除非流程另有要求
SnpEff_db SnpEff 安装目录 通常不改,保持系统配置路径
SnpEff_version SnpEff 数据库 ID(如 Sus_scrofa_Ensembl_V111 必须与 ref_db/ref_anno 版本匹配,否则注释可能错位

集群运行配置

参数 用途/含义 选取建议
node 指定运行节点(可为 NA 一般 NA;仅在集群要求固定节点时指定
interval 批量任务轮询/间隔(由配套 slurm 脚本使用) 默认 30 通常足够;任务极多/队列繁忙可适当调大
maxFailed 允许失败任务阈值 0 表示出现失败就中止,便于及时定位问题;需要“容错继续”才放宽
maxProc 最大并行任务数上限 与集群资源匹配;默认 10000 通常可不改

目录结构

参数 用途/含义 选取建议
INPUT 原始 FASTQ 目录名 在项目目录内运行时保持默认即可
CLEANDATA 质控后 FASTQ 输出目录 一般保持默认;磁盘规划特殊时可改为绝对路径
PROCESSDATA 中间文件目录 同上
OUTPUT 输出目录 同上
DONE 步骤完成标记(.done)目录 同上

样本信息

参数 用途/含义 选取建议
SAMPLE_INFO 样本信息文件(默认 Sample_Info.txt),每行 样本名\t文库名# 为注释 样本名需与 INPUT 中 FASTQ 命名/路径规则匹配;样本多时注意空格、隐藏字符

原始数据质控参数(fastp)

参数 用途/含义 选取建议
data_QC_threads fastp 每样本线程数 PE150 常规 2 足够;资源充足可 4–8
n_base_limit 允许的 N 碱基数量上限 默认 5 常用;数据较差可适当放宽
overlap_len_require PE reads 重叠长度要求(用于接头识别/纠错) PE150 常用 30,一般不改
length_required 剪切后最短保留读长 默认 15 较宽松;更严格可设 30

比对与去重复

参数 用途/含义 选取建议
map_soft 比对方式:CPU(bwa+samtools+picard)或 GPU(Parabricks) 有 Parabricks GPU 环境优先 GPU(显著提速);否则 CPU
mapping_threads CPU 比对线程数(bwa/samtools) 4–16 常见;按节点 CPU 调整
min_seed_len bwa mem -k 最小 seed 长度 常用 32,一般不改
sort_mem samtools sort 每线程内存(如 768M 大基因组/大 BAM 可调到 2G 左右;注意 sort_mem × mapping_threads 不超节点内存
rmdup 后续分析是否使用去重 BAM(rmdup.bam 全基因组重测序通常 T;特殊定量场景才考虑 F
rmdup_mem Picard MarkDuplicates 内存(脚本内部作为 picard_mem 默认 30G 多数项目安全;样本/基因组更大时可加大

深度与覆盖绘图

参数 用途/含义 选取建议
max_depth 深度分布图横坐标最大深度(仅影响绘图展示) 常规 10–40×:150 足够;极高深度可适当增大

变异检测相关(GATK & GPU)

参数 用途/含义 选取建议
numGPUs 每个 GPU 任务使用的 GPU 数量 常用 1;超大样本/节点多卡才考虑增加
GPU GPU 队列/分区名 与集群实际配置一致(如 GPU2
GATK_threads GATK 相关任务 CPU 线程数 默认 10 合理;按节点资源调整
GATK_mem GATK/Java 最大内存(如 20G 群体/大基因组可 30–60G;内存不足易 OOM
ploidy 倍性(--sample-ploidy 二倍体一般 2;多倍体按物种调整
cut_len 群体联合 Genotype 时按区间切割长度 默认 5 Mb(5000000)折中;任务过大可减小
cut_num 群体联合时每个拆分任务的样本数上限 默认 800 适合几百~上千样本;样本极多可减小以降低单任务压力

SNP 过滤(hard-filter 表达式)

参数 用途/含义 选取建议
QD QD:质量/深度的比值(过滤低 QD) 常用 QD < 2.0;一般沿用
QUAL 变异质量(过滤低 QUAL) 常用 QUAL < 30.0;一般沿用
SOR Strand Odds Ratio(链偏好指标) 常用 SOR > 3.0;一般沿用
FS Fisher Strand(链偏好指标) 常用 FS > 60.0;一般沿用
MQ Mapping Quality(过滤低 MQ) 常用 MQ < 40.0;一般沿用
MQRankSum MQRankSum(比对质量偏倚) 常用 MQRankSum < -12.5;一般沿用
ReadPosRankSum ReadPosRankSum(read 位置偏倚) 常用 ReadPosRankSum < -8.0;一般沿用

以上阈值为 GATK 常见 hard-filter 经验值;如需调整建议基于项目深度/验证集评估后再改。

INDEL 过滤(hard-filter 表达式)

参数 用途/含义 选取建议
QD_indel INDEL 的 QD 过滤 常用 QD < 2.0;一般沿用
QUAL_indel INDEL 的 QUAL 过滤 常用 QUAL < 30.0;一般沿用
FS_indel INDEL 的 FS 过滤 常用 FS > 200.0;一般沿用
ReadPosRankSum_indel INDEL 的 ReadPosRankSum 过滤 常用 ReadPosRankSum < -20.0;一般沿用

SnpEff 注释参数

参数 用途/含义 选取建议
anno_mem SnpEff/Java 内存 群体/大基因组可较大(示例 80G);小项目可下调节省资源
ud 上下游注释范围(bp) 常用 1000;希望更宽“调控区”可设 2000–5000

SV 检测控制

参数 用途/含义 选取建议
SV 是否运行 SV 检测 需要结构变异分析设 T;只关心 SNP/INDEL 可设 F 缩短时间

CNV 检测控制

参数 用途/含义 选取建议
CNV 是否运行 CNV 检测 需要 CNV 分析设 T;否则设 F
minExpectedGC / maxExpectedGC CNV 检测的 GC 含量范围过滤 哺乳动物常用 0.35–0.55;GC 分布差异大的物种可根据经验/文献调整

实务使用建议(简要)

  • 参数最小修改集合(常规哺乳动物重测序项目):

  • 根据项目类型设置:populationtool(混池用 U,其他推荐 H)。

  • 资源相关参数(根据集群环境微调):

  • partition / GPU / numGPUs / GATK_threads / GATK_mem / mapping_threads / sort_mem / rmdup_mem / anno_mem

  • 高级优化

  • 样本数特别多或基因组超大时,可酌情调小 cut_lencut_num,并加大 GATK 内存/线程,以避免单任务过大或 OOM。