我有一个奇怪的Snakemake规则,我想创建Snakemake文档没有描述的规则。我有规则picard_dupes,它产生三个输出、度量、bai和bai文件。但是,与通过输出创建的bai和度量不同,bai是在不包含在输出中的CREATE_INDEX中创建的。创建一个.bai而不是bam.bai文件。在规则中,picard_bai将此文件重命名为可在以后的规则中识别。但是,我收到了一个错误:丢失了规则picard_bai的输入文件。这告诉我的Snakemake正在尝试在picard_bai之前执行picard_dup。我如何才能让它工作在我的bai是输出,而不是在输出移动到下一个规则输入?
rule picard_dupes:
input: rules.star_aligner.output.bam
output:
bam = 'picard/{sampleID}_marked_duplicates.bam',
metric = 'picard/{sampleID}_marked_dup_metrics.txt'
threads: 12
run:
shell('picard MarkDuplicates \
-Xmx4G \
-XX:ParallelGCThreads={threads} \
I={input} \
O={output.bam} \
M={output.metric} \
CREATE_INDEX=true ASSUME_SORT_ORDER=coordinate OPTICAL_DUPLICATE_PIXEL_DISTANCE=100')
rule picard_bai:
input: 'picard/{sampleID}_marked_duplicates.bai'
output:
bai = 'picard/{sampleID}_marked_duplicates.bam.bai'
run:
shell('mv {input} {output.bai}')发布于 2022-05-02 13:20:36
蛇只知道你说了什么。在这种情况下,您不会让snakemake知道picard_dupes也会创建bai文件。我喜欢调用这些隐式输出,因为您没有在shell命令中显式地创建它们。只需将输出指令更改为:
output:
bam = 'picard/{sampleID}_marked_duplicates.bam',
metric = 'picard/{sampleID}_marked_dup_metrics.txt',
index = 'picard/{sampleID}_marked_duplicates.bai',作为一个次要的增强,您可以跳过picard_bai并在picard_dupes中执行重命名“
rule picard_dupes:
input: rules.star_aligner.output.bam
output:
bam = 'picard/{sampleID}_marked_duplicates.bam',
metric = 'picard/{sampleID}_marked_dup_metrics.txt',
index = 'picard/{sampleID}_marked_duplicates.bai',
threads: 12
run:
shell('picard MarkDuplicates \
-Xmx4G \
-XX:ParallelGCThreads={threads} \
I={input} \
O={output.bam} \
M={output.metric} \
CREATE_INDEX=true ASSUME_SORT_ORDER=coordinate OPTICAL_DUPLICATE_PIXEL_DISTANCE=100')
bai_file = output.bam[:-1] + 'i' # generate bai filename
shell('mv {bai_file} {output.index}')https://stackoverflow.com/questions/72086982
复制相似问题