Workflow 使用通配符的Snakemake古标记
我从NCBI网站下载了一些SRA文件。现在我想将它们添加到我的Workflow 使用通配符的Snakemake古标记,workflow,snakemake,Workflow,Snakemake,我从NCBI网站下载了一些SRA文件。现在我想将它们添加到我的snakemake工作流中。但是,如果它们不可用,我希望保留使用预回迁下载它们的功能。我有一个简单的规则 BASE = "/path/to/working/folder" rule all: input: [f"{BASE}/fastq/SRR000001.sra_1.fastq", f"{BASE}/fastq/SRR000001.sra_2.fastq"]
snakemake
工作流中。但是,如果它们不可用,我希望保留使用预回迁
下载它们的功能。我有一个简单的规则
BASE = "/path/to/working/folder"
rule all:
input: [f"{BASE}/fastq/SRR000001.sra_1.fastq", f"{BASE}/fastq/SRR000001.sra_2.fastq"]
shell:
"echo Finished"
rule get_sra:
input: ancient("config/config.yaml")
output:"{BASE_FOLDER}/sra/{SSR_ID}.sra"
shell:
"prefetch -p {wildcards.SSR_ID} --output-file {output} "
rule get_fastq:
input: expand("{folder}/sra/{srr}.sra", folder=BASE, srr="{SRR_ID}")
output:
expand("{folder}/fastq/{srr}.sra_{i}.fastq", folder=BASE,
srr="{SRR_ID}", i=[1, 2])
shell:
"fasterq-dump {input} --outdir {BASE}/fastq"
如果我使用上述规则,我的工作流将重新创建我的SRA文件,因为它们的时间戳将更旧。但是,我不想再次从服务器下载完整的SRA文件并使用已下载的文件
为此,我尝试使用标签。但我无法将此标记与任何通配符一起使用
input: ancient("{BASE_FOLDER}/sra/{SSR_ID}.sra")
上述规则给出了如下错误:
无法根据输出文件确定输入文件中的通配符:
这个问题有什么解决办法吗?当我使用
expand
时,这也不起作用。问题是,在大括号中指定的并非所有内容实际上都是通配符。您可能有3个不同的用例,其中可以使用花括号:
函数展开
- f字串
- 通配符
规则虚拟:
输入:“{wildcard}.input”
输出:展开(“{wildcard}.output”,通配符=[“1”,“2”])
结果很简单:
规则虚拟:
输入:“{wildcard}.input”
输出:[“1.输出”,“2.输出”]
如您所见,输出部分中根本没有通配符,因此输入无法确定其通配符的值
典型的解决方案是将此规则分为两个规则:
规则所有:
输入:展开(“{wildcard}.output”,通配符=[“1”,“2”])
规则做一些工作:
输入:“{wildcard}.input”
输出:“{wildcard}.output”
但是请注意,我在
规则all:
中调用的{wildcard}
本身并不是一个通配符,而是在展开
函数的本地上下文中任意选择的名称。请提供导致此错误的代码。@DmitryKuzminov,我已经添加了完整的工作代码。在这种情况下,代码可以工作,但如果给定文件夹中已经存在SRA文件,我只想运行ruleget\u fastq
。这里的古老(“config/config.yaml”)
只是虚拟输入。我明白了。现在回到我原来的问题,我可以在做一些工作
的输入中使用古代
标记吗?@Dexter,你可以在任何输入
部分使用古代
。