Bowtie2 错误:“reference_index.1.bt2”不存在或不是 nextflow 中的 Bowtie2 索引

问题描述 投票:0回答:1

我尝试在 Nextflow 管道中运行 Bowtie2 对齐,但遇到 Bowtie2 找不到索引文件的错误。错误消息表明

"reference_index.1.bt2" does not exist or is not a Bowtie 2 index
.

这是我的代码。

// Define the process for Bowtie2 alignment
process bowtie2 {

    input:
    path bowtie2_out
    path trimmomatic_out

    output:
    path "${params.outputDir8}/out.sam"

    script:
    """
    baseName=\$(basename \$(find ${bowtie2_out} -name '*.bt2' | head -n 1) | sed 's/\\.[0-9]*\\.bt2\$//')
    indexPath="${bowtie2_out}/\${baseName}"
   
    bowtie2 -x \${indexPath} \
            -1 ${trimmomatic_out}/output_1P.fq \
            -2 ${trimmomatic_out}/output_2P.fq \
            -S ${params.outputDir8}/out.sam
    """
}

我正在尝试动态提取 Bowtie2 参考索引的基本名称,并将其用于

-x
命令中的
bowtie2
选项。但是,我得到的命令错误是:

Command error:
  Index path is: reference_index.1.bt2 reference_index.2.bt2 reference_index.3.bt2 reference_index.4.bt2 reference_index.rev.1.bt2 reference_index.rev.2.bt2/reference_index
  (ERR): "reference_index.1.bt2" does not exist or is not a Bowtie 2 index
  Exiting now ...

我收到的完整错误消息是:

ERROR ~ Error executing process > 'bowtie2'

Caused by:
  Process `bowtie2` terminated with an error exit status (255)


Command executed:

  baseName=$(basename $(find reference_index.1.bt2 reference_index.2.bt2 reference_index.3.bt2 reference_index.4.bt2 reference_index.rev.1.bt2 reference_index.rev.2.bt2 -name '*.bt2' | head -n 1) | sed 's/\.[0-9]*\.bt2$//')
  indexPath="reference_index.1.bt2 reference_index.2.bt2 reference_index.3.bt2 reference_index.4.bt2 reference_index.rev.1.bt2 reference_index.rev.2.bt2/${baseName}"
  echo "Index path is: ${indexPath}"
  bowtie2 -x ${indexPath}             -1 trimmomatic_out/output_1P.fq             -2 trimmomatic_out/output_2P.fq             -S bowtie2_out/out.sam

Command exit status:
  255

Command output:
  Index path is: reference_index.1.bt2 reference_index.2.bt2 reference_index.3.bt2 reference_index.4.bt2 reference_index.rev.1.bt2 reference_index.rev.2.bt2/reference_index

Command error:
  Index path is: reference_index.1.bt2 reference_index.2.bt2 reference_index.3.bt2 reference_index.4.bt2 reference_index.rev.1.bt2 reference_index.rev.2.bt2/reference_index
  (ERR): "reference_index.1.bt2" does not exist or is not a Bowtie 2 index
  Exiting now ...

Work dir:
  /mnt/d/somil_ILBS/work/work/b3/358c00e746858cc5c99a755b28eba2

Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`

 -- Check '.nextflow.log' file for details

我尝试了各种方法从

.bt2
文件中提取基本名称,但问题似乎在于路径的构建方式。如何正确构建 Bowtie2 索引文件的路径,以便 Bowtie2 识别它并继续对齐吗?

nextflow
1个回答
0
投票

从执行的命令来看,bowtie2_out需要一个目录,但实际上它只是一个文件列表。我的建议是修改上游基因组索引过程,将它们输出到一个目录中,以便它们可以在下游轻松使用,例如:

process bowtie2_build {

    input:
    path fasta

    output: 
    path "bowtie2"

    script:
    """
    mkdir bowtie2

    bowtie2-build \\
        --threads ${task.cpus} \\
        "${fasta}" \\
        "bowtie2/${fasta.baseName}"
    """
}

然后将 bowtie2_build.out 输入到您的 bowtie2 进程中。您重构的 bowtie2 流程应类似于:

process bowtie2 {

    publishDir "${params.outputDir}/bowtie2", mode: 'copy'

    input:
    tuple val(sample), path(fastq1), path(fastq2)
    path bowtie_index

    output:
    tuple val(sample), path("${sample}.sam")

    script:
    """
    indexPath=\$(find -L . -name '*.rev.1.bt2' | sed 's/\\.rev.1.bt2\$//')
   
    bowtie2 \\
        -x "\${indexPath}" \\
        -1 "${fastq1}" \\
        -2 "${fastq2}" \\
        -S "${sample}.sam"
    """
}

请注意,您可以使用

publishDir
指令将流程输出定向到指定的输出目录。这可确保文件写入进程工作目录(即
./work
)。

© www.soinside.com 2019 - 2024. All rights reserved.