|
| 1 | +process RUSTAR_ALIGN { |
| 2 | + tag "$meta.id" |
| 3 | + label 'process_high' |
| 4 | + |
| 5 | + container "ghcr.io/scverse/rustar-aligner:dev" |
| 6 | + |
| 7 | + input: |
| 8 | + tuple val(meta), path(reads, stageAs: "input*/*") |
| 9 | + tuple val(meta2), path(index) |
| 10 | + tuple val(meta3), path(gtf) |
| 11 | + val star_ignore_sjdbgtf |
| 12 | + |
| 13 | + output: |
| 14 | + tuple val(meta), path('*Log.final.out') , emit: log_final |
| 15 | + tuple val(meta), path('*Log.out') , emit: log_out |
| 16 | + tuple val(meta), path('*Log.progress.out'), emit: log_progress |
| 17 | + tuple val("${task.process}"), val('rustar-aligner'), eval("rustar-aligner --version | sed -n '1{s/^rustar-aligner //;p}'"), emit: versions_rustar, topic: versions |
| 18 | + |
| 19 | + tuple val(meta), path('*d.out.bam') , optional:true, emit: bam |
| 20 | + tuple val(meta), path("${prefix}.sortedByCoord.out.bam") , optional:true, emit: bam_sorted |
| 21 | + tuple val(meta), path("${prefix}.Aligned.sortedByCoord.out.bam") , optional:true, emit: bam_sorted_aligned |
| 22 | + tuple val(meta), path('*toTranscriptome.out.bam') , optional:true, emit: bam_transcript |
| 23 | + tuple val(meta), path('*Aligned.unsort.out.bam') , optional:true, emit: bam_unsorted |
| 24 | + tuple val(meta), path('*fastq.gz') , optional:true, emit: fastq |
| 25 | + tuple val(meta), path('*.tab') , optional:true, emit: tab |
| 26 | + tuple val(meta), path('*.SJ.out.tab') , optional:true, emit: spl_junc_tab |
| 27 | + tuple val(meta), path('*.ReadsPerGene.out.tab') , optional:true, emit: read_per_gene_tab |
| 28 | + tuple val(meta), path('*.out.junction') , optional:true, emit: junction |
| 29 | + tuple val(meta), path('*.out.sam') , optional:true, emit: sam |
| 30 | + tuple val(meta), path('*.wig') , optional:true, emit: wig |
| 31 | + tuple val(meta), path('*.bg') , optional:true, emit: bedgraph |
| 32 | + |
| 33 | + when: |
| 34 | + task.ext.when == null || task.ext.when |
| 35 | + |
| 36 | + script: |
| 37 | + def args = task.ext.args ?: '' |
| 38 | + prefix = task.ext.prefix ?: "${meta.id}" |
| 39 | + def reads1 = [] |
| 40 | + def reads2 = [] |
| 41 | + meta.single_end ? [reads].flatten().each{ read -> reads1 << read} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } |
| 42 | + def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" |
| 43 | + attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' 'SM:$prefix'" |
| 44 | + def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' |
| 45 | + mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' |
| 46 | + """ |
| 47 | + rustar-aligner \\ |
| 48 | + --genomeDir $index \\ |
| 49 | + --readFilesIn ${reads1.join(",")} ${reads2.join(",")} \\ |
| 50 | + --runThreadN $task.cpus \\ |
| 51 | + --outFileNamePrefix $prefix. \\ |
| 52 | + $out_sam_type \\ |
| 53 | + $ignore_gtf \\ |
| 54 | + $attrRG \\ |
| 55 | + $args |
| 56 | +
|
| 57 | + $mv_unsorted_bam |
| 58 | +
|
| 59 | + if [ -f ${prefix}.Unmapped.out.mate1 ]; then |
| 60 | + mv ${prefix}.Unmapped.out.mate1 ${prefix}.unmapped_1.fastq |
| 61 | + gzip ${prefix}.unmapped_1.fastq |
| 62 | + fi |
| 63 | + if [ -f ${prefix}.Unmapped.out.mate2 ]; then |
| 64 | + mv ${prefix}.Unmapped.out.mate2 ${prefix}.unmapped_2.fastq |
| 65 | + gzip ${prefix}.unmapped_2.fastq |
| 66 | + fi |
| 67 | + """ |
| 68 | + |
| 69 | + stub: |
| 70 | + prefix = task.ext.prefix ?: "${meta.id}" |
| 71 | + """ |
| 72 | + echo "" | gzip > ${prefix}.unmapped_1.fastq.gz |
| 73 | + echo "" | gzip > ${prefix}.unmapped_2.fastq.gz |
| 74 | + touch ${prefix}Xd.out.bam |
| 75 | + touch ${prefix}.Log.final.out |
| 76 | + touch ${prefix}.Log.out |
| 77 | + touch ${prefix}.Log.progress.out |
| 78 | + touch ${prefix}.sortedByCoord.out.bam |
| 79 | + touch ${prefix}.toTranscriptome.out.bam |
| 80 | + touch ${prefix}.Aligned.unsort.out.bam |
| 81 | + touch ${prefix}.Aligned.sortedByCoord.out.bam |
| 82 | + touch ${prefix}.tab |
| 83 | + touch ${prefix}.SJ.out.tab |
| 84 | + touch ${prefix}.ReadsPerGene.out.tab |
| 85 | + touch ${prefix}.Chimeric.out.junction |
| 86 | + touch ${prefix}.out.sam |
| 87 | + touch ${prefix}.Signal.UniqueMultiple.str1.out.wig |
| 88 | + touch ${prefix}.Signal.UniqueMultiple.str1.out.bg |
| 89 | + """ |
| 90 | +} |
0 commit comments