使用snakemake条件执行多重分析

2024-03-15

我在Snakemake上遇到了一些麻烦,到目前为止我还没有找到相关信息 在文档中(或其他地方)。 事实上,我有一个包含不同样本(多重分析)的大文件,我想根据规则后找到的结果停止某些样本的管道执行。

我已经尝试从规则定义中更改此值(使用检查点或 def),为以下规则进行条件输入,并将通配符视为删除一项的简单列表。 下面是我想要做的一个例子(条件 if 在这里只是指示性的):

# Import the config file(s)
configfile: "../PATH/configfile.yaml"

# Wildcards
sample = config["SAMPLE"]
lauch = config["LAUCH"]

# Rules

rule all:
    input:
        expand("PATH_TO_OUTPUT/{lauch}.{sample}.output", lauch=lauch, sample=sample)


rule one:
    input:
        "PATH_TO_INPUT/{lauch}.{sample}.input"
    output:
        temp("PATH_TO_OUTPUT/{lauch}.{sample}.output.tmp")
    shell:
        """
        somescript.sh {input} {output}
        """

rule two:
    input:
        "PATH_TO_OUTPUT/{lauch}.{sample}.output.tmp"
    output:
        "PATH_TO_OUTPUT/{lauch}.{sample}.output"
    shell:
        """
        somecheckpoint.sh {input}       # Print a message and write in the log file for now

        if [ file_dont_pass_checkpoint ]; then
            # Delete the correspondant sample to the wildcard {sample}
            # to continu the analysis only with samples who are pass the validation
        fi


        somescript2.sh {input} {output}
        """

如果有人有想法,我很感兴趣。 预先感谢您的答复。


如果我理解正确的话,我认为这是一个有趣的情况。如果样本通过了一些检查,则继续分析它。否则,就早点停下来。

在管道的末端,每个样本必须有一个PATH_TO_OUTPUT/{lauch}.{sample}.output既然这是什么规则all无论检查结果如何都要求。

您可以让执行检查的规则写入一个包含标志的文件,该标志指示该样本的检查是否通过(例如标志“通过”或“失败”)。然后根据该标志,执行分析的规则要么进行完整分析(如果通过),要么如果标志为失败则写入空文件(或其他任何内容)。要点如下:

rule all:
    input:
        expand('{sample}.output', sample= samples),

rule checker:
    input:
        '{sample}.input',
    output:
        '{sample}.check',
    shell:
        r"""
        if [ some_check_is_ok ]
        then
            echo "PASS" > {output}
        else
            echo "FAIL" > {output}
        fi
        """

rule do_analysis:
    input:
        chk= '{sample}.check',
        smp= '{sample}.input',
    output:
        '{sample}.output',
    shell:
        r"""
        if [ {input.chk} contains "PASS"]:
            do_long_analysis.sh {input.smp} > {output}
        else:
            > {output} # Do nothing: empty file
        """

如果您根本不想看到失败的空输出文件,您可以使用成功 https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#onstart-onsuccess-and-onerror-handlers在管道末尾删除它们的指令:

onsuccess:
    for x in expand('{sample}.output', sample= samples):
        if os.path.getsize(x) == 0:
            print('Removing failed sample %s' % x)
            os.remove(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用snakemake条件执行多重分析 的相关文章

  • Snakemake 将文件夹定义为输出

    我尝试使用snakemake运行prokka并统治一切 在后者中 我定义了 prokka 将生成的所有输出文件夹以写入结果 Prokka 需要提供一个文件夹作为输出而不是文件 我所拥有的简化版本在这里 PATIENTID ls range
  • Snakemake:使用run指令时如何实现log指令?

    Snakemake 允许为每个规则创建日志log参数指定日志文件的名称 通过管道传输结果相对简单shell输出到此日志 但我无法找出记录输出的方法run输出 即 python 脚本 一种解决方法是将 python 代码保存在脚本中 然后从
  • 当集群(slurm)取消作业时 Snakemake 挂起

    也许答案对很多人来说都是显而易见的 但我很惊讶我找不到关于这个主题的问题 这对我来说是一个主要问题 我将不胜感激的提示 当在 slurm 管理的集群上提交作业时 如果队列管理器取消该作业 例如 由于资源或时间不足 snakemake 似乎不
  • 在snakemake规则的日志部分中定义的文件与在输出部分中定义的文件有很大不同吗?

    我认为的文档log蛇形规则的一部分 必须 手动 将内容发送到日志文件 在我看来 使用中定义的文件可以获得相同的结果output部分 这两种可能的方法之间的重要区别是什么 其真正的用处是什么log部分 对我来说 日志的最佳实践是 Snakem
  • Snakemake 无法处理很长的命令行?

    这是一个很奇怪的问题 当我的 input 中指定的rule部分是 input 有超过 500 个文件 snakemake 刚刚退出并显示消息 one of the commands exited with non zero exit cod
  • 在 Snakemake HTML 报告中包含参数和源代码

    我想在我的html报告中包含shell命令以及snakemake规则的外部脚本的源代码 我看到人们在RULE序列的表中包含这些 下面的示例是文档中基本示例的一部分 https snakemake readthedocs io en stab
  • Snakemake - 下载数据的规则

    我在实现管道时遇到一些麻烦 其中第一步是从某个服务器下载数据 据我了解 所有规则都必须有文件输入 然而 在我的例子中 输入 是提供给访问服务器并下载数据的脚本的 ID 字符串 我知道远程文件Snakemake 中的选项 但我正在下载的服务器
  • awk 命令在 Snakemake --use-singularity 中失败

    我正在尝试将 Snakemake 与 Singularity 结合起来 我注意到一个简单的awk使用奇点时命令不再起作用 这 1最后一行被 bash 替换 而不是被用作第一个字段awk 这是一个最小的工作示例 蛇形锉刀 singularit
  • 在参数中使用通配符

    在snakemake中使用config yaml文件定义参数时是否可以使用通配符 我使用通用 R 脚本来制作相同的基本热图 但使用不同的输入矩阵 我想使用通配符为 config yaml 文件中的每个热图指定热图的配置 例如 K 均值聚类的
  • Snakemake:如何有效地使用配置文件

    我正在使用以下配置文件格式蛇形对于一些测序分析实践 我有大量样本 每个样本包含 2 个 fastq 文件 samples Sample1 XY fastq files SRR4356728 1 fastq gz fastq files SR
  • 如何收集与输入函数匹配通配符的Snakemake输入文件?

    我有一组使用 BWA MEM 生成并使用 GATK IndelRealigner 等进一步处理的 BAM 文件 我正在以较小的块对 BAM 文件进行预处理 以加快处理速度 然而 我必须在变体调用之前将这些单独的文件合并到一个 BAM 文件中
  • 如何快速识别 Snakemake 中的规则是否需要输入函数

    我正在关注其文档页面上的 Snakemake 教程 并且确实陷入了输入函数的概念https snakemake readthedocs io en stable tutorial advanced html step 3 input fun
  • 引用另一个 Snakemake 规则的输入或输出文件

    如何以编程方式引用另一个 Snakemake 规则的属性 我需要更换什么
  • 默认内存请求是否可以在 Snakefile 中覆盖?

    我有一个包含多个规则的 Snakefile 只有少数规则需要超过 1 GB 核心才能在集群上运行 这resources指令对此非常有用 但我找不到设置默认值的方法 我宁愿不用写resources mem per cpu 1024对于每条不需
  • Snakemake 输入函数异常。 AttributeError:“通配符”对象没有属性

    我有一个带有 ChIP seq 单端 fastq 文件名的列表对象allfiles path file1 fastq path file2 fastq path file3 fastq 我正在尝试设置该对象 allfiles 作为通配符 我
  • 接受略有不同的 Snakemake 规则输入(.fq 与 .fq.gz)

    我是 Snakemake 的新手 希望能够选择一对 fq文件或一对 fq gz文件并运行它们trim galore得到一对修剪过的 fq gz输出文件 在不提供所有 Snakefile 的情况下 我得到了下面丑陋的解决方案 我只是复制了规则
  • 最后执行一定的规则

    我目前正在编写一个 Snakefile 它进行了大量的对齐后质量控制 CollectInsertSizeMetics CollectAlignmentSummaryMetrics CollectGcBiasMetrics 在 Snakefi
  • 在snakemake规则中使用pyenv

    我正在使用 Snakemake 来实现一个漫长而复杂的管道 其中涉及一些外部编写的 python2 脚本 当我尝试使用 pyenv 指定 python2 时 pyenv shell命令失败 同时pyenv global and pyenv
  • Snakemake根据字典输入和输出

    我正在尝试重命名 Snakemake 管道中的一些文件 假设我有三个文件 FileA txt FileB txt FileC txt 我希望根据字典重新命名它们dict A 0 B 1 C 2 to get RenamedFile0 txt
  • Snakemake如何在上游规则失败时执行下游规则

    抱歉 标题不好 我不知道如何最好地用几句话解释我的问题 当其中一条规则失败时 我在处理 Snakemake 中的下游规则时遇到困难 在下面的示例中 黑桃规则在某些样本上失败 这是预料之中的 因为我的一些输入文件会有问题 黑桃将返回错误 并且

随机推荐