我是 Snakemake 的新手,我制作了一个对我的团队非常有帮助的管道。到目前为止,我已经运行了两批数据。为此,我创建了以下结构的两个单独的目录克隆,每个批次一个。
├── .gitignore
├── README.md
├── LICENSE.md
├── config.yaml
├── Snakefile
├── ANNOTATIONS/
├── DATA/
├── DATA_TYPE1/
├── DATA_TYPE2/
└── DATA_TYPE3/
└── RESULTS/
这需要维护重复的 Snakefiles 和辅助脚本(存储在
SCRIPTS/
中),如果需要调整,这会导致问题(因为我需要记住将更改传播到版本控制目录)。此外,这还需要复制存储密集型 ANNOTATIONS/
目录,这是更大的问题。
我知道必须有更好的方法来做到这一点,因为这对于大量批次或项目来说无法扩展。出于项目管理的原因,我想将这些批次分开。
我的想法是我可以将代码(Snakefile 和
SCRIPTS/
)和注释(存储在 ANNOTATIONS/
中)保存在一个目录中,同时将数据(和存储结果)保存在单独的项目目录中,但设置 workdir
在配置文件中或在命令行中调用 snakemake
时复制到此项目目录。需要注意的是,对 ANNOTATIONS
或配置文件中的 Snakefile
文件夹的任何引用都需要是 Snakemake 工作流程目录的完整路径,而不是工作目录的相对路径。这带来了新的挑战,如果不修复调用的完整路径,则永远无法移动此工作流程。
我在https://snakemake.readthedocs.io/en/latest/snakefiles/deployment.html中寻找指导,但它似乎没有涵盖我正在寻找的建议。
其他人如何处理使他们的 Snakemake 工作流程和必要的辅助数据成为一个单独的可维护目录,与他们的输入和输出数据不同?我认为我最初的想法会起作用(设置
workdir
,同时设置ANNOTATIONS/
数据的完整路径),尽管它仍然感觉有点混乱。
我使用
--directory/-d
CLI 选项。我通常像这样设置我的目录:
.
├── my-snakemake-workflow/
│ ├── .git
│ ├── config/
│ │ └── config.yaml
│ └── workflow/
│ ├── envs
│ ├── rules
│ ├── scripts
│ └── Snakefile
└── my-project/
├── my-data/
│ ├── reads
│ └── genome
└── config/
├── config.yaml
└── samples.csv
然后要运行工作流程,我的命令行将如下所示:
snakemake -s my-snakemake-workflow/workflow/Snakefile -d my-project/ <other options...>
这使数据和结果脱离工作流程 git 存储库,并使事情更有条理。