通过qsub提交时如何确保snakemake规则依赖
How to ensure snakemake rule dependency while submitting via qsub
我正在使用 Snakemake 向集群提交作业。我面临这样一种情况,我想仅在所有其他规则都具有 运行 之后才将特定规则强制为 运行 - 这是因为此作业(R 脚本)的输入文件尚未准备就绪。
我碰巧在 Snakemake 文档页面上看到了这个,它指出可以强制规则执行顺序 - https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#flag-files
我有不同的规则,但为了简单起见,我在下面展示了我的 Snakefile 和最后 2 条规则(rsem_model 和 tximport_rsem)。在我的 qsub 集群工作流程中,我希望 tximport_rsem 仅在 rsem_model 完成后执行 并且我尝试了 "touchfile" 方法但我无法让它成功运行。
# Snakefile
rule all:
input:
expand("results/fastqc/{sample}_fastqc.zip",sample=samples),
expand("results/bbduk/{sample}_trimmed.fastq",sample=samples),
expand("results/bbduk/{sample}_trimmed_fastqc.zip",sample=samples),
expand("results/bam/{sample}_Aligned.toTranscriptome.out.bam",sample=samples),
expand("results/bam/{sample}_ReadsPerGene.out.tab",sample=samples),
expand("results/quant/{sample}.genes.results",sample=samples),
expand("results/quant/{sample}_diagnostic.pdf",sample=samples),
expand("results/multiqc/project_QS_STAR_RSEM_trial.html"),
expand("results/rsem_tximport/RSEM_GeneLevel_Summarization.csv"),
expand("mytask.done")
rule clean:
shell: "rm -rf .snakemake/"
include: 'rules/fastqc.smk'
include: 'rules/bbduk.smk'
include: 'rules/fastqc_after.smk'
include: 'rules/star_align.smk'
include: 'rules/rsem_norm.smk'
include: 'rules/rsem_model.smk'
include: 'rules/tximport_rsem.smk'
include: 'rules/multiqc.smk'
rule rsem_model:
input:
'results/quant/{sample}.genes.results'
output:
'results/quant/{sample}_diagnostic.pdf'
params:
plotmodel = config['rsem_plot_model'],
prefix = 'results/quant/{sample}',
touchfile = 'mytask.done'
threads: 16
priority: 60
shell:"""
touch {params.touchfile}
{params.plotmodel} {params.prefix} {output}
"""
rule tximport_rsem:
input: 'mytask.done'
output:
'results/rsem_tximport/RSEM_GeneLevel_Summarization.csv'
priority: 50
shell: "Rscript scripts/RSEM_tximport.R"
这是我尝试进行干燥时遇到的错误-运行
snakemake -np
Building DAG of jobs...
MissingInputException in line 1 of /home/yh6314/rsem/tutorials/QS_Snakemake/rules/tximport_rsem.smk:
Missing input files for rule tximport_rsem:
mytask.done
需要注意的一件重要事情:如果我在头节点上尝试 运行 执行此操作,我不必执行 "touch file" 并且一切正常很好。
我将不胜感激建议并帮助找出解决方法。
提前致谢。
规则 tximport_rsem
只有在规则 rsem_model
中的所有作业完成后才会执行(基于注释)。因此,在这种情况下不需要中间文件 mytask.done
。使用规则 rsem_model
的输出文件对所有样本进行规则 tximport_rsem
就足够了。
rule rsem_model:
input:
'results/quant/{sample}.genes.results'
output:
'results/quant/{sample}_diagnostic.pdf',
shell:
"""
{params.plotmodel} {params.prefix} {output.pdf}
"""
rule tximport_rsem:
input:
expand('results/quant/{sample}_diagnostic.pdf', sample=sample_names)
output:
'results/rsem_tximport/RSEM_GeneLevel_Summarization.csv'
shell:
"Rscript scripts/RSEM_tximport.R"
我正在使用 Snakemake 向集群提交作业。我面临这样一种情况,我想仅在所有其他规则都具有 运行 之后才将特定规则强制为 运行 - 这是因为此作业(R 脚本)的输入文件尚未准备就绪。
我碰巧在 Snakemake 文档页面上看到了这个,它指出可以强制规则执行顺序 - https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#flag-files
我有不同的规则,但为了简单起见,我在下面展示了我的 Snakefile 和最后 2 条规则(rsem_model 和 tximport_rsem)。在我的 qsub 集群工作流程中,我希望 tximport_rsem 仅在 rsem_model 完成后执行 并且我尝试了 "touchfile" 方法但我无法让它成功运行。
# Snakefile
rule all:
input:
expand("results/fastqc/{sample}_fastqc.zip",sample=samples),
expand("results/bbduk/{sample}_trimmed.fastq",sample=samples),
expand("results/bbduk/{sample}_trimmed_fastqc.zip",sample=samples),
expand("results/bam/{sample}_Aligned.toTranscriptome.out.bam",sample=samples),
expand("results/bam/{sample}_ReadsPerGene.out.tab",sample=samples),
expand("results/quant/{sample}.genes.results",sample=samples),
expand("results/quant/{sample}_diagnostic.pdf",sample=samples),
expand("results/multiqc/project_QS_STAR_RSEM_trial.html"),
expand("results/rsem_tximport/RSEM_GeneLevel_Summarization.csv"),
expand("mytask.done")
rule clean:
shell: "rm -rf .snakemake/"
include: 'rules/fastqc.smk'
include: 'rules/bbduk.smk'
include: 'rules/fastqc_after.smk'
include: 'rules/star_align.smk'
include: 'rules/rsem_norm.smk'
include: 'rules/rsem_model.smk'
include: 'rules/tximport_rsem.smk'
include: 'rules/multiqc.smk'
rule rsem_model:
input:
'results/quant/{sample}.genes.results'
output:
'results/quant/{sample}_diagnostic.pdf'
params:
plotmodel = config['rsem_plot_model'],
prefix = 'results/quant/{sample}',
touchfile = 'mytask.done'
threads: 16
priority: 60
shell:"""
touch {params.touchfile}
{params.plotmodel} {params.prefix} {output}
"""
rule tximport_rsem:
input: 'mytask.done'
output:
'results/rsem_tximport/RSEM_GeneLevel_Summarization.csv'
priority: 50
shell: "Rscript scripts/RSEM_tximport.R"
这是我尝试进行干燥时遇到的错误-运行
snakemake -np
Building DAG of jobs...
MissingInputException in line 1 of /home/yh6314/rsem/tutorials/QS_Snakemake/rules/tximport_rsem.smk:
Missing input files for rule tximport_rsem:
mytask.done
需要注意的一件重要事情:如果我在头节点上尝试 运行 执行此操作,我不必执行 "touch file" 并且一切正常很好。
我将不胜感激建议并帮助找出解决方法。
提前致谢。
规则 tximport_rsem
只有在规则 rsem_model
中的所有作业完成后才会执行(基于注释)。因此,在这种情况下不需要中间文件 mytask.done
。使用规则 rsem_model
的输出文件对所有样本进行规则 tximport_rsem
就足够了。
rule rsem_model:
input:
'results/quant/{sample}.genes.results'
output:
'results/quant/{sample}_diagnostic.pdf',
shell:
"""
{params.plotmodel} {params.prefix} {output.pdf}
"""
rule tximport_rsem:
input:
expand('results/quant/{sample}_diagnostic.pdf', sample=sample_names)
output:
'results/rsem_tximport/RSEM_GeneLevel_Summarization.csv'
shell:
"Rscript scripts/RSEM_tximport.R"