什么是snakemake

官网地址:https://snakemake.readthedocs.io/en/stable/

使用snakemake的好处

process data with the same pipeline

自动生成拓扑图

ATAC-seq 基本原理

ATAC-seq基本原理

image.png

每个核小体上可以缠绕146-147bp的DNA,大概缠绕两圈左右,但是在核小体上并不是所有的组蛋白都有DNA缠绕;

有些地方转录比较活跃,chromatin accessibility 染色质可接近性比较大,那么这些裸露的DNA的转录活性高;

此时,我们可以用Tn5这种酶,这种酶就可以通过链置换反应,直接把测序建库的接头adapter直接就添加到裸露的DNA上,简单来说就是Tn5把裸露的DNA链打断,并通过链置换反应加上测序建库需要的adapter。

然后再对整个基因组测序,就能够捕获这样的信号,通过mapping到genome上,就知道哪一段DNA序列是裸露的了。

因为越裸露的区域,最终捕获的reads数目就越多。

如果某一段DNA紧紧地缠绕在核小体周围,那它基本上就是没有信号的。

那最后我们通过鉴定atac-seq的峰在哪里,我们就可以知道染色质哪里是比较开放的。

image.png

那么一个基因如果处于开放染色质,那么这个基因就是高表达的;

那么如果是一个promoter在开放空间的话,那么它就很可能导致下游的基因高表达;

那么如果是一个enhancer在atac-seq信号比较弱的区域,那么它可能不太可能发生近端的相互作用;

ATAC-seq的数据分析pipeline

image.png

1. 去除接头,cutadapt;

2. 对于切除adapter的fastq文件,我们需要使用类似于bowtie2的软件去mapping到参考基因组上;

3. 把比对完的结果要进行排序,并把它记录成BAM文件;

4. 对BAM文件进行remove PCR duplication;

5. 找peak,peak calling

snakemake基础教学与上机实践

snakenake

1. snake的基本单元是rule,一个rule接一个rule;

2. 每一个rule包括input,output和你要在shell里面执行的命令;

3. 然后是下一步的输入,下一步的输出;

4. 最后的输入和最后的输出;

5. 同时还可以写python运行;

Snakemake Rule

image.png

rule sort: #关键词+rule的名字;

4个空格 #换起一行前面一定要有4个空格;

input #然后就是input、output和shell

output #然后就是input、output和shell

shell #然后就是input、output和shell

花括号里是可被替换的内容

rule bwt

使用anaconda 来管理软件和运行环境

image.png

可以用 “which python” 来查看,是在虚拟环境下的python还是外部的python

image.png

image.png

查看是否下载完好,用 “snakemake -h”,如果出现说明文档就证明已经安装好了;

image.png

然后退出环境即可

snakemake分析atac-seq的流程

每个raw fastq文件分别有两个atac-seq的数据,分别是rep1和rep2;因为是双端测序,每个rep有reads1和reads2的数据

reads分别是一一对应的

用sublime text写pipeline

######################################################

# 2020/05/15

# Yue Qu

# test ATAC-seq pipeline with snakemake

######################################################

## rep 和 index_BT2 一直没有填,可以最后填

REP_INDEX = {"rep1","rep2"}

INDEX_BT2 = "~/menghw_HD/reference/bowtie2_hg38/hg38_only_chromosome" # 每个人的index的引用路径不一样,自行修改

## bowtie2 软件包也要写明软件的路径

#1. $ cd ~/menghw_HD/software_package/

#2. $ ls

#3. $ bbmap Bismark_v0.20.0 ... ...

#4. $ cd bin/

#5. $ ls

#6. $ picard.jar VarScan.v2.3.9.jar ... ...

#7. $ pwd

#8. $ /home/menghaowei/menghw_HD/software_package/bin # picard.jar的路径

## picard 这样引用不容易报错

PICARD = "/home/menghaowei/menghw_HD/software_package/bin/picard.jar"

## rule all 应该写要保留的中间结果和要保留的最后结果

rule all:

input:

expand("bam/ATAC_seq_{rep}_bt2_hg38_sort.bam",rep=REP_INDEX) # 保留step 3的output结果-bam 文件的保存;需要用expand把rep填充进去;

expand("bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.bam",rep=REP_INDEX) # 保留step 4的output结果-bam 文件的保存;

expand("macs2_result/ATAC_seq_{rep}_peaks.narrowPeak",rep=REP_INDEX) # 保存call_peaks的结果

## step 1

rule cutadapt:

input:

# "ATAC_seq_{rep}_R{index}.fq.gz"

"raw.fastq/ATAC_seq_{rep}_R1.fq.gz" #因为ATAC_seq再raw fastq里面,所以前面要加路径

"raw.fastq/ATAC_seq_{rep}_R2.fq.gz"

output:

"fix.fastq/ATAC_seq_{rep}_R1.fq.gz" # 如果fix.fastq文件存在,则把ATAC_seq 文件放到文件夹中,如果不存在则创建该文件夹再放入;

"fix.fastq/ATAC_seq_{rep}_R2.fq.gz"

log:

"fix.fastq/ATAC_seq_{rep}_cutadapt.log" # 要保存的log文件

shell:

# 分行写后面加斜线“\”,后面不能有任何字符

"cutadapt -j 4 --times 1 -e 0.1 -0 3 --quality-cutoff 25 \

-m 50 -a AGATCGCGATTGCGTAGTCACGTACGTTGCATGAGCTTA \

-A AGATCGCGATTGCGTAGTCACGTACGTTGCATGAGCTTA \

-o {output[0]} -p {output[1]} {inpuit[0]} {input[1]} > {log} 2>&1"

# input在命令行中的引用,input[0]代表第一个文件,input[1]代表第二个文件

# 输出的话,看cutadapt说明,用 “-o” “-p” 进行输出

# log 文件的输出按照linux的标准格式输出即可

## step 2

rule bt2_mapping:

input:

"fix.fastq/ATAC_seq_{rep}_R1.fq.gz" # 这一步的input就是上一步的output

"fix.fastq/ATAC_seq_{rep}_R2.fq.gz"

output:

# output得换一个新的文件夹

"bam/ATAC_seq_{rep}_bt2_hg38.sam" # hg38,命名看个人习惯,这里作者写上了参考基因组的版本

log:

"bam/ATAC_seq_{rep}_bt2_hg38.log"

shell:

"bowtie2 -x {INDEX_BT2} -p 4 -1 {input[0]} -2 {input[1]} -S {output} > {log} 2>&1"

# -x 是index;-p 后面是需要的核心的数目;-1和-2分别是两个input;-S 是指输出成sam文件

## step 3

rule bam_file_sort:

input:

"bam/ATAC_seq_{rep}_bt2_hg38.sam"

output:

"bam/ATAC_seq_{rep}_bt2_hg38_sort.bam"

log:

"bam/ATAC_seq_{rep}_bt2_hg38_sort.log"

shell:

"samtools sort -O BAM -o {output} -T {output}.temp -@ 4 -m 2G {input}" # 输出成BAM格式;输出文件是 “-o”;“-T” 是临时文件;“-@ 4”代表核心数4个;“-m 2G” 代表内存使用2G

## step 4

rule remove_duplication:

input:

"bam/ATAC_seq_{rep}_bt2_hg38_sort.bam"

output:

"bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.bam" # rmdup这步骤通常用picard软件来处理,这个软件处理以后会输出两个文件,一个是“bam”,一个是“matrix”

"bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.matrix"

log:

"bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.log"

shell:

# Xms5g 表示用多少g内存,最小5g,最大5g;-XX以后是设置它的核心数,如果不设置的话会把服务器跑满,这样可能反而会变慢

"java -Xms5g -Xmx5g -XX:ParallelGCThreads=4 \

-jar {PICARD} MarkDuplicates \

I={input} O={output[0]} M={output[1]} \

ASO=coordinate REMOVE_DUPLICATES=true 2>{log}"

# output[0]和output[1]分别指第一个和第二个文件

## step 5

rule call_peak:

input:

"bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.bam"

output:

# 输出一个call_peak的结果

# 我们一般用macs2进行call_peak

"macs2_result/ATAC_seq_{rep}_peaks.narrowPeak" # rep1的call peak结果

params:

# 此外我们需要生成一个参数,首先要写清楚前缀名,把它当作一个变量进行保存

“ATAC_seq_{rep}”,

# 第二个的话,要把上面输出的路径当作一个参数传进去

"macs2_result"

# 这个是macs2本身shell的问题,不是说所有地方都是这么操作的

log:

"bam/ATAC_seq_{rep}_bt2_hg38_sort_rmdup.log",

shell:

# -c = control组;-t = treatment组/input;用的是BAM cell;用的是hs = homo sapensis的基因组;

# --outdir {params[1]} 就是把params里面的1(params中的第二个文件)输出到这个目录下;

# 输出的项目的名字呢就叫做params[0],也就是params中的第一个文件“ATAC_seq_{seq}”;

# -m 2 100 = 我们只输出大于2倍和小于100倍的数集;

# 最后我们进行call summits --- 这个加不加都可以;

# 最后的最后 > {log} 2>&1

"macs2 callpeak -t {input} -f BAM -g hs --outdir {params[1]} -n {params[0]} -m 2 100 --call-summits > {log} 2>&1"

然后再把pipeline上传到服务器上面

上传到服务器上

image.png

然后用snakemake运行一遍

image.png

“-n” 代表不是真的运行它,而是检查它的逻辑是不是有错误;

"-p" 代表是把每一行的命令行展现出来

分为那几个部分呢

第一部分:job counts

第一部分

告诉你一共有多少个任务

第二部分

第二部分

告诉你每一步的命令行是什么;输入输出是什么;

告诉你job ID,是从小到大进行排序的;

image.png

第三部分--拓扑图的生成

image.png

生成的拓扑图过程,

image.png

输出为pdf,“dot” 是linux画图的命令

image.png

输出内容的效果,

image.png

运行

snakemake -s xxx.py -p -j 2 & # -p: 输出的命令;-j: 同时运行的任务的数目

image.png

查看是否已经在运行了

1

2

一步一步运行

中断进程

1

2

3

批量kill

常用的命令

image.png

生物信息学分析服务器搭建教程,Snakemake搭建生信分析流程-步骤相关推荐

  1. 属于服务器端运行的程序_生信分析云平台产品开发 - 5 生信分析pipeline服务器端运行...

    在上文 [生信分析云平台产品开发 - 4 生信分析pipeline的图形化] 讨论了生信分析pipeline的图形化,如何用图形的方式显示生信pipeline,但是pipeline脚本按照变量的形式保 ...

  2. mirna富集分析_经验之谈丨生信分析文章套路原来这么简单!

    近两年,不做实验或者仅需要少量实验的生物信息学分析文章,发表量越来越多.如果利用数据库检索,高效的发出一篇文章.是科研工作者关注的话题,今天我们就用一篇生信分析的文章作为切入点,来谈谈生信分析文章的套 ...

  3. 图形化开放式生信分析系统开发 - 7 分析报告的模板定制与自动生成

    前文链接: 图形化开放式生信分析云平台产品开发 - 1 需求分析及技术实现 图形化开放式生信分析云平台产品开发 - 2 样本信息处理 图形化开放式生信分析云平台产品开发 - 3 生信分析流程的进化 图 ...

  4. 从零开始用snakemake搭建完整的甲基化生信分析流程(第一章)基础篇

    从零开始用snakemake搭建完整的甲基化生信分析流程 阅读文章后的收获:专业的snakemake编程技能:甲基化分析pipeline 作者生物信息学硕士,6年生信分析师从业经验,快速响应读者问题, ...

  5. docker卸载命令_使用docker完成生信分析环境搭建

    生信开发人员最头疼的问题,可能就是平台搭建和软件安装了.部署和迁移上要费很大力气.本文讲述使用docker制作一个镜像,后续通过导入自己定制的镜像,复制文件完成分析流程的部署和迁移. 如何使用dock ...

  6. 网站搭建教程:搭建本地web服务器 4/23

    系列文章 网站搭建教程:内网穿透测试将本地静态网站发布公网可访问 1/23 网站搭建教程:安装源代码编辑软件 2/23 网站搭建教程:建立开放源代码的简单网页 3/23 网站搭建教程:搭建本地web服 ...

  7. 做生信分析平台需要什么配置的服务器?生信分析平台服务器配置建议

    做生信分析平台需要什么配置的服务器? 1.CPU 2.内存 3.硬盘 4.显卡 5.不间断电源UPS 6.其它 生物信息学主要研究方向:DNA/RNA/蛋白质测序,序列比对,基因发现,基因组组装,药物 ...

  8. 云主机环境搭建教程之搭建全能主机

    云主机环境搭建教程之搭建全能主机 很多站长在购买虚拟主机的时候,会看虚拟主机的一些参数,其中最重要的就是支持的程序语言.现在很多IDC商家都在宣称全能主机. 最好笑的一个事情就是,笔者刚建站的时候,购 ...

  9. 面向生信分析的高性 RStudio 服务器

    因需要超大内存的拼接/比对/表达量计算发愁? 为了使用组里的服务器而被困在实验室? 浪费大量的时间龟速下载 NCBI 的数据? 快来看看云筏 HPC 吧! https://my.cloudraft.c ...

最新文章

  1. 四月青少年编程组队学习(图形化四级)Task03
  2. 静态库与动态库详细剖析
  3. 怎么可以查到AD里面长时间没有登录的帐号
  4. 二、JavaWeb总结:Tomcat服务器的学习和使用
  5. python: 多线程实现的两种方式及让多条命令并发执行
  6. 在react里写原生js_小程序原生开发与第三方框架选择
  7. 8086汇编4位bcd码_238期中4头3尾,排列五第19239期爱我彩规
  8. linux chattr修改文件属性,linux chattr(改变文件属性)
  9. 剑指offer 面试题64. 求1+2+…+n
  10. CodeForces - 589D
  11. java字符拼成_Java字符拼成图片(image-ASCII)(非原创)
  12. java如何制作浪漫表白界面_表白网页在线制作详细教程-我要表白网-最浪漫的表白网页在线生成网站...
  13. VMware Pro 虚拟机+Unlocker v3.0补丁+ MacOs 10.14.4最新版苹果系统懒人版镜像 一键部署 【全部免积分】
  14. 在VS2019 C++ 中实现Socket通信,添加ws2_32.lib静态库
  15. 【推荐】无线WiFi信号测试软件WirelessMon
  16. 东北大学金工实习考试题库
  17. TOM企邮、腾讯企邮、网易企邮、263企邮,四大企业邮箱实测:谁是最实用的企业邮箱产品?
  18. ROS环境下使用WHEELTEC N100惯导模块
  19. #Python#错误之ModuleNotFoundError: No module named ‘yaml‘
  20. dram sram drom srom ddram详细解释

热门文章

  1. 90后黑客以1分钱拍迪斯尼门票后转卖 1周赚50万
  2. 解决Linux下Nvidia闭源驱动的双显卡笔记本画面撕裂问题
  3. 网页美学设计原则(下)
  4. iOS模仿微信滑块动态设置字体大小的功能
  5. [ 网络安全基础篇 ]常见 Web 漏洞的描述及其修复建议(相对全面)
  6. python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
  7. 前端后台数据修改时数据回显思路
  8. libcurl编译支持xp系统
  9. 快!你的2018年GitHub报告还未领取
  10. shell 分割文本_五分钟shell系列第三节-海量数据topk问题