Python 访问规则中的嵌套配置变量

Python 访问规则中的嵌套配置变量,python,configuration,snakemake,Python,Configuration,Snakemake,我是Snakemake的新手,正在尝试弄清楚嵌套配置值是如何工作的。我已经创建了以下配置文件 # dummyconfig.json { "fam1": { "numchr": 1, "chrlen": 2500000, "seeds": { "genome": 8013785666, "simtrio": 1776, "simseq": {

我是Snakemake的新手,正在尝试弄清楚嵌套配置值是如何工作的。我已经创建了以下配置文件

# dummyconfig.json
{
    "fam1": {
        "numchr": 1,
        "chrlen": 2500000,
        "seeds": {
            "genome": 8013785666,
            "simtrio": 1776,
            "simseq": {
                "mother": 2053695854357871005,
                "father": 4517457392071889495,
                "proband": 2574020394472462046
            }
        },
        "ninherited": 100,
        "ndenovo": 5,
        "numreads": 375000
    }
}
…在我的蛇形档案中遵守这条规则

# Snakefile
rule simgenome:
    input:
        "human.order6.mm",
    output:
        "{family}-refr.fa.gz"
    shell:
        "nuclmm simulate --out - --order 6 --numseqs {config[wildcards.family][numchr]} --seqlen {config[wildcards.family][chrlen]} --seed {config[wildcards.family][seeds][genome]} {input} | gzip -c > {output}"
然后我想通过调用
snakemake--configfile dummyconfig.json fam1 refr.fa.gz
来创建
fam1 refr.fa.gz
。当我这样做时,我得到以下错误消息

Building DAG of jobs...

rule simgenome:
    input: human.order6.mm
    output: fam1-refr.fa.gz
    jobid: 0
    wildcards: family=fam1

RuleException in line 1 of /Users/standage/Projects/noble/Snakefile:
NameError: The name 'wildcards.family' is unknown in this context. Please make sure that you defined that variable. Also note that braces not used for variable access have to be escaped by repeating them, i.e. {{print $1}}
因此,
fam1
被正确地识别为
family
通配符的值,但是像
{config[wildcards.family][numchr]}
这样的变量访问似乎不起作用


是否可以以这种方式遍历嵌套配置,或者Snakemake是否只支持访问顶级变量?

解决此问题的一种方法是在
shell
块之外使用并解析变量

rule simgenome:
    input:
        "human.order6.mm",
    output:
        "{family}-refr.fa.gz"
    params:
        seed=lambda w: config[w.family]['seeds']['genome'],
        numseqs=lambda w: config[w.family]['numchr'],
        seqlen=lambda w: config[w.family]['chrlen']
    shell:
        "nuclmm simulate --out - --order 6 --numseqs {params.numseqs} --seqlen {params.seqlen} --seed {params.seed} {input} | gzip -c > {output}"