我目前正在开发一个小型 Nextflow (v.22.10.6.5843) 管道,用于在多个文件中运行 vcfancestralalleles.jar。为此,我决定使用元组。但是,当我运行该过程时,它仅在元组的第一个元素中执行。
这是我的频道定义:
Channel
.fromPath(params.input_ihs)
.splitCsv(header:true)
.map{ row -> [ row.chromosome, file(row.path_vcf), file(row.path_genetic_map), file(row.path_ancestral), file(row.path_manifest)] }
.set{samples_ihs}
这是我的 DSL2 流程定义:
publishDir "${results_dir}/ancestral_annotation", mode:"copy"
input:
tuple val(chromosome), path(path_vcf), path(path_genetic_map), path(path_ancestral), path(path_manifest)
file java_script
output:
tuple val(chromosome), path("chr${chromosome}_aa.vcf")
"""
samtools faidx ${path_ancestral}
java -jar ${java_script} \
-m ${path_manifest} \
${path_vcf} |\
bcftools annotate -x '^INFO/AA' > chr${chromosome}_aa.vcf
"""
}
**这是我的工作流程定义:**
workflow {
p1 = vcf_ancestral_annotation(samples_ihs, java_script)
}
** 这是我的 input_ihs 文件:**
chromosome,path_vcf,path_genetic_map,path_ancestral,path_manifest
21,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/21.phased.with.ref.vcf,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/chr21.b38.predicted.map,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/ancestral_fasta/ANCESTOR_for_chromosome_GRCh38_21_1_46709983_1.fa,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/manifest_annotation/manifest21
22,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/22.phased.with.ref.vcf,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/chr22.b38.predicted.map,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/ancestral_fasta/ANCESTOR_for_chromosome_GRCh38_22_1_50818468_1.fa,/mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/manifest_annotation/manifest22
一开始以为是input_ihs文件的问题。但是,如果我运行:
samples_ihs.view()
我可以看到元组实际上包含input_ihs文件的两个元素:
[21, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/21.phased.with.ref.vcf, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/chr21.b38.predicted.map, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/ancestral_fasta/ANCESTOR_for_chromosome_GRCh38_21_1_46709983_1.fa, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/manifest_annotation/manifest21]
[22, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/22.phased.with.ref.vcf, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/test/data/ihs_files/chr22.b38.predicted.map, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/ancestral_fasta/ANCESTOR_for_chromosome_GRCh38_22_1_50818468_1.fa, /mnt/c/Users/fernanda_miron1/Documents/pop_north_developing/nf-selection/nf_modules/manifest_annotation/manifest22]
任何帮助将不胜感激!
像这样的问题几乎总是涉及到多个输入通道的使用:
当两个或多个通道被声明为过程输入时,过程 等待直到有一个完整的输入配置,即直到它 从每个输入通道接收一个值。当这种情况是 满意,该过程从每个通道消耗一个值并启动 一项新任务,重复此逻辑直到一个或多个通道为空。
您可能使用了工厂方法来创建您的java_script通道,但我认为您只需要确保它是一个值通道。请注意,当使用简单值调用流程时,流程会隐式创建价值通道。例如,您可以尝试以下操作:
params.java_script = '/path/to/vcfancestralalleles.jar'
...
workflow {
java_script = file( params.java_script )
Channel
.fromPath( params.input_ihs )
.splitCsv( header:true )
.map { row ->
[ row.chromosome, file(row.path_vcf), file(row.path_genetic_map), file(row.path_ancestral), file(row.path_manifest)]
}
.set { samples_ihs }
p1 = vcf_ancestral_annotation(samples_ihs, java_script)
}