一般我们搭建流程常用的工具如,shell/bash脚本、perl、python等组成。为了使生信流程搭建更加简单便捷,Nextflow应用而生,总体来说是基于Groovy语言的一种工作流框架,包括了独立的编程语法,能够大大简化复杂计算流程的编排工作,支持部署在本地计算机、集群、云端,同时也支持像conda、docker等环境,很大程度的方便了流程搭建,和之前博文介绍的如:WDL(Workflow Description Language)搭建pipeline利器、snakemake-workflow管理工具等工具有诸多重合之处,但各有特点,其他工具的具体内容大家可以查看之前的文章学习。
本文主要简单介绍Nextflow的流程搭建方法。
一、安装部署Nextflow:
1)手动安装(需要java环境:Java release)
# 手动安装(需要安装java环境,推荐版本1.8+)
curl -s https://get.nextflow.io | bash
# 测试
./nextflow run hello
2)基于conda安装
# 当然首先需要安装conda,然后添加bioconda源
conda install nextflow
二、nextflow语法
nextflow是基于Groovy语言扩展建立的一个工作流框架,具体语法也可以参考:
注:一般来说nextflow脚本默认用UTF-8编码
// process编写规则
process < name > {
[ directives ]
input:
< process inputs >
output:
< process outputs >
when:
< condition >
[script|shell|exec]:
< user script to be executed >
}
nextflow也支持正则表达式,更多内容可以参考:https://www.nextflow.io/docs/latest/getstarted.html
三、简单示例
process sayHello {
echo true
"""
echo 'Hello world!'
"""
}
>>./nextflow hello.nf
另一个例子是做blastp的流程:
// Script parameters
params.query = "/some/data/sample.fa"
params.db = "/some/path/pdb"
db = file(params.db)
query_ch = Channel.fromPath(params.query)
process blastSearch {
input:
file query from query_ch
output:
file "top_hits.txt" into top_hits_ch
"""
blastp -db $db -query $query -outfmt 6 > blast_result
cat blast_result | head -n 10 | cut -f 2 > top_hits.txt
"""
}
process extractTopHits {
input:
file top_hits from top_hits_ch
output:
file "sequences.txt" into sequences_ch
"""
blastdbcmd -db $db -entry_batch $top_hits > sequences.txt
"""
}
总之,每个工具都有优缺点,到底那种工具符合习惯需要读者自己来体验。
参考资料:
1.https://www.nextflow.io/index.html#GetStarted
2.https://github.com/nextflow-io/nextflow