Snakemake触摸命令

时间:2017-09-06 10:13:13

标签: snakemake

我使用snakemake,我试图在对齐上编写工作流程并创建bigwig。 我想在一个文件上使用星形对齐后引入一个创建用于给我一个方法来运行假发生成只有在所有样本对齐后。

我有这个错误:

  snakemake --core 3 --configfile config_tardis.yml  -np
RuleException in line 40 of /home/centos/rna_test/rules/star2.rules:
Could not resolve wildcards in rule star_map:
sample

我尝试使用此代码:

rule star_map:
    input:
        dt="trim/{sample}/",
        forward_paired="trim/{sample}/{sample}_forward_paired.fq.gz",
        reverse_paired="trim/{sample}/{sample}_reverse_paired.fq.gz",
        forward_unpaired="trim/{sample}/{sample}_forward_unpaired.fq.gz",
        reverse_unpaired="trim/{sample}/{sample}_reverse_unpaired.fq.gz",
        t1p="database.done",
    output:
        out1="ALIGN/{sample}/Aligned.sortedByCoord.out.bam",
        out2=touch("Star.align.done")
    params:
        genomedir = config['references']['basepath'],
        sample=config["samples"],
        platform_unit=config['platform'],
        cente=config['center']
    threads: 12
    log: "ALIGN/log/{params.sample}_star.log"
    shell:
        'STAR --runMode alignReads  --genomeDir {params.genomedir} '
        r' --outSAMattrRGline  ID:{params.sample} SM:{params.sample} PL:{config[platform]}  PU:{params.platform_unit} CN:{params.cente} '
        '--readFilesIn   {input.forward_paired} {input.reverse_paired} {input.forward_unpaired} {input.reverse_unpaired} \
       --readFilesCommand zcat \
       --outStd Log \
       --outSAMunmapped Within \
       --outSAMtype BAM SortedByCoordinate \
       --runThreadN  {threads} --outFileNamePrefix  {output.out1};{output.out2}  2> {log} '




rule star_wigg_file:
    input:
        f1= "ALIGN/{sample}/Aligned.sortedByCoord.out.bam",
        t1p="Star.align.done",
    output:
        "ALIGN/{sample}/wiggle/"
    threads: 12

    shell:
       'STAR --runMode inputAlignmentsFromBAM -inputBAMfile {input.f1} --outWigType wiggle \
  --outWigStrand Stranded '

因此,问题似乎与引入触摸有关

1 个答案:

答案 0 :(得分:1)

您没有为Snakemake提供任何确定{sample}值的机制。在Snakemake最远的输出中,是一个显式字符串。 Snakemake需要使用此字符串进行比较,并尝试匹配每个规则输出的模式。

我喜欢将{sample}定义为扩展,作为规则all as per the author's suggestion的输入。

  • 它允许保留核心代码库(I.E.在您反复运行的代码中不经常编辑任何内容,或者试图保留审计和可重复性)。
  • 它还提供了比较规则之间的模板;如果它们都包含单词“{sample}”,那么跨规则比较输入和输出将更容易,它们应该是相同的。这使得其他人更容易注意到你的两条规则在没有运行代码的情况下被链接。

将这样的内容添加到当前文件的顶部,并在config_tardis.yml中定义样本列表“sampleLIST”:

在Snakefile中作为最重要的规则:

rule all:
    input:
        expand("ALIGN/{sample}/wiggle", sample=config["sampleLIST"])

在配置文件config_tardis.yml中添加:

sampleLIST: ['Patient1','Patient2','Patient3']

旁注,根据评论。我也有兴趣解决触摸的使用问题。意图是管道设计应该依赖于Snakemake对实际输出文件的依赖性确定。文件“Star.align.done”看起来像是一个代理文件,如果是这样,没有它可能会有另一种方式。