Snakemake/Patterns: Difference between revisions
From charlesreid1
(→flags) |
|||
| Line 40: | Line 40: | ||
this will run the first rule in the Snakefile, which is default. The default rule does nothing, but requires as inputs the final output of the entire process. Snakemake will assemble the rules that those final output files depend on. | this will run the first rule in the Snakefile, which is default. The default rule does nothing, but requires as inputs the final output of the entire process. Snakemake will assemble the rules that those final output files depend on. | ||
==Creating rules without target files== | |||
Normally you run a rule by specifying the output file of a rule. If you create a rule that has no output files associated with it, like the one below (clean): | |||
<pre> | |||
rule clean: | |||
shell: | |||
'rm -f *.dodat *.int*' | |||
</pre> | |||
you can run it by passing the rule name to snakemake: | |||
<pre> | |||
snakemake clean | |||
</pre> | |||
==Flags== | ==Flags== | ||
Revision as of 03:33, 23 February 2018
Snakemake patterns for Snakefiles and complex workflows.
Creating a master rule
If Snakemake is not provided with a rule to execute, it will execute the first rule in the file.
To create a master rule that will call other rules defined in the Snakemake file, the make equivalent of "all" or "default", you should define it first (you can name it whatever you would like):
mynames = ['A','B','C']
myinputs = [j+".txt" for j in mynames]
myoutputs = [j+".dodat" for j in mynames]
rule default:
input:
myoutputs
shell:
'echo "i just run subrules!"'
This rule requires, as inputs, the variable myoutputs, which is going to contain all of the final output files that the Snakemake process should generate. This means we need to have a rule somewhere below with an output of A.dodat, B.dodat, and C.dodat:
rule cascade:
output:
'{name}.dodat'
input:
'{name}.file_from_previous_step'
shell:
'cp {input} {output}'
and so on...
Now, to run this default rule, just run snakemake with no arguments:
$ snakemake
this will run the first rule in the Snakefile, which is default. The default rule does nothing, but requires as inputs the final output of the entire process. Snakemake will assemble the rules that those final output files depend on.
Creating rules without target files
Normally you run a rule by specifying the output file of a rule. If you create a rule that has no output files associated with it, like the one below (clean):
rule clean:
shell:
'rm -f *.dodat *.int*'
you can run it by passing the rule name to snakemake:
snakemake clean