我有一组用BWA-MEM生成并用GATK IndelRealigner等进一步处理的BAM文件。我正在对BAM文件进行较小的预处理以加快处理速度。但是,在变量调用之前,我必须将这些单独的文件合并到一个BAM文件中,这是我的Snakemake管道的一个主要问题。在
我的输入文件遵循这种命名约定
# Sample 1 BAM files
OVCA-1-FRESH-1_S16_L001_realigned.bam
OVCA-1-FRESH-1_S16_L002_realigned.bam
OVCA-1-FRESH-1_S16_L003_realigned.bam
OVCA-1-FRESH-1_S16_L004_realigned.bam
# Sample 2 BAM files
OVCA-2-FRESH-1_S16_L001_realigned.bam
OVCA-2-FRESH-1_S16_L002_realigned.bam
OVCA-2-FRESH-1_S16_L003_realigned.bam
OVCA-2-FRESH-1_S16_L004_realigned.bam
有问题的管道是这样的:
^{pr2}$我尝试构建一个输入函数来收集与当前处理的通配符匹配的所有可用输入文件。当我对我的管道执行dryrun时,我可以看到函数samtools_merge_inputs
不能正常工作,因为它收集所有可用的BAM文件并多次重复它们:
rule samtools_merge:
input:
OVCA-1-FRESH-1_S16_L001_realigned.bam,
OVCA-1-FRESH-1_S16_L002_realigned.bam,
OVCA-1-FRESH-1_S16_L003_realigned.bam,
OVCA-1-FRESH-1_S16_L004_realigned.bam,
OVCA-1-FRESH-1_S16_L001_realigned.bam,
OVCA-1-FRESH-1_S16_L002_realigned.bam,
OVCA-1-FRESH-1_S16_L003_realigned.bam,
OVCA-1-FRESH-1_S16_L004_realigned.bam,
OVCA-1-FRESH-1_S16_L001_realigned.bam,
OVCA-1-FRESH-1_S16_L002_realigned.bam,
OVCA-1-FRESH-1_S16_L003_realigned.bam,
OVCA-1-FRESH-1_S16_L004_realigned.bam,
OVCA-1-FRESH-1_S16_L001_realigned.bam,
OVCA-1-FRESH-1_S16_L002_realigned.bam,
OVCA-1-FRESH-1_S16_L003_realigned.bam,
OVCA-1-FRESH-1_S16_L004_realigned.bam,
OVCA-2-FRESH-1_S4_L001_realigned.bam,
OVCA-2-FRESH-1_S4_L002_realigned.bam,
OVCA-2-FRESH-1_S4_L003_realigned.bam,
OVCA-2-FRESH-1_S4_L004_realigned.bam,
OVCA-2-FRESH-1_S4_L001_realigned.bam,
OVCA-2-FRESH-1_S4_L002_realigned.bam,
OVCA-2-FRESH-1_S4_L003_realigned.bam,
OVCA-2-FRESH-1_S4_L004_realigned.bam,
OVCA-2-FRESH-1_S4_L001_realigned.bam,
OVCA-2-FRESH-1_S4_L002_realigned.bam,
OVCA-2-FRESH-1_S4_L003_realigned.bam,
OVCA-2-FRESH-1_S4_L004_realigned.bam,
OVCA-2-FRESH-1_S4_L001_realigned.bam,
OVCA-2-FRESH-1_S4_L002_realigned.bam,
OVCA-2-FRESH-1_S4_L003_realigned.bam,
OVCA-2-FRESH-1_S4_L004_realigned.bam
output:
OVCA-1-FRESH-1_S16_realigned.bam
jobid:
18
wildcards:
run_id=OVCA-1-FRESH-1_S16
应该是这样的:
rule samtools_merge:
input:
OVCA-1-FRESH-1_S16_L001_realigned.bam,
OVCA-1-FRESH-1_S16_L002_realigned.bam,
OVCA-1-FRESH-1_S16_L003_realigned.bam,
OVCA-1-FRESH-1_S16_L004_realigned.bam
output:
OVCA-1-FRESH-1_S16_realigned.bam
jobid:
18
wildcards:
run_id=OVCA-1-FRESH-1_S16
如何编辑samtools_merge_inputs函数以收集所需的输入文件?我确实意识到我可以简单地忘记输入函数,只需输入四个输入文件到samtools\u merge中使用通配符,但我真的很想学习如何在这种情况下使用输入函数,因为我在其他管道中也面临类似的问题。我试图从其他帖子中寻求帮助,但到目前为止,我还没有找到符合我目的的答案。在
谢谢你的帮助!在
您的函数在这里不使用通配符。应该是这样的:
当然,如果你在所有车道上都有样品。调用函数时,所有通配符都作为函数的
wildcards
参数中的对象传递。在您还可以执行以下操作:
^{pr2}$您的snakefile中有多个不起作用的内容。
首先,在samtools合并规则中缺少一个“'”:
注意变量名(行与行)
其次,函数
glob_wildcards()
将返回找到的所有值的列表,这意味着您的两个变量将如下所示:我敢肯定这不是你想要的。解决办法是用正确的结构来描述你的样品。例如(如果所有样本都在所有车道上):
最后一件事:您的输入和输出不能用通配符区分,这意味着您将以错误}结束。我建议您为输出选择一个不同的名称。总而言之:
Cyclic dependency on rule samtools_merge
或{还没有检查你的shell命令,但我的医生说:
Usage: samtools merge [-nurlf] [-h inh.sam] [-b <bamlist.fofn>] <out.bam> <in1.bam> [<in2.bam> ... <inN.bam>]
相关问题 更多 >
编程相关推荐