You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nextflow:如何从流程输出目录获取文件传入BLAST?

Nextflow流程问题解决思路:CONSENSUS_BUILDING到BLAST的文件传递

核心报错原因

报错No signature of method: nextflow.util.BlankSeparatedList.getParent()本质是CONSENSUS_BUILDING输出的通道包含的是fasta文件列表,而非单个文件路径,导致BLAST流程中调用fasta.getParent()方法时,因对象是列表而非单个文件路径而失败。

分步解决步骤

1. 修正CONSENSUS_BUILDING的输出模式

原输出会将匹配到的所有fasta文件打包成一个列表输出,需改为逐个输出单个文件,添加each: true参数:

process CONSENSUS_BUILDING {
    publishDir "${params.outdir}/consensus", mode: 'copy'

    input:
    path fastq

    output:
    path "${fastq.getSimpleName()}_ID/*.fasta", emit: consensus_fastas, each: true

    script:
    """
    gunzip -f ${fastq}
    NGSpeciesID --ont --sample_size 10000 --consensus --racon --racon_iter 3 --fastq ${fastq.getSimpleName()}.fastq --m 650 --s 50 --outfolder ${fastq.getSimpleName()}_ID
    """
}
  • each: true会让通道将匹配到的每个fasta文件作为独立元素传递,而非打包成列表。

2. 修正BLAST流程的路径调用逻辑

现在输入的是单个fasta文件,fasta.getParent()可以正常调用,同时建议简化输出文件名避免路径拼接错误:

process BLAST {
    publishDir "${params.outdir}/blast", mode: 'copy'
    container  'docker://ncbi/blast'

    input:
    path fasta
    path db

    output:
    path "${fasta.baseName}.blast"

    script:
    """
    # 确保db_name已定义,或替换为实际数据库名称(比如用${db.baseName}获取目录名)
    blastn -db ${db}/${db_name} -query ${fasta} -outfmt '6 sseqid stitle pident length mismatch gapopen qstart qend sstart send evalue bitscore' -out ${fasta.baseName}.blast
    """
}

3. 简化工作流的通道调用逻辑

不需要额外创建ch_forBlast通道,直接使用CONSENSUS_BUILDING输出的通道即可:

workflow {
    ...
    ch_consensus = CONSENSUS_BUILDING(ch_trimmed.fastq)
    ch_blast = BLAST(ch_consensus.consensus_fastas, db_dir)
}
  • 原代码中Channel.fromPath("${ch_consensus.consensusDir}/*.fasta")是错误用法,因为ch_consensus是通道对象,不能直接拼接成字符串路径。

4. 验证中间输出

确认CONSENSUS_BUILDING流程的输出目录${fastq.getSimpleName()}_ID下确实生成了fasta文件,避免因上游流程无输出导致的空文件问题。

内容的提问来源于stack exchange,提问作者ramiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:10:20