From d581ff8dcadffaf8fc670a60e664320cb95b4ee9 Mon Sep 17 00:00:00 2001 From: nalcala Date: Fri, 7 Apr 2017 17:18:11 +0200 Subject: [PATCH 01/12] debug file read --- BQSR.nf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/BQSR.nf b/BQSR.nf index e5c4533..61c80ca 100755 --- a/BQSR.nf +++ b/BQSR.nf @@ -52,10 +52,9 @@ fasta_ref_pac = file( params.fasta_ref+'.pac' ) fasta_ref_alt = file( params.fasta_ref+'.alt' ) if (file(params.input_folder).listFiles().findAll { it.name ==~ /.*bam/ }.size() > 0){ - println "BAM files found, proceed with realignment"; mode ='bam' - bam_files = Channel.fromPath( params.input_folder+'/*.bam' - bai_files = Channel.fromPath( params.input_folder+'/*.bai' - ) + println "BAM files found, proceed with realignment"; + bam_files = Channel.fromPath( params.input_folder+'/*.bam'); + bai_files = Channel.fromPath( params.input_folder+'/*.bai') }else{ println "ERROR: input folder contains no fastq nor BAM files"; System.exit(0) } From 51f89cf96735bc48a914206769a85f08a7a48932 Mon Sep 17 00:00:00 2001 From: nalcala Date: Fri, 7 Apr 2017 17:20:59 +0200 Subject: [PATCH 02/12] debug file read --- BQSR.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BQSR.nf b/BQSR.nf index 61c80ca..3200abd 100755 --- a/BQSR.nf +++ b/BQSR.nf @@ -66,7 +66,7 @@ process base_quality_score_recalibration { tag { file_tag } input: - file("${file_tag}.bam") from bam_files + file bam from bam_files file("${file_tag}.bam.bai") from bai_files output: file("${file_tag_new}_recal.table") into recal_table_files @@ -77,7 +77,7 @@ process base_quality_score_recalibration { publishDir params.out_folder, mode: 'move' shell: - file_tag=infile.baseName + file_tag=bam.baseName file_tag_new=file_tag+'_BQSR' ''' indelsvcf=(`ls !{params.GATK_bundle}/*indels*.vcf* | grep -v ".tbi" | grep -v ".idx"`) From 020e193ad7df2b570c393316f8e5d12dfa494d22 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 10:00:00 +0200 Subject: [PATCH 03/12] update to gatk4 --- BQSR.nf | 133 ++++++++++++++++++++++++++++++++---------------- LICENSE | 0 README.md | 0 nextflow.config | 45 ++++++++++++++++ 4 files changed, 135 insertions(+), 43 deletions(-) mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 nextflow.config diff --git a/BQSR.nf b/BQSR.nf index 3200abd..3248c13 100755 --- a/BQSR.nf +++ b/BQSR.nf @@ -1,25 +1,22 @@ #! /usr/bin/env nextflow // usage : ./BQSR.nf --input_folder input/ --cpu 8 --mem 32 --fasta_ref hg19.fasta -/* -vim: syntax=groovy --*- mode: groovy;-*- */ // requirement: -// - samtools +// - gatk4 // - samblaster // - sambamba //default values params.help = null params.input_folder = '.' -params.fasta_ref = 'hg19.fasta' +params.ref = 'hg19.fasta' params.cpu = 8 params.mem = 32 -params.mem_sambamba = 1 -params.out_folder = "." -params.intervals = "" -params.GATK_bundle = "bundle" -params.GATK_folder = "." +params.output_folder = "." +params.bed = "" +params.snp_vcf = "dbsnp.vcf" +params.indel_vcf = "Mills_1000G_indels.vcf" + if (params.help) { log.info '' @@ -32,29 +29,39 @@ if (params.help) { log.info '' log.info 'Mandatory arguments:' log.info ' --input_folder FOLDER Folder containing BAM or fastq files to be aligned.' - log.info ' --fasta_ref FILE Reference fasta file (with index).' + log.info ' --ref FILE Reference fasta file (with index).' log.info 'Optional arguments:' log.info ' --cpu INTEGER Number of cpu used by bwa mem and sambamba (default: 8).' log.info ' --mem INTEGER Size of memory used by sambamba (in GB) (default: 32).' - log.info ' --out_folder STRING Output folder (default: results_alignment).' + log.info ' --output_folder STRING Output folder (default: results_alignment).' log.info '' exit 1 } //read files -fasta_ref = file(params.fasta_ref) -fasta_ref_fai = file( params.fasta_ref+'.fai' ) -fasta_ref_sa = file( params.fasta_ref+'.sa' ) -fasta_ref_bwt = file( params.fasta_ref+'.bwt' ) -fasta_ref_ann = file( params.fasta_ref+'.ann' ) -fasta_ref_amb = file( params.fasta_ref+'.amb' ) -fasta_ref_pac = file( params.fasta_ref+'.pac' ) -fasta_ref_alt = file( params.fasta_ref+'.alt' ) +ref = file(params.ref) +ref_fai = file( params.ref+'.fai' ) +ref_dict= file( params.ref.replaceFirst(/fasta/, "").replaceFirst(/fa/, "") +'dict') +//ref_sa = file( params.ref+'.sa' ) +//ref_bwt = file( params.ref+'.bwt' ) +//ref_ann = file( params.ref+'.ann' ) +//ref_amb = file( params.ref+'.amb' ) +//ref_pac = file( params.ref+'.pac' ) +//ref_alt = file( params.ref+'.alt' ) + +//get know site VCFs from GATK bundle +known_snps = file( params.snp_vcf ) +known_snps_index = file( params.snp_vcf+'.tbi' ) +known_indels = file( params.indel_vcf ) +known_indels_index = file( params.indel_vcf+'.tbi' ) if (file(params.input_folder).listFiles().findAll { it.name ==~ /.*bam/ }.size() > 0){ println "BAM files found, proceed with realignment"; - bam_files = Channel.fromPath( params.input_folder+'/*.bam'); - bai_files = Channel.fromPath( params.input_folder+'/*.bai') + //bam_files = Channel.fromPath( params.input_folder+'/*.bam'); + //bai_files = Channel.fromPath( params.input_folder+'/*.bai') + bam_bai_files = Channel.fromFilePairs("${params.input_folder}/*{.bam,.bai}") + .map { row -> tuple(row[1][0], row[1][1]) } + }else{ println "ERROR: input folder contains no fastq nor BAM files"; System.exit(0) } @@ -64,32 +71,72 @@ process base_quality_score_recalibration { cpus params.cpu memory params.mem+'G' tag { file_tag } - + + publishDir "$params.output_folder/BAM/", mode: 'copy', pattern: "*bam*" + publishDir "$params.output_folder/QC/BAM/BQSR/", mode: 'copy', + saveAs: {filename -> + if (filename.indexOf("table") > 0) "$filename" + else if (filename.indexOf("plots") > 0) "$filename" + else null + } + input: - file bam from bam_files - file("${file_tag}.bam.bai") from bai_files + set file(bam), file(bai) from bam_bai_files + file known_snps + file known_snps_index + file known_indels + file known_indels_index + file ref + file ref_fai + file ref_dict + output: - file("${file_tag_new}_recal.table") into recal_table_files - file("${file_tag_new}_post_recal.table") into recal_table_post_files - file("${file_tag_new}_recalibration_plots.pdf") into recal_plots_files - set val(file_tag_new), file("${file_tag_new}.bam") into recal_bam_files - file("${file_tag_new}.bam.bai") into recal_bai_files - publishDir params.out_folder, mode: 'move' + file("*_recal.table") into recal_table_files + file("*plots.pdf") into recal_plots_files + set val(file_tag_new), file("${file_tag_new}.bam"), file("${file_tag_new}.bam.bai") into final_bam_bai_files shell: file_tag=bam.baseName - file_tag_new=file_tag+'_BQSR' + file_tag_new=file_tag+'_BQSRecalibrated' ''' - indelsvcf=(`ls !{params.GATK_bundle}/*indels*.vcf* | grep -v ".tbi" | grep -v ".idx"`) - dbsnpvcfs=(`ls !{params.GATK_bundle}/*dbsnp*.vcf* | grep -v ".tbi" | grep -v ".idx"`) - dbsnpvcf=${dbsnpvcfs[@]:(-1)} - knownSitescom='' - for ll in $indelsvcf; do knownSitescom=$knownSitescom' -knownSites '$ll; done - knownSitescom=$knownSitescom' -knownSites '$dbsnpvcf - java -jar !{params.GATK_folder}/GenomeAnalysisTK.jar -T BaseRecalibrator -nct !{params.cpu} -R !{params.fasta_ref} -I !{file_tag}.bam $knownSitescom -L !{params.intervals} -o !{file_tag_new}_recal.table - java -jar !{params.GATK_folder}/GenomeAnalysisTK.jar -T BaseRecalibrator -nct !{params.cpu} -R !{params.fasta_ref} -I !{file_tag}.bam $knownSitescom -BQSR !{file_tag_new}_recal.table -L !{params.intervals} -o !{file_tag_new}_post_recal.table - java -jar !{params.GATK_folder}/GenomeAnalysisTK.jar -T AnalyzeCovariates -R !{params.fasta_ref} -before !{file_tag_new}_recal.table -after !{file_tag_new}_post_recal.table -plots !{file_tag_new}_recalibration_plots.pdf - java -jar !{params.GATK_folder}/GenomeAnalysisTK.jar -T PrintReads -nct !{params.cpu} -R !{params.fasta_ref} -I !{file_tag}.bam -BQSR !{file_tag_new}_recal.table -L !{params.intervals} -o !{file_tag_new}.bam + gatk BaseRecalibrator --java-options "-Xmx!{params.mem}G" -R !{ref} -I !{file_tag}.bam --known-sites !{known_snps} --known-sites !{known_indels} -O !{file_tag}_recal.table + gatk ApplyBQSR --java-options "-Xmx!{params.mem}G" -R !{ref} -I !{file_tag}.bam --bqsr-recal-file !{file_tag}_recal.table -O !{file_tag_new}.bam + gatk BaseRecalibrator --java-options "-Xmx!{params.mem}G" -R !{ref} -I !{file_tag_new}.bam --known-sites !{known_snps} --known-sites !{known_indels} -O !{file_tag_new}_recal.table + gatk AnalyzeCovariates --java-options "-Xmx!{params.mem}G" -before !{file_tag}_recal.table -after !{file_tag_new}_recal.table -plots !{file_tag_new}_recalibration_plots.pdf mv !{file_tag_new}.bai !{file_tag_new}.bam.bai ''' -} \ No newline at end of file +} + +process multiqc_final { + cpus 2 + memory '1G' + + publishDir "${params.output_folder}/QC/BAM/", mode: 'copy' + + input: + file BQSR_results from recal_table_files.collect() + file BQSR_results_plots from recal_plots_files.collect() + + output: + file("*report.html") into final_output + file("multiqc_BQSR_report_data/") into final_output_data + + shell: + ''' + multiqc . -n multiqc_BQSR_report.html + ''' +} + +// Display completion message +workflow.onComplete { + log.info "N E X T F L O W ~ version ${workflow.nextflow.version} ${workflow.nextflow.build}" + //log.info "iarcbioinfo/BQSR-nf ~ " + this.grabRevision() + (workflow.commitId ? " [${workflow.commitId}]" : "") + log.info "Completed at: " + workflow.complete + log.info "Duration : " + workflow.duration + log.info "Success : " + workflow.success + log.info "Exit status : " + workflow.exitStatus + log.info "Error report: " + (workflow.errorReport ?: '-') +} + + + diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/nextflow.config b/nextflow.config old mode 100644 new mode 100755 index 29c01e5..c9817b2 --- a/nextflow.config +++ b/nextflow.config @@ -3,3 +3,48 @@ manifest { description = 'Perform Base Quality Score Recalibration of BAM files' mainScript = 'BQSR.nf' } + +profiles { + conda { + process { + conda = "$baseDir/environment.yml" + } + conda.createTimeout = "200 min" + } + docker { + docker.enabled = true + process.container = 'iarcbioinfo/bqsr-nf' + } + singularity { + singularity.enabled = true + process.container = 'iarcbioinfo/bqsr-nf' + } +} + +process { + process.container = 'iarcbioinfo/bqsr-nf:dev' + shell = ['/bin/bash','-o','pipefail'] +} + +params.output_folder="." + + +timeline { + enabled = true + file = "${params.output_folder}/nf-pipeline_info/bqsr-nf_timeline.html" +} + +report { + enabled = true + file = "${params.output_folder}/nf-pipeline_info/bqsr-nf_report.html" +} + +trace { + enabled = true + file = "${params.output_folder}/nf-pipeline_info/bqsr-nf_trace.txt" +} + +dag { + enabled = true + file = "${params.output_folder}/nf-pipeline_info/bqsr-nf_dag.html" +} From 88bd0d8eb8e9eca04473b641b96714cab9f714d9 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 10:31:14 +0200 Subject: [PATCH 04/12] Update README.md --- README.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/README.md b/README.md index e97004e..b8a80fe 100755 --- a/README.md +++ b/README.md @@ -1,2 +1,77 @@ # BQSR-nf Nextflow script for base quality score recalibration of bam files using GATK + +## Nextflow pipeline for base quality score recalibration with GATK processing +[![CircleCI](https://circleci.com/gh/IARCbioinfo/BQSR-nf/tree/master.svg?style=svg)](https://circleci.com/gh/IARCbioinfo/BQSR-nf/tree/master) +[![Docker Hub](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com/r/iarcbioinfo/bqsr-nf/) + +## Decription + +Nextflow pipeline for base quality score recalibration and quality control + +## Dependencies + +1. Nextflow: for common installation procedures see the [IARC-nf](https://github.com/IARCbioinfo/IARC-nf) repository. + +2. [*multiQC*](http://multiqc.info/docs/) +3. [*GATK4*](https://software.broadinstitute.org/gatk/guide/quickstart) must be in the PATH variable +4. [GATK bundle](https://software.broadinstitute.org/gatk/download/bundle) VCF files with lists of indels and SNVs (recommended: 1000 genomes indels, dbsnp VCF) + +## Input + | Type | Description | + |-----------|---------------| + |--input_folder | a folder with bam files | + + +## Parameters + +* #### Mandatory +| Name | Example value | Description | +|-----------|--------------:|-------------| +|--ref | ref.fa | reference genome fasta file for GATK | + +* #### Optional + +| Name | Default value | Description | +|-----------|--------------|-------------| +|--cpu | 2 | number of CPUs | +|--mem | 32 | memory for mapping| +|--output_folder | . | output folder for aligned BAMs| +|--snp_vcf | dbsnp.vcf | VCF file with known variants for GATK BQSR | +|--indel_vcf | Mills_100G_indels.vcf | VCF file with known indels for GATK BQSR | + +* #### Flags + +| Name | Description | +|-----------|-------------| +|--help | print usage and optional parameters | + +## Usage +To run the pipeline on a series of bam files in folder *bam*, a reference genome with indexes at *ref.fa*, and known snps and indels from the gatk bundle, one can type: +```bash +nextflow run iarcbioinfo/BQSR-nf --input_folder bam --ref ref.fa --snp_vcf GATK_bundle/dbsnp_146.hg38.vcf.gz --indel_vcf GATK_bundle/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz +``` + +## Output + | Type | Description | + |-----------|---------------| + | BAM/file.bam | BAM files of alignments or realignments | + | BAM/file.bam.bai | BAI files of alignments or realignments | + | QC/multiqc_posttrim_report.html | multiqc report before trimming | + | QC/multiqc_posttrim_report_data | folder with data used to compute multiqc report before trimming | + | QC/bam/file_readdist.txt, file_clipping_profile\*, file_jun_stauration\*| RSeQC reports | + | QC/BAM/BQSR/file_recal.table | table of scores before recalibration | + | QC/BAM/BQSR/file_post_recal.table | table of scores after recalibration | + | QC/BAM/BQSR/file_recalibration_plots.pdf | before/after recalibration plots | + +The output_folder directory contains three subfolders: BAM, counts, and QC + +## Directed Acyclic Graph + +[![DAG BQSR](dag_BQSR.png)](http://htmlpreview.github.io/?https://github.com/IARCbioinfo/BQSR-nf/blob/dev/dag_BQSR.html) + +## Contributions + + | Name | Email | Description | + |-----------|---------------|-----------------| + | Nicolas Alcala* | AlcalaN@fellows.iarc.fr | Developer to contact for support | From ce4951f02ab9804aafe5ff418ef14d404e353295 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 11:27:09 +0200 Subject: [PATCH 05/12] update help and add multiqc options --- BQSR.nf | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/BQSR.nf b/BQSR.nf index 3248c13..b49eef7 100755 --- a/BQSR.nf +++ b/BQSR.nf @@ -1,6 +1,4 @@ #! /usr/bin/env nextflow -// usage : ./BQSR.nf --input_folder input/ --cpu 8 --mem 32 --fasta_ref hg19.fasta - // requirement: // - gatk4 // - samblaster @@ -10,12 +8,12 @@ params.help = null params.input_folder = '.' params.ref = 'hg19.fasta' -params.cpu = 8 +params.cpu = 2 params.mem = 32 params.output_folder = "." -params.bed = "" params.snp_vcf = "dbsnp.vcf" params.indel_vcf = "Mills_1000G_indels.vcf" +params.multiqc_config = 'NO_FILE' if (params.help) { @@ -25,15 +23,19 @@ if (params.help) { log.info '-------------------------------------------------------------' log.info '' log.info 'Usage: ' - log.info 'nextflow run BQSR.nf --input_folder input/ --fasta_ref hg19.fasta [--cpu 8] [--mem 32] [--out_folder output/]' + log.info 'nextflow run BQSR.nf --input_folder input/ --ref hg19.fasta [--cpu 8] [--mem 32] [--output_folder output/]' log.info '' log.info 'Mandatory arguments:' - log.info ' --input_folder FOLDER Folder containing BAM or fastq files to be aligned.' - log.info ' --ref FILE Reference fasta file (with index).' + log.info ' --input_folder FOLDER Folder containing BAM or fastq files to be aligned.' + log.info ' --ref FILE Reference fasta file (with index).' log.info 'Optional arguments:' - log.info ' --cpu INTEGER Number of cpu used by bwa mem and sambamba (default: 8).' - log.info ' --mem INTEGER Size of memory used by sambamba (in GB) (default: 32).' - log.info ' --output_folder STRING Output folder (default: results_alignment).' + log.info ' --cpu INTEGER Number of cpu used by bwa mem and sambamba (default: 8).' + log.info ' --mem INTEGER Size of memory used by sambamba (in GB) (default: 32).' + log.info ' --snp_vcf STRING path to SNP VCF from GATK bundle (default : dbsnp.vcf)' + log.info ' --indel_vcf STRING path to indel VCF from GATK bundle (default : Mills_1000G_indels.vcf)' + log.info ' --output_folder STRING Output folder (default: results_alignment).' + log.info ' --multiqc_config STRING config yaml file for multiqc (default : none)' + log.info '' log.info '' exit 1 } @@ -55,6 +57,9 @@ known_snps_index = file( params.snp_vcf+'.tbi' ) known_indels = file( params.indel_vcf ) known_indels_index = file( params.indel_vcf+'.tbi' ) +//multiqc config file +ch_config_for_multiqc = file(params.multiqc_config) + if (file(params.input_folder).listFiles().findAll { it.name ==~ /.*bam/ }.size() > 0){ println "BAM files found, proceed with realignment"; //bam_files = Channel.fromPath( params.input_folder+'/*.bam'); @@ -116,14 +121,20 @@ process multiqc_final { input: file BQSR_results from recal_table_files.collect() file BQSR_results_plots from recal_plots_files.collect() + file multiqc_config from ch_config_for_multiqc output: file("*report.html") into final_output file("multiqc_BQSR_report_data/") into final_output_data shell: + if( multiqc_config.name=='NO_FILE' ){ + opt = "" + }else{ + opt = "--config ${multiqc_config}" + } ''' - multiqc . -n multiqc_BQSR_report.html + multiqc . -n multiqc_BQSR_report.html -m gatk !{opt} --comment "GATK base quality score recalibration QC report" ''' } From 93fa18576cd561a2af07ab263c7eaaf558392d31 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 11:33:09 +0200 Subject: [PATCH 06/12] added conda env and circle ci tests --- .circleci/config.yml | 18 ++++++++++++++++++ environment.yml | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100755 .circleci/config.yml create mode 100755 environment.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100755 index 0000000..cece8fa --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,18 @@ +version: 2 + +jobs: + build: + machine: true + steps: + - checkout + - run: cd ~ ; wget -qO- get.nextflow.io | bash ; chmod 755 nextflow ; sudo ln -s ~/nextflow /usr/local/bin/ ; sudo apt-get install graphviz + - run: cd ~ && git clone https://github.com/iarcbioinfo/data_test.git + - run: echo " docker.runOptions = '-u $(id -u):$(id -g)' " > ~/.nextflow/config + - run: cd ~/project/ ; docker build -t iarcbioinfo/bqsr-nf . + - run: cd ; nextflow run ~/project/BQSR.nf --help + - run: cd ; nextflow run ~/project/BQSR.nf -with-docker iarcbioinfo/bqsr-nf --input_folder ~/data_test/BAM/ --output_folder BAM_bqsr --cpu 2 --mem 4 --snp_vcf ~/data_test/REF/dbsnp_138.17_7572000-7591000.vcf.gz --indel_vcf ~/data_test/REF/1000G_phase1.indels.17_7572000-7591000.sites.vcf.gz --ref ~/data_test/REF/17_7572000-7591000.fasta -with-dag dag_bqsr.png + - run: cd ; nextflow run ~/project/BQSR.nf -with-docker iarcbioinfo/bqsr-nf --input_folder ~/data_test/BAM/ --output_folder BAM_bqsr --cpu 2 --mem 4 --snp_vcf ~/data_test/REF/dbsnp_138.17_7572000-7591000.vcf.gz --indel_vcf ~/data_test/REF/1000G_phase1.indels.17_7572000-7591000.sites.vcf.gz --ref ~/data_test/REF/17_7572000-7591000.fasta -with-dag dag_STAR_bqsr.html + - run: cd ; cp ~/dag* ~/project/. + - deploy: + branch: [master, dev] + command: chmod +x deploy.sh && ./deploy.sh diff --git a/environment.yml b/environment.yml new file mode 100755 index 0000000..2b9cfdf --- /dev/null +++ b/environment.yml @@ -0,0 +1,16 @@ +name: bqsr +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - fontconfig > 2 + - font-ttf-dejavu-sans-mono > 2 + - r-base + - r-essentials + - multiqc=1.7 + - gatk4=4.0.5.1 + - r-ggplot2=3.1.0 + - r-gplots=3.0.1 + - r-gsalib=2.1.0 + From 3bb3eb8c1e5cdccf09c52007c9cb8dcfc6016d50 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 11:36:27 +0200 Subject: [PATCH 07/12] created dockerfile --- Dockerfile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..87ad168 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +################## BASE IMAGE ##################### +FROM nfcore/base + + +################## METADATA ####################### + +LABEL base_image="nfcore/base" +LABEL version="1.0" +LABEL software="bqsr-nf" +LABEL software.version="2.0" +LABEL about.summary="Container image containing all requirements for bqsr-nf" +LABEL about.home="http://github.com/IARCbioinfo/BQSR-nf" +LABEL about.documentation="http://github.com/IARCbioinfo/BQSR-nf/README.md" +LABEL about.license_file="http://github.com/IARCbioinfo/BQSR-nf/LICENSE.txt" +LABEL about.license="GNU-3.0" + +################## MAINTAINER ###################### +MAINTAINER **nalcala** <**alcalan@fellows.iarc.fr**> + +################## INSTALLATION ###################### +COPY environment.yml / +RUN conda env create -n bqsr-nf -f /environment.yml && conda clean -a +ENV PATH /opt/conda/envs/bqsr-nf/bin:$PATH From eb6f5f342ef6f138a3006698631dcce33a4faaf1 Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 11:46:22 +0200 Subject: [PATCH 08/12] changed help exit code --- BQSR.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BQSR.nf b/BQSR.nf index b49eef7..bcc47b5 100755 --- a/BQSR.nf +++ b/BQSR.nf @@ -37,7 +37,7 @@ if (params.help) { log.info ' --multiqc_config STRING config yaml file for multiqc (default : none)' log.info '' log.info '' - exit 1 + exit 0 } //read files From 7da7ef25464abef84c0fc7f2ca4c392bfcf8a5db Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 11:56:03 +0200 Subject: [PATCH 09/12] added reshape dependency --- environment.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index 2b9cfdf..7e8350a 100755 --- a/environment.yml +++ b/environment.yml @@ -10,7 +10,8 @@ dependencies: - r-essentials - multiqc=1.7 - gatk4=4.0.5.1 - - r-ggplot2=3.1.0 + - r-ggplot2=3.1.1 - r-gplots=3.0.1 - r-gsalib=2.1.0 - + - r-essentials + - r-reshape=0.8.8 From bb0c43ae97efb034c6f601256dde47bf8660a22d Mon Sep 17 00:00:00 2001 From: nalcala Date: Thu, 17 Oct 2019 12:01:05 +0200 Subject: [PATCH 10/12] added deploy.sh --- deploy.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..3643218 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,14 @@ +#!/bin/bash +cd ~/project/ +commitID=`git log -n 1 --pretty="%h" -- environment.yml` +sed -i '/^# environment.yml/d' Singularity && echo -e "# environment.yml commit ID: $commitID\n" >> Singularity +git config --global user.email "alcalan@fellows.iarc.fr" +git config --global user.name "Circle CI_$CIRCLE_PROJECT_REPONAME_$CIRCLE_BRANCH" +git add . +git status +git commit -m "Generated DAG [skip ci]" +git push origin $CIRCLE_BRANCH + +curl -H "Content-Type: application/json" --data "{\"source_type\": \"Branch\", \"source_name\": \"$CIRCLE_BRANCH\"}" -X POST https://cloud.docker.com/api/build/v1/source/d3356607-1420-43f3-8955-8f9212639ba4/trigger/5f8ed292-0607-4279-88e7-e8d0c65df8e0/call/ + + From 0b6fb9e3c2819135a2c0378ec7816231cecd1631 Mon Sep 17 00:00:00 2001 From: Circle CI_dev Date: Thu, 17 Oct 2019 10:10:30 +0000 Subject: [PATCH 11/12] Generated DAG [skip ci] --- dag_STAR_bqsr.html | 158 +++++++++++++++++++++++++++++++++++++++++++++ dag_bqsr.png | Bin 0 -> 50820 bytes 2 files changed, 158 insertions(+) create mode 100644 dag_STAR_bqsr.html create mode 100644 dag_bqsr.png diff --git a/dag_STAR_bqsr.html b/dag_STAR_bqsr.html new file mode 100644 index 0000000..6931c4d --- /dev/null +++ b/dag_STAR_bqsr.html @@ -0,0 +1,158 @@ + + + + + + Nextflow Cytoscape.js with Dagre + + + + + + + + + + + +

Nextflow Cytoscape.js with Dagre

+
+ + + diff --git a/dag_bqsr.png b/dag_bqsr.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb394262399188385694d2667d7624b62414a39 GIT binary patch literal 50820 zcmeFZcR1I7|30iuWL5T_4J%1DA$yjRm6=g?L}tTG%8De3M1{zXY(h3=6%vW;ksbH> zzPi5mI)2A}9QXbA{l2cFkHq`^dOe?yaX!xTe7-_;w3H9*XV_0fM07w^Me!UF(QXAI zq8*dOJMoXRn32vLewo;eXG|(xZup*oagW&**tRof_~kKDe^IZ%#Xn&5US| zV(guUbGsk0*Hq>1|19B5<8tWmnX^-!N($U0?Z@*ONg4prtgjd8dtCU^;z9fk-+%FXh(d{*NC`%(i-ykx_a=S@}_H?BxnSX*RZ7m1K!* zFW>F>&re5)q>9e+*8FsBdnV1uz_32i#cN_RaJkIO?%K6$c6PpN3qRYF750%c5mQh+ zeE9H}v)B*q`;?zPeUfnbp=f6IJTg-E#*G`^(TU>M$Np}tynFX9JUqOrs)~n)XW-fB z_o}-a%hSh?ALop2Y;A3IlVGmN2?`4O@Zm#BO3KRY(B$vm{k^^S=}(ST-rgnu@j-a_ zK$-W-K&gi+S5#i!bxTXmgcea@VZ(x}k6ylf`CV%Biu=kv!X9Ba%yTXdmU-JaI?CAh z=ICc%p7)d@t0^{~d8rf%uhAF~8c9!j3e?37S&M-`z*yxWyIM6r0zwYXqQ`q_|Y2lsOG|rDgw#={UM+&ywPfXV?*##j@jo|x&i_Mo4@vigoIowaXT7Tx4tyd)%jB0*VmVm zgX3cMWohT{l~GYqc<0~0e_zzo)6>__Hm&d@Tu#qh_v_bA%XF3RZed1r{-pRrwL6>O*=cg;}#8iG3HOXJGg}IcZ7P{rPjPnUIEt zhNskJU0o`_s9!y%{`^OdgxtTcNZi-gN8(9RBgFFX*YtGaqep>leP6y@Ffl1BDPiyr z*?rl$+P@$RD7+4%VQ*)W<%F)?%u430zP%t^)h`Jda{o!g(EdGzR! zvB2rmr)k+!Gc$c=2g|CfyRBXS{iH?%X*_c}GV_{@5=&?^acsR<~K4YHRdg z{ZepJL}b)i?8=oZMUDfV_g}61Z$5mG+Uk6LKK;&}J9EGO{Q2`*@7UI6 z1iQj&;K7IWUG43a%Inl~on7hLMzkcu!^7KQ0><2TaVd(#kK*D+D2nX+?ob{(dURNu zlA8Jsr6H=(v*fj}*oA~RAH@H$W5=fX!)k^{$Htx{BrNKum#K|qTnk3hb$$7QkNfEq zvus#gmur|Q9Ay4?{f`1Mv$$(O)6cZDw1o_wf7hR?)ih~^bYqqFiiwVXk)1uX75a3W zJ-TtV;_B6_o7X1e_zcdOnD|chzQYZD{HV00(!xa@x~)VViX}ESG(5KYl2-8Y<0nt7 zt*m@bg+}OJxNu=U*u}+#n4O!OduzAnz8u6E%}q-A{rmT~upT>poRm)GmV7ccZ)
Tq=h?Y|ES?aYme7rt^YE6c&m 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

!alG3 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 Date: Thu, 17 Oct 2019 13:45:07 +0200 Subject: [PATCH 12/12] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b8a80fe..5aed689 100755 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Nextflow pipeline for base quality score recalibration and quality control 3. [*GATK4*](https://software.broadinstitute.org/gatk/guide/quickstart) must be in the PATH variable 4. [GATK bundle](https://software.broadinstitute.org/gatk/download/bundle) VCF files with lists of indels and SNVs (recommended: 1000 genomes indels, dbsnp VCF) +You can provide a config file to customize the multiqc report (see https://multiqc.info/docs/#configuring-multiqc). + ## Input | Type | Description | |-----------|---------------| @@ -39,6 +41,7 @@ Nextflow pipeline for base quality score recalibration and quality control |--output_folder | . | output folder for aligned BAMs| |--snp_vcf | dbsnp.vcf | VCF file with known variants for GATK BQSR | |--indel_vcf | Mills_100G_indels.vcf | VCF file with known indels for GATK BQSR | +|--multiqc_config | null | config yaml file for multiqc | * #### Flags @@ -57,14 +60,13 @@ nextflow run iarcbioinfo/BQSR-nf --input_folder bam --ref ref.fa --snp_vcf GATK_ |-----------|---------------| | BAM/file.bam | BAM files of alignments or realignments | | BAM/file.bam.bai | BAI files of alignments or realignments | - | QC/multiqc_posttrim_report.html | multiqc report before trimming | - | QC/multiqc_posttrim_report_data | folder with data used to compute multiqc report before trimming | - | QC/bam/file_readdist.txt, file_clipping_profile\*, file_jun_stauration\*| RSeQC reports | + | QC/multiqc_BQSR_report.html | multiqc report | + | QC/multiqc_BQSR_report_data | folder with data used to compute multiqc report | | QC/BAM/BQSR/file_recal.table | table of scores before recalibration | | QC/BAM/BQSR/file_post_recal.table | table of scores after recalibration | | QC/BAM/BQSR/file_recalibration_plots.pdf | before/after recalibration plots | -The output_folder directory contains three subfolders: BAM, counts, and QC +The output_folder directory contains two subfolders: BAM and QC ## Directed Acyclic Graph