栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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
#参数-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
#断点运行
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,而非部分。若你只给出中间文件,也只会执行到该中间文件生成,不执行其它的rule。

4.2 snakemake的执行逻辑

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

snakemake在执行时默认执行第一个rule,然后依据第一个rule的输出决定接下来执行哪一个rule。因此,后面的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的知识点。后面会有问题总结以及模板的书写。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号