1

我对 nextflow 有疑问,我有一个包含 3 个元素(id、fastq_File、out_file)的元组,我需要将一个新文件加入每个元组元素(所有元组元素都使用相同的文件)。

好吧,首先我有一个fastq,我把它分成块,并在我有一个进程(示例中的简单进程)之后用它们的id映射,但是这个进程将id与其他文件一起返回。

reads = Channel.fromPath( 'data/illumina.fastq' )
.splitFastq(by: 150_000, file:true)

 reads.map { it -> [it.name -  ~/\.fastq/, it] }
            .into{tuple_reads ; tuple_reads2}

process pr1 { /*is an example my real process is more complex*/
echo true

input:
tuple val(id), path(file) from tuple_reads

output:
tuple val(id),  file("example${id}.out") into example_test

script:
"""
echo example${id} > example${id}.out
"""
}

readss = tuple_reads2.join(example_test)

我加入频道并获得如下信息:

[illumina.1, /home/qs/work/../illumina.1.fastq, /home/qs/work/../exampleillumina.1.out]
[illumina.2, /home/qs/work/../illumina.2.fastq, /home/qs/work/../exampleillumina.2.out]
[illumina.3, /home/qs/work/../illumina.3.fastq, /home/qs/work/../exampleillumina.3.out]

现在,我有一个带有我的 id 的通道、fastq 文件和进程 pr1 的输出,这对我来说非常完美,但现在这是问题所在,我需要创建其他进程以使用静态文件运行。我需要每个 id 都使用 static_file 运行,但我不知道该怎么做。我需要一个类似这样的新频道:

[illumina.1, /home/qs/work/../illumina.1.fastq, /home/qs/work/../exampleillumina.1.out,/home/qs/work/../static_file.txt]
[illumina.2, /home/qs/work/../illumina.2.fastq, /home/qs/work/../exampleillumina.2.out,/home/qs/work/../static_file.txt]
[illumina.3, /home/qs/work/../illumina.3.fastq, /home/qs/work/../exampleillumina.3.out,/home/qs/work/../static_file.txt]

或者我需要一个在每次运行时重复静态文件的进程。下面的代码仅与元组中的第一个元素一起运行:((我尝试了每个但都不起作用。

process pr2 {
echo true

input:
  tuple val(id), path(fastq_file), path(out_file) from example_test
  path(st_file) from static_file

script:
"""
echo ${id} ${st_file}
"""
}

谢谢!!

4

1 回答 1

1

您只需要确保您的第二个渠道(即您的静态文件的渠道)是一个价值渠道。您没有展示 static_file 通道是如何创建的,但是如果它是常规队列通道,您将获得所看到的行为,请参见此处:了解多个输入通道的工作原理。要修复您的示例,您只需要:

static_file = file(params.static)

process pr2 {

    echo true

    input:
    tuple val(id), path(fastq_file), path(out_file) from example_test
    path(st_file) from static_file

    script:
    """
    echo ${id} ${st_file}
    """
}

这与以下内容相同:

static_file = file(params.static)

process pr2 {

    echo true

    input:
    tuple val(id), path(fastq_file), path(out_file) from example_test
    path static_file

    script:
    """
    echo ${id} ${static_file}
    """
}
于 2021-03-11T03:52:46.990 回答