From charlesreid1

Line 1: Line 1:
Snakemake patterns for Snakefiles and complex workflows.
Snakemake patterns for Snakefiles and complex workflows.


==creating a master rule==
==Creating a master rule==


If Snakemake is not provided with a rule to execute, it will execute the first rule in the file.
If Snakemake is not provided with a rule to execute, it will execute the first rule in the file.

Revision as of 02:22, 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.

flags