使用SnakeMake搭建生信流程——01简单介绍(背景、安装、执行、书写要素等内容)

使用SnakeMake搭建生信流程——01简单介绍(背景、安装、执行、书写要素等内容)

本次笔记是根据大佬孟浩巍老师的讲课内容总结,详细视频见https://www.bilibili.com/video/BV1jb411i76T?spm_id_from=333.337.search-card.all.click&vd_source=72e74f599269028a197f0bb23262c2e6
周冉老师讲解Snakemake的视频地址https://www.bilibili.com/video/av15908415?vd_source=72e74f599269028a197f0bb23262c2e6
孟浩巍老师,Name:Howard MENG Email:menghaowei1992@162.com

1 背景介绍

什么是snakemake?

  1. snakemake是一款基于Python3的软件
  2. snakemake的主要功能是帮助我们快速搭建需要重复实现的分析流程
  3. snakemake的官网https://snakemake.readthedocs.io/en/stable/
  4. snakemake的好处:支持并行运算;支持断点运行;支持流程控制;支持内存/CPU核心/运行时间控制

2 snakemake安装,基于conda

#这里采用一种新的安装软件mamba,说是可以更快的加载和下载conda安装软件的速度,你也可以直接用conda安装
conda activate base
conda install -c conda-forge mamba
conda deactivate
mamba create -n snakemake -c conda-forge -c bioconda snakemake
conda activate snakemake
snakemake --help
conda deactivate
#删除环境
conda remove --all -n snakemake

3 snakemake的执行

先说明一下为什么用.py文件后缀,因为前面也提到snakemake是一款基于python3的软件,因此里面可能会写python的语句和使用python函数,这样用.py后缀会方便理解和高亮显示。

cd /home/zhaohuiyao/Genome_survey/snakemake/
touch ./snakemake.py && vim ./snakemake.py		#编辑完成
conda activate snakemake
#先检查snakemake书写,跑一个dry-run
snakemake -s snakemake.py -n -p					#这是最简单的,将所有信息在snakemake中完善,但是也可以在config.yaml中编辑。
#参数-s:指向snakemake文件
#参数-n:指不真的执行snakemake,仅检查
#参数-p:指将每一个rule的执行操作展示出来(即你的shell内容)
#第一个块job counts:告诉你每一个rule需要执行的任务数,以及每一个rule的具体情况(认真看看)

snakemake -s snakemake.py --dag | dot -Tpdf > snakemake_dag.pdf		#dot是Linux的命令,若没有安装conda install graphviz
#生成pipeline的拓扑图

#检查通过后,再运行,减少损失
snakemake -s snakemake.py -p -c 8
#参数-c:使用的CPU核数(必须制定,否则就会报错)
#断点运行
snakemake -s snakemake.py --rerun-incomplete
#支持在集群上运行(目前常用的生信集群有qsub和sbatch两种提交,这里展示qsub,一般实验室服务器都没有,公司常用)
snakemake -s snakemake.py --cluster "qsub -V -cwd -q all.q" --jobs 5

4. snakemake的书写要素

4.1 snakemake主要就是两部分:很多个rule和一个rule all

每一个rule,又称一个规则,是一个需要执行的操作。一个经典的rule,包括三个要素:输入input,输出output,需要执行的Linux操作/命令或者一个小的python命令shell/run。
rule all,告诉snakemake,你需要输出的结果文件或目录。snakemake会为了拿到该文件或目录,执行需要的所有rule。
snakmake是倒推,你需要这个文件,那么它会在所有的rule里面找,这个文件作为output的rule,然后查看该rule的input,在去找下一个rule,直到input确定)。因此不是按照从上到下依次执行,而是找逻辑。

4.2 snakemake的执行逻辑

依据不同rule的输入和输出将其连接起来,形成一个完整的pipeline。当检测到input,就执行相应的rule;检测到output,就跳过相应的rule。因此这个pipeline的逻辑是这样的,不是你要写一个rule的逻辑关系,而是用输入和输出控制。

snakemake在执行时,会默认执行第一条规则,因此我们会先写rule all。之后依据rule all找逻辑,再执行。不是按照从上到下依次执行,因此rule的书写先后不影响执行,但是一般我们会依次书写方便阅读。(若第一个不是rule all,则默认执行第一个rule,然后找逻辑,最后退出)

若一个rule的输入是多个其他rule的结果,因此,这个rule一定会在所有输入都有条件下才会执行。

4.3 下面是两个经典的rule的格式,可以先看看

rule bw1:
	input:
		"path/to/{sample}.R1.fq"
		"path/to/{sample}.R2.fq"
	output:
		"{sample}.bam"
	params:
		"4"						#假设你这个线程的参数你在这里指定
	shell:
		"bwt men -t {params[0]} {input[0]} {input[1]} > {output[0]}"
rule sort:
	input:
		a="path/to/{dataset}.txt"
	output:
		b="{dataset}.sorted.txt"
	log:
		"{dataset}.sort.log"
	run:
		with open(output.b, "w") as out:
			for l in sorted(open(input.a)):
				print(l,file=out)

4.4 对比上面两个rule发现,rule的格式

  1. 起始行rule+名称
  2. 每次缩进4个空格,或者使用TAB键
  3. 注意双引号“”的使用(很严格)
  4. 输入和输出的定义:①直接写;②赋给一个变量名
  5. 输入和输出的引用:①起始下标是0。如input[0]、input[1]、output[0];②使用花括号{}

以上是初次学习snakemake的知识点。后面会有问题总结以及模板的书写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值