首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下一个规则输入的非传统Snakemake输出

下一个规则输入的非传统Snakemake输出
EN

Stack Overflow用户
提问于 2022-05-02 12:50:06
回答 1查看 35关注 0票数 0

我有一个奇怪的Snakemake规则,我想创建Snakemake文档没有描述的规则。我有规则picard_dupes,它产生三个输出、度量、bai和bai文件。但是,与通过输出创建的bai和度量不同,bai是在不包含在输出中的CREATE_INDEX中创建的。创建一个.bai而不是bam.bai文件。在规则中,picard_bai将此文件重命名为可在以后的规则中识别。但是,我收到了一个错误:丢失了规则picard_bai的输入文件。这告诉我的Snakemake正在尝试在picard_bai之前执行picard_dup。我如何才能让它工作在我的bai是输出,而不是在输出移动到下一个规则输入?

代码语言:javascript
复制
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}')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 13:20:36

蛇只知道你说了什么。在这种情况下,您不会让snakemake知道picard_dupes也会创建bai文件。我喜欢调用这些隐式输出,因为您没有在shell命令中显式地创建它们。只需将输出指令更改为:

代码语言:javascript
复制
    output:
        bam = 'picard/{sampleID}_marked_duplicates.bam',
        metric = 'picard/{sampleID}_marked_dup_metrics.txt',
        index = 'picard/{sampleID}_marked_duplicates.bai',

作为一个次要的增强,您可以跳过picard_bai并在picard_dupes中执行重命名“

代码语言:javascript
复制
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}')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72086982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档