我正在使用snakemake
管道来运行GATKMarkDuplicate
命令,该命令包含来自不同读取组的多个输入bam文件
rule mark_duplicates:
input:
get_dedup_input
output:
bam=temp("bams/{patient}.{sample_type}.markdups.bam"),
md5=temp("bams/{patient}.{sample_type}.markdups.bam.md5"),
metrics="qc/gatk/{patient}_{sample_type}_dup_metrics.txt"
conda:
"../envs/gatk.yml"
shell:
"""
gatk MarkDuplicates -I {input} -O {output.bam} -M {output.metrics} \
--CREATE_MD5_FILE true --ASSUME_SORT_ORDER "queryname"
"""
get_dedup_input
返回输入bam文件的列表MarkDuplicates
要求使用-I
标志指定每个输入文件。如果我只有一个bam文件,我可以简单地写-I {input}
,
但是这失败了,因为它指定了-I file1.bam file2.bam
它需要是-I file1.bam -I file2.bam
。格式化输入的最佳方式是什么,以便将每个输入文件指定为-I [input file]
下面有两个场景来说明如果手动运行命令,输入、输出和shell命令会是什么样子。为了简洁起见,我省略了一些非必要的MarkDuplicate
标志:
Inputs: patient101.normal.rg1.bam
Output: patient101.normal.markdups.bam
Shell:
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt
Inputs: patient101.normal.rg1.bam, patient101.normal.rg2.bam
Output: patient101.normal.markdups.bam
Shell:
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-I patient101.normal.rg2.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt
谢谢你更新你的答案
因此,最好的办法可能是创建一个参数,使其成为我们需要的字符串,如下所示:
如果我们的输入是单个bam,
params.input
将只是patient101.normal.rg1.bam
,并且-I
会像平常一样添加到前面如果有两个输入BAM,lambda函数将
-I
放在它们之间,shell命令将-I
添加到前面相关问题 更多 >
编程相关推荐