标签: snakemake

是否可以在snakemake dry run中打印命令而不是规则?

试运行是工作流语言的一个非常重要的功能。我所看到的主要是运行命令时将执行的内容,这正是运行时看到的内容make -n

然而类比功能snakemake -n打印出类似的东西

Building DAG of jobs...

rule produce_output:
    output: my_output
    jobid: 0
    wildcards: var=something

Job counts:
    count   jobs
    1   produce_output
    1
Run Code Online (Sandbox Code Playgroud)

日志包含除执行的命令之外的所有内容。有没有办法从snakemake获取命令?

snakemake

5
推荐指数
1
解决办法
4534
查看次数

如何访问 `shell` 部分中的 Snakemake 配置变量?

在snakemake中,我想从指令config中访问键shell:。我可以使用{input.foo}{output.bar}、 和{params.baz},但{config.quux}不受支持。有办法实现这一点吗?

rule do_something:
    input: "source.txt"
    output: "target.txt"
    params:
        # access config[] here. parameter tracking is a side effect
        tmpdir = config['tmpdir']
    shell:
        # using {config.tmpdir} or {config['tmpdir']} here breaks the build
        "./scripts/do.sh --tmpdir {params.tmpdir} {input} > {output}; "
Run Code Online (Sandbox Code Playgroud)

我可以将我想要的配置部分分配给 下的一个键params,然后使用{param.x}替换,但这会产生不需要的副作用(例如参数保存在 Snakemake 元数据中(即.snakemake/params_tracking)。使用run:而不是shell:另一种解决方法,但是{config.tmpdir}直接从块访问shell将是最理想的。

snakemake

5
推荐指数
1
解决办法
3446
查看次数

Snakemake - 无法从输出文件中确定输入文件中的通配符

我对snakemake很陌生,而且对python也不太熟悉(所以抱歉,这可能是一个非常基本的愚蠢问题):

我目前正在构建一个管道来使用atlas分析一组 bamfiles 。这些 bam 文件位于不同的文件夹中,不应移动到公共文件夹中。因此,我决定提供一个如下所示的示例列表(这只是一个示例,实际上示例可能位于完全不同的驱动器上):

Sample     Path
Sample1    /some/path/to/my/sample/
Sample2    /some/different/path/
Run Code Online (Sandbox Code Playgroud)

并将其加载到我的 config.yaml 中:

sample_file: /path/to/samplelist/samplslist.txt
Run Code Online (Sandbox Code Playgroud)

现在到我的 Snakefile:

import pandas as pd

#define configfile with paths etc.
configfile: "config.yaml"

#read-in dataframe and define Sample and Path
SAMPLES = pd.read_table(config["sample_file"])
BAMFILE = SAMPLES["Sample"]
PATH = SAMPLES["Path"]

rule all:
    input:
        expand("{path}{sample}.summary.txt", zip, path=PATH, sample=BAMFILE)

#this works like a charm as long as I give the zip-function in the rules 'all' and 'summary':

rule indexBam:
    input: 
        "{path}{sample}.bam"
    output:
        "{path}{sample}.bam.bai"
    shell:
        "samtools …
Run Code Online (Sandbox Code Playgroud)

python pipeline python-3.x snakemake

5
推荐指数
1
解决办法
9684
查看次数

Snakemake 将文件夹定义为输出

我尝试使用snakemake运行prokka并统治一切。在后者中,我定义了 prokka 将生成的所有输出文件夹以写入结果。Prokka 需要提供一个文件夹作为输出而不是文件。

我所拥有的简化版本在这里:

PATIENTID_ls = range(2)
rule all:
input:
    expand("results_{subjectID}_outputfolder",subjectID=PATIENTID_ls), 

rule prokka:
    input:
        "contigs/subject_{subjectID}/contigs.fasta",
    output:
        "results/subject_{subjectID}_outputfolder",
    shell:
        "prokka --cpus 1 --proteins ../GCF_000009645.1_ASM964v1_genomic.gbff --outdir {output} --prefix contigs500_anno9ref {input} "
Run Code Online (Sandbox Code Playgroud)

运行时:

$snakemake -p
Building DAG of jobs...
MissingInputException in line 2 of Snakefile:
Missing input files for rule all:
results_1_outputfolder
results_0_outputfolder
Run Code Online (Sandbox Code Playgroud)

然而,当明确指定输出时它会起作用:

snakemake -p results/subject_1_outputfolder
Run Code Online (Sandbox Code Playgroud)

我确信这是我这边的菜鸟错误,但经过几个小时的尝试后我无法解决这个问题。非常感谢您的帮助。谢谢

snakemake

5
推荐指数
1
解决办法
9714
查看次数

如何在 Snakemake 中将 stderr 和 stdout 重定向全局设置到日志文件中?

我正在使用 Snakemake 来构建工作流程。我希望所有规则的 stderr 和 stdout 默认情况下分别重定向到文件logs/{rule}/{wildcards}.o 和logs/{rule}/{wildcards}.e 中。我怎样才能实现这个目标?

以下代码通过添加给定规则的 shell 命令来完成我想要的操作。但是,我不想将其添加到每个规则中。我尝试使用 shell.prefix(...),它为每个规则添加命令前缀,但我找不到访问规则名称或规则通配符的方法。

SAMPLES = ['A', 'B']

rule all:
    input:
        expand('test.{sample}',sample=SAMPLES)

rule test_rule:
    output: 'test.{sample}'
    shell:
        #These three lines need to be prepended for logging.
        'mkdir -p logs/{rule}; '
        'exec 2> logs/{rule}/{wildcards}.e; '
        'exec 1> logs/{rule}/{wildcards}.o; '
        #This is the actual code for the rule
        'touch {output}; '
        'echo "test for {wildcards.sample} created";'
        ' >&2 echo "error message"'
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了logs/{rule}/{wildcards}.o/e中带有stdout和stderr的日志文件的预期结果,但我想全局设置它而不是每个规则。

snakemake

5
推荐指数
1
解决办法
778
查看次数

在snakemake中使用目录作为详细脚本的输入

如果我的问题看起来有点愚蠢,我很抱歉。

所以,我目前正在尝试在snakemake上编写一个工作流程(我的第一个,作为实习生),我必须自动化几个步骤,这些步骤全部取决于已经制作的python脚本。我的麻烦是这些脚本的输入和输出是文件夹本身(它们的内容对应于第一个目录内容链接的文件..)。

到目前为止,我做到了这一点(正如我们所期望的那样,这不起作用)

configfile: "config.yaml"

rule all:
    input:
        "{dirname}/directory_results/sub_dir2", dirname=config["dirname"]

rule script1:
    input:
        "{dirname}/reference/{files}.gbff", dirname=config["dirname"]
    output:
        "{dirname}/directory_results", dirname=config["dirname"]
    shell:
        "python script_1.py -i {dirname}/reference -o {output}"

rule script2:
    input:
        "{dirname}/directory_results/sub_dir1/{files}.gbff.gff", dirname=config["dirname"]
    output:
        "{dirname}/directory_results/sub_dir2", dirname=config["dirname"]
    shell:
        "python script_2.py -i {dirname}/directory_results/sub_dir1"
Run Code Online (Sandbox Code Playgroud)

至于 config.yaml,这是我现在使用的一个简单文件,用于放置所述“dirname”的路径

dirname:
    Sero_1: /project/work/test_snake/Sero_1
Run Code Online (Sandbox Code Playgroud)

我知道还有很多东西需要重构(我仍然不习惯 Snakemake,因为除了教程之外,这是我制作的第一个工作流程)。我还了解到问题可能在于输入不能是目录。几天以来我尝试了一些事情,我想我可能会问一些建议,因为我正在挣扎

我如何放置允许用于脚本目录的输入?

snakemake

5
推荐指数
1
解决办法
5543
查看次数

Snakemake 在 SGE 上提交带有多个通配符的作业时出现问题

我之前在LSF集群上使用过snakemake,一切都工作得很好。然而,最近我迁移到 SGE 集群,当我尝试使用多个通配符运行一项作业时,出现了一个非常奇怪的错误。

当我尝试根据此规则提交作业时

rule download_reads :
    threads : 1
    output : "data/{sp}/raw_reads/{accesion}_1.fastq.gz"
    shell : "scripts/download_reads.sh {wildcards.sp} {wildcards.accesion} data/{wildcards.sp}/raw_reads/{wildcards.accesion}"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误(snakemake_clust.sh详细信息如下)

./snakemake_clust.sh data/Ecol1/raw_reads/SRA123456_1.fastq.gz                                          
Building DAG of jobs...
Using shell: /bin/bash
Provided cluster nodes: 10
Job counts:
        count   jobs
        1       download_reads
        1

[Thu Jul 30 12:08:57 2020]
rule download_reads:
    output: data/Ecol1/raw_reads/SRA123456_1.fastq.gz
    jobid: 0
    wildcards: sp=Ecol1, accesion=SRA123456

scripts/download_reads.sh Ecol1 SRA123456 data/Ecol1/raw_reads/SRA123456
Unable to run job: ERROR! two files are specified for the same host
ERROR! two files are specified for the …
Run Code Online (Sandbox Code Playgroud)

cluster-computing sungridengine snakemake

5
推荐指数
1
解决办法
818
查看次数

在 Snakemake conda 环境中安装非 conda 依赖项的最佳方法

我希望能够在 Snakemake 创建的 R conda 环境中安装来自 GitHub 的 R 包,以及通过pippython 环境安装 python 库。此后我将在一整套规则中使用这些环境。

\n

我最初的想法是创建一个运行脚本的规则来安装指定的包。

\n

例如,我最初的运行是:snakemake -j1 --use-conda -R create_r_environment

\n

我的蛇文件

\n
rule create_r_environment:\n    conda:\n        "envs/r.yaml"\n    script:\n        "scripts/r-dependencies.R"\n\nrule create_python_environment:\n    conda:\n        "envs/python.yaml"\n    script:\n        "scripts/python-dependencies.py"    \n
Run Code Online (Sandbox Code Playgroud)\n

我的envs/r.yaml文件:

\n
channels:\n - conda-forge\ndependencies:\n - r=4.0\n
Run Code Online (Sandbox Code Playgroud)\n

我的r-dependency.R文件:

\n
remotes::install_github("ramiromagno/gwasrapidd", upgrade = "never")\n
Run Code Online (Sandbox Code Playgroud)\n

我的envs/pyton.yaml文件:

\n
channels:\n - conda-forge\ndependencies:\n - python=3.8.2\n
Run Code Online (Sandbox Code Playgroud)\n

我的python-dependency.py文件:

\n
!pip install gseapy\n
Run Code Online (Sandbox Code Playgroud)\n …

python conda snakemake

5
推荐指数
1
解决办法
1882
查看次数

“选择要执行的作业...”实际上永远运行

我有一个相当复杂的工作流程,有 750 个样本和大约 18.000 个作业,一开始 Snakemake 运行得很好,但在大约 4.000 个作业之后它突然冻结,重新启动后它会挂起“选择要执行的作业...”24 小时,之后我终止了它。不过,最初的 DAG 构建大约需要 2-3 分钟。

当我使用该--verbose选项运行 Snakemake(v5.32.0 和 v5.32.1)时,我得到大量与此类似的行:

Cbc0010I After 600 nodes, 304 on tree, -52534.791 best solution, best possible -52538.194 (7.08 seconds

我试图删除该.snakemake文件夹,希望那里会发生什么事情,但不幸的是,事实并非如此。对我来说,CBC MILP 求解器似乎在某种程度上没有收敛,并且它不断前进,并将最好最好的可能解决方案更紧密地结合在一起!?

现在我不知道如何继续并解决问题。我可能的解决方案是以某种方式改变收敛标准或求解器本身。在手册中我找到了该选项--scheduler-ilp-solver,但它显然只有一个选项,即默认选项COIN_CMD

终止(较短的)运行后,我得到了这个详细的输出

Result - User ctrl-cuser ctrl-c

Objective value:                52534.79114334
Upper bound:                    52538.202
Gap:                            -0.00
Enumerated nodes:               186926
Total iterations:               1807277
Time (CPU seconds):             1181.97
Time (Wallclock seconds):       1188.11
Run Code Online (Sandbox Code Playgroud)

接下来,我将尝试限制工作流程中的样本数量,看看这是否有任何影响(对于具有 500 个样本的其他数据集,它运行没有任何问题(使用 …

solver snakemake

5
推荐指数
1
解决办法
1063
查看次数

我可以为snakemake定义默认配置文件吗?

文档中,我知道我可以定义一个配置文件并通过以下方式使用它

snakemake --profile <name>
Run Code Online (Sandbox Code Playgroud)

我可以将这些配置文件之一设置为默认配置文件(在输入命令时使用snakemake)吗?

在 .bashrc 中定义别名是一种解决方法。然而,我想知道是否有“官方”snakemake 解决方案。

旁注:我对 Snakemake 默认配置文件的最初动机是定义默认的核心数量,这样我就不必总是键入

snakemake -j [cores]
Run Code Online (Sandbox Code Playgroud)

默认核心数为“无”(对于我使用 conda 安装的 Snakemake)。

snakemake

5
推荐指数
1
解决办法
419
查看次数