Nextflow实践中遇到的问题(Nextflow系列之五)

写在前面

中午基本了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

你可能感兴趣的:(Nextflow实践中遇到的问题(Nextflow系列之五))