diff --git a/src/docker_modules/MultiQC/1.0/Dockerfile b/src/docker_modules/MultiQC/1.0/Dockerfile index 09b218a95597c3df504e78bc2043d2a139730016..d351f1c6a979de6616edce3fd276be262bad8b43 100644 --- a/src/docker_modules/MultiQC/1.0/Dockerfile +++ b/src/docker_modules/MultiQC/1.0/Dockerfile @@ -6,10 +6,16 @@ ENV PACKAGES build-essential=12.4* \ python3-pip=9.0.1* \ python3-setuptools=39.0.1* \ python3-dev=3.6.5* \ - python3-wheel=0.30.0* + python3-wheel=0.30.0* \ + locales RUN apt-get update && \ apt-get install -y --no-install-recommends ${PACKAGES} && \ apt-get clean +RUN locale-gen en_US.UTF-8 +ENV LC_ALL=en_US.utf-8 +ENV LANG=en_US.utf-8 + RUN pip3 install multiqc==${MULTIQC_VERSION} + diff --git a/src/nf_modules/MultiQC/multiqc.config b/src/nf_modules/MultiQC/multiqc.config new file mode 100644 index 0000000000000000000000000000000000000000..c1bda95e70a612c7caf4825930e740faedd1c62d --- /dev/null +++ b/src/nf_modules/MultiQC/multiqc.config @@ -0,0 +1,38 @@ +profiles { + docker { + docker.temp = 'auto' + docker.enabled = true + process { + $fastqc_fastq { + container = "fastqc:0.11.5" + } + $multiqc { + container = "multiqc:1.0" + } + } + } + sge { + process{ + $fastqc_fastq { + beforeScript = "module purge; module load FastQC/0.11.5" + executor = "sge" + cpus = 1 + memory = "5GB" + time = "6h" + queueSize = 1000 + pollInterval = '60sec' + queue = 'monointeldeb128' + } + $multiqc { + beforeScript = "module purge; module load FastQC/1.0" + executor = "sge" + cpus = 1 + memory = "5GB" + time = "6h" + queueSize = 1000 + pollInterval = '60sec' + queue = 'monointeldeb128' + } + } + } +} diff --git a/src/nf_modules/MultiQC/multiqc.nf b/src/nf_modules/MultiQC/multiqc.nf new file mode 100644 index 0000000000000000000000000000000000000000..eae20b515bb37218265d95c3fb4bb7e27b80c7a8 --- /dev/null +++ b/src/nf_modules/MultiQC/multiqc.nf @@ -0,0 +1,25 @@ +/* +* multiqc : +* Imputs : report files +* Output : multiqc report +*/ + +/* MultiQC */ + +process multiqc { + tag "$repport.baseName" + publishDir "results/fastq/multiqc/", mode: 'copy' + cpus = 1 + + input: + file repport from fastqc_repport.collect() + + output: + file "*multiqc_*" into multiqc_report + + script: +""" +multiqc -f . +""" +} + diff --git a/src/nf_modules/MultiQC/tests/multiqc_paired.nf b/src/nf_modules/MultiQC/tests/multiqc_paired.nf new file mode 100644 index 0000000000000000000000000000000000000000..7db2ea32544ed119e1e3cba66ec70b949f2e7a61 --- /dev/null +++ b/src/nf_modules/MultiQC/tests/multiqc_paired.nf @@ -0,0 +1,43 @@ +params.fastq = "$baseDir/data/fastq/*_{1,2}.fastq" + +log.info "fastq files : ${params.fastq}" + +Channel + .fromFilePairs( params.fastq ) + .ifEmpty { error "Cannot find any fastq files matching: ${params.fastq}" } + .set { fastq_files } + +process fastqc_fastq { + tag "$pair_id" + publishDir "results/fastq/fastqc/", mode: 'copy' + + input: + set pair_id, file(reads) from fastq_files + + output: + file "*.{zip,html}" into fastqc_repport + + script: +""" +fastqc --quiet --threads ${task.cpus} --format fastq --outdir ./ \ +${reads[0]} ${reads[1]} +""" +} + +process multiqc { + tag "$repport[0].baseName" + publishDir "results/fastq/multiqc/", mode: 'copy' + cpus = 1 + + input: + file repport from fastqc_repport.collect() + + output: + file "*multiqc_*" into multiqc_report + + script: +""" +multiqc -f . +""" +} + diff --git a/src/nf_modules/MultiQC/tests/multiqc_single.nf b/src/nf_modules/MultiQC/tests/multiqc_single.nf new file mode 100644 index 0000000000000000000000000000000000000000..30edc7bcb8cd4dd37d35ae830981c36362ec7f04 --- /dev/null +++ b/src/nf_modules/MultiQC/tests/multiqc_single.nf @@ -0,0 +1,43 @@ +params.fastq = "$baseDir/data/fastq/*.fastq" + +log.info "fastq files : ${params.fastq}" + +Channel + .fromPath( params.fastq ) + .ifEmpty { error "Cannot find any fastq files matching: ${params.fastq}" } + .set { fastq_files } + +process fastqc_fastq { + tag "$reads.baseName" + publishDir "results/fastq/fastqc/", mode: 'copy' + cpus = 1 + + input: + file reads from fastq_files + + output: + file "*.{zip,html}" into fastqc_repport + + script: +""" +fastqc --quiet --threads ${task.cpus} --format fastq --outdir ./ ${reads} +""" +} + +process multiqc { + tag "$repport[0].baseName" + publishDir "results/fastq/multiqc/", mode: 'copy' + cpus = 1 + + input: + file repport from fastqc_repport.collect() + + output: + file "*multiqc_*" into multiqc_report + + script: +""" +multiqc -f . +""" +} + diff --git a/src/nf_modules/MultiQC/tests/tests.sh b/src/nf_modules/MultiQC/tests/tests.sh new file mode 100755 index 0000000000000000000000000000000000000000..8aaa83c1e1eed5d173efd0b62fad37a5173734db --- /dev/null +++ b/src/nf_modules/MultiQC/tests/tests.sh @@ -0,0 +1,9 @@ +nextflow src/nf_modules/MultiQC/tests/multiqc_paired.nf \ + -c src/nf_modules/MultiQC/multiqc.config \ + -profile docker \ + --fastq "data/tiny_dataset/fastq/tiny_R{1,2}.fastq" + +nextflow src/nf_modules/MultiQC/tests/multiqc_single.nf \ + -c src/nf_modules/MultiQC/multiqc.config \ + -profile docker \ + --fastq "data/tiny_dataset/fastq/tiny_S.fastq"