1

我正在尝试使用 nextflow 管道从 deeptool 执行指纹(bamCoverage)。当我输入 bam 文件并运行脚本时。它说我没有索引文件。错误:[E::idx_find_and_load] 无法检索 'Kasumi_NCOR1.genome.sorted.bam' 的索引文件 [E::idx_find_and_load] 无法检索 'Kasumi_NCOR1.genome.sorted.bam' 的索引文件'Kasumi_NCOR1.genome.sorted .bam' 似乎没有索引。你必须先索引文件!

process fingerprint_cov {

    publishDir "${params.outdir}/fingerprint_cov", mode: 'copy'

    input:
    set val(sample_id), file(samples) from sorted_bam_sample_control_ch.samples
    set val(sample_id_c), file(controls) from sorted_bam_sample_control_ch.controls

    output:
    set val(sample_id), file("${sample_id}.cov.bedgraph") into sample_cov_ch
    set val(sample_id_c), file("${sample_id_c}.cov.bedgraph") into control_cov_ch

    script:
    """

    bamCoverage -b ${samples} -o ${sample_id}.cov.bedgraph -of bedgraph -bs 1000 -p 10
    bamCoverage -b ${controls} -o ${sample_id_c}.cov.bedgraph -of bedgraph -bs 1000 -p 10

    """
}

sorted_bam_sample_control_ch.samples 包含所有示例 bam 文件,而 sorted_bam_sample_control_ch.control 包含控制 bam 文件。如何输入 bam.bai 文件?我也看到输出 bam 和 bam.bai 到一个频道,但是如何处理这个步骤?

这是我的示例输入。但是当我运行该过程时,它只运行一个样本

[Kasumi_H3K36, [/mnt/Data/cut_and_tag/work/0c/24e138a92a1eb0d906e1e9fad9ba4b/Kasumi_H3K36.genome.sorted.bam, /mnt/Data/cut_and_tag/work/0c/24e138a92a1eb0d906e1e9fad9ba4b/Kasumi_H3K36.genome.sorted.bam.bai]]
[Kasumi_H4K5, [/mnt/Data/cut_and_tag/work/7e/a740e11ce39f2a310b749603c785a4/Kasumi_H4K5.genome.sorted.bam, /mnt/Data/cut_and_tag/work/7e/a740e11ce39f2a310b749603c785a4/Kasumi_H4K5.genome.sorted.bam.bai]]
[Kasumi_NCOR1, [/mnt/Data/cut_and_tag/work/b8/e91ff7c7aea0fa3a0814530ab07972/Kasumi_NCOR1.genome.sorted.bam, /mnt/Data/cut_and_tag/work/b8/e91ff7c7aea0fa3a0814530ab07972/Kasumi_NCOR1.genome.sorted.bam.bai]]
[Kasumi_JMJD1C, [/mnt/Data/cut_and_tag/work/49/99ebe402d2b1953a95968525e258f6/Kasumi_JMJD1C.genome.sorted.bam, /mnt/Data/cut_and_tag/work/49/99ebe402d2b1953a95968525e258f6/Kasumi_JMJD1C.genome.sorted.bam.bai]]

这是控制输入

[Kasumi_IgG, [/mnt/Data/cut_and_tag/work/0e/1cd7aefd90105205e58fb6ef912aa4/Kasumi_IgG.genome.sorted.bam, /mnt/Data/cut_and_tag/work/0e/1cd7aefd90105205e58fb6ef912aa4/Kasumi_IgG.genome.sorted.bam.bai]]
4

1 回答 1

0

如果索引 (.bai) 文件尚不存在,您需要先索引 BAM 文件。你可以用samtools index <bam>这个。

然后,您需要做的就是以某种方式将这些输入到您的流程中。我发现不是在每个输入集/元组中都有一个单独的变量,而是将 BAM 文件及其索引分组为以下形式的元组:tuple( bam, bai )

那么您的流程可能如下所示:

process fingerprint_cov {

    publishDir "${params.outdir}/fingerprint_cov", mode: 'copy'

    input:
    set val(test_sample_id), file(indexed_test_bam) from sorted_bam_sample_control_ch.samples
    set val(control_sample_id), file(indexed_control_bam) from sorted_bam_sample_control_ch.controls

    output:
    set val(test_sample_id), file("${test_sample_id}.cov.bedgraph") into sample_cov_ch
    set val(control_sample_id), file("${control_sample_id}.cov.bedgraph") into control_cov_ch

    script:
    def test_bam = indexed_test_bam.first()
    def control_bam = indexed_control_bam.first()

    """
    bamCoverage -b "${test_bam}" -o "${sample_id}.cov.bedgraph" -of bedgraph -bs 1000 -p 10
    bamCoverage -b "${control_bam}" -o "${sample_id_c}.cov.bedgraph" -of bedgraph -bs 1000 -p 10
    """
}
于 2020-12-24T04:22:37.243 回答