写在前面
中午基本了Nextflow文章的一部分,以为自己可以上手写了。于是马上动手,打算重构手上的一些流程。书写过程中,发现其实...一样写不动。不过,既然已经开始写了,那么就遇到什么问题,就解决什么问题
标准输出如何保存到文件?
输入和输出的处理,流程的关键。
Nextflow文档有大篇幅的关于输入的处理,以及内置函数的支持。
但是在输出上,看起来似乎很少描述
我查了大半个小时的文档,开始产生一种感觉,
方向有问题,认知有问题。
Nextflow的设计逻辑和亮点,试试就是Process之间的Channel,
通过不同的管道,连通所有Process。标准输出>
对应的文件,已经被处理成管道(对应了其自动生成的工作环境中的文件)。
在流程的中间,使用标准输出,获取文件,本身是违背了Nextflow的设计逻辑
或许,只有当流程运行结束,最后一个标准输出,值得做一次最后的搜集。
一些Nextflow示例
https://www.nextflow.io/docs/latest/example.html#basic-pipeline
Nextflow就是Groovy的拓展
前面阅读完文档之后,我一直以为,每个操作都是需要在Process内完成。随后发现这个逻辑似乎走不通。比如,我需要从一个样本列表中读取所有样本细信息,随后我是希望能并行处理的,也就需要保存到Channel。
但是我在Process中想了各种逻辑,最后并没有得到解决。
转念一想,Nextflow本身就是Groovy,那么内置的函数和方法,难道是独立于Process之外?
于是小试,果然如此。
sampleList = "/home/chengjie_chen/XiaLabRNAseqTraining/Samples/sample.list"
myReader = file(sampleList).newReader()
samplePairList = []
String line
while( line = myReader.readLine() ) {
samplePairList.add(line)
}
myReader.close()
print(samplePairList)
浮沙筑高楼,可能存在一时侥幸;出来混的,总是要还的。
没有Groovy的了解,或许Nextflow并没那么容易掌握。
于是得到输出
./nextflow run rnaseq_xialab.nf
N E X T F L O W ~ version 18.10.1
Launching `rnaseq_xialab.nf` [prickly_monod] - revision: 87ad17f3b1
[P_SRR3080054.sra_1.fastq P_SRR3080054.sra_2.fastq, P_SRR3080055.sra_1.fastq P_SRR3080055.sra_2.fastq, P_SRR3080056.sra_1.fastq P_SRR3080056.sra_2.fastq, P_SRR3080057.sra_1.fastq P_SRR3080057.sra_2.fastq, P_SRR3080058.sra_1.fastq P_SRR3080058.sra_2.fastq, P_SRR3080059.sra_1.fastq P_SRR3080059.sra_2.fastq]
。。。用了一天的时间
发现Nextflow确实不容易
目前进行到
fastp = "/tools/fastp"
sampleList = "/home/chengjie_chen/XiaLabRNAseqTraining/Samples/sample.list"
myReader = file(sampleList).newReader()
samplePairList = []
String line
while( line = myReader.readLine() ) {
samplePairList.add(line)
}
myReader.close()
println(samplePairList)
samplePair = Channel.from(samplePairList)
process readQC{
input:
val pe from samplePair
output:
stdout into receiver
script:
(fq1,fq2) = (pe =~ /(\S+)\s+(\S+)/)[0]
println(pe)
"""
echo $fq1 $fq2
"""
}
receiver.
没有太多时间了,先放下
以后可以直接参考文档
https://github.com/nf-core/rnaseq