一般我们搭建流程常用的工具如,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