我想知道是否可以定义一种依赖于不同通配符的输入规则。
详细地说,我正在使用qsub在不同的fastq文件上运行此Snakemake管道,它将每个作业提交到不同的节点:
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的结果
提前致谢。
注:根据我从“收到的意见科林”和“ 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] 删除。
我来说两句