minimap2 (Beta)
运行 GPU 加速的 minimap2。
此工具使用加速的 KSW2 将 FASTQ 转换为 BAM/CRAM,从而将长读序与大型参考数据库进行比对。
有关所有可用选项的详细列表,请参阅 minimap2 参考 部分。
# This command assumes all the inputs are in INPUT_DIR and all the outputs go to OUTPUT_DIR.
docker run --rm --gpus all --volume INPUT_DIR:/workdir --volume OUTPUT_DIR:/outputdir \
--workdir /workdir \
nvcr.io/nvidia/clara/clara-parabricks:4.4.0-1 \
pbrun minimap2 \
--ref /workdir/${REFERENCE_FILE} \
--in-fq /workdir/${INPUT_FASTQ} \
--out-bam /outputdir/${OUTPUT_BAM}
以下命令是 Clara Parabricks 上述命令的 minimap2-v2.26 和 GATK4 对等命令。这些命令的输出将与上述命令的输出相同。有关比较结果,请参阅输出比较页面。您可能需要根据数据集增加 Java 堆大小,或减少 --MAX_RECORDS_IN_RAM 的数量。
# Run minimap2 and pipe the output to create a sorted BAM.
$ minimap2 -ax map-pbmm2 \
<INPUT_DIR>/${REFERENCE_FILE} \
<INPUT_DIR>/${INPUT_FASTQ} | \
gatk SortSam \
--java-options -Xmx30g \
--MAX_RECORDS_IN_RAM 5000000 \
-I /dev/stdin \
-O cpu.bam \
--SORT_ORDER coordinate
请注意,必须对基线 minimap2 代码进行两处更改才能完全匹配结果
首先,必须在 options.c
的 mm_set_opt
函数中创建一个新的预设,该预设尝试通过将这些参数设置为名为 "map-pbmm2" 的新预设来复制 pbmm2 的预设
io->k = 19;
io->w = 19;
io->batch_size = 0x7fffffffffffffffL; // always build a uni-part index
mo->flag |= MM_F_CIGAR;
mo->flag |= MM_F_SOFTCLIP;
mo->flag |= MM_F_LONG_CIGAR;
mo->flag |= MM_F_EQX;
mo->flag |= MM_F_NO_PRINT_2ND; // Allow secondaries with enforced mapping, but disable per default!
mo->zdrop = 400;
mo->zdrop_inv = 50;
mo->a = 1;
mo->b = 4;
mo->q = 6;
mo->q2 = 26;
mo->e = 2;
mo->e2 = 1;
mo->bw = 2000;
mo->max_gap = 10000;
mo->occ_dist = 500;
mo->min_mid_occ = 50;
mo->max_mid_occ = 500;
mo->min_dp_max = 500;
其次,必须对基线 KSW2 代码进行修复,以通过将循环裂变起点和终点分别更改为 st
和 en
来对其进行舍入。如果起点 (st0
) 是小于 16 但大于 0 的数字,则其评分值将无法正确初始化,但在稍后计算实际比对时仍将使用。可以通过将起点和终点舍入为 16 的倍数来修复此问题。
要进行此修复,请更改 ksw2_extd2_sse.c
中的以下代码
// loop fission: set scores first
if (!(flag & KSW_EZ_GENERIC_SC)) {
for (t = st0; t <= en0; t += 16) {
__m128i sq, st, tmp, mask;
sq = _mm_loadu_si128((__m128i*)&sf[t]);
st = _mm_loadu_si128((__m128i*)&qrr[t]);
mask = _mm_or_si128(_mm_cmpeq_epi8(sq, m1_), _mm_cmpeq_epi8(st, m1_));
tmp = _mm_cmpeq_epi8(sq, st);
#ifdef __SSE4_1__
tmp = _mm_blendv_epi8(sc_mis_, sc_mch_, tmp);
tmp = _mm_blendv_epi8(tmp, sc_N_, mask);
#else
tmp = _mm_or_si128(_mm_andnot_si128(tmp, sc_mis_), _mm_and_si128(tmp, sc_mch_));
tmp = _mm_or_si128(_mm_andnot_si128(mask, tmp), _mm_and_si128(mask, sc_N_));
#endif
_mm_storeu_si128((__m128i*)((int8_t*)s + t), tmp);
}
} else {
for (t = st0; t <= en0; ++t)
((uint8_t*)s)[t] = mat[sf[t] * m + qrr[t]];
}
使用 lf_start
和 lf_en
的固定版本
// loop fission: set scores first
int lf_start = st, lf_en = en;
if (!(flag & KSW_EZ_GENERIC_SC)) {
for (t = lf_start; t <= lf_en; t += 16) {
__m128i sq, st, tmp, mask;
sq = _mm_loadu_si128((__m128i*)&sf[t]);
st = _mm_loadu_si128((__m128i*)&qrr[t]);
mask = _mm_or_si128(_mm_cmpeq_epi8(sq, m1_), _mm_cmpeq_epi8(st, m1_));
tmp = _mm_cmpeq_epi8(sq, st);
#ifdef __SSE4_1__
tmp = _mm_blendv_epi8(sc_mis_, sc_mch_, tmp);
tmp = _mm_blendv_epi8(tmp, sc_N_, mask);
#else
tmp = _mm_or_si128(_mm_andnot_si128(tmp, sc_mis_), _mm_and_si128(tmp, sc_mch_));
tmp = _mm_or_si128(_mm_andnot_si128(mask, tmp), _mm_and_si128(mask, sc_N_));
#endif
_mm_storeu_si128((__m128i*)((int8_t*)s + t), tmp);
}
} else {
for (t = lf_start; t <= lf_en; ++t)
((uint8_t*)s)[t] = mat[sf[t] * m + qrr[t]];
}
将长读序与大型参考数据库进行比对,以将 FASTQ 转换为 BAM/CRAM。
输入/输出文件选项
- --ref REF
-
参考文件的路径。(默认值:None)
此选项为必选项。
- --index INDEX
-
由 vanilla minimap2 生成的 minimizer 索引文件的路径,以减少索引时间。(默认值:None)
- --in-fq IN_FQ
-
fastq 或 fastq.gz 格式的查询序列文件的路径。(默认值:None)
- --in-bam IN_BAM
-
输入 BAM/CRAM 文件的路径。(默认值:None)
- --knownSites KNOWNSITES
-
已知插入缺失文件的路径。该文件必须为 vcf.gz 格式。此选项可以多次使用。(默认值:None)
- --interval-file INTERVAL_FILE
-
以下格式之一的区间文件的路径:Picard 样式(.interval_list 或 .picard)、GATK 样式(.list 或 .intervals)或 BED 文件 (.bed)。此选项可以多次使用。(默认值:None)
- --out-recal-file OUT_RECAL_FILE
-
碱基质量分数重校准后报告文件的路径。(默认值:None)
- --out-bam OUT_BAM
-
排序后 BAM/CRAM 文件的路径。(默认值:None)
此选项为必选项。
- --out-duplicate-metrics OUT_DUPLICATE_METRICS
-
标记重复项后重复指标文件的路径。(默认值:None)
- --out-qc-metrics-dir OUT_QC_METRICS_DIR
-
将生成 QC 指标的目录的路径。(默认值:None)
工具选项
- --preset PRESET
-
要应用的预设。可能的值为 {map-pbmm2,map-hifi,map-ont}。(默认值:map-pbmm2)
- --pbmm2
-
包含其他处理以匹配 pbmm2 的格式和准确性。与 map-ont --preset 值不兼容。(默认值:None)
- --pbmm2-unmapped
-
在 pbmm2 的输出中包含未比对的记录。必须与 --pbmm2 同时使用。与 map-ont --preset 值不兼容。(默认值:None)
- --eqx
-
写入 =/X CIGAR 运算符。(默认值:None)
- -L INTERVAL, --interval INTERVAL
-
从中调用输入读取的 bqsr 的区间。所有区间将具有 100 的填充以获取读取记录,并且重叠区间将被合并。区间文件应使用 --interval-file 选项传递。此选项可以多次使用(例如 "-L chr1 -L chr2:10000 -L chr3:20000+ -L chr4:10000-20000")。(默认值:None)
- -ip INTERVAL_PADDING, --interval-padding INTERVAL_PADDING
-
要添加到您包含的每个区间的填充量(以碱基对为单位)。(默认值:None)
- --standalone-bqsr
-
在生成排序后的 BAM 后运行独立的 BQSR。此选项需要 --knownSites 和 --out-recal-file 输入参数。(默认值:None)
- --read-group-sm READ_GROUP_SM
-
此运行中读取组的 SM 标记。(默认值:None)
- --read-group-lb READ_GROUP_LB
-
此运行中读取组的 LB 标记。(默认值:None)
- --read-group-pl READ_GROUP_PL
-
此运行中读取组的 PL 标记。(默认值:None)
- --read-group-id-prefix READ_GROUP_ID_PREFIX
-
此运行中读取组的 ID 和 PU 标记的前缀。此前缀将用于此运行中所有成对的 fastq 文件。ID 和 PU 标记将包含此前缀和一个标识符,该标识符对于一对 fastq 文件是唯一的。(默认值:None)
性能选项
- --num-threads NUM_THREADS
-
处理线程数。(默认值:12)
- --gpuwrite
-
使用一个 GPU 加速写入最终的 BAM/CRAM。(默认值:None)
- --gpuwrite-deflate-algo GPUWRITE_DEFLATE_ALGO
-
选择与 --gpuwrite 一起使用的 nvCOMP DEFLATE 算法。请注意,这些选项与 CPU DEFLATE 选项不对应。有效选项为 1、2 和 4。选项 1 最快,而选项 2 和 4 的吞吐量逐渐降低,但压缩率更高。当用户未提供输入时(即 None),默认值为 1(默认值:None)
- --gpusort
-
使用 GPU 加速排序。(默认值:None)
- --use-gds
-
使用 GPUDirect Storage (GDS) 来启用 GPU 内存和存储之间直接内存访问 (DMA) 传输的直接数据路径。必须与 --gpuwrite 同时使用。有关如何设置和使用 GPUDirect Storage 的信息,请参阅 Parabricks 文档 > 最佳性能。(默认值:None)
- --low-memory
-
使用低内存模式(默认值:None)
常用选项
- --logfile LOGFILE
-
日志文件的路径。如果未指定,消息将仅写入标准错误输出。(默认值:None)
- --tmp-dir TMP_DIR
-
将存储临时文件的目录的完整路径。
- --with-petagene-dir WITH_PETAGENE_DIR
-
PetaGene 安装目录的完整路径。默认情况下,这应已安装在 /opt/petagene。使用此选项还需要通过设置 LD_PRELOAD 环境变量来预加载 PetaLink 库。可以选择设置用于数据和凭据的 PETASUITE_REFPATH 和 PGCLOUD_CREDPATH 环境变量(默认值:None)
- --keep-tmp
-
完成时不删除存储临时文件的目录。
- --no-seccomp-override
-
不覆盖 docker 的 seccomp 选项(默认值:None)。
- --version
-
查看兼容的软件版本。
GPU 选项
- --num-gpus NUM_GPUS
-
运行要使用的 GPU 数量。将使用 GPU 0..(NUM_GPUS-1)。