Parsa
Parsa

Reputation: 3236

Snakemake wildcard in output only

I have a script which takes a large input file then breaks this down into a number of chunks from 1 to n using an unpredictable algorithm.

Then a following script will process each of these chunks iteratively.

How can I create a snakemake rule which essentially states that the output files will exist from 1 to n, and the following script should be run once for each of the 1 to n input files.

Thanks!

Upvotes: 1

Views: 1749

Answers (2)

Dr. Timofey Prodanov
Dr. Timofey Prodanov

Reputation: 123

There is dynamic keyword. It can be used like this:

rule all:
    input:
        dynamic('{id}.png')


rule draw:
    input:
        '{id}.txt'
    output:
        '{id}.png'
    shell:
        'cp {input} {output}'


rule cluster:
    input:
        'input.csv'
    output:
        dynamic('{id}.txt')
    shell:
        'touch 1.txt 2.txt'

Upvotes: 1

gminer23543
gminer23543

Reputation: 33

Have you tried setting a wildcard? For example, if you are iterating a rule over files 1 to 22, you can set a wildcard at the top of your snakemake file:

num=range(1,23)

Then use that wildcard in your snakemake file names or reference it as in {wildcard.num}

Upvotes: 0

Related Questions