【发布时间】:2023-01-13 04:54:55
【问题描述】:
我正在尝试将两个独立进程 A 和 B 的输出合并到进程 C 的输入中,其中每个进程都输出多个文件。所有文件名都有一个共同的染色体编号(例如“chr1”)。进程 A 输出文件:/path/chr1_qc.vcf.gz、/path/chr2_qc.vcf.gz 等(基因型文件)。
进程 B 输出文件:/path/chr1.a.bcf、/path/chr1.b.bcf、/path/chr1.c.bcf.../path/chr2.a.bcf、/path/chr2.b.bcf 等(区域文件)。并且两个文件集的数量每次都可能不同。
部分代码:
process A {
module "bcftools/1.16"
publishDir "${params.out_dir}", mode: 'copy', overwrite: true
input:
path vcf
path tbi
output:
path ("${(vcf =~ /chr\d{1,2}/)[0]}_qc.vcf.gz")
script:
"""
bcftools view -R ${params.sites_list} -Oz -o ${(vcf =~ /chr\d{1,2}/)[0]}_qc.vcf.gz ${vcf} //generates QC-ed genome files
tabix -f ${(vcf =~ /chr\d{1,2}/)[0]}_qc.vcf.gz //indexing QC-ed genomes
"""
}
process B {
publishDir "${params.out_dir}", mode: 'copy', overwrite: true
input:
path(vcf)
output:
tuple path("${(vcf =~ /chr\d{1,2}/)[0]}.*.bed")
script:
"""
python split_chr.py ${params.chr_lims} ${vcf} //generates region files
"""
}
process C {
publishDir "${params.out_dir}", mode: 'copy', overwrite: true
input:
tuple path(vcf), path(bed)
output:
path "${bed.SimpleName}.vcf.gz"
script:
"""
bcftools view -R ${bed} -Oz -o ${bed.SimpleName}.vcf.gz ${vcf}
"""
}
workflow {
A(someprocess.out)
B(A.out)
C(combined_AB_files)
}
进程B output.view()输出:
[/path/chr1.a.bed, /path/chr1.b.bed]
[/path/chr2.a.bed, /path/chr2.b.bed]
我如何才能让进程 C 接收输入作为元组通道(A 和 B 输出按染色体名称组合),如下所示:
[ /path/chr1_qc.vcf.gz, /path/chr1.a.bcf ]
[ /path/chr1_qc.vcf.gz, /path/chr1.b.bcf ]
...
[ /path/chr2_qc.vcf.gz, /path/chr2.a.bcf ]
...
【问题讨论】:
标签: nextflow