如何为带有检查点通配符的所有规则进行动态输入,对于在输入和输出中使用通配符的规则

时间:2019-04-12 07:55:11

标签: snakemake

我有一个规则,该规则基于上一个使用通配符的作业的结果在多个文件上运行trimGalore。因此,输出也必须具有通配符,这会在尝试使用此规则的输出全部调用规则时引起问题,因为它无法从输出确定输入文件中的通配符。

我正在尝试使用检查点解决问题并拉出通配符,但出现一条错误消息,指出通配符不具有文件名FileName。

基本上,我需要能够将由parse_sampleFile规则创建的文件接收到newTrimGalore规则中,在每个文件上运行trimGalore,并让all规则将输出作为其输入(最终将添加更多步骤,以便它们接受newTrimGalore的输出作为输入)。

我可以使用检查点吗?或者有没有办法让我的newTrimGalore规则的输出成为没有{fileName}通配符的目录?

checkpoint newTrimGalore:
    input:
        projectDir+"/trimFiles/{fileName}.txt"
    output:
        projectDir+"/trimmed_reads/{fileName}_trimming_report.txt"
    run:
        with open({input}, 'rU') as f:
            for line in f:
                split=line.split(",")
            R1 = split[0]
                R2 = split[1]
                if R2 is not None:
                    shell(" /home/apps/TrimGalore-0.5.0/trim_galore {params.p} --paired --gzip -o {projectDir}/trimmed_reads "+R1+" "+R2)
                else:
                shell("/home/apps/TrimGalore-0.5.0/trim_galore {params.p} --gzip -o {projectDir}/trimmed_reads "+R1)


def get_input(wildcards):
    list = checkpoints.newTrimGalore.get(fileName=wildcards.fileName).output
    return expand(projectDir+"/trimmed_reads/{fileName}_trimming_report.txt")


rule all:
    input: get_input 

trimFiles文件夹中的{fileName} .txt文件是在上一步中创建的,因此我必须在此处使用通配符。我只是希望能够在newTrimGalore之后使用其输出作为输入来执行下一步,而不会在通配符上出现错误。

0 个答案:

没有答案