nextflow中文文档(1):开始使用

2021-10-26  本文已影响0人  大大的世界和小小的人儿

系统要求

Nextflow可以用于任何POSIX兼容系统(Linux, OS X等)。它需要安装Bash 3.2(或更高版本)和Java 8(或更高版本,最多15)。
在计算机集群中执行时,需要使用共享文件系统来共享任务输入/输出文件。
Windows system is supported through WSL.

安装

1.下载

$ wget -qO- https://get.nextflow.io | bash
or
$ curl -s https://get.nextflow.io | bash

这将在当前目录中创建nextflow主可执行文件。
2.make

$ chmod +x nextflow

通过运行chmod +x nextflow在您的系统上创建二进制可执行文件。
3.添加到环境变量(Optional)
将nextflow文件移动到您的$PATH变量可访问的目录中(这只是为了避免在每次运行nextflow时记住并输入完整的路径)。

!Tip

设置export CAPSULE_LOG=none以减少依赖项安装日志的冗长性。

!Note

为了避免下载依赖项,您还可以为每个Nextflow发布版本使用从Github提供的Nextflow - version -all发行版。

  1. Github发布页面找到所需的版本,复制 nextflow-VERSION-all 版本的URL,并在终端上下载:wget -qO- ASSET-URL。它将在当前目录中创建所有包含的nextflow-VERSION-all可执行文件。

升级更新

nextflow self-update

!Tip

您可以临时切换或坚持使用特定版本的Nextflow,只需要在Nextflow命令前加上NXF_VER环境变量。例如

NXF_VER=20.04.0 nextflow run hello

Stable和Edge版本

Nextflow的稳定版本将在每年的第1季度和第3季度发布,基本时间表为6个月。除了稳定版本,Edge版本还会按月发布。这个版本用于测试和使用最新的更新和实验特性。要使用最新的Edge版本,请在shell终端中运行以下代码:

export NXF_EDGE=1
nextflow self-update

你的第一个脚本

复制下面的示例复制并保存成名为tutorial.nf的文件中。

#!/usr/bin/env nextflow

params.str = 'Hello world!'

process splitLetters {

    output:
    file 'chunk_*' into letters

    """
    printf '${params.str}' | split -b 6 - chunk_
    """
}


process convertToUpper {

    input:
    file x from letters.flatten()

    output:
    stdout result

    """
    cat $x | tr '[a-z]' '[A-Z]'
    """
}

result.view { it.trim() }

这个脚本定义了两个过程。第一个将字符串分割成6个字符的块,每个块以chunk_ 为前缀写入一个文件,第二个接收这些文件并将其内容转换为大写字母。结果字符串在 result 通道上发出,最终输出由 view 操作符打印。
在终端中输入以下命令来执行脚本:

nextflow run tutorial.nf

它将输出类似于下面所示的文本:

N E X T F L O W  ~  version 19.04.0
executor >  local (3)
[69/c8ea4a] process > splitLetters   [100%] 1 of 1 ✔
[84/c8b7f1] process > convertToUpper [100%] 2 of 2 ✔
HELLO
WORLD!

可以看到,第一个进程执行一次,第二个进程执行两次。最后打印结果字符串。
值得注意的是,进程convertToUpper是并行执行的,因此不能保证处理第一次分割的实例(the chunk Hello)会在处理第二次分割的实例(the chunk world!)之前执行。
因此,完全有可能以不同的顺序打印出最终结果:

WORLD!
HELLO

!Tip

十六进制数,如22/7548fa,标识唯一的进程执行。这些数字也是每个进程执行的目录的前缀。您可以检查将文件更改到目录$PWD/work所生成的文件,并使用这些数字来查找进程的执行路径。

修改和恢复

Nextflow跟踪管道中执行的所有进程。如果修改脚本的某些部分,则只会重新执行实际更改的流程。未更改的进程的执行将被跳过,并使用缓存的结果。
这在测试或修改部分管道时很有帮助,因为不用从头开始重新执行它。
为了完成本教程,请修改前面示例中的convertToUpper进程,将进程脚本替换为字符串rev $x,使进程看起来如下所示

process convertToUpper {

    input:
    file x from letters

    output:
    stdout result

    """
    rev $x
    """
}

然后以相同的名称保存文件,并通过在命令行中添加-resume选项来执行它

nextflow run tutorial.nf -resume

它将打印类似的输出结果:

N E X T F L O W  ~  version 19.04.0
executor >  local (2)
[69/c8ea4a] process > splitLetters   [100%] 1 of 1, cached: 1 ✔
[d0/e94f07] process > convertToUpper [100%] 2 of 2 ✔
olleH
!dlrow

您将看到实际上跳过了进程splitLetters的执行(进程ID是相同的),并从缓存中检索其结果。第二个进程按预期执行,打印反转的字符串。

!Tip

管道结果默认缓存在目录$PWD/work中。根据您的脚本,这个文件夹可能会占用大量磁盘空间。如果您确定不会恢复管道执行,请定期清理此文件夹。

管道参数

管道参数的声明只需在变量名前加上前缀参数,由点字符分隔。它们的值可以在命令行上指定,方法是在参数名称前加上一个双破折号,即--paramName
在本教程中,您可以尝试执行前面的示例,指定不同的输入字符串参数,如下所示:

nextflow run tutorial.nf --str 'Bonjour le monde'

命令行上指定的字符串将覆盖参数的默认值。输出是这样的:

N E X T F L O W  ~  version 19.04.0
executor >  local (4)
[8b/16e7d7] process > splitLetters   [100%] 1 of 1 ✔
[eb/729772] process > convertToUpper [100%] 3 of 3 ✔
m el r
edno
uojnoB

!Tip

从20.11.0版开始,参数名称中的任何.(点)字符被解释为分隔符或嵌套作用域,例如--foo.bar Hello将以params.foo.bar的形式从脚本中访问。如果你想要一个参数名包括.(点)字符使用反斜杠字符转义,例如--foo\.bar Hello

上一篇下一篇

猜你喜欢

热点阅读