snakemake:通配符在输入函数中发生变化
snakemake: wildcards are changing in input function
我对以下规则有疑问,通配符似乎在中途发生了变化。
> maker_flow={'boot1':'init', 'boot2':'boot1', 'final':'boot2'} #this defines the bootstraping workflow {now:last}
> rule maker:
> input: snap= 'another_file_string_with_same_'.format(), gff=lambda wc: 'maker/{lrun}/{name}_{lrun}.maker.output/{name}_{lrun}.all.gff'.format(lrun=maker_flow[wc.run], name=config['proj']['name'])
> output: master='another_file_string_with_same'.format(), gff='maker/{{run}}/{name}_{{run}.maker.output/{name}_{{run}}.all.gff'.format(name=config['proj']['name'])
当我注释掉 gff
输入时,代码将 运行。否则我得到:
rule maker:
input: maker/init/snap/hmm/test_10l_init.snap_hmm, maker/init/test_10l_init.maker.output/test_10l_init.all.gff
output: maker/boot1/test_10l_boot1.maker.output/test_10l_boot1_master_datastore_index.log, maker/boot1/test_10l_boot1.maker.output/test_10l_boot1.all.gff
log: /gpfs/projects/bgmp/shared/lizards/test_data/sandbox/snake/logs/test_10l_boot1_maker.log
jobid: 4
wildcards: run=boot1
InputFunctionException in line 95 of /gpfs/projects/bgmp/shared/lizards/test_data/sandbox/snake/Snakefile:
KeyError: 'init'
Wildcards:
run=init
这没有多大意义,因为 gff 文件的输入似乎已成功解析。而且通配符好像变了。
还有一条规则创建了 'init' 个文件
rule maker_init:
output:
'maker/{run}/{name}_{run}.maker.output/{name}_{run}_master_datastore_index.log'.format(name=config['proj']['name'], run='init'), gff=protected('maker/init/{name}_{run}.maker.output/{name}_init.all.gff'.format(name=config['proj']['name'], run='init'))
在评估 运行=boot1 的规则时,snakemake 发现它需要文件 "maker/init/test_10l_init.maker.output/test_10l_init.all.gff"。这个文件应该已经存在了吗?如果是这样,似乎 snakemake 没有看到它,因为它看到它可以使用 maker 规则模式来创建这个文件(所以现在它正在使用 运行=init 评估规则,因此通配符更改)但是当它试图在 maker_flow 中查找键 'init' 时,它会得到一个 KeyError。
我对以下规则有疑问,通配符似乎在中途发生了变化。
> maker_flow={'boot1':'init', 'boot2':'boot1', 'final':'boot2'} #this defines the bootstraping workflow {now:last}
> rule maker:
> input: snap= 'another_file_string_with_same_'.format(), gff=lambda wc: 'maker/{lrun}/{name}_{lrun}.maker.output/{name}_{lrun}.all.gff'.format(lrun=maker_flow[wc.run], name=config['proj']['name'])
> output: master='another_file_string_with_same'.format(), gff='maker/{{run}}/{name}_{{run}.maker.output/{name}_{{run}}.all.gff'.format(name=config['proj']['name'])
当我注释掉 gff
输入时,代码将 运行。否则我得到:
rule maker:
input: maker/init/snap/hmm/test_10l_init.snap_hmm, maker/init/test_10l_init.maker.output/test_10l_init.all.gff
output: maker/boot1/test_10l_boot1.maker.output/test_10l_boot1_master_datastore_index.log, maker/boot1/test_10l_boot1.maker.output/test_10l_boot1.all.gff
log: /gpfs/projects/bgmp/shared/lizards/test_data/sandbox/snake/logs/test_10l_boot1_maker.log
jobid: 4
wildcards: run=boot1
InputFunctionException in line 95 of /gpfs/projects/bgmp/shared/lizards/test_data/sandbox/snake/Snakefile:
KeyError: 'init'
Wildcards:
run=init
这没有多大意义,因为 gff 文件的输入似乎已成功解析。而且通配符好像变了。
还有一条规则创建了 'init' 个文件
rule maker_init:
output:
'maker/{run}/{name}_{run}.maker.output/{name}_{run}_master_datastore_index.log'.format(name=config['proj']['name'], run='init'), gff=protected('maker/init/{name}_{run}.maker.output/{name}_init.all.gff'.format(name=config['proj']['name'], run='init'))
在评估 运行=boot1 的规则时,snakemake 发现它需要文件 "maker/init/test_10l_init.maker.output/test_10l_init.all.gff"。这个文件应该已经存在了吗?如果是这样,似乎 snakemake 没有看到它,因为它看到它可以使用 maker 规则模式来创建这个文件(所以现在它正在使用 运行=init 评估规则,因此通配符更改)但是当它试图在 maker_flow 中查找键 'init' 时,它会得到一个 KeyError。