可以使用不同的路径/通配符定义snakemake输入规则

用户名

我想知道是否可以定义一种依赖于不同通配符的输入规则。

详细地说,我正在使用qsub在不同的fastq文件上运行此Snakemake管道,它将每个作业提交到不同的节点:

  1. 原始fastq上的fastqc-对其他作业没有下游依赖性
  2. 适配器/质量修整以生成修整的fastq
  3. 修剪过的fastq上的fastqc_after(步骤2的输出),没有下游依赖性
  4. 修剪过的fastq上的star-rsem管道(上述步骤2的输出)
  5. rsem和tximport(步骤4的输出)
  6. 运行multiqc

MultiQC- https : //multiqc.info/-在结果文件夹中运行,该文件夹包含fastqc,star,rsem等的结果。但是,由于每个作业都在不同的节点上运行,因此有时需要执行步骤3(fastqc和/或fastqc_after)仍在节点上运行,而其他步骤完成运行(步骤2、4和5),反之亦然。

当前,我可以创建一个MultiQc规则来等待步骤2、4、5的结果,因为它们通过输入/输出规则相互链接。

我已将我的管道以png格式附加到该帖子。任何建议都会有所帮助。

我需要什么:我想创建一个“整理”步骤,让MultiQC等待所有步骤(从1到5)完成。换句话说,以我所附的png为指导,我想为MultiQC定义多个输入规则,这些规则也要等待fastqc的结果

提前致谢。

我当前的Snakemake管道为png :根据我从“收到的意见科林”和“ BLI ”后,我原来的职位,我已经共享了这里的不同规则的代码。

第1步-FastQC

rule fastqc:
    input:  "raw_fastq/{sample}.fastq"
    output: "results/fastqc/{sample}_fastqc.zip"
    log: "results/logs/fq_before/{sample}.fastqc.log"
    params: ...
    shell: ...

第2步-bbduk

rule bbduk:
    input: R1 = "raw_fastq/{sample}.fastq"
    output: R1 = "results/bbduk/{sample}_trimmed.fastq",
    params: ...
    log: "results/logs/bbduk/{sample}.bbduk.log"
    priority:95
    shell: ....

第3步-fastqc_after

rule fastqc_after:
    input:  "results/bbduk/{sample}_trimmed.fastq"
    output: "results/bbduk/{sample}_trimmed_fastqc.zip"
    log: "results/logs/fq_after/{sample}_trimmed.fastqc.log"
    priority: 70
    params: ...
    shell: ...

第4步-star_align

rule star_align:
    input: R1 = "results/bbduk/{sample}_trimmed.fastq"
    output:
        out_1 = "results/bam/{sample}_Aligned.toTranscriptome.out.bam",
        out_2 = "results/bam/{sample}_ReadsPerGene.out.tab"
    params: ...
    log: "results/logs/star/{sample}.star.log"
    priority:90
    shell: ...

第5步-rsem_norm

rule rsem_norm:
    input:
        bam = "results/bam/{sample}_Aligned.toTranscriptome.out.bam"
    output:
        genes = "results/quant/{sample}.genes.results"
    params: ...
    threads = 16
    priority:85
    shell: ...

第6步-rsem_model

rule rsem_model:
    input: "results/quant/{sample}.genes.results"
    output: "results/quant/{sample}_diagnostic.pdf"
    params: ...      
    shell: ...

第7步-tximport_rsem

rule tximport_rsem:
        input: expand("results/quant/{sample}_diagnostic.pdf",sample=samples)
        output: "results/rsem_tximport/RSEM_GeneLevel_Summarization.csv"
        shell: ...

步骤8-MultiQC

rule multiqc:
    input: expand("results/quant/{sample}.genes.results",sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: ...
成为

如果希望规则multiqc仅在fastqc完成后才发生,则可以将的输出添加fastqc到的输入中multiqc

rule multiqc:
    input:
        expand("results/quant/{sample}.genes.results",sample=samples),
        expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: ...

或者,如果你需要能够参考的输出rsem_norm在你的shell部分:

rule multiqc:
    input:
        rsem_out = expand("results/quant/{sample}.genes.results",sample=samples),
        fastqc_out = expand("results/fastqc/{sample}_fastqc.zip", sample=samples)
    output: "results/multiqc/project_QS_STAR_RSEM_trial.html"
    log: "results/log/multiqc"
    shell: "... {input.rsem_out} ..."

在您的评论之一中,您写道:

MultiQC需要目录作为输入-我在shell命令中给它“结果”目录。

如果我理解正确,则意味着这results/quant/{sample}.genes.results是目录,而不是纯文件。在这种情况下,应确保没有下游规则在这些目录内写入文件。否则,目录将被视为在输出之后已更新multiqc,并且multiqc将在每次运行管道时重新运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Tensorflow:是否可以使用不同的火车输入大小和测试输入大小?

Spring集成可注册动态ServerWebSocketContainer路径,以便可以使用不同的路径创建不同的集成流

我可以使用不同尺寸的图像集作为预训练模型的输入的哪些方式?

为什么对于函数的定义和声明,我可以使用不同的签名?

Snakemake:如何在规则中使用不同的参数(整数)运行 shell 命令?

创建一个文件名,每个人都可以使用不同的路径

Snakemake:我可以在规则之外访问通配符吗?

我可以使用不同的方式运行 order by 吗?

即使RGB值相等也可以使用不同的颜色

是否可以使用不同 typeNum 的排版覆盖模板?

是否可以使用命令行标志启用/禁用某些Snakemake规则

我可以使用相同的URL,但可以使用不同的动态细分吗?

当两个不同的规则路径可以生成给定的输出时,snakemake是否可以避免歧义?

如何使用不同的模板作为输入定义功能

是否可以使用使用不同版本的Angular构建的不同角度元素

获取Firebase数据库的引用时是否可以使用通配符构建路径

snakemake:规则的可选输入

是否可以使用Team Services中托管的构建服务器使用不同的Node.js版本构建自定义的Npm构建任务?

使用不同 JSON 的内容作为输入以使用 jq 进行修改

使用不同的规则重命名列

在 API 中使用不同的计算规则

对每个查询使用不同的排序规则

snakemake在python函数中使用通配符输入/输出

我可以使用通配符替换吗

可以使用通配符卸载 udisksctl 吗?

是否可以使用通配符SAN证书?

Snakemake在两个不同的通配符子集上发布运行规则

我可以使用Google Translate使我的Raspberry Pi按需使用不同的语言说吗?

我可以使用一个使用不同表参数的触发器吗?