系統(tǒng)要求
Nextflow可以用于任何POSIX兼容系統(tǒng)(Linux, OS X等)。它需要安裝Bash 3.2(或更高版本)和Java 8(或更高版本,最多15)。
在計(jì)算機(jī)集群中執(zhí)行時(shí),需要使用共享文件系統(tǒng)來共享任務(wù)輸入/輸出文件。
Windows system is supported through WSL.
安裝
1.下載
$ wget -qO- https://get.nextflow.io | bash
or
$ curl -s https://get.nextflow.io | bash
這將在當(dāng)前目錄中創(chuàng)建nextflow主可執(zhí)行文件。
2.make
$ chmod +x nextflow
通過運(yùn)行chmod +x nextflow在您的系統(tǒng)上創(chuàng)建二進(jìn)制可執(zhí)行文件。
3.添加到環(huán)境變量(Optional)
將nextflow文件移動(dòng)到您的$PATH變量可訪問的目錄中(這只是為了避免在每次運(yùn)行nextflow時(shí)記住并輸入完整的路徑)。
!Tip
設(shè)置export CAPSULE_LOG=none以減少依賴項(xiàng)安裝日志的冗長(zhǎng)性。
!Note
為了避免下載依賴項(xiàng),您還可以為每個(gè)Nextflow發(fā)布版本使用從Github提供的Nextflow - version -all發(fā)行版。
- 在Github發(fā)布頁面找到所需的版本,復(fù)制 nextflow-VERSION-all 版本的URL,并在終端上下載:wget -qO- ASSET-URL。它將在當(dāng)前目錄中創(chuàng)建所有包含的nextflow-VERSION-all可執(zhí)行文件。
升級(jí)更新
nextflow self-update
!Tip
您可以臨時(shí)切換或堅(jiān)持使用特定版本的Nextflow,只需要在Nextflow命令前加上NXF_VER環(huán)境變量。例如
NXF_VER=20.04.0 nextflow run hello
Stable和Edge版本
Nextflow的穩(wěn)定版本將在每年的第1季度和第3季度發(fā)布,基本時(shí)間表為6個(gè)月。除了穩(wěn)定版本,Edge版本還會(huì)按月發(fā)布。這個(gè)版本用于測(cè)試和使用最新的更新和實(shí)驗(yàn)特性。要使用最新的Edge版本,請(qǐng)?jiān)趕hell終端中運(yùn)行以下代碼:
export NXF_EDGE=1
nextflow self-update
你的第一個(gè)腳本
復(fù)制下面的示例復(fù)制并保存成名為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() }
這個(gè)腳本定義了兩個(gè)過程。第一個(gè)將字符串分割成6個(gè)字符的塊,每個(gè)塊以chunk_ 為前綴寫入一個(gè)文件,第二個(gè)接收這些文件并將其內(nèi)容轉(zhuǎn)換為大寫字母。結(jié)果字符串在 result 通道上發(fā)出,最終輸出由 view 操作符打印。
在終端中輸入以下命令來執(zhí)行腳本:
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!
可以看到,第一個(gè)進(jìn)程執(zhí)行一次,第二個(gè)進(jìn)程執(zhí)行兩次。最后打印結(jié)果字符串。
值得注意的是,進(jìn)程convertToUpper是并行執(zhí)行的,因此不能保證處理第一次分割的實(shí)例(the chunk Hello)會(huì)在處理第二次分割的實(shí)例(the chunk world!)之前執(zhí)行。
因此,完全有可能以不同的順序打印出最終結(jié)果:
WORLD!
HELLO
!Tip
十六進(jìn)制數(shù),如22/7548fa,標(biāo)識(shí)唯一的進(jìn)程執(zhí)行。這些數(shù)字也是每個(gè)進(jìn)程執(zhí)行的目錄的前綴。您可以檢查將文件更改到目錄$PWD/work所生成的文件,并使用這些數(shù)字來查找進(jìn)程的執(zhí)行路徑。
修改和恢復(fù)
Nextflow跟蹤管道中執(zhí)行的所有進(jìn)程。如果修改腳本的某些部分,則只會(huì)重新執(zhí)行實(shí)際更改的流程。未更改的進(jìn)程的執(zhí)行將被跳過,并使用緩存的結(jié)果。
這在測(cè)試或修改部分管道時(shí)很有幫助,因?yàn)椴挥脧念^開始重新執(zhí)行它。
為了完成本教程,請(qǐng)修改前面示例中的convertToUpper進(jìn)程,將進(jìn)程腳本替換為字符串rev $x,使進(jìn)程看起來如下所示
process convertToUpper {
input:
file x from letters
output:
stdout result
"""
rev $x
"""
}
然后以相同的名稱保存文件,并通過在命令行中添加-resume選項(xiàng)來執(zhí)行它
nextflow run tutorial.nf -resume
它將打印類似的輸出結(jié)果:
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
您將看到實(shí)際上跳過了進(jìn)程splitLetters的執(zhí)行(進(jìn)程ID是相同的),并從緩存中檢索其結(jié)果。第二個(gè)進(jìn)程按預(yù)期執(zhí)行,打印反轉(zhuǎn)的字符串。
!Tip
管道結(jié)果默認(rèn)緩存在目錄$PWD/work中。根據(jù)您的腳本,這個(gè)文件夾可能會(huì)占用大量磁盤空間。如果您確定不會(huì)恢復(fù)管道執(zhí)行,請(qǐng)定期清理此文件夾。
管道參數(shù)
管道參數(shù)的聲明只需在變量名前加上前綴參數(shù),由點(diǎn)字符分隔。它們的值可以在命令行上指定,方法是在參數(shù)名稱前加上一個(gè)雙破折號(hào),即--paramName
在本教程中,您可以嘗試執(zhí)行前面的示例,指定不同的輸入字符串參數(shù),如下所示:
nextflow run tutorial.nf --str 'Bonjour le monde'
命令行上指定的字符串將覆蓋參數(shù)的默認(rèn)值。輸出是這樣的:
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版開始,參數(shù)名稱中的任何.(點(diǎn))字符被解釋為分隔符或嵌套作用域,例如--foo.bar Hello將以params.foo.bar的形式從腳本中訪問。如果你想要一個(gè)參數(shù)名包括.(點(diǎn))字符使用反斜杠字符轉(zhuǎn)義,例如--foo\.bar Hello