10 Modules

Modules

在大多数编程语言都有创建代码模块这个概念,以便重用代码。
Nextflow (DSL2)允许定义可以跨workflow管道包含和共享的module脚本。
模块文件只不过是一个 Nextflow 脚本,其中包含一个或多个可以从另一个 Nextflow 脚本导入的进程定义。例如:

process INDEX {
  input:
    path transcriptome
  output:
    path 'index'
  script:
    """
    salmon index --threads $task.cpus -t $transcriptome -i index
    """
}

上面这个INDEXprocess被保存在modules/rnaseq-tasks.nf中作为一个模块脚本。

导入模块

和cpp一样,可以使用关键字include来导入其他模块。例如:

nextflow.enable.dsl=2

include { INDEX } from './modules/rnaseq-tasks'

workflow {
    transcriptome_ch = channel.fromPath('data/yeast/transcriptome/*.fa.gz')
    //
    INDEX(transcriptome_ch)
}

包含相对路径要使用./

多个包含

当多个组件被包含时可以使用分号;隔开,例如:

nextflow.enable.dsl=2

include { INDEX; QUANT } from './modules/rnaseq-tasks'

workflow {
    reads = channel.fromFilePairs('data/yeast/reads/*_{1,2}.fq.gz')
    transcriptome_ch = channel.fromPath('data/yeast/transcriptome/*.fa.gz')
    INDEX(transcriptome_ch)
    QUANT(index.out,reads)
}

模块别名

导入模块时也可以使用关键字as来给它起别名。例如:

nextflow.enable.dsl=2

include { INDEX } from './modules/rnaseq-tasks'
include { INDEX as SALMON_INDEX } from './modules/rnaseq-tasks'

workflow {
    transcriptome_ch = channel.fromPath('data/yeast/transcriptome/*.fa.gz')
    INDEX(transcriptome_ch)
    SALMON_INDEX(transcriptome_ch)
}

也可以写在同一个include内部:

nextflow.enable.dsl=2

include { INDEX; INDEX as SALMON_INDEX } from './modules/rnaseq-tasks'

workflow {
  transcriptome_ch = channel.fromPath('/data/yeast/transcriptome/*.fa.gz)'
  INDEX(transcriptome)
  SALMON_INDEX(transcriptome)
}

模块参数

一个模块脚本可以设置一个或多个参数:

params.foo = 'Hello'
params.bar = 'world!'

def sayHello() {
    println "$params.foo $params.bar"
}

然后有另外一个脚本:

params.foo = 'Hola'
params.bar = 'Mundo'

include {sayHello} from './some/module'

workflow {
    sayHello()
}

上面的输出为:

Hola Mundo

可以使用 addParams 选项在不影响外部作用域的情况下扩展模块参数:

include {sayHello} from './some/module' addParams(foo: 'Ciao')

workflow {
    sayHello()
}

输出:

Ciao world!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值