TomHarrop / basecall-assembly-compare

0 stars 0 forks source link

Same rule for multiple containers #1

Open TomHarrop opened 2 years ago

TomHarrop commented 2 years ago

This works but

for guppy in guppy_versions:
    print(guppy)
    my_out = f'output/010_basecall/{guppy}/sequencing_summary.txt'
    my_outdir = f'output/010_basecall/{guppy}'
    my_log = f'output/logs/full_basecall.{guppy}.log'
    rule:
        input:
            'data/reads/BB31_drone'
        output:
            my_out
        params:
            outdir = my_outdir,
            flowcell = "FLO-MIN106",
            kit = "SQK-LSK109"
        log:
            my_log
        container:
            guppy_versions[guppy]
        shell:
            'guppy_basecaller '
            '--device auto '        # enable GPU
            '--input_path {input} '
            '--save_path {params.outdir} '
            '--flowcell {params.flowcell} '
            '--kit {params.kit} '
            '--verbose_logs '
            '--recursive '
            '&> {log}'
TomHarrop commented 2 years ago
for guppy in guppy_versions:
    rule:
        input:
            'data/reads/BB31_drone'
        output:
            f'output/010_basecall/{guppy}/sequencing_summary.txt'
        params:
            outdir = f'output/010_basecall/{guppy}',
            flowcell = "FLO-MIN106",
            kit = "SQK-LSK109"
        log:
            f'output/logs/full_basecall.{guppy}.log'
        container:
            guppy_versions[guppy]
        shell:
            'guppy_basecaller '
            '--device auto '        # enable GPU
            '--input_path {input} '
            '--save_path {params.outdir} '
            '--flowcell {params.flowcell} '
            '--kit {params.kit} '
            '--verbose_logs '
            '--recursive '
            '&> {log}'
TomHarrop commented 2 years ago

Hack to set rule names from snakemake issue

This is only for printing the DAG...

def fix_name(new_name):
    """ sets the name of the most recently created rule to be new_name
    """
    list(workflow.rules)[-1].name = new_name
    temp_rules = list(rules.__dict__.items())
    temp_rules[-1] = (new_name, temp_rules[-1][1]) 
    rules.__dict__ = dict(temp_rules)

for guppy in guppy_versions:
    rule:
        input:
            'data/reads/BB31_drone'
        output:
            f'output/010_basecall/{guppy}/sequencing_summary.txt'
        params:
            outdir = f'output/010_basecall/{guppy}',
            flowcell = "FLO-MIN106",
            kit = "SQK-LSK109"
        log:
            f'output/logs/full_basecall.{guppy}.log'
        container:
            guppy_versions[guppy]
        shell:
            'guppy_basecaller '
            '--device auto '        # enable GPU
            '--input_path {input} '
            '--save_path {params.outdir} '
            '--flowcell {params.flowcell} '
            '--kit {params.kit} '
            '--verbose_logs '
            '--recursive '
            '&> {log}'

    fix_name(guppy)