Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 66 additions & 92 deletions modules/nf-core/hifiasm/main.nf
Original file line number Diff line number Diff line change
Expand Up @@ -11,114 +11,88 @@ process HIFIASM {
tuple val(meta) , path(long_reads) , path(ul_reads)
tuple val(meta1), path(paternal_kmer_dump), path(maternal_kmer_dump)
tuple val(meta2), path(hic_read1) , path(hic_read2)
tuple val(meta3), path(bin_files)

output:
tuple val(meta), path("*.r_utg.gfa") , emit: raw_unitigs
tuple val(meta), path("*.ec.bin") , emit: corrected_reads
tuple val(meta), path("*.ovlp.source.bin") , emit: source_overlaps
tuple val(meta), path("*.ovlp.reverse.bin"), emit: reverse_overlaps
tuple val(meta), path("*.bp.p_ctg.gfa") , emit: processed_contigs, optional: true
tuple val(meta), path("*.p_utg.gfa") , emit: processed_unitigs, optional: true
tuple val(meta), path("*.asm.p_ctg.gfa") , emit: primary_contigs , optional: true
tuple val(meta), path("*.asm.a_ctg.gfa") , emit: alternate_contigs, optional: true
tuple val(meta), path("*.hap1.p_ctg.gfa") , emit: paternal_contigs , optional: true
tuple val(meta), path("*.hap2.p_ctg.gfa") , emit: maternal_contigs , optional: true
tuple val(meta), path("*.log") , emit: log
path "versions.yml" , emit: versions
tuple val(meta), path("*.r_utg.gfa") , emit: raw_unitigs
tuple val(meta), path("*.ec.bin") , emit: corrected_reads, optional: true
tuple val(meta), path("*.ovlp.source.bin") , emit: source_overlaps, optional: true
tuple val(meta), path("*.ovlp.reverse.bin") , emit: reverse_overlaps, optional: true
tuple val(meta), path("*.p_utg.gfa") , emit: processed_unitigs, optional: true
tuple val(meta), path("${prefix}.{p_ctg,bp.p_ctg,hic.p_ctg}.gfa"), emit: primary_contigs , optional: true
tuple val(meta), path("${prefix}.{a_ctg,hic.a_ctg}.gfa") , emit: alternate_contigs, optional: true
tuple val(meta), path("${prefix}.*.hap1.p_ctg.gfa") , emit: hap1_contigs , optional: true
tuple val(meta), path("${prefix}.*.hap2.p_ctg.gfa") , emit: hap2_contigs , optional: true
tuple val(meta), path("${prefix}.stderr.log") , emit: log
path "versions.yml" , emit: versions

when:
task.ext.when == null || task.ext.when

script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
prefix = task.ext.prefix ?: "${meta.id}"

def long_reads_sorted = long_reads instanceof List ? long_reads.sort{ it.name } : long_reads
def ul_reads_sorted = ul_reads instanceof List ? ul_reads.sort{ it.name } : ul_reads
def ultralong = ul_reads ? "--ul ${ul_reads_sorted}" : ""

if ((paternal_kmer_dump) && (maternal_kmer_dump) && (hic_read1) && (hic_read2)) {
error "Hifiasm Trio-binning and Hi-C integrated should not be used at the same time"
} else if ((paternal_kmer_dump) && !(maternal_kmer_dump)) {
error "Hifiasm Trio-binning requires maternal data"
} else if (!(paternal_kmer_dump) && (maternal_kmer_dump)) {
error "Hifiasm Trio-binning requires paternal data"
} else if ((paternal_kmer_dump) && (maternal_kmer_dump)) {
"""
hifiasm \\
$args \\
-o ${prefix}.asm \\
-t $task.cpus \\
-1 $paternal_kmer_dump \\
-2 $maternal_kmer_dump \\
$ultralong \\
$long_reads_sorted \\
2> >( tee ${prefix}.stderr.log >&2 )


cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""
} else if ((hic_read1) && !(hic_read2)) {
error "Hifiasm Hi-C integrated requires paired-end data (only R1 specified here)"
} else if (!(hic_read1) && (hic_read2)) {
error "Hifiasm Hi-C integrated requires paired-end data (only R2 specified here)"
} else if ((hic_read1) && (hic_read2)) {
"""
hifiasm \\
$args \\
-o ${prefix}.asm \\
-t $task.cpus \\
--h1 $hic_read1 \\
--h2 $hic_read2 \\
$ultralong \\
$long_reads \\
2> >( tee ${prefix}.stderr.log >&2 )

if([paternal_kmer_dump, maternal_kmer_dump].any() && [hic_read1, hic_read2].any()) {
log.error("ERROR: hifiasm trio binning mode and Hi-C phasing can not be used at the same time.")
}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""
} else { // Phasing with Hi-C data is not supported yet
"""
hifiasm \\
$args \\
-o ${prefix}.asm \\
-t $task.cpus \\
$ultralong \\
$long_reads \\
2> >( tee ${prefix}.stderr.log >&2 )
def input_trio = ""
if([paternal_kmer_dump, maternal_kmer_dump].any()) {
if(![paternal_kmer_dump, maternal_kmer_dump].every()) {
log.error("ERROR: Either the maternal or paternal kmer dump is missing!")
} else {
input_trio = "-1 ${paternal_kmer_dump} -2 ${maternal_kmer_dump}"
}
}

cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""
def input_hic = ""
if([hic_read1, hic_read2].any()) {
if(![hic_read1, hic_read2].every()) {
log.error("ERROR: Either the forward or reverse Hi-C reads are missing!")
} else {
input_hic = "--h1 ${hic_read1} --h2 ${hic_read2}"
}
}
stub:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.asm.r_utg.gfa
touch ${prefix}.asm.ec.bin
touch ${prefix}.asm.ovlp.source.bin
touch ${prefix}.asm.ovlp.reverse.bin
touch ${prefix}.asm.bp.p_ctg.gfa
touch ${prefix}.asm.p_utg.gfa
touch ${prefix}.asm.p_ctg.gfa
touch ${prefix}.asm.a_ctg.gfa
touch ${prefix}.asm.hap1.p_ctg.gfa
touch ${prefix}.asm.hap2.p_ctg.gfa
touch ${prefix}.stderr.log
"""
hifiasm \\
$args \\
-t ${task.cpus} \\
${input_trio} \\
${input_hic} \\
${ultralong} \\
-o ${prefix} \\
${long_reads_sorted} \\
2> >( tee ${prefix}.stderr.log >&2 )

cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""

cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""
stub:
prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.r_utg.gfa
touch ${prefix}.ec.bin
touch ${prefix}.ovlp.source.bin
touch ${prefix}.ovlp.reverse.bin
touch ${prefix}.bp.p_ctg.gfa
touch ${prefix}.p_utg.gfa
touch ${prefix}.p_ctg.gfa
touch ${prefix}.a_ctg.gfa
touch ${prefix}.hap1.p_ctg.gfa
touch ${prefix}.hap2.p_ctg.gfa
touch ${prefix}.stderr.log

cat <<-END_VERSIONS > versions.yml
"${task.process}":
hifiasm: \$(hifiasm --version 2>&1)
END_VERSIONS
"""
}
61 changes: 38 additions & 23 deletions modules/nf-core/hifiasm/meta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ input:
- long_reads:
type: file
description: Long reads PacBio HiFi reads or ONT reads (requires ext.arg '--ont').
ontologies: []
- ul_reads:
type: file
description: ONT long reads to use with --ul.
ontologies: []
- - meta1:
type: map
description: |
Expand All @@ -36,27 +38,40 @@ input:
type: file
description: Yak kmer dump file for paternal reads (can be used for haplotype
resolution). It can have an arbitrary extension.
ontologies: []
- maternal_kmer_dump:
type: file
description: Yak kmer dump file for maternal reads (can be used for haplotype
resolution). It can have an arbitrary extension.
ontologies: []
- - meta2:
type: map
description: |
Groovy Map containing information about Hi-C reads
- hic_read1:
type: file
description: Hi-C data Forward reads.
ontologies: []
- hic_read2:
type: file
description: Hi-C data Reverse reads.
ontologies: []
- - meta3:
type: map
description: |
Groovy Map containing information about the input bin files
- bin_files:
type: file
description: bin files produced during a previous Hifiasm run
ontologies: []
output:
- raw_unitigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "*.r_utg.gfa"
- "*.r_utg.gfa":
type: file
description: Raw unitigs
Expand All @@ -67,6 +82,7 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "*.ec.bin"
- "*.ec.bin":
type: file
description: Corrected reads
Expand All @@ -77,6 +93,7 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "*.ovlp.source.bin"
- "*.ovlp.source.bin":
type: file
description: Source overlaps
Expand All @@ -87,26 +104,18 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "*.ovlp.reverse.bin"
- "*.ovlp.reverse.bin":
type: file
description: Reverse overlaps
pattern: "*.ovlp.reverse.bin"
- processed_contigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.bp.p_ctg.gfa":
type: file
description: Processed contigs
pattern: "*.bp.p_ctg.gfa"
- processed_unitigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "*.p_utg.gfa"
- "*.p_utg.gfa":
type: file
description: Processed unitigs
Expand All @@ -117,55 +126,61 @@ output:
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.asm.p_ctg.gfa":
pattern: "${prefix}.{p_ctg,bp.p_ctg,hic.p_ctg}.gfa"
- ${prefix}.{p_ctg,bp.p_ctg,hic.p_ctg}.gfa:
type: file
description: Primary contigs
pattern: "*.asm.p_ctg.gfa"
pattern: "${prefix}.{p_ctg,bp.p_ctg,hic.p_ctg}.gfa"
- alternate_contigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.asm.a_ctg.gfa":
pattern: "${prefix}.{a_ctg,hic.a_ctg}.gfa"
- ${prefix}.{a_ctg,hic.a_ctg}.gfa:
type: file
description: Alternative contigs
pattern: "*.asm.a_ctg.gfa"
- paternal_contigs:
pattern: "${prefix}.{a_ctg,hic.a_ctg}.gfa"
- hap1_contigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.hap1.p_ctg.gfa":
pattern: "${prefix}.*.hap1.p_ctg.gfa"
- ${prefix}.*.hap1.p_ctg.gfa:
type: file
description: Paternal contigs
pattern: "*.hap1.p_ctg.gfa"
- maternal_contigs:
pattern: "${prefix}.*.hap1.p_ctg.gfa"
- hap2_contigs:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.hap2.p_ctg.gfa":
pattern: "${prefix}.*.hap2.p_ctg.gfa"
- ${prefix}.*.hap2.p_ctg.gfa:
type: file
description: Maternal contigs
pattern: "*.hap2.p_ctg.gfa"
description: Paternal contigs
pattern: "${prefix}.*.hap2.p_ctg.gfa"
- log:
- meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- "*.log":
pattern: "*.stderr.log"
- ${prefix}.stderr.log:
type: file
description: Stderr log
pattern: "*.log"
pattern: "*.stderr.log"
- versions:
- versions.yml:
type: file
description: File containing software versions
pattern: "versions.yml"
ontologies: []
authors:
Comment thread
prototaxites marked this conversation as resolved.
- "@sidorov-si"
- "@scorreard"
Expand Down
Loading