问题标签 [snakemake]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 如何在 Snakemake 中进行部分扩展?
我正在尝试首先为 LETTERS x NUMS 组合生成 4 个文件,然后对 NUMS 进行汇总以获得 LETTERS 中的每个元素一个文件:
执行此蛇文件会导致以下错误:
似乎部分expand
是不可能的。它是一个限制expand
吗?如果是这样,我应该如何规避它?
python - 当两个不同的规则路径可以生成给定的输出时,snakemake 可以避免歧义吗?
初始工作流程
我有一个可以从配对端数据生成一些输出的蛇文件。
在这个蛇文件中,我有一个规则,即“安装”给定存储在配置文件 ( get_raw_data
) 中的信息的数据。
然后我有一个规则,它使用该数据生成工作流的其余部分所依赖的中间文件(run_tophat
)。
以下是这些规则的输入和输出(OPJ
代表os.path.join
):
(稍后将详细介绍此规则的实施)
而且(简化)我的主要规则是这样的:
将工作流程扩展到单端数据
我现在必须在单端数据上运行我的工作流程。
我想避免最终输出具有不同的名称模式,具体取决于数据是单端还是成对端。
我可以轻松地对上述两条规则进行变体,这些规则应该适用于单端数据(get_raw_data_single_end
和run_tophat_single_end
),其输入和输出如下:
如何为snakemake 提供足够的信息来选择正确的规则路径?
配置文件包含有关lib
通配符是否以以下方式与单端或双端数据相关联的信息: 库名称是 alib2raw
或lib2raw_single_end
字典中的键(两个字典都从配置文件中读取)。
我不希望相同的库名称成为两个字典中的键。因此,从某种意义上说,我希望工作流的单端或双端分支被执行,这并不模棱两可。
两者都使用一个函数lib2data
(使用这些字典)来确定运行什么 shell 命令来“安装”数据。get_raw_data
get_raw_data_single_end
这是此函数的简化版本(实际包含一个额外的分支,用于从 SRR 标识符生成数据命令):
除了它们的输出之外,这两个get_raw_data*
规则是相同的,并且工作方式如下:
给定未在规则输入和输出中编码但仅在配置文件和函数中编码的信息,snakemake 是否能够确定正确的规则路径?
似乎并非如此。事实上,我正在尝试测试我的新蛇文件(添加*_single_end
规则),但是 a.KeyError
发生在规则执行期间get_raw_data
,而正在执行规则的库与单端数据相关联
如何实现所需的行为(能够使用配置中的信息选择正确分支的两个分支工作流)?
编辑:这KeyError
是由于错误lib2data
使用正确的字典获取与库名称关联的数据后,我最终遇到以下错误:
编辑 2:向get_raw_data*
规则添加输入
在阅读了蛇形邮件列表上的这篇文章后,我尝试在我的规则中添加一些输入以避免歧义。
这导致一个(无法重现这个,现在这导致:)MissingInputException
. 奇怪的是,据报道丢失的文件确实存在。这个技巧应该起作用吗?
我为“数据安装”规则指定输入的方式显然不足以将 snakemake 引导到正确的规则。
snakemake - 使用“snakemake --config”将标志传递给命令
我已经阅读了 Snakemake 教程,我很清楚如何使用“snakemake --config ...”来修改参数,并将这些参数传递给正在执行的命令。我可以使用“--config”将标志传递给命令吗?例如,我可以编写一个 Snakefile 来执行这些命令中的任何一个,基于使用“--config”吗?
makefile - Snakemake:命名规则而不是目标文件
这是蛇制作教程高级部分的一个简短示例:
现在假设我在几个月前编写了这条规则,但我不记得输出文件名了。我的理解是我不能通过调用规则名称来运行snakemake,因为这会导致错误:
首先,我不明白为什么snakemake 不能使用lambda 函数从配置文件中推断输入文件,因为很明显我指的是“示例”部分。
其次,是否有解决方法?因为使用旧的 Makefile 非常容易,只需使用旧的 Makefile 并通过键入类似的内容运行相同的 bwa_map 规则
在此先感谢您的帮助。拜诺伊斯特
python - 访问由 snakemake 规则创建的日志文件
有没有办法以编程方式列出 Snakefile 中每个规则创建的日志文件?我是否必须接入 DAG,如果是,如何接入?
背景:我想捆绑并删除所有创建的日志文件(只有集群日志位于单独的文件夹中;一些输出文件相应地称为日志文件)。为此,我想明确并排除可能由运行程序创建的并且恰好匹配日志全局的日志文件。
是否有其他选择,例如解析 shellcmd_tracking 文件会更容易吗?
谢谢, 安德烈亚斯
snakemake - 如何将配置文件中的字符串传递到输出部分?
snakemake 的新手,我一直在尝试将基于 shell 脚本的管道转换为基于 snakemake 的管道,但遇到了很多语法问题。我认为我遇到的大部分问题是获取特定目录中的所有文件并推断从输入名称输出名称,因为这就是我使用 shell 脚本(for 循环)的方式,特别是,我尝试在输出部分使用 expand 函数,它总是给我一个错误。
在检查了一些示例 Snakefile 之后,我意识到人们从不在输出部分使用 expand。所以我的第一个问题是:输出是唯一不能使用扩展的部分,如果是,为什么?如果我想将 config.yaml 文件中定义的前缀作为输出文件的一部分传递并且无法从输入文件名中推断出该前缀怎么办,我该如何实现呢,就像我在下面为日志部分所做的那样 { runid} 是我的前缀?
关于语法的第二个问题:我试图将配置文件(config.yaml)中的用户定义的 id 传递到日志部分,在我看来,这里我必须使用以下形式的扩展,有没有更好的传递方式config.yaml 文件中定义的字符串?
在 config.yaml 中的位置
第三个问题:我最初尝试了以下两种方法,但它们给了我错误,这是否意味着在日志(可能是输入和输出)部分内部,没有遵循 Python 语法?
snakemake - snakemake:如何处理来自规则的可变数量的输出
我想运行 bcl2fastq 从 bcl 格式生成 fastq 文件。
根据与测序模式相关的测序设置以及使用了多少索引,它可以生成 read1、read2、index1 或 read1、read2、index1、index2 等。
我要做的是,将读取的输出编号信息放在 config.yaml 文件中,如下所示:
并让规则自动计算出它应该生成多少读取输出(fastq.gz 文件)。
我如何编写输出部分来实现它?
下面是我所拥有的,它每次只能从这个规则中输出一个文件。所以它实际上运行了这个规则 4 次,每个用于 I1、I2、R1 和 R2,这不是我想要的。如何在第 45 行修复它?在第 45 行,{readid}
应该是I1,I2,R1,R2
.
python - Bioconda:由于无法从 conda_build 导入 api,因此模拟 travis.py 失败
我正在努力让 Bioconda 的模拟 travis.py 为一个新包工作,而我的 Google Fu 让我失望了:
bioconda-utils 本身也因同样的原因而失败。
conda_build 版本是:
bioconda-utils 版本是 0.9.0(通过 pip 安装)。
这是一个简单的版本不匹配吗?
谢谢, 安德烈亚斯
PS:由于缺少积分,无法创建 bioconda 标签
python - 防止snakemake制作输出目录
有没有办法防止snakemake为尚不存在的输出创建目录?
fimo
如果目录已经存在,则 MEME 套件在运行结束时会令人讨厌地失败。
我的解决方法是为fimo
输出提供与我指定的目录不同的目录,output
但想知道是否有更直接/优雅的解决方案。
给出的例子:
提前致谢!