规则未被 snakemake 拾取
rule not picked up by 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/\"[=10=]}}' | sh; \
ls tasktmp | awk '{{print \"mv ./tasktmp/\"[=10=]\" ./task/\"[=10=]\"/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"
如果我这样称呼它:
snakemake -p -s snakefile
前三个规则正在执行,其他的没有。
我可以通过将最后一条规则指定为参数来运行它。
snakemake -p -s snakefile build_target
但我不明白我怎么能运行全部。
非常感谢有关如何解决此问题的任何建议。
默认情况下,snakemake 只执行 snakefile 的第一条规则。这是统治一切。为了生成规则所有的输入 dynamic("task/{job}/taskOutput.tab")
,它需要 运行 以下两个规则 task
和 split_input
,它确实如此。
如果您希望其他规则也为 运行,您应该将它们的输出放在规则 all 中,例如:
rule all:
input:
dynamic("task/{job}/taskOutput.tab"),
"par/parameters.txt",
"build_target.done"
我从 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/\"[=10=]}}' | sh; \
ls tasktmp | awk '{{print \"mv ./tasktmp/\"[=10=]\" ./task/\"[=10=]\"/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"
如果我这样称呼它:
snakemake -p -s snakefile
前三个规则正在执行,其他的没有。
我可以通过将最后一条规则指定为参数来运行它。
snakemake -p -s snakefile build_target
但我不明白我怎么能运行全部。
非常感谢有关如何解决此问题的任何建议。
默认情况下,snakemake 只执行 snakefile 的第一条规则。这是统治一切。为了生成规则所有的输入 dynamic("task/{job}/taskOutput.tab")
,它需要 运行 以下两个规则 task
和 split_input
,它确实如此。
如果您希望其他规则也为 运行,您应该将它们的输出放在规则 all 中,例如:
rule all:
input:
dynamic("task/{job}/taskOutput.tab"),
"par/parameters.txt",
"build_target.done"