我目前正在编写一个 Snakefile,它进行了大量的对齐后质量控制(CollectInsertSizeMetics, CollectAlignmentSummaryMetrics, CollectGcBiasMetrics
,...)。
在 Snakefile 的最后,我运行 multiQC 将所有指标合并到一个 html 报告中。
我知道如果我使用规则A的输出作为规则B的输入,规则B只会在规则A完成后才会执行。
我的问题是 multiQC 的输入是一个目录,它从一开始就存在。在此目录内,multiQC 将搜索某些文件,然后创建报告。
如果我当前正在执行 Snakemake 文件,则将在执行所有质量控制之前执行 multiQC(例如fastqc
需要相当长的时间),因此最终报告中缺少这些内容。
所以我的问题是,是否有一个选项,指定最后执行某个规则。
我知道我可以使用--wait-for-files
等待某个特定的fastqc
报告,但这似乎非常不灵活。
目前最后一条规则如下所示:
rule multiQC:
input:
input_dir = "post-alignment-qc"
output:
output_html="post-alignment-qc/multiQC/mutliqc-report.html"
log:
err='post-alignment-qc/logs/fastQC/multiqc_stderr.err'
benchmark:
"post-alignment-qc/benchmark/multiQC/multiqc.tsv"
shell:
"multiqc -f -n {output.output_html} {input.input_dir} 2> {log.err}"
任何帮助表示赞赏!
你可以输入multiqc
规则由各个 QC 规则生成的文件。这样,一旦所有这些文件可用,multiqc 将启动:
samples = ['a', 'b', 'c']
rule collectInsertSizeMetrics:
input:
'{sample}.bam',
output:
'post-alignment-qc/{sample}.insertSizeMetrics.txt' # <- Some file produced by CollectInsertSizeMetrics
shell:
"CollectInsertSizeMetics {input} > {output}"
rule CollectAlignmentSummaryMetrics:
output:
'post-alignment-qc/{sample}.CollectAlignmentSummaryMetrics.txt'
rule multiqc:
input:
expand('post-alignment-qc/{sample}.insertSizeMetrics.txt', sample=samples),
expand('post-alignment-qc/{sample}.CollectAlignmentSummaryMetrics.txt', sample=samples),
shell:
"multiqc -f -n {output.output_html} post-alignment-qc 2> {log.err}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)