Snakemake子工作流程可以使用目录作为输入吗?

时间:2020-10-20 03:29:12

标签: snakemake

我有两个蛇文件A和B。 A生成的最后一个文件是一个包含一系列文件的目录,该文件将在蛇文件B中用于第一条规则。我可以先按snakefile_A然后按snakefile_B的顺序分别运行工作流,这没有问题。

我尝试使用子工作流将这两个工作流结合在一起,但是我收到FileNotFoundError消息:[Errno 2]没有这样的文件或目录:'Analysis / output /'

snakefile如下:

Snakefile_A:

rule last:
    input:
        'Analysis/out.paf'
    output:
        directory('Analysis/output/')
    shell:
        'script that splits files in the output folder'

Snakefile_B:

subworkflow otherworkflow:
    workdir:
        '.'
    snakefile:
        'Snakefile_A'  

rule a:
    input:
        otherworkflow('Analysis/output')
    output:
        'Analysis/dummy.txt'
    shell:
        'touch {input}

bc_dir='Analysis/output/'
bc_samples=[y for y in os.listdir(bc_dir) if '.fq' in y]
bc_files = [bc_filename.split('.', 1) for bc_filename in bc_samples]
bc_file_dict = {bc_filename[0]: bc_filename[1] if len(bc_filename) == 2 else '' for bc_filename in bc_files}

rule all:
    input:
        'Analysis/result.txt'

rule b:
    input:
        expand('Analysis/output/{bc_seqid}.fq', bc_seqid=bc_file_dict.keys())
    output:
        'Analysis/result.txt'
    shell:
        ' scripts {input} {output}'

根据说明:“执行时,snakemake首先尝试通过执行子工作流来创建(或更新,如有必要)test.txt(以及所有其他可能提到的依赖项。)然后执行当前工作流。”

我希望将首先创建蛇文件_A的分析/输出中的文件,然后将其用于Snakefile_B。

我做错了什么?以及如何解决?

谢谢

0 个答案:

没有答案