首先在linux 里配置conda

下载

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh

chmod +x Anaconda3-5.3.1-Linux-x86_64.sh

bash Anaconda3-5.3.1-Linux-x86_64.sh

安装完毕,如果忘记选择yes,敲conda命令报错“command not found" 加上source /root/anaconda3/etc/profile.d/conda.sh

conda env list   得到 /root/anaconda3

export PATH=~/anaconda3/bin:$PATH

不然全局无法使用conda命令,(但是重启putty好像就不管用了,还不清楚原因)

vs code可以不安装

安装tree命令,yum install tree

tree -af 可以查看树形文件结构

snakemake是纯python的任务流程工具(基于python3),以前商业环境用过control-M

https://snakemake.readthedocs.io/en/stable/

首先做个变异检测,就是和标准的序列做对比,有点类似于代码的compare,用过Beyond Compare或svn和git的筒子们应该很熟悉了,

但是基因序列是个非常大的序列文件,在linux也没有windows那样简便的图形操作见面,而且,这种对比工作是大量重复的,需要脚本化。

cd snakemake-snakemake-tutorial-623791d7ec6d
conda env create --name snakemake-tutorial --file environment.yaml

--------------------------------------------------------------

export PATH=~/anaconda3/bin:$PATH
source activate snakemake-tutorial

--------------------------------------------------------------

# 退出当前环境
source deactivate

这里使用到Samtools工具,具体使用方法可以参考https://blog.csdn.net/g863402758/article/details/53081342

他是一个用于处理sam与bam格式的工具软件,能够实现二进制查看、格式转换、排序及合并等功能,

结合sam格式中的flag、tag等信息,还可以完成比对结果的统计汇总。同时利用linux中的grep、awk等操作命令,

还可以大大扩展samtools的使用范围与功能。

conda install snakemake

conda install samtools

bowtie2和samtools都是对比工具,bowtie2暂时没安装,安装方法先记录下

sudo wget https://jaist.dl.sourceforge.net/project/bowtie-bio/bowtie2/2.3.4.1/bowtie2-2.3.4.1-linux-x86_64.zip

unzip bowtie2-2.3.4.1-linux-x86_64.zip

vi /etc/environment

添加 bin 目录的路径,并用 : 隔开

source /etc/enviroment 使配置生效

开始写job脚本

rule bwa_map:
input:
"data/genome.fa",
"data/samples/A.fastq"
output:
"mapped_reads/A.bam"
shell:
"""
bwa mem {input} | samtools view -Sb - > {output}
"""

期间一直出一个错误,说Command must be given as string after the shell keyword
运行snakemake -np mapped_reads/A.bam检查一下是否会出错

执行这个job,把-n去掉

可以看到,生成了A.bam文件

rule bwa_map:
input:
"data/genome.fa",
"data/samples/{sample}.fastq"
output:
"mapped_reads/{sample}.bam"
shell:
"""
bwa mem {input} | samtools view -Sb - > {output}
"""

将A改成{sample},在输入命令的时候加上你的参数,自动匹配上了,(注意此时文件夹貌似只能有一个脚本文件),cp了一个好像报错了

接下来,要做排序了,代码最后一起贴

可以使用dag选项和dot命令对“规则的执行和依赖关系”进行可视化,

snakemake --dag sorted_reads/{A,B,C}.bam.bai | dot -Tpdf > dag.pdf  这个命令好像会报错
snakemake --dag sorted_reads/{A,B,C}.bam.bai | dot -Tsvg > dag.svg

整合之前的BAM文件,做基因组变异识别
SAMPLES=["A","B","C"]
rule bcftools_call:
input:
fa="data/genome.fa",
bam=expand("sorted_reads/{sample}.bam", sample=SAMPLES),
bai=expand("sorted_reads/{sample}.bam.bai", sample=SAMPLES)
output:
"calls/all.vcf"
shell:
"samtools mpileup -g -f {input.fa} {input.bam} | "
"bcftools call -mv - > {output}"
其中expand是自动匹配变量求文件路径的语法糖
检查一下,snakemake -np calls/all.vcf

最后出report,以上都是在规则里执行shell脚本,snakemake的一个优点就是可以在规则里面写Python脚本,只需要把shell改成run,此外还不需要用到引号。

测试一下,snakemake -np report.html

画出流程图

snakemake --dag report.html | dot -Tsvg > final.svg

执行一下:snakemake -p report.html
可以看到生成了报告文件

到此,还有

rule all:

log:

多线程thread:

-j 指定cpu核心

params:

加载configfile: "config.yaml"

这几个功能没有操作,留个以后有空再处理

最后,在新建一个snakemake项目时,都先用conda create -n 项目名 python=版本号创建一个全局环境,用于安装一些常用的软件,例如bwa、samtools、seqkit等。然后用如下命令将环境导出成yaml文件

conda env export -n 项目名 -f environment.yaml

以后再部署的时候,

只需要conda env create -f environment.yaml

这个过程类似于ghost系统,或者打包虚拟机类似

参考了以下网址,感谢!

https://www.jianshu.com/p/8e57fd2b81b2

http://pedagogix-tagc.univ-mrs.fr/courses/ABD/practical/snakemake/snake_intro.html

snakemake使用小结的更多相关文章

  1. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  2. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  3. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  4. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  5. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  6. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  7. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

  8. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  9. scikit-learn 梯度提升树(GBDT)调参小结

    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...

随机推荐

  1. 北京大学Cousera学习笔记--7-计算导论与C语言基础--基本数据类型&变量&常量

    1.整形数据 1.基本型(int 4B).短整型(short 2B).长整型(long 4B)  VC环境下 sizeof运算符用于计算某种类型的对象在内存中所占的字节数 ,用法:size(int) ...

  2. php中双$符 及一些基础知识

    双$$符号表示可变变量 如 $a = "b", $b = 'c'; echo $$a    此时 $$a=>$($a) =>$b 输出的值就应该为c; 变量传应用值$b ...

  3. Android -- Glide框架详解(一)

    1,使用这个框架快两年了,今天去github上去看了一下,貌似已经从3.X升级到4.X了,想着自己还没有对这个框架在博客上做过总结,所以这里打算出三篇博客来介绍,内容有基本使用.3.X与4.X的不通. ...

  4. Python 入门知识捡漏

    一.对于变量的作用域,执行申明在内存中存在,该变量就可以在下面的代码中使用(即作用域) if  2==2: name = ‘tony’ print name 下面结论是否正确? 外层变量,可以被内层变 ...

  5. 【Linux】Jenkins安装(二)

    Jenkins介绍 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 安装环境 操作系统:lin ...

  6. Android-Gradle(三)

    依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的jar包,并且保证你能够正确使用它们.Gradle甚至可以为你做 ...

  7. c# 笔记cookie

    if (Request.Cookies["svpoint"] != null) { Request.Cookies[].s_SvcID.ToString(); } else { H ...

  8. iOS 小米推送总结和遇到的坑

    极光推送就不赘述了,这里说下小米推送在ios上的坑吧,查了好久也没有查到相关的文章. 极光的强大就不说了,当客户贪图实惠的时候,当人家给你让你用小米推送的时候,我的内心是崩溃的,小米推送???没听过! ...

  9. 日常开发自己遇到异常(BUG未完待续!!!)

    在面试的时候经常会被问到你在项目中遇到的bug有哪些,或者你感觉你解决什么问题让你感觉有成就感.以此类似的面试问答,楼主现在开始不断更新日常遇到的BUG汇总 1:ConcurentModificati ...

  10. java 类、方法、代码块修饰式关键字总结

    super 关键字 this和super的区别 访问成员的区别 this关键字 this特点 this使用场景 static关键字 例子 访问权限修饰符 特点 总结: 四个修饰符的特点 访问权限修饰符 ...