如何编写Snakemake规则all,其中expand语句可以处理所有特定输入文件的缺失



我想写一个Snakemake Pipeline来处理短或长读取顺序文件,或者同时处理这两种类型,这取决于输入文件中提供的文件类型。首先,我的Snakefile调用了一个shell脚本,该脚本创建了一个配置文件,其中包含输入目录中标题为short_reads的所有短读文件和标题为long_read的所有长读文件的名称。这是我的全部规则:

rule all:
input:
expand("../qc/id/{sample}/fastqc_raw/{sample}_R1_fastqc.html", sample=config["samples_short"]),
expand("../qc/id/{sample}/nanoplot_raw/NanoPlot-report.html", sample=config["samples_long"])
...

但是,如果没有提供其中一种文件类型(长读或短读(,Snakemake将失败,并显示KeyError。如果我以标题仍然存在但没有样本名称的方式修改配置文件,Snakemake会尝试调用值为None的输入,例如

缺少规则nanoplot_raw的输入文件:../raw_reads/None_ont.fastq.gz

如何设计规则,使其只能处理短读或长读,以及作为输入的两种序列类型?

谢谢你的帮助!

以下操作有效吗?

if config["samples_short"]:
fastqc_short = expand("../qc/id/{sample}/fastqc_raw/{sample}_R1_fastqc.html", sample=config["samples_short"])
else:
fastqc_short = []
if config["samples_long"]:
nanoplot_long = expand("../qc/id/{sample}/nanoplot_raw/NanoPlot-report.html", sample=config["samples_long"])
else:
nanoplot_long = []
rule all:
input:
fastqc_short,
nanoplot_long,
...

最新更新