diff --git a/bio/star/align/meta.yaml b/bio/star/align/meta.yaml index 4d00c29a7b..0ebb5f6c99 100644 --- a/bio/star/align/meta.yaml +++ b/bio/star/align/meta.yaml @@ -5,6 +5,7 @@ authors: - Johannes Köster - Tomás Di Domenico - Filipe G. Vieira + - Kashyap Chhatbar notes: | * The `extra` param allows for additional program arguments. * It is advisable to consider updating the limits setting before running STAR, diff --git a/bio/star/align/test/Snakefile b/bio/star/align/test/Snakefile index 460119108c..5c05466db0 100644 --- a/bio/star/align/test/Snakefile +++ b/bio/star/align/test/Snakefile @@ -12,6 +12,7 @@ rule star_pe_multi: aln="star/pe/{sample}/pe_aligned.sam", log="logs/pe/{sample}/Log.out", sj="star/pe/{sample}/SJ.out.tab", + unmapped=["star/pe/{sample}/unmapped.1.fastq.gz","star/pe/{sample}/unmapped.2.fastq.gz"], log: "logs/pe/{sample}.log", params: @@ -32,6 +33,7 @@ rule star_se: aln="star/se/{sample}/se_aligned.bam", log="logs/se/{sample}/Log.out", log_final="logs/se/{sample}/Log.final.out", + unmapped="star/se/{sample}/unmapped.fastq", log: "logs/se/{sample}.log", params: diff --git a/bio/star/align/wrapper.py b/bio/star/align/wrapper.py index 2b240b1a34..85033d1768 100644 --- a/bio/star/align/wrapper.py +++ b/bio/star/align/wrapper.py @@ -42,6 +42,9 @@ else: readcmd = "" +out_unmapped = snakemake.output.get("unmapped", "") +if out_unmapped: + out_unmapped = "--outReadsUnmapped Fastx" index = snakemake.input.get("idx") if not index: @@ -64,6 +67,7 @@ " --readFilesIn {input_str}" " {readcmd}" " {extra}" + " {out_unmapped}" " --outTmpDir {tmpdir}/STARtmp" " --outFileNamePrefix {tmpdir}/" " --outStd {stdout}" @@ -83,3 +87,12 @@ shell("cat {tmpdir}/Log.progress.out > {snakemake.output.log_progress:q}") if snakemake.output.get("log_final"): shell("cat {tmpdir}/Log.final.out > {snakemake.output.log_final:q}") + unmapped = snakemake.output.get("unmapped") + if unmapped: + # SE + if not fq2: + unmapped = [unmapped] + + for i, out_unmapped in enumerate(unmapped, 1): + cmd = "gzip -c" if out_unmapped.endswith("gz") else "cat" + shell("{cmd} {tmpdir}/Unmapped.out.mate{i} > {out_unmapped}")