6 Processes 下
输出(Outputs)
我们已经了解了如何将数据输入到进程中; 现在我们将了解如何从进程中输出文件和值。
output
声明块允许我们定义进程用于发送生成的文件和值的通道。
输出值
与输入类似,输出数据的类型也是使用类型限定符定义的。
val
限定符允许我们输出脚本中定义的值。
因为 Nextflow 进程只能通过通道进行通信,所以如果我们希望将一个值输入共享到一个进程中,作为另一个进程的输入,我们需要在输出声明块中定义该值,如下例所示:
//process_output_value.nf
nextflow.enable.dsl=2process METHOD {input:val xoutput:val xscript:"""echo $x > method.txt"""
}
// Both 'Channel' and 'channel' keywords work to generate channels.
// However, it is a good practice to be consistent through the whole pipeline development
methods_ch = channel.of('salmon', 'kallisto')workflow {METHOD(methods_ch)// use the view operator to display contents of the channelMETHOD.out.view({ "Received: $it" })
}
输出文件
如果我们想要捕获一个文件而不是一个值作为输出,我们可以使用path
限定符,它可以通过指定的通道捕获进程生成的一个或多个文件。
//process_output_file.nf
nextflow.enable.dsl=2methods_ch = channel.of('salmon', 'kallisto')process METHOD {input:val xoutput:path 'method.txt'"""echo $x > method.txt"""
}workflow {METHOD(methods_ch)// use the view operator to display contents of the channelMETHOD.out.view({ "Received: $it" })
}
输出如下:
executor > local (2)
[88/f82057] process > METHOD (2) [100%] 2 of 2 ✔
Received: /mnt/dev/likai/nextflow/work/ce/9716cf14d9d1e975619f9c2abe13c0/method.txt
Received: /mnt/dev/likai/nextflow/work/88/f82057da2faf4ed364b65ad3eee9ba/method.txt
在上面的例子中,在包含方法名的工作目录中创建了一个名为 method.txt 的文件。
当任务完成时,该文件将通过输出通道发送。下游的operator
,例如声明与输入相同通道的.view
或process
将会接收它。
多个输出文件
当输出文件名包含 * 或?,它被解释为模式匹配。这允许我们将多个文件捕获到一个列表中,并将它们作为一个项目通道输出。
//process_output_multiple.nf
nextflow.enable.dsl=2process FASTQC {input:path readoutput:path "fqc_res/*"script:"""mkdir fqc_resfastqc $read -o fqc_res"""
}read_ch = channel.fromPath("data/yeast/reads/ref1*.fq.gz")workflow {FASTQC(read_ch)FASTQC.out.view()
}
对于匹配模式有一些注意事项:
- 输入文件不包括在可能匹配的列表中。
- Glob模式匹配文件和目录路径。
- 当使用双星模式 * * 递归遍历子目录时,只匹配文件路径,即结果列表中不包含目录。
到目前为止,我们已经了解了如何声明多个输入和输出通道,但是每个通道一次只处理一个值。 Nextflow 可以使用tuple
限定符处理组。
在元组中,第一项是分组键,第二项是列表。[group_key,[file1,file2,...]]
.
当使用包含元组的通道时,例如.filesFromPairs
工厂方法,必须使用tuple
限定符声明相应的输入声明,然后定义元组中的每个项。
//process_tuple_input.nf
nextflow.enable.dsl=2process TUPLEINPUT{input:tuple val(sample_id), path(reads)script:"""echo $sample_idecho $reads"""
}reads_ch = Channel.fromFilePairs('data/yeast/reads/ref1_{1,2}.fq.gz')workflow {TUPLEINPUT(reads_ch)
}
以同样的方式,可以使用tuple
限定符声明包含元组值的输出通道,然后使用元组中每个元组元素的定义。
//process_tuple_io_fastp.nf
nextflow.enable.dsl=2process FASTP {input:tuple val(sample_id), path(reads)output:tuple val(sample_id), path("*FP*.fq.gz")script:"""fastp \-i ${reads[0]} \-I ${reads[1]} \-o ${sample_id}_FP_R1.fq.gz \-O ${sample_id}_FP_R2.fq.gz"""
}reads_ch = Channel.fromFilePairs('data/yeast/reads/ref1_{1,2}.fq.gz')workflow {FASTP(reads_ch)FASTP.out.view()
}
输出如下:
[ref1, [work/9b/fcca75db83718a15f7a95caabfbc15/ref1_FP_R1.fq.gz, work/9b/fcca75db83718a15f7a95caabfbc15/ref1_FP_R2.fq.gz]]
条件语句
when
声明根据各种输入和参数的状态启用/禁用流程执行。例如:
//process_when.nf
nextflow.enable.dsl=2process CONDITIONAL {input:val chrwhen:chr <= 5script:"""echo $chr"""
}chr_ch = channel.of(1..22)workflow {CONDITIONAL(chr_ch)
}
指令(Directives)
指令声明允许定义可选设置,如 CPU 数量和内存量,这些设置影响当前进程的执行,而不影响任务本身。
指令必须在进程体的最上方,在任何其他的声明块之前(如:input,output等)。
注意: 为指令赋值时不使用 = 。
指令通常用于定义要使用的计算资源量或用于配置日志记录。例如:
//process_directive.nf
nextflow.enable.dsl=2process PRINTCHR {tag "tagging with chr$chr"cpus 1echo trueinput:val chrscript:"""echo processing chromosome: $chrecho number of cpus $task.cpus"""
}chr_ch = channel.of(1..22, 'X', 'Y')workflow {PRINTCHR(chr_ch)
}
上面的进程使用了3个指令:tag
, cpus
, echo
。
tag
指令允许为每个进程执行提供自定义标记。此标记使得在日志文件或执行报告中标识特定任务(进程的执行实例)变得更加容易。
第二个指令 cpus
允许您定义每个任务所需的 CPU 数量。
第三个指令 echo true
将标准输出打印到终端。
我们可以使用 task.cpus
变量来捕获分配给任务的 CPU 数量。
还有一个常用的指令是memory
。
完整的指令集在这。
组织输出
PublishDir 指令
Nextflow 独立地管理中间结果。
进程创建的文件存储在特定任务的临时工作目录中。通常这是在work
目录下,可以在完成后删除。
如果我们想要在 result/quant输出目录中捕获 QUANT
进程的结果,我们需要在output
中定义文件,并在 PublishDir
指令中指定结果目录的位置:
//process_publishDir.nf
nextflow.enable.dsl=2process QUANT {publishDir "results/quant"input:tuple val(sample_id), path(reads)each indexoutput:tuple val(sample_id), path("${sample_id}_salmon_output")script:"""salmon quant -i $index \-l A \-1 ${reads[0]} \-2 ${reads[1]} \-o ${sample_id}_salmon_output"""
}reads_ch = Channel.fromFilePairs('data/yeast/reads/ref1_{1,2}.fq.gz')
index_ch = Channel.fromPath('data/yeast/salmon_index')workflow {QUANT(reads_ch, index_ch)QUANT.out.view()
}
publishDir
指令可以使用可选参数,例如 mode
参数可以使用值“copy”来指定希望将文件复制到输出目录,而不仅仅是一个指向工作目录中文件的符号链接。由于工作目录通常在管道完成时删除,因此最安全的方式是使用结果文件的“copy”模式。
可以使用多个 publishDir
在不同的目录中保存不同的输出。若要指定在哪个输出目录中放哪些文件,使用参数pattern
和通配符模式,后者从整个输出文件集中选择要发布的文件。
例如:
//process_publishDir_semantic.nf
nextflow.enable.dsl=2process QUANT {publishDir "results/bams", pattern: "*.bam", mode: "copy"publishDir "results/quant", pattern: "${sample_id}_salmon_output", mode: "copy"input:tuple val(sample_id), path(reads)path indexoutput:tuple val(sample_id), path("${sample_id}.bam")path "${sample_id}_salmon_output"script:"""salmon quant -i $index \-l A \-1 ${reads[0]} \-2 ${reads[1]} \-o ${sample_id}_salmon_output \--writeMappings | samtools sort | samtools view -bS -o ${sample_id}.bam"""
}reads_ch = Channel.fromFilePairs('data/yeast/reads/ref1_{1,2}.fq.gz')
index_ch = Channel.fromPath('data/yeast/salmon_index')workflow {QUANT(reads_ch, index_ch)
}
6 Processes 下相关推荐
- Activiti与SpringBoot的整合
1.pom依赖 <!--activiti7与SpringBoot整合的相关依赖--><parent><groupId>org.springframework.boo ...
- activiti前端画图转化_记Activiti入门使用-2 流程绘制、导入及开始一个流程
一.流程绘制与导入 百度啥的找了好多bpmn绘制工具,都不尽如人意,大多数都不能编辑网关出口的跳转条件,最后还是选择了activiti官方的那个绘图的app... 啥都好,就是线不能弯,很难受.(后来 ...
- Copy: 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
From http://blog.csdn.net/Atwind/archive/2007/10/19/1832844.aspx 关系型数据库,如SQL Server,使用锁来避免多用户修改数据时的 ...
- SpringBoot - 工作流Activiti开发
1.工作流 1.1 开发前奏 介绍 当前系统activit开发以springboot+mybatis开发为准, 1.1.1 IDEA安装actiBPM 通过File -> Settings -& ...
- springboot+flowable第三节(动态设置审批人)
目录 1. 创建流程 2. 启动流程 1. 创建流程 创建一个3个节点的流程: 开始->审核->结束. xml文件: <?xml version="1.0" en ...
- springboot+flowable第二节(流程基本操作)
mysql数据库 目录 1.部署流程 2.引入流程引擎 3.启动流程 4.查询待办列表 5.审批通过 6.查询已办列表 7.查询发起列表 1.部署流程 举例:部署一个如下图的流程 在src/main/ ...
- Hack The Box——Omni
目录 简介 信息收集 漏洞发现 漏洞利用 总结 简介 这是一台Windows IoT靶机,对于第一次接触这个系统的我来说还是有点困难的.通过Google搜索nmap的结果确定该主机的操作系统类型,进而 ...
- SpringBoot + Activiti6简单教程包含任意跳转节点
SpringBoot + Activiti6 一.Activiti6简述 1.简述 2.接口 3.库表 二.创建BPMN业务流程模型 二.整合 1.POM依赖 2. bpmn20.xml部署 3.ap ...
- Activiti的使用 idea的bpmn插件
由于工作需要,需要实现自定义审核流程,就查找资料实现,这是我实现的步骤. Activiti官方网站:http://activiti.org/download.html 一.idea安装activiti ...
最新文章
- shell awk实战
- 大有乾坤,售前机器人背后的 AI 技术
- android脚步---不同界面之间切换
- QPainter中坐标系变换问题
- 这几个GraphPad Prism使用的小技巧让你绘图效率直接翻倍
- 掌握ADO.NET的十个热门技巧
- 内存版u-boot制作
- java中数值023是什么类型_【Java 教程(原创)】023.参数传值——引用类型参数的传值...
- KindEditor使用过程中,用JQ提交表单时,获取不到编辑器的内容
- html符号实体----介绍
- keep-alive pipeline区别
- 第二工业大学计算机应用大专录取分,上海第二工业大学2017年分省分专业录取分数线...
- python输入某年某月某日是一年的第几天_Python小例子——输入某年某月某日,判断这一天是这一年的第几天...
- xxl-job集群原理
- 我们到底能从《别逗了,费曼先生》中学到什么?
- springboot配置mysql
- 网站api自己怎么写_短视频文案怎么写?看这4个素材网站就够了
- SSM+在线纳新系统 毕业设计-附源码241540
- 嵌入式软硬件结合(二)——SysTick系统定时器
- PHP之MySQL笔记4