规则没有被snakemake拾取

yah*_*han 1 snakemake

我从snakemake开始。我设法定义了一些可以独立运行的规则,但不能在工作流程中运行。也许问题在于它们有不相关的输入和输出。

我目前的工作流程是这样的:

configfile: './config.yaml'

rule all:
    input: dynamic("task/{job}/taskOutput.tab")
rule split_input:
     input: "input_fasta/snp.fa"
     output: dynamic("task/{job}/taskInput.fa")
     shell:
     "rm -Rf tasktmp task; \
     mkdir tasktmp task; \
     split -l 200 -d {input} ./tasktmp/; \
     ls tasktmp | awk '{{print \"mkdir task/\"$0}}' | sh; \
     ls tasktmp | awk '{{print \"mv ./tasktmp/\"$0\" ./task/\"$0\"/taskInput.fa\"}}' | sh"
rule task:
     input: "task/{job}/taskInput.fa"
     output: "task/{job}/taskOutput.tab"
     shell: "cp {input} {output}"
rule make_parameter_file:
     output:
    "par/parameters.txt
     shell:
    "rm -Rf par;mkdir par; \
    echo \"\
minimumFlankLength=5\n\
maximumFlankLength=200\n\
alignmentLengthDifference=2\
allowedMismatch=4\n\
allowedProxyMismatch=2\n\
allowedIndel=3\n\
ambiguitiesAsMatch=1\n\" \
    > par/parameters.txt"
rule build_target:
    input:
       "./my_target"
    output:
       touch("build_target.done")
    shell:
       "build_target -template format_nt -source {input} -target my_target"
Run Code Online (Sandbox Code Playgroud)

如果我这样称呼它:

snakemake -p -s snakefile
Run Code Online (Sandbox Code Playgroud)

前三个规则正在执行,其他规则则没有执行。

我可以通过将最后一条规则指定为参数来运行它。

snakemake -p -s snakefile build_target
Run Code Online (Sandbox Code Playgroud)

但我不知道如何才能全部跑完。

非常感谢您提供有关如何解决此问题的任何建议。

rio*_*len 5

默认情况下,snakemake仅执行snake文件的第一条规则。这就是一切的规则。为了生成规则 all 的输入dynamic("task/{job}/taskOutput.tab"),它需要运行以下两个规则tasksplit_input,所以它确实如此。

如果您希望其他规则也运行,您应该将它们的输出放在规则 all 中,例如:

rule all:
    input: 
        dynamic("task/{job}/taskOutput.tab"),
        "par/parameters.txt",
        "build_target.done"
Run Code Online (Sandbox Code Playgroud)