From 482a679ca8e53ac9d9d72d9733fafafedce0aded Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 5 Nov 2019 13:49:02 +0000 Subject: [PATCH 001/226] Bump version to 1.1.1dev --- .travis.yml | 2 +- Dockerfile | 4 ++-- environment.yml | 2 +- nextflow.config | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0d477d1b..55073b54 100755 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ before_install: - docker pull nfcore/atacseq:dev # Fake the tag locally so that the pipeline runs properly # Looks weird when this is :dev to :dev, but makes sense when testing code for a release (:dev to :1.0.1) - - docker tag nfcore/atacseq:dev nfcore/atacseq:1.1.0 + - docker tag nfcore/atacseq:dev nfcore/atacseq:dev install: # Install Nextflow diff --git a/Dockerfile b/Dockerfile index 7c8ffa13..eed4f3cb 100755 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a # Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.0/bin:$PATH +ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH # Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-atacseq-1.1.0 > nf-core-atacseq-1.1.0.yml +RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml diff --git a/environment.yml b/environment.yml index 7291df75..5dcb2335 100755 --- a/environment.yml +++ b/environment.yml @@ -1,6 +1,6 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-atacseq-1.1.0 +name: nf-core-atacseq-1.1.1dev channels: - conda-forge - bioconda diff --git a/nextflow.config b/nextflow.config index 0255adf4..ceface2e 100755 --- a/nextflow.config +++ b/nextflow.config @@ -92,7 +92,7 @@ params { // Container slug. Stable releases should specify release tag! // Developmental code should specify :dev -process.container = 'nfcore/atacseq:1.1.0' +process.container = 'nfcore/atacseq:dev' // Load base.config by default for all pipelines includeConfig 'conf/base.config' @@ -159,7 +159,7 @@ manifest { description = 'ATACSeq peak-calling and differential analysis pipeline.' mainScript = 'main.nf' nextflowVersion = '>=19.10.0' - version = '1.1.0' + version = '1.1.1dev' } // Function to ensure that resource requirements don't go beyond From 4cecfdd2ef23b2be91fbcdbeee7f34f1f9055eb3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 5 Nov 2019 13:52:18 +0000 Subject: [PATCH 002/226] Update CHANGELOG --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9abafb44..b06732c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +[Unpublished Version / DEV] + +### `Added` + +### `Fixed` + +### `Dependencies` + +### `Deprecated` + ## [1.1.0] - 2019-11-05 ### `Added` From ce452afbf4e20df43eba710057487fab300df423 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 5 Nov 2019 16:09:13 +0000 Subject: [PATCH 003/226] Fix markdownlint --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b06732c3..e948eed1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -[Unpublished Version / DEV] +## [Unpublished Version / DEV] ### `Added` From bbfd5e5c7b0525b66b5adfe12395921510008b38 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 8 Nov 2019 21:55:47 +0000 Subject: [PATCH 004/226] Fix skip_trimming bug --- main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.nf b/main.nf index 1f32ea96..45b34590 100644 --- a/main.nf +++ b/main.nf @@ -521,8 +521,8 @@ process FastQC { */ if (params.skip_trimming) { ch_trimmed_reads = ch_raw_reads_trimgalore - ch_trimgalore_results_mqc = [] - ch_trimgalore_fastqc_reports_mqc = [] + ch_trimgalore_results_mqc = Channel.empty() + ch_trimgalore_fastqc_reports_mqc = Channel.empty() } else { process TrimGalore { tag "$name" From 087e00a2e909331f466d21c9b6ac73aeb38ca2aa Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 12 Nov 2019 14:04:49 +0000 Subject: [PATCH 005/226] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e948eed1..deb6ea8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` +* [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE + ### `Dependencies` ### `Deprecated` From 2e0087bb428ca9e36dd1bb4a7c6fd468e31a3f97 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 12 Nov 2019 14:05:09 +0000 Subject: [PATCH 006/226] Remove requests --- bin/check_design.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/check_design.py b/bin/check_design.py index 4c1436f0..d533f53e 100755 --- a/bin/check_design.py +++ b/bin/check_design.py @@ -8,7 +8,6 @@ import os import sys -import requests import argparse ############################################ From 2ab19c9e42d71665d328ea8935a83c2bf61a8f4a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 12 Nov 2019 15:53:35 +0000 Subject: [PATCH 007/226] Fix AWS batch settings --- main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.nf b/main.nf index 45b34590..28f8b260 100644 --- a/main.nf +++ b/main.nf @@ -193,14 +193,14 @@ if (params.bwa_index) { /* -- AWS -- */ //////////////////////////////////////////////////// -if (workflow.profile == 'awsbatch') { +if (workflow.profile.contains('awsbatch')) { // AWSBatch sanity checking if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" // Check outdir paths to be S3 buckets if running on AWSBatch // related: https://github.com/nextflow-io/nextflow/issues/813 if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (workflow.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." + if (params.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." } /////////////////////////////////////////////////////////////////////////////// From ea48b5093f76e76cdcdb53cf858d5cc6ac46a410 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 12 Nov 2019 18:49:37 +0000 Subject: [PATCH 008/226] Fix Tpyo --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2784b969..ab7fd57d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -Many thanks to contributing to nf-core/atacseq! +Many thanks for contributing to nf-core/atacseq! Please fill in the appropriate checklist below (delete whatever is not relevant). These are the most common things requested on pull requests (PRs). From e346b409e2a1c680f23bb5d4df0bdcb513df186b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 13 Nov 2019 09:59:27 +0000 Subject: [PATCH 009/226] Change saveAlignedIntermediates to save_align_intermeds --- docs/output.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index fe6e82a9..a9e31909 100755 --- a/docs/output.md +++ b/docs/output.md @@ -64,7 +64,7 @@ The initial QC and alignments are performed at the library-level e.g. if the sam *Output directories*: * `bwa/library/` - The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--saveAlignedIntermediates` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. + The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--save_align_intermeds` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. * `bwa/library/samtools_stats/` SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. @@ -100,7 +100,7 @@ The library-level alignments associated with the same sample are merged and subs *Output directories*: * `bwa/mergedLibrary/` - Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--saveAlignedIntermediates` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). + Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--save_align_intermeds` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). * `bwa/mergedLibrary/samtools_stats/` SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. * `bwa/mergedLibrary/picard_metrics/` From e377f738d101561bc10445d713decdae1c4aafcd Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 13 Nov 2019 10:21:44 +0000 Subject: [PATCH 010/226] Change skipMergeReplicate to skip_merge_replicates --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index a9e31909..c4c2f6fc 100755 --- a/docs/output.md +++ b/docs/output.md @@ -259,7 +259,7 @@ The alignments associated with all of the replicates from the same experimental File names in the resulting directory (i.e. `bwa/mergedReplicate/`) will have the '`.mRp.`' suffix to denote **m**erged **R**e**p**licates. -You can skip this portion of the analysis by specifying the `--skipMergeReplicate` parameter. +You can skip this portion of the analysis by specifying the `--skip_merge_replicates` parameter. >NB: Merged library-level alignments will be used for read counting relative to the consensus merged replicate-level peakset. This is the only way in which differential analysis can be performed at the merged replicate-level. From 7fc74257c688034e29ed1b63358c9a176995aaef Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 12:19:12 +0000 Subject: [PATCH 011/226] Make script work with Python3 --- bin/check_design.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/check_design.py b/bin/check_design.py index d533f53e..145ef909 100755 --- a/bin/check_design.py +++ b/bin/check_design.py @@ -41,7 +41,7 @@ def check_design(DesignFileIn,DesignFileOut): fin = open(DesignFileIn,'r') header = fin.readline().strip().split(',') if header != HEADER: - print "{} header: {} != {}".format(ERROR_STR,','.join(header),','.join(HEADER)) + print("{} header: {} != {}".format(ERROR_STR,','.join(header),','.join(HEADER))) sys.exit(1) numColList = [] @@ -54,25 +54,25 @@ def check_design(DesignFileIn,DesignFileOut): ## CHECK VALID NUMBER OF COLUMNS PER SAMPLE numCols = len(lspl) if numCols not in [3,4]: - print "{}: Invalid number of columns (3 for single-end or 4 for paired-end)!\nLine: '{}'".format(ERROR_STR,line.strip()) + print("{}: Invalid number of columns (3 for single-end or 4 for paired-end)!\nLine: '{}'".format(ERROR_STR,line.strip())) sys.exit(1) numColList.append(numCols) ## CHECK GROUP COLUMN HAS NO SPACES group,replicate,fastQFiles = lspl[0],lspl[1],lspl[2:] if group.find(' ') != -1: - print "{}: Group id contains spaces!\nLine: '{}'".format(ERROR_STR,line.strip()) + print("{}: Group id contains spaces!\nLine: '{}'".format(ERROR_STR,line.strip())) sys.exit(1) ## CHECK REPLICATE COLUMN IS INTEGER if not replicate.isdigit(): - print "{}: Replicate id not an integer!\nLine: '{}'".format(ERROR_STR,line.strip()) + print("{}: Replicate id not an integer!\nLine: '{}'".format(ERROR_STR,line.strip())) sys.exit(1) for fastq in fastQFiles: ## CHECK FASTQ FILE EXTENSION if fastq[-9:] != '.fastq.gz' and fastq[-6:] != '.fq.gz': - print "{}: FastQ file has incorrect extension (has to be '.fastq.gz' or 'fq.gz') - {}\nLine: '{}'".format(ERROR_STR,fastq,line.strip()) + print("{}: FastQ file has incorrect extension (has to be '.fastq.gz' or 'fq.gz') - {}\nLine: '{}'".format(ERROR_STR,fastq,line.strip())) sys.exit(1) ## CREATE GROUP MAPPING DICT = {GROUP_ID: {REPLICATE_ID:[[FASTQ_FILES]]} @@ -89,7 +89,7 @@ def check_design(DesignFileIn,DesignFileOut): ## CHECK IF DATA IS PAIRED-END OR SINGLE-END AND NOT A MIXTURE if min(numColList) != max(numColList): - print "{}: Mixture of paired-end and single-end reads!".format(ERROR_STR) + print("{}: Mixture of paired-end and single-end reads!".format(ERROR_STR)) sys.exit(1) ## CHECK IF MULTIPLE GROUPS EXIST @@ -106,7 +106,7 @@ def check_design(DesignFileIn,DesignFileOut): ## CHECK THAT REPLICATE IDS ARE IN FORMAT 1.. uniq_rep_ids = set(groupRepDict[group].keys()) if len(uniq_rep_ids) != max(uniq_rep_ids): - print "{}: Replicate IDs must start with 1..\nGroup: {}, Replicate IDs: {}".format(ERROR_STR,group,list(uniq_rep_ids)) + print("{}: Replicate IDs must start with 1..\nGroup: {}, Replicate IDs: {}".format(ERROR_STR,group,list(uniq_rep_ids))) sys.exit(1) numRepList.append(max(uniq_rep_ids)) From 449157a60cfaaa7bf3826c0fc49e40d7aa888e14 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 12:19:19 +0000 Subject: [PATCH 012/226] Make script work with Python3 --- bin/scrape_software_versions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 0b76c7a6..022a8758 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -54,9 +54,9 @@ results[k] = "v{}".format(match.group(1)) except IOError: results[k] = False - + # Remove software set to false in results -for k in results: +for k in list(results): if not results[k]: del(results[k]) From 0e4cd20480ff9070a49cf58b7e6fde9ca8b3b279 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 13:29:16 +0000 Subject: [PATCH 013/226] Update software to latest in environment --- environment.yml | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/environment.yml b/environment.yml index 5dcb2335..33741853 100755 --- a/environment.yml +++ b/environment.yml @@ -7,34 +7,35 @@ channels: - defaults dependencies: ## conda-forge packages - - gawk=4.2.1 - - r-base=3.4.1 - - r-optparse=1.6.0 + - gawk=5.0.1 + - r-base=3.6.1 + - r-optparse=1.6.4 - r-rcolorbrewer=1.1_2 - - r-ggplot2=3.1.0 + - r-ggplot2=3.2.1 - r-reshape2=1.4.3 - r-scales=1.0.0 - - r-pheatmap=1.0.10 - - r-lattice=0.20_35 - - r-upsetr=1.3.3 - - r-xfun=0.3 + - r-pheatmap=1.0.12 + - r-lattice=0.20_38 + - r-upsetr=1.4.0 + - r-xfun=0.11 ## bioconda packages - fastqc=0.11.8 - - trim-galore=0.5.0 + - trim-galore=0.6.4 - bwa=0.7.17 - samtools=1.9 - - picard=2.19.0 + - picard=2.21.3 - bamtools=2.5.1 - - pysam=0.15.2 - - bedtools=2.27.1 - - preseq=2.0.3 - - deeptools=3.2.1 - - ucsc-bedgraphtobigwig=377 - - macs2=2.1.2 - - homer=4.9.1 + - pysam=0.15.3 + - bedtools=2.29.0 + - ucsc-bedgraphtobigwig=357 + - deeptools=3.3.1 + - macs2=2.2.5 + - genrich=0.6 + - homer=4.10 - ataqv=1.0.0 - subread=1.6.4 + - preseq=2.0.3 - multiqc=1.7 - - bioconductor-deseq2=1.20.0 - - bioconductor-vsn=3.46.0 + - bioconductor-deseq2=1.26.0 + - bioconductor-vsn=3.54.0 From b05eb47bb779103c512d04de5d0f3e5e70d5d18a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 13:53:23 +0000 Subject: [PATCH 014/226] Update CHANGELOG --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index deb6ea8c..3f003c04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,9 +12,30 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE +* Make executables in `bin/` compatible with Python 3 ### `Dependencies` +* Add genrich `0.6` +* Update gawk `4.2.1` -> `5.0.1` +* Update r-base `3.4.1` -> `3.6.1` +* Update r-optparse `1.6.0` -> `1.6.4` +* Update r-ggplot2 `3.1.0` -> `3.2.1` +* Update r-pheatmap `1.0.10` -> `1.0.12` +* Update r-lattice `0.20_35` -> `0.20_38` +* Update r-upsetr `1.3.3` -> `1.4.0` +* Update r-xfun `0.3` -> `0.11` +* Update trim-galore `0.5.0` -> `0.6.4` +* Update picard `2.19.0` -> `2.21.3` +* Update pysam `0.15.2` -> `0.15.3` +* Update bedtools `2.27.1` -> `2.29.0` +* Update ucsc-bedgraphtobigwig `377` -> `357` +* Update deeptools `3.2.1` -> `3.3.1` +* Update macs2 `2.1.2` -> `2.2.5` +* Update homer `4.9.1` -> `4.10` +* Update bioconductor-deseq2 `1.20.0` -> `1.26.0` +* Update bioconductor-vsn `3.46.0` -> `3.54.0` + ### `Deprecated` ## [1.1.0] - 2019-11-05 From 3f103ab99021dcce7881bd50cca79308b8ed8b99 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 14:32:44 +0000 Subject: [PATCH 015/226] Replace has_key with in --- bin/check_design.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/check_design.py b/bin/check_design.py index 145ef909..d55e2cec 100755 --- a/bin/check_design.py +++ b/bin/check_design.py @@ -77,9 +77,9 @@ def check_design(DesignFileIn,DesignFileOut): ## CREATE GROUP MAPPING DICT = {GROUP_ID: {REPLICATE_ID:[[FASTQ_FILES]]} replicate = int(replicate) - if not groupRepDict.has_key(group): + if group not in groupRepDict: groupRepDict[group] = {} - if not groupRepDict[group].has_key(replicate): + if replicate not in groupRepDict[group]: groupRepDict[group][replicate] = [] groupRepDict[group][replicate].append(fastQFiles) From 072689dc37172542242ab2136abe4132fcdfdbc6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 14:32:51 +0000 Subject: [PATCH 016/226] Replace has_key with in --- bin/macs2_merged_expand.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bin/macs2_merged_expand.py b/bin/macs2_merged_expand.py index 10889947..55c3a057 100755 --- a/bin/macs2_merged_expand.py +++ b/bin/macs2_merged_expand.py @@ -87,9 +87,9 @@ def macs2_merged_expand(MergedIntervalTxtFile,SampleNameList,OutFile,isNarrow=Fa groupDict = {} for sID in ['_'.join(x.split('_')[:-2]) for x in names]: gID = '_'.join(sID.split('_')[:-1]) - if not groupDict.has_key(gID): + if gID not in groupDict: groupDict[gID] = [] - if not sID in groupDict[gID]: + if sID not in groupDict[gID]: groupDict[gID].append(sID) ## GET SAMPLES THAT PASS REPLICATE THRESHOLD @@ -103,23 +103,23 @@ def macs2_merged_expand(MergedIntervalTxtFile,SampleNameList,OutFile,isNarrow=Fa for idx in range(len(names)): sample = '_'.join(names[idx].split('_')[:-2]) if sample in passRepThreshList: - if not fcDict.has_key(sample): + if sample not in fcDict: fcDict[sample] = [] fcDict[sample].append(str(fcs[idx])) - if not qvalDict.has_key(sample): + if sample not in qvalDict: qvalDict[sample] = [] qvalDict[sample].append(str(qvals[idx])) - if not pvalDict.has_key(sample): + if sample not in pvalDict: pvalDict[sample] = [] pvalDict[sample].append(str(pvals[idx])) - if not startDict.has_key(sample): + if sample not in startDict: startDict[sample] = [] startDict[sample].append(str(starts[idx])) - if not endDict.has_key(sample): + if sample not in endDict: endDict[sample] = [] endDict[sample].append(str(ends[idx])) if isNarrow: - if not summitDict.has_key(sample): + if sample not in summitDict: summitDict[sample] = [] summitDict[sample].append(str(summits[idx])) @@ -138,7 +138,7 @@ def macs2_merged_expand(MergedIntervalTxtFile,SampleNameList,OutFile,isNarrow=Fa fout.write('\t'.join(oList) + '\n') tsamples = tuple(sorted(samples)) - if not combFreqDict.has_key(tsamples): + if tsamples not in combFreqDict: combFreqDict[tsamples] = 0 combFreqDict[tsamples] += 1 totalOutIntervals += 1 From 9838c60b9d555815c36912515375055853591238 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 14:58:20 +0000 Subject: [PATCH 017/226] Pin pysam version --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 33741853..09d992c6 100755 --- a/environment.yml +++ b/environment.yml @@ -26,7 +26,7 @@ dependencies: - samtools=1.9 - picard=2.21.3 - bamtools=2.5.1 - - pysam=0.15.3 + - pysam=0.15.2 ## Keep this version for bampe_rm_orphan.py - bedtools=2.29.0 - ucsc-bedgraphtobigwig=357 - deeptools=3.3.1 From 33c09f970ab78f37ac6f0f039432922a16923bd5 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 16:19:41 +0000 Subject: [PATCH 018/226] Update pysam again --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 09d992c6..33741853 100755 --- a/environment.yml +++ b/environment.yml @@ -26,7 +26,7 @@ dependencies: - samtools=1.9 - picard=2.21.3 - bamtools=2.5.1 - - pysam=0.15.2 ## Keep this version for bampe_rm_orphan.py + - pysam=0.15.3 - bedtools=2.29.0 - ucsc-bedgraphtobigwig=357 - deeptools=3.3.1 From 25b2fc408480ee8abd2c051c35438c36128dc267 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 16:47:19 +0000 Subject: [PATCH 019/226] Update pysam calls --- bin/bampe_rm_orphan.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/bin/bampe_rm_orphan.py b/bin/bampe_rm_orphan.py index c11d4e67..97f2fc2a 100755 --- a/bin/bampe_rm_orphan.py +++ b/bin/bampe_rm_orphan.py @@ -61,10 +61,11 @@ def bampe_rm_orphan(BAMIn,BAMOut,onlyFRPairs=False): ## ITERATE THROUGH BAM FILE EOF = 0 - SAMFin = pysam.Samfile(BAMIn,"rb") - SAMFout = pysam.Samfile(BAMOut, "wb",header=SAMFin.header) - currRead = SAMFin.next() - for read in SAMFin: + SAMFin = pysam.AlignmentFile(BAMIn, "rb") + SAMFout = pysam.AlignmentFile(BAMOut, "wb", header=SAMFin.header) + iter = SAMFin.fetch(until_eof=True) + currRead = iter.__next__() + for read in iter: totalReads += 1 if currRead.qname == read.qname: pair1 = currRead; pair2 = read @@ -103,7 +104,7 @@ def bampe_rm_orphan(BAMIn,BAMOut,onlyFRPairs=False): ## RESET COUNTER try: totalReads += 1 - currRead = SAMFin.next() + currRead = iter.__next__() except: StopIteration EOF = 1 From e747a96d79bfa952cade88943222e351bdc32937 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 16:59:59 +0000 Subject: [PATCH 020/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f003c04..99b2793f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` * Add genrich `0.6` +* Add r-stringi `1.4.3` * Update gawk `4.2.1` -> `5.0.1` * Update r-base `3.4.1` -> `3.6.1` * Update r-optparse `1.6.0` -> `1.6.4` From 572aed56a1d24bee0f9810b7efd673f8ce27db06 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 17:00:05 +0000 Subject: [PATCH 021/226] Add r-stringi 1.4.3 --- environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yml b/environment.yml index 33741853..b30d99bb 100755 --- a/environment.yml +++ b/environment.yml @@ -18,6 +18,7 @@ dependencies: - r-lattice=0.20_38 - r-upsetr=1.4.0 - r-xfun=0.11 + - r-stringi=1.4.3 ## bioconda packages - fastqc=0.11.8 From b5cd1264c31f1509eb09fa6da5ca0feaae944d49 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 17:45:47 +0000 Subject: [PATCH 022/226] Add channel --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index b30d99bb..04788280 100755 --- a/environment.yml +++ b/environment.yml @@ -18,7 +18,7 @@ dependencies: - r-lattice=0.20_38 - r-upsetr=1.4.0 - r-xfun=0.11 - - r-stringi=1.4.3 + - r::r-stringi=1.4.3 ## bioconda packages - fastqc=0.11.8 From c352ebdcfa3986a3ee4f33ecc04ad428b64f6a7e Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 17:50:40 +0000 Subject: [PATCH 023/226] Use next() instead of __next__ --- bin/bampe_rm_orphan.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/bampe_rm_orphan.py b/bin/bampe_rm_orphan.py index 97f2fc2a..439a53ee 100755 --- a/bin/bampe_rm_orphan.py +++ b/bin/bampe_rm_orphan.py @@ -64,7 +64,7 @@ def bampe_rm_orphan(BAMIn,BAMOut,onlyFRPairs=False): SAMFin = pysam.AlignmentFile(BAMIn, "rb") SAMFout = pysam.AlignmentFile(BAMOut, "wb", header=SAMFin.header) iter = SAMFin.fetch(until_eof=True) - currRead = iter.__next__() + currRead = next(iter) for read in iter: totalReads += 1 if currRead.qname == read.qname: @@ -104,7 +104,7 @@ def bampe_rm_orphan(BAMIn,BAMOut,onlyFRPairs=False): ## RESET COUNTER try: totalReads += 1 - currRead = iter.__next__() + currRead = next(iter) except: StopIteration EOF = 1 From ee6fd720b07be94232b167a616a2427edcde5358 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 18:49:54 +0000 Subject: [PATCH 024/226] skip_plot_profile to bypass MultiQC error --- conf/test.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/test.config b/conf/test.config index 0435d184..bd55970e 100755 --- a/conf/test.config +++ b/conf/test.config @@ -28,4 +28,6 @@ params { // For speed to avoid CI time-out fingerprint_bins = 100 + + skip_plot_profile = true } From 1938bad75551e17c05efca850e6cc982fc3c44b2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 23:41:51 +0000 Subject: [PATCH 025/226] Add link to MultiQC issue --- conf/test.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/test.config b/conf/test.config index bd55970e..9b712466 100755 --- a/conf/test.config +++ b/conf/test.config @@ -29,5 +29,7 @@ params { // For speed to avoid CI time-out fingerprint_bins = 100 + // MultiQC v1.7 bug with Python3 + // See https://github.com/ewels/MultiQC/issues/1057 skip_plot_profile = true } From 2f38051136cf2a438cce86c8970a7d657a5b9ed3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 14 Nov 2019 23:58:44 +0000 Subject: [PATCH 026/226] Finalllyyyyyyyyy working --- environment.yml | 60 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/environment.yml b/environment.yml index 04788280..2139ea1a 100755 --- a/environment.yml +++ b/environment.yml @@ -7,36 +7,36 @@ channels: - defaults dependencies: ## conda-forge packages - - gawk=5.0.1 - - r-base=3.6.1 - - r-optparse=1.6.4 - - r-rcolorbrewer=1.1_2 - - r-ggplot2=3.2.1 - - r-reshape2=1.4.3 - - r-scales=1.0.0 - - r-pheatmap=1.0.12 - - r-lattice=0.20_38 - - r-upsetr=1.4.0 - - r-xfun=0.11 + - conda-forge::gawk=5.0.1 + - conda-forge::r-base=3.6.1 + - conda-forge::r-optparse=1.6.4 + - conda-forge::r-rcolorbrewer=1.1_2 + - conda-forge::r-ggplot2=3.2.1 + - conda-forge::r-reshape2=1.4.3 + - conda-forge::r-scales=1.0.0 + - conda-forge::r-pheatmap=1.0.12 + - conda-forge::r-lattice=0.20_38 + - conda-forge::r-upsetr=1.4.0 + - conda-forge::r-xfun=0.11 - r::r-stringi=1.4.3 ## bioconda packages - - fastqc=0.11.8 - - trim-galore=0.6.4 - - bwa=0.7.17 - - samtools=1.9 - - picard=2.21.3 - - bamtools=2.5.1 - - pysam=0.15.3 - - bedtools=2.29.0 - - ucsc-bedgraphtobigwig=357 - - deeptools=3.3.1 - - macs2=2.2.5 - - genrich=0.6 - - homer=4.10 - - ataqv=1.0.0 - - subread=1.6.4 - - preseq=2.0.3 - - multiqc=1.7 - - bioconductor-deseq2=1.26.0 - - bioconductor-vsn=3.54.0 + - bioconda::fastqc=0.11.8 + - bioconda::trim-galore=0.6.4 + - bioconda::bwa=0.7.17 + - bioconda::samtools=1.9 + - bioconda::picard=2.21.3 + - bioconda::bamtools=2.5.1 + - bioconda::pysam=0.15.3 + - bioconda::bedtools=2.29.0 + - bioconda::ucsc-bedgraphtobigwig=357 + - bioconda::deeptools=3.3.1 + - bioconda::macs2=2.2.5 + - bioconda::genrich=0.6 + - bioconda::homer=4.10 + - bioconda::ataqv=1.0.0 + - bioconda::subread=1.6.4 + - bioconda::preseq=2.0.3 + - bioconda::multiqc=1.7 + - bioconda::bioconductor-deseq2=1.26.0 + - bioconda::bioconductor-vsn=3.54.0 From bb42deec21f5b50da1f823559a616a3a6b3e037e Mon Sep 17 00:00:00 2001 From: Drew Behrens Date: Thu, 21 Nov 2019 15:08:54 +0100 Subject: [PATCH 027/226] updated TrimGalore for mult-core support --- CHANGELOG.md | 2 ++ environment.yml | 1 + main.nf | 6 +++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99b2793f..45c1b31a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * Make executables in `bin/` compatible with Python 3 +* [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! ### `Dependencies` @@ -36,6 +37,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update homer `4.9.1` -> `4.10` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` +* Added pigz `2.3.4` ### `Deprecated` diff --git a/environment.yml b/environment.yml index 2139ea1a..65563398 100755 --- a/environment.yml +++ b/environment.yml @@ -18,6 +18,7 @@ dependencies: - conda-forge::r-lattice=0.20_38 - conda-forge::r-upsetr=1.4.0 - conda-forge::r-xfun=0.11 + - conda-forge::pigz=2.3.4 - r::r-stringi=1.4.3 ## bioconda packages diff --git a/main.nf b/main.nf index 28f8b260..6673bc9e 100644 --- a/main.nf +++ b/main.nf @@ -526,7 +526,7 @@ if (params.skip_trimming) { } else { process TrimGalore { tag "$name" - label 'process_long' + label 'process_medium' publishDir "${params.outdir}/trim_galore", mode: 'copy', saveAs: { filename -> if (filename.endsWith(".html")) "fastqc/$filename" @@ -553,13 +553,13 @@ if (params.skip_trimming) { if (params.single_end) { """ [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - trim_galore --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz + trim_galore -j $task.cpus --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz """ } else { """ [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - trim_galore --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz + trim_galore -j $task.cpus --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz """ } } From 32c7afa74564bed1899e8d5b9aff461dafb9e98c Mon Sep 17 00:00:00 2001 From: Drew Behrens Date: Thu, 21 Nov 2019 15:56:08 +0100 Subject: [PATCH 028/226] Update CHANGELOG.md Co-Authored-By: Harshil Patel --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45c1b31a..42297b6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update homer `4.9.1` -> `4.10` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` -* Added pigz `2.3.4` +* Add pigz `2.3.4` ### `Deprecated` From 593233aac3fcf56e525aa48dde46376f44ed5c65 Mon Sep 17 00:00:00 2001 From: Drew Behrens Date: Thu, 21 Nov 2019 15:56:20 +0100 Subject: [PATCH 029/226] Update main.nf Co-Authored-By: Harshil Patel --- main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 6673bc9e..ad67b7ec 100644 --- a/main.nf +++ b/main.nf @@ -553,7 +553,7 @@ if (params.skip_trimming) { if (params.single_end) { """ [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - trim_galore -j $task.cpus --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz + trim_galore --cores $task.cpus --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz """ } else { """ From fbdef55bf6d2a304e2c33d8da155dff66d6bb53b Mon Sep 17 00:00:00 2001 From: Drew Behrens Date: Thu, 21 Nov 2019 15:56:44 +0100 Subject: [PATCH 030/226] Apply suggestions from code review Co-Authored-By: Harshil Patel --- main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.nf b/main.nf index ad67b7ec..816fead7 100644 --- a/main.nf +++ b/main.nf @@ -559,7 +559,7 @@ if (params.skip_trimming) { """ [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - trim_galore -j $task.cpus --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz + trim_galore --cores $task.cpus --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz """ } } From 3b77b99e2dc533a2b66a121d7c54c9c961c22247 Mon Sep 17 00:00:00 2001 From: Drew Behrens Date: Thu, 21 Nov 2019 16:02:26 +0100 Subject: [PATCH 031/226] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42297b6f..94b3268f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Added` +* [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! + ### `Fixed` * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * Make executables in `bin/` compatible with Python 3 -* [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! ### `Dependencies` From 78b15f2e35f3c078199aa02a693b19296cb51388 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 24 Nov 2019 16:09:17 +0000 Subject: [PATCH 032/226] Update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94b3268f..f11055d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Add genrich `0.6` * Add r-stringi `1.4.3` +* Add pigz `2.3.4` * Update gawk `4.2.1` -> `5.0.1` * Update r-base `3.4.1` -> `3.6.1` * Update r-optparse `1.6.0` -> `1.6.4` @@ -36,9 +37,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update deeptools `3.2.1` -> `3.3.1` * Update macs2 `2.1.2` -> `2.2.5` * Update homer `4.9.1` -> `4.10` +* Update multiqc `1.7` -> `1.8` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` -* Add pigz `2.3.4` ### `Deprecated` From f62c4b3652346477a1f9b4f815b410d7c0b5051d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 24 Nov 2019 16:09:27 +0000 Subject: [PATCH 033/226] Update MultiQC to v1.8 --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 65563398..7c80e4ed 100755 --- a/environment.yml +++ b/environment.yml @@ -38,6 +38,6 @@ dependencies: - bioconda::ataqv=1.0.0 - bioconda::subread=1.6.4 - bioconda::preseq=2.0.3 - - bioconda::multiqc=1.7 + - bioconda::multiqc=1.8 - bioconda::bioconductor-deseq2=1.26.0 - bioconda::bioconductor-vsn=3.54.0 From 197ca51992ab22b0c1189557a2f2479e3c50bc8a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 24 Nov 2019 16:16:18 +0000 Subject: [PATCH 034/226] Update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f11055d4..fc18f302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,8 +28,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update r-pheatmap `1.0.10` -> `1.0.12` * Update r-lattice `0.20_35` -> `0.20_38` * Update r-upsetr `1.3.3` -> `1.4.0` +* Update r-scales `1.0.0` -> `1.1.0` * Update r-xfun `0.3` -> `0.11` -* Update trim-galore `0.5.0` -> `0.6.4` +* Update trim-galore `0.5.0` -> `0.6.5` * Update picard `2.19.0` -> `2.21.3` * Update pysam `0.15.2` -> `0.15.3` * Update bedtools `2.27.1` -> `2.29.0` From fa4727d838c3cfa0abc2a06de0be4393e984f6b8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 24 Nov 2019 16:16:30 +0000 Subject: [PATCH 035/226] Update misc software --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index 7c80e4ed..b89ccc24 100755 --- a/environment.yml +++ b/environment.yml @@ -13,7 +13,7 @@ dependencies: - conda-forge::r-rcolorbrewer=1.1_2 - conda-forge::r-ggplot2=3.2.1 - conda-forge::r-reshape2=1.4.3 - - conda-forge::r-scales=1.0.0 + - conda-forge::r-scales=1.1.0 - conda-forge::r-pheatmap=1.0.12 - conda-forge::r-lattice=0.20_38 - conda-forge::r-upsetr=1.4.0 @@ -23,7 +23,7 @@ dependencies: ## bioconda packages - bioconda::fastqc=0.11.8 - - bioconda::trim-galore=0.6.4 + - bioconda::trim-galore=0.6.5 - bioconda::bwa=0.7.17 - bioconda::samtools=1.9 - bioconda::picard=2.21.3 From 8aa1cb0409872799741ac22e979f54dcc3a216ed Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 24 Nov 2019 16:19:00 +0000 Subject: [PATCH 036/226] Update TrimGalore logic --- main.nf | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index 816fead7..45c0e2bc 100644 --- a/main.nf +++ b/main.nf @@ -526,7 +526,7 @@ if (params.skip_trimming) { } else { process TrimGalore { tag "$name" - label 'process_medium' + label 'process_high' publishDir "${params.outdir}/trim_galore", mode: 'copy', saveAs: { filename -> if (filename.endsWith(".html")) "fastqc/$filename" @@ -544,22 +544,36 @@ if (params.skip_trimming) { file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc script: + // Calculate number of --cores for TrimGalore based on value of task.cpus + // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 + // See: https://github.com/nf-core/atacseq/pull/65#issuecomment-557839116 + def cores = 1 + if (task.cpus) { + tcores = (((task.cpus as int) - 3) / 3) as int + if (tcores > 1) { + cores = tcores + } + } + + // Added soft-links to original fastqs for consistent naming in MultiQC c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' + + // Added soft-links to original fastqs for consistent naming in MultiQC if (params.single_end) { """ [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - trim_galore --cores $task.cpus --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz + trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz """ } else { """ [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - trim_galore --cores $task.cpus --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz + trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz """ } } From 72fd092beca2fbe36cfed727080c1a41612bbec7 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 25 Nov 2019 17:58:44 +0000 Subject: [PATCH 037/226] Remove skip_plot_profile from test.config --- conf/test.config | 4 ---- 1 file changed, 4 deletions(-) diff --git a/conf/test.config b/conf/test.config index 9b712466..0435d184 100755 --- a/conf/test.config +++ b/conf/test.config @@ -28,8 +28,4 @@ params { // For speed to avoid CI time-out fingerprint_bins = 100 - - // MultiQC v1.7 bug with Python3 - // See https://github.com/ewels/MultiQC/issues/1057 - skip_plot_profile = true } From 520d3998ddabc2d81ad32f33264b3d0d79fbf59b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Dec 2019 11:51:20 +0000 Subject: [PATCH 038/226] Remove awsbatch.config --- conf/awsbatch.config | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100755 conf/awsbatch.config diff --git a/conf/awsbatch.config b/conf/awsbatch.config deleted file mode 100755 index 14af5866..00000000 --- a/conf/awsbatch.config +++ /dev/null @@ -1,18 +0,0 @@ -/* - * ------------------------------------------------- - * Nextflow config file for running on AWS batch - * ------------------------------------------------- - * Base config needed for running with -profile awsbatch - */ -params { - config_profile_name = 'AWSBATCH' - config_profile_description = 'AWSBATCH Cloud Profile' - config_profile_contact = 'Alexander Peltzer (@apeltzer)' - config_profile_url = 'https://aws.amazon.com/de/batch/' -} - -aws.region = params.awsregion -process.executor = 'awsbatch' -process.queue = params.awsqueue -executor.awscli = '/home/ec2-user/miniconda/bin/aws' -params.tracedir = './' From 572debc0f95c0cbf63fb63f9e72dca16dc600921 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Dec 2019 14:16:27 +0000 Subject: [PATCH 039/226] Move awsbatch to configs --- docs/usage.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 704fa679..ebbe3520 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -51,6 +51,7 @@ * [AWS Batch specific parameters](#aws-batch-specific-parameters) * [`--awsqueue`](#--awsqueue) * [`--awsregion`](#--awsregion) + * [`--awscli`](#--awscli) * [Other command line parameters](#other-command-line-parameters) * [`--outdir`](#--outdir) * [`--email`](#--email) @@ -122,8 +123,6 @@ Use this parameter to choose a configuration profile. Profiles can give configur If `-profile` is not specified at all the pipeline will be run locally and expects all software to be installed and available on the `PATH`. -* `awsbatch` - * A generic configuration profile to be used with AWS Batch. * `conda` * A generic configuration profile to be used with [conda](https://conda.io/docs/) * Pulls most software from [Bioconda](https://bioconda.github.io/) @@ -424,7 +423,7 @@ If you have any questions or issues please send us a message on [Slack](https:// ## AWS Batch specific parameters -Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use the `-awsbatch` profile and then specify all of the following parameters. +Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use [`-profile awsbatch`](https://github.com/nf-core/configs/blob/master/conf/awsbatch.config) and then specify all of the following parameters. ### `--awsqueue` @@ -434,6 +433,10 @@ The JobQueue that you intend to use on AWS Batch. The AWS region to run your job in. Default is set to `eu-west-1` but can be adjusted to your needs. +### `--awscli` + +The [AWS CLI](https://www.nextflow.io/docs/latest/awscloud.html#aws-cli-installation) path in your custom AMI. Default: `/home/ec2-user/miniconda/bin/aws`. + Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a S3 storage bucket of your choice - you'll get an error message notifying you if you didn't. ## Other command line parameters From a8ebb1d074d830ff3fb3c59e459e041fc6dc9d55 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Dec 2019 14:16:31 +0000 Subject: [PATCH 040/226] Move awsbatch to configs --- main.nf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index 45c0e2bc..1125d257 100644 --- a/main.nf +++ b/main.nf @@ -84,6 +84,7 @@ def helpMessage() { AWSBatch --awsqueue [str] The AWSBatch JobQueue that needs to be set when running on AWSBatch --awsregion [str] The AWS Region for your AWS Batch job to run on + --awscli [str] Path to the AWS CLI tool """.stripIndent() } @@ -265,9 +266,10 @@ summary['Launch Dir'] = workflow.launchDir summary['Working Dir'] = workflow.workDir summary['Script Dir'] = workflow.projectDir summary['User'] = workflow.userName -if (workflow.profile == 'awsbatch') { +if (workflow.profile.contains('awsbatch')) { summary['AWS Region'] = params.awsregion summary['AWS Queue'] = params.awsqueue + summary['AWS CLI'] = params.awscli } summary['Config Profile'] = workflow.profile if (params.config_profile_description) summary['Config Description'] = params.config_profile_description @@ -554,7 +556,7 @@ if (params.skip_trimming) { cores = tcores } } - + // Added soft-links to original fastqs for consistent naming in MultiQC c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' @@ -562,7 +564,7 @@ if (params.skip_trimming) { tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' - + // Added soft-links to original fastqs for consistent naming in MultiQC if (params.single_end) { """ From c896ff68e630057f1ea306e560d0f6fb4c1694a4 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Dec 2019 14:16:35 +0000 Subject: [PATCH 041/226] Move awsbatch to configs --- nextflow.config | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nextflow.config b/nextflow.config index ceface2e..76db551d 100755 --- a/nextflow.config +++ b/nextflow.config @@ -52,10 +52,6 @@ params { skip_igv = false skip_multiqc = false - // Options: AWSBatch - awsqueue = false - awsregion = 'eu-west-1' - // Options: Config multiqc_config = "$baseDir/assets/multiqc/multiqc_config.yaml" bamtools_filter_pe_config = "$baseDir/assets/bamtools_filter_pe.json" @@ -105,7 +101,6 @@ try { } profiles { - awsbatch { includeConfig 'conf/awsbatch.config' } conda { process.conda = "$baseDir/environment.yml" } debug { process.beforeScript = 'echo $HOSTNAME' } docker { docker.enabled = true } From c3ac053abea214bf50ddaf675a9620d9077b816d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Dec 2019 14:38:07 +0000 Subject: [PATCH 042/226] Update TrimGalore cores calculation --- main.nf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/main.nf b/main.nf index 1125d257..e219fa5d 100644 --- a/main.nf +++ b/main.nf @@ -548,16 +548,15 @@ if (params.skip_trimming) { script: // Calculate number of --cores for TrimGalore based on value of task.cpus // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 - // See: https://github.com/nf-core/atacseq/pull/65#issuecomment-557839116 + // See: https://github.com/nf-core/atacseq/pull/65 def cores = 1 if (task.cpus) { - tcores = (((task.cpus as int) - 3) / 3) as int - if (tcores > 1) { - cores = tcores - } + cores = (task.cpus as int) - 4 + if (params.single_end) cores = (task.cpus as int) - 3 + if (cores < 1) cores = 1 + if (cores > 4) cores = 4 } - // Added soft-links to original fastqs for consistent naming in MultiQC c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' From 10169489c96d7c961b5e249342a9a4a16e9b5508 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:58:03 +0000 Subject: [PATCH 043/226] Update via template --- .github/CONTRIBUTING.md | 52 ++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 47dc0f76..0d1890fa 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,47 +1,57 @@ # nf-core/atacseq: Contributing Guidelines -Hi there! Many thanks for taking an interest in improving nf-core/atacseq. +Hi there! +Many thanks for taking an interest in improving nf-core/atacseq. -We try to manage the required tasks for nf-core/atacseq using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. - -However, don't be put off by this template - other more general issues and suggestions are welcome! Contributions to the code are even more welcome ;) - -> If you need help using or modifying nf-core/atacseq then the best place to ask is on the pipeline channel on [Slack](https://nf-co.re/join/slack/). +We try to manage the required tasks for nf-core/atacseq using GitHub issues, you probably came to this page when creating one. +Please use the pre-filled template to save time. +However, don't be put off by this template - other more general issues and suggestions are welcome! +Contributions to the code are even more welcome ;) +> If you need help using or modifying nf-core/atacseq then the best place to ask is on the nf-core Slack [#atacseq](https://nfcore.slack.com/channels/atacseq) channel ([join our Slack here](https://nf-co.re/join/slack)). ## Contribution workflow -If you'd like to write some code for nf-core/atacseq, the standard workflow -is as follows: -1. Check that there isn't already an issue about your idea in the - [nf-core/atacseq issues](https://github.com/nf-core/atacseq/issues) to avoid - duplicating work. +If you'd like to write some code for nf-core/atacseq, the standard workflow is as follows: + +1. Check that there isn't already an issue about your idea in the [nf-core/atacseq issues](https://github.com/nf-core/atacseq/issues) to avoid duplicating work * If there isn't one already, please create one so that others know you're working on this -2. Fork the [nf-core/atacseq repository](https://github.com/nf-core/atacseq) to your GitHub account +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/atacseq repository](https://github.com/nf-core/atacseq) to your GitHub account 3. Make the necessary changes / additions within your forked repository -4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged. - -If you're not used to this workflow with git, you can start with some [basic docs from GitHub](https://help.github.com/articles/fork-a-repo/) or even their [excellent interactive tutorial](https://try.github.io/). +4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged +If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). ## Tests -When you create a pull request with changes, [Travis CI](https://travis-ci.com/) will run automatic tests. + +When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. There are typically two types of tests that run: ### Lint Tests -The nf-core has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. + +`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. ### Pipeline Tests -Each nf-core pipeline should be set up with a minimal set of test-data. -Travis CI then runs the pipeline on this data to ensure that it exists successfully. + +Each `nf-core` pipeline should be set up with a minimal set of test-data. +`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. If there are any failures then the automated tests fail. -These tests are run both with the latest available version of Nextflow and also the minimum required version that is stated in the pipeline code. +These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. + +## Patch + +: warning: Only in the unlikely and regretful event of a release happening with a bug. + +* On your own fork, make a new branch `patch` based on `upstream/master`. +* Fix the bug, and bump version (X.Y.Z+1). +* A PR should be made on `master` from patch to directly this particular bug. ## Getting help -For further information/help, please consult the [nf-core/atacseq documentation](https://github.com/nf-core/atacseq#documentation) and don't hesitate to get in touch on the [nf-core/atacseq pipeline channel](https://nfcore.slack.com/channels/atacseq) on [Slack](https://nf-co.re/join/slack/). + +For further information/help, please consult the [nf-core/atacseq documentation](https://nf-co.re/nf-core/atacseq/docs) and don't hesitate to get in touch on the nf-core Slack [#atacseq](https://nfcore.slack.com/channels/atacseq) channel ([join our Slack here](https://nf-co.re/join/slack)). From b7ef415fee1164d734d910756eae5e7180f65bba Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:58:17 +0000 Subject: [PATCH 044/226] Update via template --- .github/ISSUE_TEMPLATE/bug_report.md | 43 +++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b287bce7..010263cf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,31 +1,42 @@ +# nf-core/atacseq bug report + Hi there! -Thanks for telling us about a problem with the pipeline. Please delete this text and anything that's not relevant from the template below: +Thanks for telling us about a problem with the pipeline. +Please delete this text and anything that's not relevant from the template below: + +## Describe the bug -#### Describe the bug A clear and concise description of what the bug is. -#### Steps to reproduce +## Steps to reproduce + Steps to reproduce the behaviour: + 1. Command line: `nextflow run ...` 2. See error: _Please provide your error message_ -#### Expected behaviour +## Expected behaviour + A clear and concise description of what you expected to happen. -#### System: - - Hardware: [e.g. HPC, Desktop, Cloud...] - - Executor: [e.g. slurm, local, awsbatch...] - - OS: [e.g. CentOS Linux, macOS, Linux Mint...] - - Version [e.g. 7, 10.13.6, 18.3...] +## System + +- Hardware: +- Executor: +- OS: +- Version + +## Nextflow Installation + +- Version: + +## Container engine -#### Nextflow Installation: - - Version: [e.g. 0.31.0] +- Engine: +- version: +- Image tag: -#### Container engine: - - Engine: [e.g. Conda, Docker or Singularity] - - version: [e.g. 1.0.0] - - Image tag: [e.g. nfcore/atacseq:1.0.0] +## Additional context -#### Additional context Add any other context about the problem here. From 4e5538a9298e49b08d7b41912975f3535e1b601c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:58:31 +0000 Subject: [PATCH 045/226] Update via template --- .github/ISSUE_TEMPLATE/feature_request.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1f025b77..222fe51a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,16 +1,24 @@ +# nf-core/atacseq feature request + Hi there! -Thanks for suggesting a new feature for the pipeline! Please delete this text and anything that's not relevant from the template below: +Thanks for suggesting a new feature for the pipeline! +Please delete this text and anything that's not relevant from the template below: + +## Is your feature request related to a problem? Please describe -#### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. + Ex. I'm always frustrated when [...] -#### Describe the solution you'd like +## Describe the solution you'd like + A clear and concise description of what you want to happen. -#### Describe alternatives you've considered +## Describe alternatives you've considered + A clear and concise description of any alternative solutions or features you've considered. -#### Additional context +## Additional context + Add any other context about the feature request here. From 8decb44d324c10677999ba285af9d811844aec61 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:58:46 +0000 Subject: [PATCH 046/226] Update via template --- .github/PULL_REQUEST_TEMPLATE.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ab7fd57d..67681d0c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,15 +1,19 @@ +# nf-core/atacseq pull request + Many thanks for contributing to nf-core/atacseq! -Please fill in the appropriate checklist below (delete whatever is not relevant). These are the most common things requested on pull requests (PRs). +Please fill in the appropriate checklist below (delete whatever is not relevant). +These are the most common things requested on pull requests (PRs). ## PR checklist - - [ ] This comment contains a description of changes (with reason) - - [ ] If you've fixed a bug or added code that should be tested, add tests! - - [ ] If necessary, also make a PR on the [nf-core/atacseq branch on the nf-core/test-datasets repo]( https://github.com/nf-core/test-datasets/pull/new/nf-core/atacseq) - - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - - [ ] Make sure your code lints (`nf-core lint .`). - - [ ] Documentation in `docs` is updated - - [ ] `CHANGELOG.md` is updated - - [ ] `README.md` is updated - -**Learn more about contributing:** https://github.com/nf-core/atacseq/tree/master/.github/CONTRIBUTING.md + +- [ ] This comment contains a description of changes (with reason) +- [ ] If you've fixed a bug or added code that should be tested, add tests! +- [ ] If necessary, also make a PR on the [nf-core/atacseq branch on the nf-core/test-datasets repo](https://github.com/nf-core/test-datasets/pull/new/nf-core/atacseq) +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). +- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Documentation in `docs` is updated +- [ ] `CHANGELOG.md` is updated +- [ ] `README.md` is updated + +**Learn more about contributing:** [CONTRIBUTING.md](https://github.com/nf-core/atacseq/tree/master/.github/CONTRIBUTING.md) \ No newline at end of file From 9674450ed891f03dde5d4bbb36f13793df842f50 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:59:03 +0000 Subject: [PATCH 047/226] Update test dir --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5b54e3e6..0189a444 100755 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ work/ data/ results/ .DS_Store -tests/test_data +test* *.pyc From d8b2790f5becace0aa92be183d26a04fea112750 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:59:16 +0000 Subject: [PATCH 048/226] Add NF tower --- .travis.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 55073b54..d3c40257 100755 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ matrix: before_install: # PRs to master are only ok if coming from dev branch - - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && ([ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ] || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]))' + - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ]) || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]' # Pull the docker image first so the test doesn't wait for this - docker pull nfcore/atacseq:dev # Fake the tag locally so that the pipeline runs properly @@ -30,8 +30,13 @@ install: - sudo apt-get install npm && npm install -g markdownlint-cli env: - - NXF_VER='19.10.0' # Specify a minimum NF version that should be tested and work - - NXF_VER='' # Plus: get the latest NF version and check that it works + # Tower token is to inspect runs on https://tower.nf + # Use public mailbox nf-core@mailinator.com to log in: https://www.mailinator.com/v3/index.jsp?zone=public&query=nf-core + # Specify a minimum NF version that should be tested and work + - NXF_VER='19.10.0' TOWER_ACCESS_TOKEN="1c1f493bc2703472d6f1b9f6fb9e9d117abab7b1" + # Plus: get the latest NF version and check that it works + - NXF_VER='' TOWER_ACCESS_TOKEN="1c1f493bc2703472d6f1b9f6fb9e9d117abab7b1" + script: # Lint the pipeline code @@ -39,4 +44,4 @@ script: # Lint the documentation - markdownlint ${TRAVIS_BUILD_DIR} -c ${TRAVIS_BUILD_DIR}/.github/markdownlint.yml # Run the pipeline with the test profile - - nextflow run ${TRAVIS_BUILD_DIR} -profile test,docker -ansi-log false + - nextflow run ${TRAVIS_BUILD_DIR} -profile test,docker -ansi-log false -name atacseq-${TRAVIS_EVENT_TYPE}-${TRAVIS_PULL_REQUEST}-${TRAVIS_COMMIT:0:6}-test-description From 86c8f55014209d7ad632f83675cbcc8668d79844 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:59:30 +0000 Subject: [PATCH 049/226] Update docker options --- nextflow.config | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/nextflow.config b/nextflow.config index 76db551d..8941e96d 100755 --- a/nextflow.config +++ b/nextflow.config @@ -103,17 +103,21 @@ try { profiles { conda { process.conda = "$baseDir/environment.yml" } debug { process.beforeScript = 'echo $HOSTNAME' } - docker { docker.enabled = true } - singularity { singularity.enabled = true - singularity.autoMounts = true } + docker { + docker.enabled = true + // Avoid this error: + // WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + // Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351 + // once this is established and works well, nextflow might implement this behavior as new default. + docker.runOptions = '-u \$(id -u):\$(id -g)' + } + singularity { + singularity.enabled = true + singularity.autoMounts = true + } test { includeConfig 'conf/test.config' } } -// Avoid this error: -// WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. -// Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351, once this is established and works well, nextflow might implement this behavior as new default. -docker.runOptions = '-u \$(id -u):\$(id -g)' - // Load igenomes.config if required if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' From ddad9de909e5086ed7b8f4fe7b9db4251aefdd93 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 15:59:48 +0000 Subject: [PATCH 050/226] Change name --- assets/email_template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/email_template.html b/assets/email_template.html index 61a98cb6..098cd4bd 100755 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -5,7 +5,7 @@ - + nf-core/atacseq Pipeline Report From ff930e7a3c3dc27a93ec49d8b5bd124966993400 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 16:00:03 +0000 Subject: [PATCH 051/226] Adjust spacing --- assets/email_template.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/email_template.txt b/assets/email_template.txt index 5f89db73..40533389 100755 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -28,6 +28,7 @@ The command used to launch the workflow was as follows: $commandLine + Pipeline Configuration: ----------------------- <% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> From cd80d0ea9dbd6f15386260a40d0ab04600c23674 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 16:00:14 +0000 Subject: [PATCH 052/226] Fix slack link --- CODE_OF_CONDUCT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 1cda7600..cf930c8a 100755 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-co.re/join/slack/). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-co.re/join/slack). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. From 0b739e291b4f223b6992cea32dca18b89089ed30 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 16:00:23 +0000 Subject: [PATCH 053/226] Update description --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index eed4f3cb..e9f6bfde 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM nfcore/base:1.7 +FROM nfcore/base:dev LABEL authors="Harshil Patel" \ - description="Docker image containing all requirements for nf-core/atacseq pipeline" + description="Docker image containing all software requirements for the nf-core/atacseq pipeline" # Install the conda environment COPY environment.yml / From 7b822c82809a0bdb7ec76463c12f969cf8cd2f27 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 16:00:33 +0000 Subject: [PATCH 054/226] Update badges --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 32f5bb93..eab86f7f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # ![nfcore/atacseq](docs/images/nf-core-atacseq_logo.png) [![Build Status](https://travis-ci.com/nf-core/atacseq.svg?branch=master)](https://travis-ci.com/nf-core/atacseq) +[![GitHub Actions CI Status](https://github.com/nf-core/atacseq/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/atacseq/actions) +[![GitHub Actions Linting Status](https://github.com/nf-core/atacseq/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/atacseq/actions) [![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-brightgreen.svg)](https://www.nextflow.io/) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](http://bioconda.github.io/) From 0e0b38c35c8d636c1b4753f9e27c6ebc10cf0438 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 16:00:51 +0000 Subject: [PATCH 055/226] Add GitHub actions --- .github/workflows/branch.yml | 16 ++++++++++++++ .github/workflows/ci.yml | 22 +++++++++++++++++++ .github/workflows/linting.yml | 41 +++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100755 .github/workflows/branch.yml create mode 100755 .github/workflows/ci.yml create mode 100755 .github/workflows/linting.yml diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml new file mode 100755 index 00000000..0df3a69a --- /dev/null +++ b/.github/workflows/branch.yml @@ -0,0 +1,16 @@ +name: nf-core branch protection +# This workflow is triggered on PRs to master branch on the repository +# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +on: + pull_request: + branches: + - master + +jobs: + test: + runs-on: ubuntu-18.04 + steps: + # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch + - name: Check PRs + run: | + { [[ $(git remote get-url origin) == *nf-core-atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100755 index 00000000..7a692d18 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,22 @@ +name: nf-core CI +# This workflow is triggered on pushes and PRs to the repository. +# It runs the pipeline with the minimal test dataset to check that it completes without any syntax errors +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-18.04 + strategy: + matrix: + # Nextflow versions: check pipeline minimum and current latest + nxf_ver: ['19.10.0', ''] + steps: + - uses: actions/checkout@v1 + - name: Install Nextflow + run: | + export NXF_VER=${{ matrix.nxf_ver }} + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Run test + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,docker diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100755 index 00000000..7354dc74 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,41 @@ +name: nf-core linting +# This workflow is triggered on pushes and PRs to the repository. +# It runs the `nf-core lint` and markdown lint tests to ensure that the code meets the nf-core guidelines +on: [push, pull_request] + +jobs: + Markdown: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '10' + - name: Install markdownlint + run: | + npm install -g markdownlint-cli + - name: Run Markdownlint + run: | + markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.github/markdownlint.yml + nf-core: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' + - name: Install pip + run: | + sudo apt install python3-pip + pip install --upgrade pip + - name: Install nf-core tools + run: | + pip install nf-core + - name: Run nf-core lint + run: | + nf-core lint ${GITHUB_WORKSPACE} From a5756abced0a304497d46ed6909a4245bcf7560d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Dec 2019 17:37:19 +0000 Subject: [PATCH 056/226] Disable ANSI --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a692d18..75fc7281 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: nf-core CI # This workflow is triggered on pushes and PRs to the repository. # It runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: [push, pull_request] +on: [push, pull_request] jobs: test: @@ -19,4 +19,4 @@ jobs: sudo mv nextflow /usr/local/bin/ - name: Run test run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker + nextflow run ${GITHUB_WORKSPACE} -ansi-log false -profile test,docker From 8e59b701a614d43cacc2d6ace108a2cada682219 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 10:53:43 +0000 Subject: [PATCH 057/226] Revert branch test --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d3c40257..3b07ff58 100755 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,8 @@ matrix: before_install: # PRs to master are only ok if coming from dev branch - - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ]) || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]' + #- '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ]) || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]' + - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && ([ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ] || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]))' # Pull the docker image first so the test doesn't wait for this - docker pull nfcore/atacseq:dev # Fake the tag locally so that the pipeline runs properly From fc7cc29664570777c58badc9e02eeb32f05cbcb6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 10:54:01 +0000 Subject: [PATCH 058/226] Revert Dockerfile string --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e9f6bfde..abb90542 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:dev +FROM nfcore/base:1.7 LABEL authors="Harshil Patel" \ description="Docker image containing all software requirements for the nf-core/atacseq pipeline" From c383ff6a7566ce0e409b051f1a91f2414ac342fc Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 22:54:02 +0000 Subject: [PATCH 059/226] Update CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc18f302..b2e48240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Added` * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! +* Added GitHub Actions CI tests ### `Fixed` @@ -44,6 +45,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Deprecated` +| Deprecated | Replacement | +|------------------------------|---------------------------| +| `--skip_diff_analysis` | `--skip_consensus_peaks` | + ## [1.1.0] - 2019-11-05 ### `Added` From 7580248f709b724c702e9933b58d06d765cf5478 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 22:54:09 +0000 Subject: [PATCH 060/226] Replace --skip_diff_analysis with --skip_consensus_peaks --- docs/usage.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index ebbe3520..3e51475a 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -43,7 +43,7 @@ * [`--broad_cutoff`](#--broad_cutoff) * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) - * [`--skip_diff_analysis`](#--skip_diff_analysis) + * [`--skip_consensus_peaks`](#--skip_consensus_peaks) * [Skipping QC steps](#skipping-qc-steps) * [Job resources](#job-resources) * [Automatic resubmission](#automatic-resubmission) @@ -387,9 +387,9 @@ Number of biological replicates required from a given condition for a peak to co Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. -### `--skip_diff_analysis` +### `--skip_consensus_peaks` -Skip read counting and differential analysis step. +Skip consensus peak generation and differential binding analysis. ## Skipping QC steps From 79a0b7ad57f84f12edb8809affb49e94b308f5bf Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 22:54:13 +0000 Subject: [PATCH 061/226] Replace --skip_diff_analysis with --skip_consensus_peaks --- main.nf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/main.nf b/main.nf index e219fa5d..bb05a290 100644 --- a/main.nf +++ b/main.nf @@ -62,7 +62,7 @@ def helpMessage() { --broad_cutoff [float] Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified (Default: 0.1) --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads - --skip_diff_analysis [bool] Skip differential binding analysis + --skip_consensus_peaks [bool] Skip consensus peak generation and differential binding analysis QC --skip_fastqc [bool] Skip FastQC @@ -250,7 +250,7 @@ if (params.save_trimmed) summary['Save Trimmed'] = 'Yes' if (params.save_align_intermeds) summary['Save Intermeds'] = 'Yes' if (params.save_macs_pileup) summary['Save MACS2 Pileup'] = 'Yes' if (params.skip_merge_replicates) summary['Skip Merge Replicates'] = 'Yes' -if (params.skip_diff_analysis) summary['Skip Diff Analysis'] = 'Yes' +if (params.skip_consensus_peaks) summary['Skip Consensus Peaks'] = 'Yes' if (params.skip_fastqc) summary['Skip FastQC'] = 'Yes' if (params.skip_picard_metrics) summary['Skip Picard Metrics'] = 'Yes' if (params.skip_preseq) summary['Skip Preseq'] = 'Yes' @@ -1194,7 +1194,7 @@ process MergedLibConsensusPeakSet { } when: - params.macs_gsize && (replicatesExist || multipleGroups) + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: file peaks from ch_mlib_macs_consensus.collect{ it[1] } @@ -1243,7 +1243,7 @@ process MergedLibConsensusPeakSetAnnotate { publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' when: - params.macs_gsize && (replicatesExist || multipleGroups) + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: file bed from ch_mlib_macs_consensus_bed @@ -1282,7 +1282,7 @@ process MergedLibConsensusPeakSetDESeq { } when: - params.macs_gsize && replicatesExist && multipleGroups && !params.skip_diff_analysis + params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks input: file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } @@ -1661,7 +1661,7 @@ process MergedRepConsensusPeakSet { } when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: file peaks from ch_mrep_macs_consensus.collect{ it[1] } @@ -1709,7 +1709,7 @@ process MergedRepConsensusPeakSetAnnotate { publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: file bed from ch_mrep_macs_consensus_bed @@ -1748,7 +1748,7 @@ process MergedRepConsensusPeakSetDESeq { } when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_diff_analysis + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } From 4d4876bf55efeaf4037ce21092ab8f95ee786cd2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 14 Dec 2019 22:54:16 +0000 Subject: [PATCH 062/226] Replace --skip_diff_analysis with --skip_consensus_peaks --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 8941e96d..20733b75 100755 --- a/nextflow.config +++ b/nextflow.config @@ -40,7 +40,7 @@ params { broad_cutoff = 0.1 min_reps_consensus = 1 save_macs_pileup = false - skip_diff_analysis = false + skip_consensus_peaks = false // Options: QC skip_fastqc = false From 1adb3f3f46cabcfe754219db963e73b7aac23e7d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Dec 2019 17:37:07 +0000 Subject: [PATCH 063/226] Fix branch name --- .github/workflows/branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 0df3a69a..9ba92076 100755 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,4 +13,4 @@ jobs: # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch - name: Check PRs run: | - { [[ $(git remote get-url origin) == *nf-core-atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] + { [[ $(git remote get-url origin) == *nf-core/atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] From 0b0713952b9fb84ea3c68f1f1c5401f85cd8a5f6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Dec 2019 17:44:32 +0000 Subject: [PATCH 064/226] Pull Docker image for CI tests --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75fc7281..913e8e10 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,9 +14,12 @@ jobs: - uses: actions/checkout@v1 - name: Install Nextflow run: | - export NXF_VER=${{ matrix.nxf_ver }} + {% raw %}export NXF_VER=${{ matrix.nxf_ver }}{% endraw %} wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + - name: Pull image + run: | + docker pull nfcore/atacseq:dev && docker tag nfcore/atacseq:dev nfcore/atacseq:dev - name: Run test run: | nextflow run ${GITHUB_WORKSPACE} -ansi-log false -profile test,docker From 179912c74be9c95ec9dd0360b32046b3ea1dc105 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Dec 2019 17:55:54 +0000 Subject: [PATCH 065/226] Remove cookiecutter tag --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 913e8e10..39fc6c84 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v1 - name: Install Nextflow run: | - {% raw %}export NXF_VER=${{ matrix.nxf_ver }}{% endraw %} + export NXF_VER=${{ matrix.nxf_ver }} wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - name: Pull image From 786df1c3df34125321b5492c8aec7b1754d1bfa2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 16 Dec 2019 17:59:42 +0000 Subject: [PATCH 066/226] Update origin glob --- .github/workflows/branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 9ba92076..37a3aa74 100755 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,4 +13,4 @@ jobs: # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch - name: Check PRs run: | - { [[ $(git remote get-url origin) == *nf-core/atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] + { [[ $(git remote get-url origin) == *atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] From 1f586026cb911b626f04279c9b595c4cd57abc46 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Dec 2019 10:53:25 +0000 Subject: [PATCH 067/226] Fix branch name --- .github/workflows/branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 37a3aa74..9ba92076 100755 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,4 +13,4 @@ jobs: # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch - name: Check PRs run: | - { [[ $(git remote get-url origin) == *atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] + { [[ $(git remote get-url origin) == *nf-core/atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] From 8cdde6e6e616340bbc5d2d746ed5a0aa106ee6a2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Dec 2019 10:53:47 +0000 Subject: [PATCH 068/226] Export NXF_ANSI_LOG instead --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39fc6c84..fa664e06 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,7 @@ jobs: - name: Install Nextflow run: | export NXF_VER=${{ matrix.nxf_ver }} + export NXF_ANSI_LOG=false wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - name: Pull image @@ -22,4 +23,4 @@ jobs: docker pull nfcore/atacseq:dev && docker tag nfcore/atacseq:dev nfcore/atacseq:dev - name: Run test run: | - nextflow run ${GITHUB_WORKSPACE} -ansi-log false -profile test,docker + nextflow run ${GITHUB_WORKSPACE} -profile test,docker From e4c97a56f01e7da79eee38b6449f332398935a47 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 20 Jan 2020 12:25:41 +0000 Subject: [PATCH 069/226] Specify -T for sort commands --- main.nf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main.nf b/main.nf index bb05a290..5ebd65e5 100644 --- a/main.nf +++ b/main.nf @@ -966,7 +966,7 @@ process MergedLibBigWig { """ SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -k1,1 -k2,2n > ${prefix}.bedGraph + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig @@ -1213,7 +1213,7 @@ process MergedLibConsensusPeakSet { collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') expandparam = params.narrow_peak ? "--is_narrow_peak" : "" """ - sort -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt macs2_merged_expand.py \\ @@ -1265,7 +1265,7 @@ process MergedLibConsensusPeakSetAnnotate { -cpu $task.cpus \\ > ${prefix}.annotatePeaks.txt - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt """ } @@ -1517,7 +1517,7 @@ process MergedRepBigWig { """ SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -k1,1 -k2,2n > ${prefix}.bedGraph + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig @@ -1680,7 +1680,7 @@ process MergedRepConsensusPeakSet { collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') expandparam = params.narrow_peak ? "--is_narrow_peak" : "" """ - sort -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt macs2_merged_expand.py \\ @@ -1731,7 +1731,7 @@ process MergedRepConsensusPeakSetAnnotate { -cpu $task.cpus \\ > ${prefix}.annotatePeaks.txt - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt """ } From 38fb92ff0f16f281cf5c6e1dcae27a7dfe614fe9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 20 Jan 2020 12:27:52 +0000 Subject: [PATCH 070/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2e48240..04845097 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE +* [#132][https://github.com/nf-core/chipseq/issues/132] - BigWig Error: sort: cannot create temporary file in '': Read-only file system * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From e7ea781fc2b8299ad094d1d16dc96e54a07f89f9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 20 Jan 2020 12:34:33 +0000 Subject: [PATCH 071/226] Fix markdownlint --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04845097..9824a3c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE -* [#132][https://github.com/nf-core/chipseq/issues/132] - BigWig Error: sort: cannot create temporary file in '': Read-only file system +* [#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From 3d5fb8a2ec6f6bfbc4aa0f06fe93862b7c68431f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 20 Jan 2020 18:25:03 +0000 Subject: [PATCH 072/226] Fix missing annotation entries --- bin/plot_homer_annotatepeaks.r | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/bin/plot_homer_annotatepeaks.r b/bin/plot_homer_annotatepeaks.r index 9865357c..57ca4b67 100755 --- a/bin/plot_homer_annotatepeaks.r +++ b/bin/plot_homer_annotatepeaks.r @@ -59,10 +59,19 @@ for (idx in 1:length(HomerFiles)) { sampleid = SampleIDs[idx] anno.dat <- read.table(HomerFiles[idx], sep="\t", header=TRUE,quote="") anno.dat <- anno.dat[,c("Annotation","Distance.to.TSS","Nearest.PromoterID")] - anno.dat <- anno.dat[which(!is.na(anno.dat$Distance.to.TSS)),] - if (nrow(anno.dat) == 0) { - quit(save = "no", status = 0, runLast = FALSE) - } + + ## REPLACE UNASSIGNED FEATURE ENTRIES WITH SENSIBLE VALUES + unassigned <- which(is.na(as.character(anno.dat$Distance.to.TSS))) + anno.dat$Distance.to.TSS[unassigned] <- 1000000 + + anno.dat$Annotation <- as.character(anno.dat$Annotation) + anno.dat$Annotation[unassigned] <- "Unassigned" + anno.dat$Annotation <- as.factor(anno.dat$Annotation) + + anno.dat$Nearest.PromoterID <- as.character(anno.dat$Nearest.PromoterID) + anno.dat$Nearest.PromoterID[unassigned] <- "Unassigned" + anno.dat$Nearest.PromoterID <- as.factor(anno.dat$Nearest.PromoterID) + anno.dat$name <- rep(sampleid,nrow(anno.dat)) anno.dat$Distance.to.TSS <- abs(anno.dat$Distance.to.TSS) + 1 plot.dat <- rbind(plot.dat,anno.dat) From a3f7f51d6171d1a943dc5237216635abfaebe0cf Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 20 Jan 2020 18:28:15 +0000 Subject: [PATCH 073/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9824a3c8..c8d88d88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * [#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system +* [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From d65bad41ac513555bb3dd2f661877b2286db6b4a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 29 Jan 2020 14:34:07 +0000 Subject: [PATCH 074/226] Remove .travis.yml --- .travis.yml | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) delete mode 100755 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100755 index 3b07ff58..00000000 --- a/.travis.yml +++ /dev/null @@ -1,48 +0,0 @@ -sudo: required -language: python -jdk: openjdk8 -services: docker -python: '3.6' -cache: pip -matrix: - fast_finish: true - -before_install: - # PRs to master are only ok if coming from dev branch - #- '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ]) || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]' - - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && ([ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ] || [ $TRAVIS_PULL_REQUEST_BRANCH = "patch" ]))' - # Pull the docker image first so the test doesn't wait for this - - docker pull nfcore/atacseq:dev - # Fake the tag locally so that the pipeline runs properly - # Looks weird when this is :dev to :dev, but makes sense when testing code for a release (:dev to :1.0.1) - - docker tag nfcore/atacseq:dev nfcore/atacseq:dev - -install: - # Install Nextflow - - mkdir /tmp/nextflow && cd /tmp/nextflow - - wget -qO- get.nextflow.io | bash - - sudo ln -s /tmp/nextflow/nextflow /usr/local/bin/nextflow - # Install nf-core/tools - - pip install --upgrade pip - - pip install nf-core - # Reset - - mkdir ${TRAVIS_BUILD_DIR}/tests && cd ${TRAVIS_BUILD_DIR}/tests - # Install markdownlint-cli - - sudo apt-get install npm && npm install -g markdownlint-cli - -env: - # Tower token is to inspect runs on https://tower.nf - # Use public mailbox nf-core@mailinator.com to log in: https://www.mailinator.com/v3/index.jsp?zone=public&query=nf-core - # Specify a minimum NF version that should be tested and work - - NXF_VER='19.10.0' TOWER_ACCESS_TOKEN="1c1f493bc2703472d6f1b9f6fb9e9d117abab7b1" - # Plus: get the latest NF version and check that it works - - NXF_VER='' TOWER_ACCESS_TOKEN="1c1f493bc2703472d6f1b9f6fb9e9d117abab7b1" - - -script: - # Lint the pipeline code - - nf-core lint ${TRAVIS_BUILD_DIR} - # Lint the documentation - - markdownlint ${TRAVIS_BUILD_DIR} -c ${TRAVIS_BUILD_DIR}/.github/markdownlint.yml - # Run the pipeline with the test profile - - nextflow run ${TRAVIS_BUILD_DIR} -profile test,docker -ansi-log false -name atacseq-${TRAVIS_EVENT_TYPE}-${TRAVIS_PULL_REQUEST}-${TRAVIS_COMMIT:0:6}-test-description From 8b0f863f21f4f907bf69bf7184fdde8a0fb3f005 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 29 Jan 2020 14:34:18 +0000 Subject: [PATCH 075/226] Update nf-core/base --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index abb90542..9e121402 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:1.7 +FROM nfcore/base:1.8 LABEL authors="Harshil Patel" \ description="Docker image containing all software requirements for the nf-core/atacseq pipeline" From 9526922287a2173df6df617931b1329c0eaf25ee Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 29 Jan 2020 17:12:27 +0000 Subject: [PATCH 076/226] Add readme path to igenomes.config --- conf/igenomes.config | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/conf/igenomes.config b/conf/igenomes.config index 37217cf4..2de92422 100755 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -18,6 +18,7 @@ params { bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" mito_name = "MT" macs_gsize = "2.7e9" blacklist = "${baseDir}/assets/blacklists/GRCh37-blacklist.bed" @@ -42,6 +43,7 @@ params { bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" mito_name = "MT" macs_gsize = "1.87e9" blacklist = "${baseDir}/assets/blacklists/GRCm38-blacklist.bed" @@ -54,6 +56,7 @@ params { bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" mito_name = "Mt" } 'EB2' { @@ -64,6 +67,7 @@ params { bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" } 'UMD3.1' { fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" @@ -73,6 +77,7 @@ params { bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" mito_name = "MT" } 'WBcel235' { @@ -94,6 +99,7 @@ params { bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" mito_name = "MT" } 'GRCz10' { @@ -125,6 +131,7 @@ params { bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" mito_name = "MT" } 'EB1' { @@ -135,6 +142,7 @@ params { bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" @@ -154,6 +162,7 @@ params { bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" } 'Mmul_1' { fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" @@ -163,6 +172,7 @@ params { bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" mito_name = "MT" } 'IRGSP-1.0' { @@ -183,6 +193,7 @@ params { bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" mito_name = "MT" } 'Rnor_6.0' { @@ -214,6 +225,7 @@ params { bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" mito_name = "MT" macs_gsize = "1.21e7" } @@ -225,6 +237,7 @@ params { bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" } 'Sscrofa10.2' { fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" @@ -234,6 +247,7 @@ params { bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" mito_name = "MT" } 'AGPv3' { @@ -266,6 +280,7 @@ params { bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" mito_name = "chrM" macs_gsize = "2.7e9" blacklist = "${baseDir}/assets/blacklists/hg19-blacklist.bed" @@ -278,6 +293,7 @@ params { bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" mito_name = "chrM" macs_gsize = "1.87e9" blacklist = "${baseDir}/assets/blacklists/mm10-blacklist.bed" @@ -300,6 +316,7 @@ params { bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" mito_name = "chrM" macs_gsize = "9e7" } @@ -311,6 +328,7 @@ params { bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" mito_name = "chrM" } 'danRer10' { @@ -342,6 +360,7 @@ params { bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" mito_name = "chrM" } 'galGal4' { @@ -352,6 +371,7 @@ params { bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" mito_name = "chrM" } 'panTro4' { @@ -362,6 +382,7 @@ params { bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" mito_name = "chrM" } 'rn6' { @@ -380,6 +401,7 @@ params { bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" mito_name = "chrM" macs_gsize = "1.2e7" } @@ -391,6 +413,7 @@ params { bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" mito_name = "chrM" } } From 803501a0c0b72b1fc27591d512b6933a1b2fb4ea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 29 Jan 2020 17:13:46 +0000 Subject: [PATCH 077/226] Add igenomes readme logic --- main.nf | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/main.nf b/main.nf index 5ebd65e5..124bb29b 100644 --- a/main.nf +++ b/main.nf @@ -123,6 +123,7 @@ params.gene_bed = params.genome ? params.genomes[ params.genome ].bed12 ?: false params.mito_name = params.genome ? params.genomes[ params.genome ].mito_name ?: false : false params.macs_gsize = params.genome ? params.genomes[ params.genome ].macs_gsize ?: false : false params.blacklist = params.genome ? params.genomes[ params.genome ].blacklist ?: false : false +params.anno_readme = params.genome ? params.genomes[ params.genome ].readme ?: false : false // Global variables def PEAK_TYPE = params.narrow_peak ? "narrowPeak" : "broadPeak" @@ -167,11 +168,12 @@ ch_mrep_deseq2_clustering_header = file("$baseDir/assets/multiqc/mrep_deseq2_clu //////////////////////////////////////////////////// // Validate inputs -if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } -if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } -if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } -if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } -if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } +if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } +if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } +if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } +if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } +if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } +if (params.anno_readme) { ch_anno_readme = Channel.fromPath(params.anno_readme) } else { ch_anno_readme = Channel.empty() } if (params.fasta) { lastPath = params.fasta.lastIndexOf(File.separator) @@ -1906,6 +1908,7 @@ process MultiQC { input: file multiqc_config from ch_multiqc_config + file readme from ch_anno_readme.collect().ifEmpty([]) file ('software_versions/*') from ch_software_versions_mqc.collect() file ('workflow_summary/*') from create_workflow_summary(summary) From 7e2fe07e1f2c8e3dc3b87b711364b622804ce80d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 30 Jan 2020 13:45:17 +0000 Subject: [PATCH 078/226] Implement anno README --- main.nf | 3261 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 1631 insertions(+), 1630 deletions(-) diff --git a/main.nf b/main.nf index 124bb29b..fc7dd155 100644 --- a/main.nf +++ b/main.nf @@ -173,7 +173,7 @@ if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } -if (params.anno_readme) { ch_anno_readme = Channel.fromPath(params.anno_readme) } else { ch_anno_readme = Channel.empty() } +if (params.anno_readme && file(params.anno_readme).exists()) { ch_anno_readme = Channel.fromPath(params.anno_readme) } else { ch_anno_readme = Channel.empty() } if (params.fasta) { lastPath = params.fasta.lastIndexOf(File.separator) @@ -446,10 +446,12 @@ process MakeGenomeFilter { input: file fasta from ch_fasta file blacklist from ch_blacklist.ifEmpty([]) + file readme from ch_anno_readme.ifEmpty([]) output: - file "$fasta" into ch_genome_fasta // FASTA FILE FOR IGV - file "*.fai" into ch_genome_fai // FAI INDEX FOR REFERENCE GENOME + file "$fasta" // FASTA FILE FOR IGV + file "$readme" // AWS IGENOMES FILE CONTAINING ANNOTATION VERSION + file "*.fai" // FAI INDEX FOR REFERENCE GENOME file "*.bed" into ch_genome_filter_regions // BED FILE WITHOUT BLACKLIST REGIONS & MITOCHONDRIAL CONTIG FOR FILTERING file "*.txt" into ch_genome_autosomes // TEXT FILE CONTAINING LISTING OF AUTOSOMAL CHROMOSOMES FOR ATAQV file "*.sizes" into ch_genome_sizes_mlib_bigwig, // CHROMOSOME SIZES FILE FOR BEDTOOLS @@ -467,1633 +469,1632 @@ process MakeGenomeFilter { """ } -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- FASTQ QC -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 1 - FastQC - */ -process FastQC { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/fastqc", mode: 'copy', - saveAs: { filename -> - filename.endsWith(".zip") ? "zips/$filename" : "$filename" - } - - when: - !params.skip_fastqc - - input: - set val(name), file(reads) from ch_raw_reads_fastqc - - output: - file "*.{zip,html}" into ch_fastqc_reports_mqc - - script: - // Added soft-links to original fastqs for consistent naming in MultiQC - if (params.single_end) { - """ - [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - fastqc -q -t $task.cpus ${name}.fastq.gz - """ - } else { - """ - [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz - [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - fastqc -q -t $task.cpus ${name}_1.fastq.gz - fastqc -q -t $task.cpus ${name}_2.fastq.gz - """ - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- ADAPTER TRIMMING -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 2 - Trim Galore! - */ -if (params.skip_trimming) { - ch_trimmed_reads = ch_raw_reads_trimgalore - ch_trimgalore_results_mqc = Channel.empty() - ch_trimgalore_fastqc_reports_mqc = Channel.empty() -} else { - process TrimGalore { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/trim_galore", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".html")) "fastqc/$filename" - else if (filename.endsWith(".zip")) "fastqc/zips/$filename" - else if (filename.endsWith("trimming_report.txt")) "logs/$filename" - else params.save_trimmed ? filename : null - } - - input: - set val(name), file(reads) from ch_raw_reads_trimgalore - - output: - set val(name), file("*.fq.gz") into ch_trimmed_reads - file "*.txt" into ch_trimgalore_results_mqc - file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc - - script: - // Calculate number of --cores for TrimGalore based on value of task.cpus - // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 - // See: https://github.com/nf-core/atacseq/pull/65 - def cores = 1 - if (task.cpus) { - cores = (task.cpus as int) - 4 - if (params.single_end) cores = (task.cpus as int) - 3 - if (cores < 1) cores = 1 - if (cores > 4) cores = 4 - } - - // Added soft-links to original fastqs for consistent naming in MultiQC - c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' - c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' - tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' - tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' - nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' - - // Added soft-links to original fastqs for consistent naming in MultiQC - if (params.single_end) { - """ - [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz - """ - } else { - """ - [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz - [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz - """ - } - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- ALIGN -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 3.1 - Align read 1 with bwa - */ -process BWAMem { - tag "$name" - label 'process_high' - - input: - set val(name), file(reads) from ch_trimmed_reads - file index from ch_bwa_index.collect() - - output: - set val(name), file("*.bam") into ch_bwa_bam - - script: - prefix = "${name}.Lb" - rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" - if (params.seq_center) { - rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" - } - """ - bwa mem \\ - -t $task.cpus \\ - -M \\ - -R $rg \\ - ${index}/${bwa_base} \\ - $reads \\ - | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - - """ -} - -/* - * STEP 3.2 - Convert .bam to coordinate sorted .bam - */ -process SortBAM { - tag "$name" - label 'process_medium' - if (params.save_align_intermeds) { - publishDir path: "${params.outdir}/bwa/library", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else filename - } - } - - input: - set val(name), file(bam) from ch_bwa_bam - - output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge - file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc - - script: - prefix = "${name}.Lb" - """ - samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY BAM -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 4.1 Merge BAM files for all libraries from same replicate - */ -ch_sort_bam_merge - .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } - .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_sort_bam_merge } - -process MergedLibBAM { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" - else params.save_align_intermeds ? filename : null - } - - input: - set val(name), file(bams) from ch_sort_bam_merge - - output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, - ch_mlib_bam_preseq, - ch_mlib_bam_ataqv - file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc - file "*.txt" into ch_mlib_bam_metrics_mqc - - script: - prefix = "${name}.mLb.mkD" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - if (bam_files.size() > 1) { - """ - picard -Xmx${avail_mem}g MergeSamFiles \\ - ${'INPUT='+bam_files.join(' INPUT=')} \\ - OUTPUT=${name}.sorted.bam \\ - SORT_ORDER=coordinate \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - samtools index ${name}.sorted.bam - - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${name}.sorted.bam \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=false \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } else { - """ - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${bam_files[0]} \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=false \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/* - * STEP 4.2 Filter BAM file at merged library-level - */ -process MergedLibBAMFilter { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (params.single_end || params.save_align_intermeds) { - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename - else null - } - } - - input: - set val(name), file(bam) from ch_mlib_bam_filter - file bed from ch_genome_filter_regions.collect() - file bamtools_filter_config from ch_bamtools_filter_config - - output: - set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam - set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat - file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc - - script: - prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" - filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" - dup_params = params.keep_dups ? "" : "-F 0x0400" - multimap_params = params.keep_multi_map ? "" : "-q 1" - blacklist_params = params.blacklist ? "-L $bed" : "" - name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" - """ - samtools view \\ - $filter_params \\ - $dup_params \\ - $multimap_params \\ - $blacklist_params \\ - -b ${bam[0]} \\ - | bamtools filter \\ - -out ${prefix}.sorted.bam \\ - -script $bamtools_filter_config - - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - - $name_sort_bam - """ -} - -/* - * STEP 4.3 Remove orphan reads from paired-end BAM file - */ -if (params.single_end) { - ch_mlib_filter_bam - .into { ch_mlib_rm_orphan_bam_metrics; - ch_mlib_rm_orphan_bam_bigwig; - ch_mlib_rm_orphan_bam_macs; - ch_mlib_rm_orphan_bam_plotfingerprint; - ch_mlib_rm_orphan_bam_mrep; - ch_mlib_name_bam_mlib_counts; - ch_mlib_name_bam_mrep_counts } - - ch_mlib_filter_bam_flagstat - .into { ch_mlib_rm_orphan_flagstat_bigwig; - ch_mlib_rm_orphan_flagstat_macs; - ch_mlib_rm_orphan_flagstat_mqc } - - ch_mlib_filter_bam_stats_mqc - .set { ch_mlib_rm_orphan_stats_mqc } -} else { - process MergedLibBAMRemoveOrphan { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename - else null - } - - input: - set val(name), file(bam) from ch_mlib_filter_bam - - output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, - ch_mlib_rm_orphan_bam_bigwig, - ch_mlib_rm_orphan_bam_macs, - ch_mlib_rm_orphan_bam_plotfingerprint, - ch_mlib_rm_orphan_bam_mrep - set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, - ch_mlib_name_bam_mrep_counts - set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, - ch_mlib_rm_orphan_flagstat_macs, - ch_mlib_rm_orphan_flagstat_mqc - file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - prefix = "${name}.mLb.clN" - """ - bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs - - samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 5.1 preseq analysis after merging libraries and before filtering - */ -process MergedLibPreseq { - tag "$name" - label 'process_low' - publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' - - when: - !params.skip_preseq - - input: - set val(name), file(bam) from ch_mlib_bam_preseq - - output: - file "*.ccurve.txt" into ch_mlib_preseq_mqc - - script: - prefix = "${name}.mLb.mkD" - """ - preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} - """ -} - -/* - * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering - */ -process MergedLibMetrics { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("_metrics")) "picard_metrics/$filename" - else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" - else null - } - - when: - !params.skip_picard_metrics - - input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics - file fasta from ch_fasta - - output: - file "*_metrics" into ch_mlib_collectmetrics_mqc - file "*.pdf" into ch_mlib_collectmetrics_pdf - - script: - prefix = "${name}.mLb.clN" - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - """ - picard -Xmx${avail_mem}g CollectMultipleMetrics \\ - INPUT=${bam[0]} \\ - OUTPUT=${prefix}.CollectMultipleMetrics \\ - REFERENCE_SEQUENCE=$fasta \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - """ -} - -/* - * STEP 5.3 Read depth normalised bigWig - */ -process MergedLibBigWig { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" - else null - } - - input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mlib_bigwig.collect() - - output: - set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile - file "*scale_factor.txt" into ch_mlib_bigwig_scale - file "*igv.txt" into ch_mlib_bigwig_igv - - script: - prefix = "${name}.mLb.clN" - pe_fragment = params.single_end ? "" : "-pc" - extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' - """ - SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') - echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph - - bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig - - find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt - """ -} - -/* - * STEP 5.4 generate gene body coverage plot with deepTools - */ -process MergedLibPlotProfile { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' - - when: - !params.skip_plot_profile - - input: - set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile - file bed from ch_gene_bed - - output: - file '*.{gz,pdf}' into ch_mlib_plotprofile_results - file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc - - script: - prefix = "${name}.mLb.clN" - """ - computeMatrix scale-regions \\ - --regionsFileName $bed \\ - --scoreFileName $bigwig \\ - --outFileName ${prefix}.computeMatrix.mat.gz \\ - --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ - --regionBodyLength 1000 \\ - --beforeRegionStartLength 3000 \\ - --afterRegionStartLength 3000 \\ - --skipZeros \\ - --smartLabels \\ - --numberOfProcessors $task.cpus - - plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ - --outFileName ${prefix}.plotProfile.pdf \\ - --outFileNameData ${prefix}.plotProfile.tab - """ -} - -/* - * STEP 5.5 deepTools plotFingerprint - */ -process MergedLibPlotFingerprint { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' - - when: - !params.skip_plot_fingerprint - - input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint - - output: - file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results - file '*.raw.txt' into ch_mlib_plotfingerprint_mqc - - script: - prefix = "${name}.mLb.clN" - extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' - """ - plotFingerprint \\ - --bamfiles ${bam[0]} \\ - --plotFile ${prefix}.plotFingerprint.pdf \\ - $extend \\ - --labels $prefix \\ - --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ - --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ - --skipZeros \\ - --numberOfProcessors $task.cpus \\ - --numberOfSamples $params.fingerprint_bins - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY PEAK ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 6.1 Call peaks with MACS2 and calculate FRiP score - */ -process MergedLibMACSCallPeak { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize - - input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) - file mlib_peak_count_header from ch_mlib_peak_count_header - file mlib_frip_score_header from ch_mlib_frip_score_header - - output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output - set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, - ch_mlib_macs_qc, - ch_mlib_macs_consensus, - ch_mlib_macs_ataqv - file "*igv.txt" into ch_mlib_macs_igv - file "*_mqc.tsv" into ch_mlib_macs_mqc - - script: - prefix = "${name}.mLb.clN" - broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" - """ - macs2 callpeak \\ - -t ${bam[0]} \\ - $broad \\ - -f $format \\ - -g $params.macs_gsize \\ - -n $prefix \\ - $pileup \\ - --keep-dup all \\ - --nomodel - - cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv - - READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') - grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv - - find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt - """ -} - -/* - * STEP 6.2 Annotate peaks with HOMER - */ -process MergedLibAnnotatePeaks { - tag "$name" - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' - - when: - params.macs_gsize - - input: - set val(name), file(peak) from ch_mlib_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.txt" into ch_mlib_macs_annotate - - script: - prefix = "${name}.mLb.clN" - """ - annotatePeaks.pl \\ - $peak \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}_peaks.annotatePeaks.txt - """ -} - -/* - * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation - */ -process MergedLibPeakQC { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' - - when: - params.macs_gsize - - input: - file peaks from ch_mlib_macs_qc.collect{ it[1] } - file annos from ch_mlib_macs_annotate.collect() - file mlib_peak_annotation_header from ch_mlib_peak_annotation_header - - output: - file "*.{txt,pdf}" into ch_mlib_peak_qc - file "*.tsv" into ch_mlib_peak_qc_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mLb.clN' - """ - plot_macs_qc.r \\ - -i ${peaks.join(',')} \\ - -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ - -o ./ \\ - -p macs_peak.${suffix} - - plot_homer_annotatepeaks.r \\ - -i ${annos.join(',')} \\ - -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ - -o ./ \\ - -p macs_annotatePeaks.${suffix} - - cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv - """ -} - -/* - * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection - */ -process MergedLibConsensusPeakSet { - label 'process_long' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks - - input: - file peaks from ch_mlib_macs_consensus.collect{ it[1] } - - output: - file "*.bed" into ch_mlib_macs_consensus_bed - file "*.saf" into ch_mlib_macs_consensus_saf - file "*.boolean.txt" into ch_mlib_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect - file "*igv.txt" into ch_mlib_macs_consensus_igv - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mLb.clN' - prefix = "consensus_peaks.${suffix}" - mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" - """ - sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ - | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt - - macs2_merged_expand.py \\ - ${prefix}.txt \\ - ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ - ${prefix}.boolean.txt \\ - --min_replicates $params.min_reps_consensus \\ - $expandparam - - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed - - echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf - - sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt - plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf - - find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt - """ -} - -/* - * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file - */ -process MergedLibConsensusPeakSetAnnotate { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks - - input: - file bed from ch_mlib_macs_consensus_bed - file bool from ch_mlib_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate - - script: - prefix = "consensus_peaks.mLb.clN" - """ - annotatePeaks.pl \\ - $bed \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}.annotatePeaks.txt - - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt - paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt - """ -} - -/* - * STEP 6.6 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 - */ -process MergedLibConsensusPeakSetDESeq { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks - - input: - file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } - file saf from ch_mlib_macs_consensus_saf.collect() - file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header - file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header - - output: - file "*featureCounts.txt" into ch_mlib_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc - file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results - file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc - - script: - prefix = "consensus_peaks.mLb.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - pe_params = params.single_end ? '' : "-p --donotsort" - """ - featureCounts \\ - -F SAF \\ - -O \\ - --fracOverlap 0.2 \\ - -T $task.cpus \\ - $pe_params \\ - -a $saf \\ - -o ${prefix}.featureCounts.txt \\ - ${bam_files.join(' ')} - - featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb - - cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv - cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv - - find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt - """ -} - -/* - * STEP 6.7 Run ataqv on BAM file and corresponding peaks - */ -process MergedLibAtaqv { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_ataqv - - input: - set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) - file autosomes from ch_genome_autosomes.collect() - file tss_bed from ch_tss_bed - - output: - file "*.json" into ch_mlib_ataqv - - script: - peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" - mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" - """ - ataqv \\ - --threads $task.cpus \\ - $peak_param \\ - --tss-file $tss_bed \\ - --metrics-file ${name}.ataqv.json \\ - --name $name \\ - --ignore-read-groups \\ - --autosomal-reference-file $autosomes \\ - $mito_param \\ - NA \\ - ${bam[0]} - """ -} - -/* - * STEP 6.8 run ataqv mkarv on all JSON files to render web app - */ -process MergedLibAtaqvMkarv { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_ataqv - - input: - file json from ch_mlib_ataqv.collect() - - output: - file "html" into ch_mlib_ataqv_mkarv - - script: - """ - mkarv \\ - --concurrency $task.cpus \\ - --force \\ - ./html/ \\ - ${json.join(' ')} - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE REPLICATE BAM -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 7 Merge library BAM files across all replicates - */ -ch_mlib_rm_orphan_bam_mrep - .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } - .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_mlib_rm_orphan_bam_mrep } - -process MergedRepBAM { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" - else filename - } - - input: - set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep - - output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, - ch_mrep_bam_macs - set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, - ch_mrep_bam_flagstat_macs, - ch_mrep_bam_flagstat_mqc - file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc - file "*.txt" into ch_mrep_bam_metrics_mqc - - when: - !params.skip_merge_replicates && replicatesExist - - script: - prefix = "${name}.mRp.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - if (bam_files.size() > 1) { - """ - picard -Xmx${avail_mem}g MergeSamFiles \\ - ${'INPUT='+bam_files.join(' INPUT=')} \\ - OUTPUT=${name}.sorted.bam \\ - SORT_ORDER=coordinate \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - samtools index ${name}.sorted.bam - - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${name}.sorted.bam \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=true \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } else { - """ - ln -s ${bams[0]} ${prefix}.sorted.bam - ln -s ${bams[1]} ${prefix}.sorted.bam.bai - touch ${prefix}.MarkDuplicates.metrics.txt - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 8.1 Read depth normalised bigWig - */ -process MergedRepBigWig { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" - else null - } - - when: - !params.skip_merge_replicates && replicatesExist - - input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mrep_bigwig.collect() - - output: - set val(name), file("*.bigWig") into ch_mrep_bigwig - file "*scale_factor.txt" into ch_mrep_bigwig_scale - file "*igv.txt" into ch_mrep_bigwig_igv - - script: - prefix = "${name}.mRp.clN" - pe_fragment = params.single_end ? "" : "-pc" - extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' - """ - SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') - echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph - - bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig - - find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt - """ -} - -/* - * STEP 8.2 Call peaks with MACS2 and calculate FRiP score - */ -process MergedRepMACSCallPeak { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) - file mrep_peak_count_header from ch_mrep_peak_count_header - file mrep_frip_score_header from ch_mrep_frip_score_header - - output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output - set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, - ch_mrep_macs_qc, - ch_mrep_macs_consensus - file "*igv.txt" into ch_mrep_macs_igv - file "*_mqc.tsv" into ch_mrep_macs_mqc - - script: - prefix = "${name}.mRp.clN" - broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" - """ - macs2 callpeak \\ - -t ${bam[0]} \\ - $broad \\ - -f $format \\ - -g $params.macs_gsize \\ - -n $prefix \\ - $pileup \\ - --keep-dup all \\ - --nomodel - - cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv - - READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') - grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv - - find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt - """ -} - -/* - * STEP 8.3 Annotate peaks with HOMER - */ -process MergedRepAnnotatePeaks { - tag "$name" - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - set val(name), file(peak) from ch_mrep_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.txt" into ch_mrep_macs_annotate - - script: - prefix = "${name}.mRp.clN" - """ - annotatePeaks.pl \\ - $peak \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}_peaks.annotatePeaks.txt - """ -} - -/* - * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation - */ -process MergedRepPeakQC { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - file peaks from ch_mrep_macs_qc.collect{ it[1] } - file annos from ch_mrep_macs_annotate.collect() - file mrep_peak_annotation_header from ch_mrep_peak_annotation_header - - output: - file "*.{txt,pdf}" into ch_mrep_peak_qc - file "*.tsv" into ch_mrep_peak_qc_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mRp.clN' - """ - plot_macs_qc.r \\ - -i ${peaks.join(',')} \\ - -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ - -o ./ \\ - -p macs_peak.${suffix} - - plot_homer_annotatepeaks.r \\ - -i ${annos.join(',')} \\ - -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ - -o ./ \\ - -p macs_annotatePeaks.${suffix} - - cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv - """ -} - -/* - * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection - */ -process MergedRepConsensusPeakSet { - label 'process_long' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file peaks from ch_mrep_macs_consensus.collect{ it[1] } - - output: - file "*.bed" into ch_mrep_macs_consensus_bed - file "*.saf" into ch_mrep_macs_consensus_saf - file "*.boolean.txt" into ch_mrep_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect - file "*igv.txt" into ch_mrep_macs_consensus_igv - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mRp.clN' - prefix = "consensus_peaks.${suffix}" - mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" - """ - sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ - | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt - - macs2_merged_expand.py \\ - ${prefix}.txt \\ - ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ - ${prefix}.boolean.txt \\ - $expandparam - - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed - - echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf - - sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt - plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf - - find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt - """ -} - -/* - * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file - */ -process MergedRepConsensusPeakSetAnnotate { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file bed from ch_mrep_macs_consensus_bed - file bool from ch_mrep_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate - - script: - prefix = "consensus_peaks.mRp.clN" - """ - annotatePeaks.pl \\ - $bed \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}.annotatePeaks.txt - - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt - paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt - """ -} - -/* - * STEP 8.7 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 - */ -process MergedRepConsensusPeakSetDESeq { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } - file saf from ch_mrep_macs_consensus_saf.collect() - file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header - file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header - - output: - file "*featureCounts.txt" into ch_mrep_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc - file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results - file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc - - script: - prefix = "consensus_peaks.mRp.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - pe_params = params.single_end ? '' : "-p --donotsort" - """ - featureCounts \\ - -F SAF \\ - -O \\ - --fracOverlap 0.2 \\ - -T $task.cpus \\ - $pe_params \\ - -a $saf \\ - -o ${prefix}.featureCounts.txt \\ - ${bam_files.join(' ')} - - featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb - - cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv - cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv - - find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- IGV -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 9 - Create IGV session file - */ -process IGV { - publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_igv - - input: - file fasta from ch_fasta - - file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) - file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) - file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) - file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) - - file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) - file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) - file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) - file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) - - output: - file "*.{txt,xml}" into ch_igv_session - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - """ - cat *.txt > igv_files.txt - igv_files_to_session.py igv_session.xml igv_files.txt ../../reference_genome/${fasta.getName()} --path_prefix '../../' - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MULTIQC -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * Parse software version numbers - */ -process get_software_versions { - publishDir "${params.outdir}/pipeline_info", mode: 'copy', - saveAs: { filename -> - if (filename.indexOf(".csv") > 0) filename - else null - } - - output: - file 'software_versions_mqc.yaml' into ch_software_versions_mqc - file "software_versions.csv" - - script: - """ - echo $workflow.manifest.version > v_pipeline.txt - echo $workflow.nextflow.version > v_nextflow.txt - fastqc --version > v_fastqc.txt - trim_galore --version > v_trim_galore.txt - echo \$(bwa 2>&1) > v_bwa.txt - samtools --version > v_samtools.txt - bedtools --version > v_bedtools.txt - echo \$(bamtools --version 2>&1) > v_bamtools.txt - echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true - picard MarkDuplicates --version &> v_picard.txt || true - echo \$(R --version 2>&1) > v_R.txt - python -c "import pysam; print(pysam.__version__)" > v_pysam.txt - echo \$(macs2 --version 2>&1) > v_macs2.txt - touch v_homer.txt - echo \$(ataqv --version 2>&1) > v_ataqv.txt - echo \$(featureCounts -v 2>&1) > v_featurecounts.txt - preseq &> v_preseq.txt - multiqc --version > v_multiqc.txt - scrape_software_versions.py &> software_versions_mqc.yaml - """ -} - -def create_workflow_summary(summary) { - - def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') - yaml_file.text = """ - id: 'nf-core-atacseq-summary' - description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/atacseq Workflow Summary' - section_href: 'https://github.com/nf-core/atacseq' - plot_type: 'html' - data: | -
-${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} -
- """.stripIndent() - - return yaml_file -} - -/* - * STEP 10 - MultiQC - */ -process MultiQC { - publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_multiqc - - input: - file multiqc_config from ch_multiqc_config - file readme from ch_anno_readme.collect().ifEmpty([]) - - file ('software_versions/*') from ch_software_versions_mqc.collect() - file ('workflow_summary/*') from create_workflow_summary(summary) - - file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) - file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) - file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) - - file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() - - file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() - file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) - file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) - - file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) - - output: - file "*multiqc_report.html" into ch_multiqc_report - file "*_data" - file "multiqc_plots" - - script: - rtitle = custom_runName ? "--title \"$custom_runName\"" : '' - rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' - """ - multiqc . -f $rtitle $rfilename --config $multiqc_config \\ - -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- REPORTS/DOCUMENTATION -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 11 - Output description HTML - */ -process output_documentation { - publishDir "${params.outdir}/Documentation", mode: 'copy' - - input: - file output_docs from ch_output_docs - - output: - file "results_description.html" - - script: - """ - markdown_to_html.r $output_docs results_description.html - """ -} - -/* - * Completion e-mail notification - */ -workflow.onComplete { - - // Set up the e-mail variables - def subject = "[nf-core/atacseq] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[nf-core/atacseq] FAILED: $workflow.runName" - } - def email_fields = [:] - email_fields['version'] = workflow.manifest.version - email_fields['runName'] = custom_runName ?: workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary - email_fields['summary']['Date Started'] = workflow.start - email_fields['summary']['Date Completed'] = workflow.complete - email_fields['summary']['Pipeline script file path'] = workflow.scriptFile - email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision - if (workflow.container) email_fields['summary']['Docker image'] = workflow.container - email_fields['summary']['Nextflow Version'] = workflow.nextflow.version - email_fields['summary']['Nextflow Build'] = workflow.nextflow.build - email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - // On success try attach the multiqc report - def mqc_report = null - try { - if (workflow.success) { - mqc_report = ch_multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList) { - log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" - mqc_report = mqc_report[0] - } - } - } catch (all) { - log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" - } - - // Check if we are only sending emails on failure - email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$baseDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$baseDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - def email_html = html_template.toString() - - // Render the sendmail template - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] - def sf = new File("$baseDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - if (email_address) { - try { - if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" - } catch (all) { - // Catch failures and try with plaintext - [ 'mail', '-s', subject, email_address ].execute() << email_txt - log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" - } - } - - // Write summary e-mail HTML to a file - def output_d = new File("${params.outdir}/pipeline_info/") - if (!output_d.exists()) { - output_d.mkdirs() - } - def output_hf = new File(output_d, "pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - def output_tf = new File(output_d, "pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - - c_reset = params.monochrome_logs ? '' : "\033[0m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; - c_green = params.monochrome_logs ? '' : "\033[0;32m"; - c_red = params.monochrome_logs ? '' : "\033[0;31m"; - - if (workflow.stats.ignoredCount > 0 && workflow.success) { - log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" - log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}" - log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}" - } - - if (workflow.success) { - log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" - } else { - checkHostname() - log.info "${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}" - } - -} +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- FASTQ QC -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 1 - FastQC +// */ +// process FastQC { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/fastqc", mode: 'copy', +// saveAs: { filename -> +// filename.endsWith(".zip") ? "zips/$filename" : "$filename" +// } +// +// when: +// !params.skip_fastqc +// +// input: +// set val(name), file(reads) from ch_raw_reads_fastqc +// +// output: +// file "*.{zip,html}" into ch_fastqc_reports_mqc +// +// script: +// // Added soft-links to original fastqs for consistent naming in MultiQC +// if (params.single_end) { +// """ +// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz +// fastqc -q -t $task.cpus ${name}.fastq.gz +// """ +// } else { +// """ +// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz +// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz +// fastqc -q -t $task.cpus ${name}_1.fastq.gz +// fastqc -q -t $task.cpus ${name}_2.fastq.gz +// """ +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- ADAPTER TRIMMING -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 2 - Trim Galore! +// */ +// if (params.skip_trimming) { +// ch_trimmed_reads = ch_raw_reads_trimgalore +// ch_trimgalore_results_mqc = Channel.empty() +// ch_trimgalore_fastqc_reports_mqc = Channel.empty() +// } else { +// process TrimGalore { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/trim_galore", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".html")) "fastqc/$filename" +// else if (filename.endsWith(".zip")) "fastqc/zips/$filename" +// else if (filename.endsWith("trimming_report.txt")) "logs/$filename" +// else params.save_trimmed ? filename : null +// } +// +// input: +// set val(name), file(reads) from ch_raw_reads_trimgalore +// +// output: +// set val(name), file("*.fq.gz") into ch_trimmed_reads +// file "*.txt" into ch_trimgalore_results_mqc +// file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc +// +// script: +// // Calculate number of --cores for TrimGalore based on value of task.cpus +// // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 +// // See: https://github.com/nf-core/atacseq/pull/65 +// def cores = 1 +// if (task.cpus) { +// cores = (task.cpus as int) - 4 +// if (params.single_end) cores = (task.cpus as int) - 3 +// if (cores < 1) cores = 1 +// if (cores > 4) cores = 4 +// } +// +// // Added soft-links to original fastqs for consistent naming in MultiQC +// c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' +// c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' +// tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' +// tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' +// nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' +// +// // Added soft-links to original fastqs for consistent naming in MultiQC +// if (params.single_end) { +// """ +// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz +// trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz +// """ +// } else { +// """ +// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz +// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz +// trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz +// """ +// } +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- ALIGN -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 3.1 - Align read 1 with bwa +// */ +// process BWAMem { +// tag "$name" +// label 'process_high' +// +// input: +// set val(name), file(reads) from ch_trimmed_reads +// file index from ch_bwa_index.collect() +// +// output: +// set val(name), file("*.bam") into ch_bwa_bam +// +// script: +// prefix = "${name}.Lb" +// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" +// if (params.seq_center) { +// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" +// } +// """ +// bwa mem \\ +// -t $task.cpus \\ +// -M \\ +// -R $rg \\ +// ${index}/${bwa_base} \\ +// $reads \\ +// | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - +// """ +// } +// +// /* +// * STEP 3.2 - Convert .bam to coordinate sorted .bam +// */ +// process SortBAM { +// tag "$name" +// label 'process_medium' +// if (params.save_align_intermeds) { +// publishDir path: "${params.outdir}/bwa/library", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else filename +// } +// } +// +// input: +// set val(name), file(bam) from ch_bwa_bam +// +// output: +// set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge +// file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc +// +// script: +// prefix = "${name}.Lb" +// """ +// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY BAM -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 4.1 Merge BAM files for all libraries from same replicate +// */ +// ch_sort_bam_merge +// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } +// .groupTuple(by: [0]) +// .map { it -> [ it[0], it[1].flatten() ] } +// .set { ch_sort_bam_merge } +// +// process MergedLibBAM { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" +// else params.save_align_intermeds ? filename : null +// } +// +// input: +// set val(name), file(bams) from ch_sort_bam_merge +// +// output: +// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, +// ch_mlib_bam_preseq, +// ch_mlib_bam_ataqv +// file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc +// file "*.txt" into ch_mlib_bam_metrics_mqc +// +// script: +// prefix = "${name}.mLb.mkD" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// if (bam_files.size() > 1) { +// """ +// picard -Xmx${avail_mem}g MergeSamFiles \\ +// ${'INPUT='+bam_files.join(' INPUT=')} \\ +// OUTPUT=${name}.sorted.bam \\ +// SORT_ORDER=coordinate \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// samtools index ${name}.sorted.bam +// +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${name}.sorted.bam \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=false \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } else { +// """ +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${bam_files[0]} \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=false \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /* +// * STEP 4.2 Filter BAM file at merged library-level +// */ +// process MergedLibBAMFilter { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (params.single_end || params.save_align_intermeds) { +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".sorted.bam")) filename +// else if (filename.endsWith(".sorted.bam.bai")) filename +// else null +// } +// } +// +// input: +// set val(name), file(bam) from ch_mlib_bam_filter +// file bed from ch_genome_filter_regions.collect() +// file bamtools_filter_config from ch_bamtools_filter_config +// +// output: +// set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam +// set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat +// file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc +// +// script: +// prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" +// filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" +// dup_params = params.keep_dups ? "" : "-F 0x0400" +// multimap_params = params.keep_multi_map ? "" : "-q 1" +// blacklist_params = params.blacklist ? "-L $bed" : "" +// name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" +// """ +// samtools view \\ +// $filter_params \\ +// $dup_params \\ +// $multimap_params \\ +// $blacklist_params \\ +// -b ${bam[0]} \\ +// | bamtools filter \\ +// -out ${prefix}.sorted.bam \\ +// -script $bamtools_filter_config +// +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// +// $name_sort_bam +// """ +// } +// +// /* +// * STEP 4.3 Remove orphan reads from paired-end BAM file +// */ +// if (params.single_end) { +// ch_mlib_filter_bam +// .into { ch_mlib_rm_orphan_bam_metrics; +// ch_mlib_rm_orphan_bam_bigwig; +// ch_mlib_rm_orphan_bam_macs; +// ch_mlib_rm_orphan_bam_plotfingerprint; +// ch_mlib_rm_orphan_bam_mrep; +// ch_mlib_name_bam_mlib_counts; +// ch_mlib_name_bam_mrep_counts } +// +// ch_mlib_filter_bam_flagstat +// .into { ch_mlib_rm_orphan_flagstat_bigwig; +// ch_mlib_rm_orphan_flagstat_macs; +// ch_mlib_rm_orphan_flagstat_mqc } +// +// ch_mlib_filter_bam_stats_mqc +// .set { ch_mlib_rm_orphan_stats_mqc } +// } else { +// process MergedLibBAMRemoveOrphan { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".sorted.bam")) filename +// else if (filename.endsWith(".sorted.bam.bai")) filename +// else null +// } +// +// input: +// set val(name), file(bam) from ch_mlib_filter_bam +// +// output: +// set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, +// ch_mlib_rm_orphan_bam_bigwig, +// ch_mlib_rm_orphan_bam_macs, +// ch_mlib_rm_orphan_bam_plotfingerprint, +// ch_mlib_rm_orphan_bam_mrep +// set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, +// ch_mlib_name_bam_mrep_counts +// set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, +// ch_mlib_rm_orphan_flagstat_macs, +// ch_mlib_rm_orphan_flagstat_mqc +// file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// prefix = "${name}.mLb.clN" +// """ +// bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs +// +// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 5.1 preseq analysis after merging libraries and before filtering +// */ +// process MergedLibPreseq { +// tag "$name" +// label 'process_low' +// publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' +// +// when: +// !params.skip_preseq +// +// input: +// set val(name), file(bam) from ch_mlib_bam_preseq +// +// output: +// file "*.ccurve.txt" into ch_mlib_preseq_mqc +// +// script: +// prefix = "${name}.mLb.mkD" +// """ +// preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} +// """ +// } +// +// /* +// * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering +// */ +// process MergedLibMetrics { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("_metrics")) "picard_metrics/$filename" +// else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" +// else null +// } +// +// when: +// !params.skip_picard_metrics +// +// input: +// set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics +// file fasta from ch_fasta +// +// output: +// file "*_metrics" into ch_mlib_collectmetrics_mqc +// file "*.pdf" into ch_mlib_collectmetrics_pdf +// +// script: +// prefix = "${name}.mLb.clN" +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// """ +// picard -Xmx${avail_mem}g CollectMultipleMetrics \\ +// INPUT=${bam[0]} \\ +// OUTPUT=${prefix}.CollectMultipleMetrics \\ +// REFERENCE_SEQUENCE=$fasta \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// """ +// } +// +// /* +// * STEP 5.3 Read depth normalised bigWig +// */ +// process MergedLibBigWig { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("scale_factor.txt")) "scale/$filename" +// else if (filename.endsWith(".bigWig")) "$filename" +// else null +// } +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) +// file sizes from ch_genome_sizes_mlib_bigwig.collect() +// +// output: +// set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile +// file "*scale_factor.txt" into ch_mlib_bigwig_scale +// file "*igv.txt" into ch_mlib_bigwig_igv +// +// script: +// prefix = "${name}.mLb.clN" +// pe_fragment = params.single_end ? "" : "-pc" +// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' +// """ +// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') +// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt +// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph +// +// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig +// +// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt +// """ +// } +// +// /* +// * STEP 5.4 generate gene body coverage plot with deepTools +// */ +// process MergedLibPlotProfile { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' +// +// when: +// !params.skip_plot_profile +// +// input: +// set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile +// file bed from ch_gene_bed +// +// output: +// file '*.{gz,pdf}' into ch_mlib_plotprofile_results +// file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// """ +// computeMatrix scale-regions \\ +// --regionsFileName $bed \\ +// --scoreFileName $bigwig \\ +// --outFileName ${prefix}.computeMatrix.mat.gz \\ +// --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ +// --regionBodyLength 1000 \\ +// --beforeRegionStartLength 3000 \\ +// --afterRegionStartLength 3000 \\ +// --skipZeros \\ +// --smartLabels \\ +// --numberOfProcessors $task.cpus +// +// plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ +// --outFileName ${prefix}.plotProfile.pdf \\ +// --outFileNameData ${prefix}.plotProfile.tab +// """ +// } +// +// /* +// * STEP 5.5 deepTools plotFingerprint +// */ +// process MergedLibPlotFingerprint { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' +// +// when: +// !params.skip_plot_fingerprint +// +// input: +// set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint +// +// output: +// file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results +// file '*.raw.txt' into ch_mlib_plotfingerprint_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' +// """ +// plotFingerprint \\ +// --bamfiles ${bam[0]} \\ +// --plotFile ${prefix}.plotFingerprint.pdf \\ +// $extend \\ +// --labels $prefix \\ +// --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ +// --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ +// --skipZeros \\ +// --numberOfProcessors $task.cpus \\ +// --numberOfSamples $params.fingerprint_bins +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY PEAK ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 6.1 Call peaks with MACS2 and calculate FRiP score +// */ +// process MergedLibMACSCallPeak { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".tsv")) "qc/$filename" +// else if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) +// file mlib_peak_count_header from ch_mlib_peak_count_header +// file mlib_frip_score_header from ch_mlib_frip_score_header +// +// output: +// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output +// set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, +// ch_mlib_macs_qc, +// ch_mlib_macs_consensus, +// ch_mlib_macs_ataqv +// file "*igv.txt" into ch_mlib_macs_igv +// file "*_mqc.tsv" into ch_mlib_macs_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" +// format = params.single_end ? "BAM" : "BAMPE" +// pileup = params.save_macs_pileup ? "-B --SPMR" : "" +// """ +// macs2 callpeak \\ +// -t ${bam[0]} \\ +// $broad \\ +// -f $format \\ +// -g $params.macs_gsize \\ +// -n $prefix \\ +// $pileup \\ +// --keep-dup all \\ +// --nomodel +// +// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv +// +// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') +// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv +// +// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt +// """ +// } +// +// /* +// * STEP 6.2 Annotate peaks with HOMER +// */ +// process MergedLibAnnotatePeaks { +// tag "$name" +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' +// +// when: +// params.macs_gsize +// +// input: +// set val(name), file(peak) from ch_mlib_macs_homer +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.txt" into ch_mlib_macs_annotate +// +// script: +// prefix = "${name}.mLb.clN" +// """ +// annotatePeaks.pl \\ +// $peak \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}_peaks.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation +// */ +// process MergedLibPeakQC { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' +// +// when: +// params.macs_gsize +// +// input: +// file peaks from ch_mlib_macs_qc.collect{ it[1] } +// file annos from ch_mlib_macs_annotate.collect() +// file mlib_peak_annotation_header from ch_mlib_peak_annotation_header +// +// output: +// file "*.{txt,pdf}" into ch_mlib_peak_qc +// file "*.tsv" into ch_mlib_peak_qc_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mLb.clN' +// """ +// plot_macs_qc.r \\ +// -i ${peaks.join(',')} \\ +// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ +// -o ./ \\ +// -p macs_peak.${suffix} +// +// plot_homer_annotatepeaks.r \\ +// -i ${annos.join(',')} \\ +// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ +// -o ./ \\ +// -p macs_annotatePeaks.${suffix} +// +// cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv +// """ +// } +// +// /* +// * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection +// */ +// process MergedLibConsensusPeakSet { +// label 'process_long' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks +// +// input: +// file peaks from ch_mlib_macs_consensus.collect{ it[1] } +// +// output: +// file "*.bed" into ch_mlib_macs_consensus_bed +// file "*.saf" into ch_mlib_macs_consensus_saf +// file "*.boolean.txt" into ch_mlib_macs_consensus_bool +// file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect +// file "*igv.txt" into ch_mlib_macs_consensus_igv +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mLb.clN' +// prefix = "consensus_peaks.${suffix}" +// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') +// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') +// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" +// """ +// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ +// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt +// +// macs2_merged_expand.py \\ +// ${prefix}.txt \\ +// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ +// ${prefix}.boolean.txt \\ +// --min_replicates $params.min_reps_consensus \\ +// $expandparam +// +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed +// +// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf +// +// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt +// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf +// +// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt +// """ +// } +// +// /* +// * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file +// */ +// process MergedLibConsensusPeakSetAnnotate { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks +// +// input: +// file bed from ch_mlib_macs_consensus_bed +// file bool from ch_mlib_macs_consensus_bool +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate +// +// script: +// prefix = "consensus_peaks.mLb.clN" +// """ +// annotatePeaks.pl \\ +// $bed \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}.annotatePeaks.txt +// +// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt +// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 6.6 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 +// */ +// process MergedLibConsensusPeakSetDESeq { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } +// file saf from ch_mlib_macs_consensus_saf.collect() +// file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header +// file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header +// +// output: +// file "*featureCounts.txt" into ch_mlib_macs_consensus_counts +// file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc +// file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results +// file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors +// file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results +// file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed +// file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv +// file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc +// +// script: +// prefix = "consensus_peaks.mLb.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" +// pe_params = params.single_end ? '' : "-p --donotsort" +// """ +// featureCounts \\ +// -F SAF \\ +// -O \\ +// --fracOverlap 0.2 \\ +// -T $task.cpus \\ +// $pe_params \\ +// -a $saf \\ +// -o ${prefix}.featureCounts.txt \\ +// ${bam_files.join(' ')} +// +// featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb +// +// cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv +// cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv +// +// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt +// """ +// } +// +// /* +// * STEP 6.7 Run ataqv on BAM file and corresponding peaks +// */ +// process MergedLibAtaqv { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_ataqv +// +// input: +// set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) +// file autosomes from ch_genome_autosomes.collect() +// file tss_bed from ch_tss_bed +// +// output: +// file "*.json" into ch_mlib_ataqv +// +// script: +// peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" +// mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" +// """ +// ataqv \\ +// --threads $task.cpus \\ +// $peak_param \\ +// --tss-file $tss_bed \\ +// --metrics-file ${name}.ataqv.json \\ +// --name $name \\ +// --ignore-read-groups \\ +// --autosomal-reference-file $autosomes \\ +// $mito_param \\ +// NA \\ +// ${bam[0]} +// """ +// } +// +// /* +// * STEP 6.8 run ataqv mkarv on all JSON files to render web app +// */ +// process MergedLibAtaqvMkarv { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_ataqv +// +// input: +// file json from ch_mlib_ataqv.collect() +// +// output: +// file "html" into ch_mlib_ataqv_mkarv +// +// script: +// """ +// mkarv \\ +// --concurrency $task.cpus \\ +// --force \\ +// ./html/ \\ +// ${json.join(' ')} +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE REPLICATE BAM -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 7 Merge library BAM files across all replicates +// */ +// ch_mlib_rm_orphan_bam_mrep +// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } +// .groupTuple(by: [0]) +// .map { it -> [ it[0], it[1].flatten() ] } +// .set { ch_mlib_rm_orphan_bam_mrep } +// +// process MergedRepBAM { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" +// else filename +// } +// +// input: +// set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep +// +// output: +// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, +// ch_mrep_bam_macs +// set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, +// ch_mrep_bam_flagstat_macs, +// ch_mrep_bam_flagstat_mqc +// file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc +// file "*.txt" into ch_mrep_bam_metrics_mqc +// +// when: +// !params.skip_merge_replicates && replicatesExist +// +// script: +// prefix = "${name}.mRp.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// if (bam_files.size() > 1) { +// """ +// picard -Xmx${avail_mem}g MergeSamFiles \\ +// ${'INPUT='+bam_files.join(' INPUT=')} \\ +// OUTPUT=${name}.sorted.bam \\ +// SORT_ORDER=coordinate \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// samtools index ${name}.sorted.bam +// +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${name}.sorted.bam \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=true \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } else { +// """ +// ln -s ${bams[0]} ${prefix}.sorted.bam +// ln -s ${bams[1]} ${prefix}.sorted.bam.bai +// touch ${prefix}.MarkDuplicates.metrics.txt +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 8.1 Read depth normalised bigWig +// */ +// process MergedRepBigWig { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("scale_factor.txt")) "scale/$filename" +// else if (filename.endsWith(".bigWig")) "$filename" +// else null +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) +// file sizes from ch_genome_sizes_mrep_bigwig.collect() +// +// output: +// set val(name), file("*.bigWig") into ch_mrep_bigwig +// file "*scale_factor.txt" into ch_mrep_bigwig_scale +// file "*igv.txt" into ch_mrep_bigwig_igv +// +// script: +// prefix = "${name}.mRp.clN" +// pe_fragment = params.single_end ? "" : "-pc" +// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' +// """ +// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') +// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt +// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph +// +// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig +// +// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt +// """ +// } +// +// /* +// * STEP 8.2 Call peaks with MACS2 and calculate FRiP score +// */ +// process MergedRepMACSCallPeak { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".tsv")) "qc/$filename" +// else if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) +// file mrep_peak_count_header from ch_mrep_peak_count_header +// file mrep_frip_score_header from ch_mrep_frip_score_header +// +// output: +// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output +// set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, +// ch_mrep_macs_qc, +// ch_mrep_macs_consensus +// file "*igv.txt" into ch_mrep_macs_igv +// file "*_mqc.tsv" into ch_mrep_macs_mqc +// +// script: +// prefix = "${name}.mRp.clN" +// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" +// format = params.single_end ? "BAM" : "BAMPE" +// pileup = params.save_macs_pileup ? "-B --SPMR" : "" +// """ +// macs2 callpeak \\ +// -t ${bam[0]} \\ +// $broad \\ +// -f $format \\ +// -g $params.macs_gsize \\ +// -n $prefix \\ +// $pileup \\ +// --keep-dup all \\ +// --nomodel +// +// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv +// +// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') +// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv +// +// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt +// """ +// } +// +// /* +// * STEP 8.3 Annotate peaks with HOMER +// */ +// process MergedRepAnnotatePeaks { +// tag "$name" +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// set val(name), file(peak) from ch_mrep_macs_homer +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.txt" into ch_mrep_macs_annotate +// +// script: +// prefix = "${name}.mRp.clN" +// """ +// annotatePeaks.pl \\ +// $peak \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}_peaks.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation +// */ +// process MergedRepPeakQC { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// file peaks from ch_mrep_macs_qc.collect{ it[1] } +// file annos from ch_mrep_macs_annotate.collect() +// file mrep_peak_annotation_header from ch_mrep_peak_annotation_header +// +// output: +// file "*.{txt,pdf}" into ch_mrep_peak_qc +// file "*.tsv" into ch_mrep_peak_qc_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mRp.clN' +// """ +// plot_macs_qc.r \\ +// -i ${peaks.join(',')} \\ +// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ +// -o ./ \\ +// -p macs_peak.${suffix} +// +// plot_homer_annotatepeaks.r \\ +// -i ${annos.join(',')} \\ +// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ +// -o ./ \\ +// -p macs_annotatePeaks.${suffix} +// +// cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv +// """ +// } +// +// /* +// * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection +// */ +// process MergedRepConsensusPeakSet { +// label 'process_long' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file peaks from ch_mrep_macs_consensus.collect{ it[1] } +// +// output: +// file "*.bed" into ch_mrep_macs_consensus_bed +// file "*.saf" into ch_mrep_macs_consensus_saf +// file "*.boolean.txt" into ch_mrep_macs_consensus_bool +// file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect +// file "*igv.txt" into ch_mrep_macs_consensus_igv +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mRp.clN' +// prefix = "consensus_peaks.${suffix}" +// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') +// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') +// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" +// """ +// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ +// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt +// +// macs2_merged_expand.py \\ +// ${prefix}.txt \\ +// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ +// ${prefix}.boolean.txt \\ +// $expandparam +// +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed +// +// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf +// +// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt +// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf +// +// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt +// """ +// } +// +// /* +// * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file +// */ +// process MergedRepConsensusPeakSetAnnotate { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file bed from ch_mrep_macs_consensus_bed +// file bool from ch_mrep_macs_consensus_bool +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate +// +// script: +// prefix = "consensus_peaks.mRp.clN" +// """ +// annotatePeaks.pl \\ +// $bed \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}.annotatePeaks.txt +// +// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt +// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 8.7 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 +// */ +// process MergedRepConsensusPeakSetDESeq { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } +// file saf from ch_mrep_macs_consensus_saf.collect() +// file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header +// file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header +// +// output: +// file "*featureCounts.txt" into ch_mrep_macs_consensus_counts +// file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc +// file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results +// file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors +// file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results +// file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed +// file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv +// file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc +// +// script: +// prefix = "consensus_peaks.mRp.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" +// pe_params = params.single_end ? '' : "-p --donotsort" +// """ +// featureCounts \\ +// -F SAF \\ +// -O \\ +// --fracOverlap 0.2 \\ +// -T $task.cpus \\ +// $pe_params \\ +// -a $saf \\ +// -o ${prefix}.featureCounts.txt \\ +// ${bam_files.join(' ')} +// +// featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb +// +// cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv +// cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv +// +// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- IGV -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 9 - Create IGV session file +// */ +// process IGV { +// publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_igv +// +// input: +// file fasta from ch_fasta +// +// file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) +// file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) +// file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) +// file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) +// +// file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) +// file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) +// file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) +// file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) +// +// output: +// file "*.{txt,xml}" into ch_igv_session +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// """ +// cat *.txt > igv_files.txt +// igv_files_to_session.py igv_session.xml igv_files.txt ../../reference_genome/${fasta.getName()} --path_prefix '../../' +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MULTIQC -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * Parse software version numbers +// */ +// process get_software_versions { +// publishDir "${params.outdir}/pipeline_info", mode: 'copy', +// saveAs: { filename -> +// if (filename.indexOf(".csv") > 0) filename +// else null +// } +// +// output: +// file 'software_versions_mqc.yaml' into ch_software_versions_mqc +// file "software_versions.csv" +// +// script: +// """ +// echo $workflow.manifest.version > v_pipeline.txt +// echo $workflow.nextflow.version > v_nextflow.txt +// fastqc --version > v_fastqc.txt +// trim_galore --version > v_trim_galore.txt +// echo \$(bwa 2>&1) > v_bwa.txt +// samtools --version > v_samtools.txt +// bedtools --version > v_bedtools.txt +// echo \$(bamtools --version 2>&1) > v_bamtools.txt +// echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true +// picard MarkDuplicates --version &> v_picard.txt || true +// echo \$(R --version 2>&1) > v_R.txt +// python -c "import pysam; print(pysam.__version__)" > v_pysam.txt +// echo \$(macs2 --version 2>&1) > v_macs2.txt +// touch v_homer.txt +// echo \$(ataqv --version 2>&1) > v_ataqv.txt +// echo \$(featureCounts -v 2>&1) > v_featurecounts.txt +// preseq &> v_preseq.txt +// multiqc --version > v_multiqc.txt +// scrape_software_versions.py &> software_versions_mqc.yaml +// """ +// } +// +// def create_workflow_summary(summary) { +// +// def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') +// yaml_file.text = """ +// id: 'nf-core-atacseq-summary' +// description: " - this information is collected when the pipeline is started." +// section_name: 'nf-core/atacseq Workflow Summary' +// section_href: 'https://github.com/nf-core/atacseq' +// plot_type: 'html' +// data: | +//
+// ${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} +//
+// """.stripIndent() +// +// return yaml_file +// } +// +// /* +// * STEP 10 - MultiQC +// */ +// process MultiQC { +// publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_multiqc +// +// input: +// file multiqc_config from ch_multiqc_config +// +// file ('software_versions/*') from ch_software_versions_mqc.collect() +// file ('workflow_summary/*') from create_workflow_summary(summary) +// +// file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) +// file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) +// file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) +// +// file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() +// +// file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() +// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} +// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() +// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() +// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() +// file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) +// file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) +// file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) +// file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) +// +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) +// +// output: +// file "*multiqc_report.html" into ch_multiqc_report +// file "*_data" +// file "multiqc_plots" +// +// script: +// rtitle = custom_runName ? "--title \"$custom_runName\"" : '' +// rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' +// """ +// multiqc . -f $rtitle $rfilename --config $multiqc_config \\ +// -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- REPORTS/DOCUMENTATION -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 11 - Output description HTML +// */ +// process output_documentation { +// publishDir "${params.outdir}/Documentation", mode: 'copy' +// +// input: +// file output_docs from ch_output_docs +// +// output: +// file "results_description.html" +// +// script: +// """ +// markdown_to_html.r $output_docs results_description.html +// """ +// } +// +// /* +// * Completion e-mail notification +// */ +// workflow.onComplete { +// +// // Set up the e-mail variables +// def subject = "[nf-core/atacseq] Successful: $workflow.runName" +// if (!workflow.success) { +// subject = "[nf-core/atacseq] FAILED: $workflow.runName" +// } +// def email_fields = [:] +// email_fields['version'] = workflow.manifest.version +// email_fields['runName'] = custom_runName ?: workflow.runName +// email_fields['success'] = workflow.success +// email_fields['dateComplete'] = workflow.complete +// email_fields['duration'] = workflow.duration +// email_fields['exitStatus'] = workflow.exitStatus +// email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') +// email_fields['errorReport'] = (workflow.errorReport ?: 'None') +// email_fields['commandLine'] = workflow.commandLine +// email_fields['projectDir'] = workflow.projectDir +// email_fields['summary'] = summary +// email_fields['summary']['Date Started'] = workflow.start +// email_fields['summary']['Date Completed'] = workflow.complete +// email_fields['summary']['Pipeline script file path'] = workflow.scriptFile +// email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId +// if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository +// if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId +// if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision +// if (workflow.container) email_fields['summary']['Docker image'] = workflow.container +// email_fields['summary']['Nextflow Version'] = workflow.nextflow.version +// email_fields['summary']['Nextflow Build'] = workflow.nextflow.build +// email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp +// +// // On success try attach the multiqc report +// def mqc_report = null +// try { +// if (workflow.success) { +// mqc_report = ch_multiqc_report.getVal() +// if (mqc_report.getClass() == ArrayList) { +// log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" +// mqc_report = mqc_report[0] +// } +// } +// } catch (all) { +// log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" +// } +// +// // Check if we are only sending emails on failure +// email_address = params.email +// if (!params.email && params.email_on_fail && !workflow.success) { +// email_address = params.email_on_fail +// } +// +// // Render the TXT template +// def engine = new groovy.text.GStringTemplateEngine() +// def tf = new File("$baseDir/assets/email_template.txt") +// def txt_template = engine.createTemplate(tf).make(email_fields) +// def email_txt = txt_template.toString() +// +// // Render the HTML template +// def hf = new File("$baseDir/assets/email_template.html") +// def html_template = engine.createTemplate(hf).make(email_fields) +// def email_html = html_template.toString() +// +// // Render the sendmail template +// def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] +// def sf = new File("$baseDir/assets/sendmail_template.txt") +// def sendmail_template = engine.createTemplate(sf).make(smail_fields) +// def sendmail_html = sendmail_template.toString() +// +// // Send the HTML e-mail +// if (email_address) { +// try { +// if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } +// // Try to send HTML e-mail using sendmail +// [ 'sendmail', '-t' ].execute() << sendmail_html +// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" +// } catch (all) { +// // Catch failures and try with plaintext +// [ 'mail', '-s', subject, email_address ].execute() << email_txt +// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" +// } +// } +// +// // Write summary e-mail HTML to a file +// def output_d = new File("${params.outdir}/pipeline_info/") +// if (!output_d.exists()) { +// output_d.mkdirs() +// } +// def output_hf = new File(output_d, "pipeline_report.html") +// output_hf.withWriter { w -> w << email_html } +// def output_tf = new File(output_d, "pipeline_report.txt") +// output_tf.withWriter { w -> w << email_txt } +// +// c_reset = params.monochrome_logs ? '' : "\033[0m"; +// c_purple = params.monochrome_logs ? '' : "\033[0;35m"; +// c_green = params.monochrome_logs ? '' : "\033[0;32m"; +// c_red = params.monochrome_logs ? '' : "\033[0;31m"; +// +// if (workflow.stats.ignoredCount > 0 && workflow.success) { +// log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" +// log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}" +// log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}" +// } +// +// if (workflow.success) { +// log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" +// } else { +// checkHostname() +// log.info "${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}" +// } +// +// } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// From 1054c920b5cd0a7b32675184bb67c4ef79d9833a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 30 Jan 2020 13:54:30 +0000 Subject: [PATCH 079/226] Add README.txt description --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index c4c2f6fc..6ad1b844 100755 --- a/docs/output.md +++ b/docs/output.md @@ -318,7 +318,7 @@ You can skip this portion of the analysis by specifying the `--skip_merge_replic *Output directories*: * `reference_genome/` - A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. + A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. * `reference_genome/BWAIndex/` If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes. From bff3d8b31fb6ec48f4e849753c99b1ae57403db8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 30 Jan 2020 14:01:51 +0000 Subject: [PATCH 080/226] Update CHANGELOG --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8d88d88..f727f28c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,12 +10,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Added` * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! +* [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * Added GitHub Actions CI tests ### `Fixed` -* [#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE -* [#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system +* [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE +* [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * Make executables in `bin/` compatible with Python 3 From 8f9c883ae33e9257839172d10761f145b28292f2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 30 Jan 2020 17:52:09 +0000 Subject: [PATCH 081/226] Comment in code --- main.nf | 3252 +++++++++++++++++++++++++++---------------------------- 1 file changed, 1626 insertions(+), 1626 deletions(-) diff --git a/main.nf b/main.nf index fc7dd155..e6294f73 100644 --- a/main.nf +++ b/main.nf @@ -469,1632 +469,1632 @@ process MakeGenomeFilter { """ } -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- FASTQ QC -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 1 - FastQC -// */ -// process FastQC { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/fastqc", mode: 'copy', -// saveAs: { filename -> -// filename.endsWith(".zip") ? "zips/$filename" : "$filename" -// } -// -// when: -// !params.skip_fastqc -// -// input: -// set val(name), file(reads) from ch_raw_reads_fastqc -// -// output: -// file "*.{zip,html}" into ch_fastqc_reports_mqc -// -// script: -// // Added soft-links to original fastqs for consistent naming in MultiQC -// if (params.single_end) { -// """ -// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz -// fastqc -q -t $task.cpus ${name}.fastq.gz -// """ -// } else { -// """ -// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz -// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz -// fastqc -q -t $task.cpus ${name}_1.fastq.gz -// fastqc -q -t $task.cpus ${name}_2.fastq.gz -// """ -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- ADAPTER TRIMMING -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 2 - Trim Galore! -// */ -// if (params.skip_trimming) { -// ch_trimmed_reads = ch_raw_reads_trimgalore -// ch_trimgalore_results_mqc = Channel.empty() -// ch_trimgalore_fastqc_reports_mqc = Channel.empty() -// } else { -// process TrimGalore { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/trim_galore", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".html")) "fastqc/$filename" -// else if (filename.endsWith(".zip")) "fastqc/zips/$filename" -// else if (filename.endsWith("trimming_report.txt")) "logs/$filename" -// else params.save_trimmed ? filename : null -// } -// -// input: -// set val(name), file(reads) from ch_raw_reads_trimgalore -// -// output: -// set val(name), file("*.fq.gz") into ch_trimmed_reads -// file "*.txt" into ch_trimgalore_results_mqc -// file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc -// -// script: -// // Calculate number of --cores for TrimGalore based on value of task.cpus -// // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 -// // See: https://github.com/nf-core/atacseq/pull/65 -// def cores = 1 -// if (task.cpus) { -// cores = (task.cpus as int) - 4 -// if (params.single_end) cores = (task.cpus as int) - 3 -// if (cores < 1) cores = 1 -// if (cores > 4) cores = 4 -// } -// -// // Added soft-links to original fastqs for consistent naming in MultiQC -// c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' -// c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' -// tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' -// tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' -// nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' -// -// // Added soft-links to original fastqs for consistent naming in MultiQC -// if (params.single_end) { -// """ -// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz -// trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz -// """ -// } else { -// """ -// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz -// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz -// trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz -// """ -// } -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- ALIGN -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 3.1 - Align read 1 with bwa -// */ -// process BWAMem { -// tag "$name" -// label 'process_high' -// -// input: -// set val(name), file(reads) from ch_trimmed_reads -// file index from ch_bwa_index.collect() -// -// output: -// set val(name), file("*.bam") into ch_bwa_bam -// -// script: -// prefix = "${name}.Lb" -// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" -// if (params.seq_center) { -// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" -// } -// """ -// bwa mem \\ -// -t $task.cpus \\ -// -M \\ -// -R $rg \\ -// ${index}/${bwa_base} \\ -// $reads \\ -// | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - -// """ -// } -// -// /* -// * STEP 3.2 - Convert .bam to coordinate sorted .bam -// */ -// process SortBAM { -// tag "$name" -// label 'process_medium' -// if (params.save_align_intermeds) { -// publishDir path: "${params.outdir}/bwa/library", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else filename -// } -// } -// -// input: -// set val(name), file(bam) from ch_bwa_bam -// -// output: -// set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge -// file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc -// -// script: -// prefix = "${name}.Lb" -// """ -// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY BAM -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 4.1 Merge BAM files for all libraries from same replicate -// */ -// ch_sort_bam_merge -// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } -// .groupTuple(by: [0]) -// .map { it -> [ it[0], it[1].flatten() ] } -// .set { ch_sort_bam_merge } -// -// process MergedLibBAM { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" -// else params.save_align_intermeds ? filename : null -// } -// -// input: -// set val(name), file(bams) from ch_sort_bam_merge -// -// output: -// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, -// ch_mlib_bam_preseq, -// ch_mlib_bam_ataqv -// file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc -// file "*.txt" into ch_mlib_bam_metrics_mqc -// -// script: -// prefix = "${name}.mLb.mkD" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// if (bam_files.size() > 1) { -// """ -// picard -Xmx${avail_mem}g MergeSamFiles \\ -// ${'INPUT='+bam_files.join(' INPUT=')} \\ -// OUTPUT=${name}.sorted.bam \\ -// SORT_ORDER=coordinate \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// samtools index ${name}.sorted.bam -// -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${name}.sorted.bam \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=false \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } else { -// """ -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${bam_files[0]} \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=false \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /* -// * STEP 4.2 Filter BAM file at merged library-level -// */ -// process MergedLibBAMFilter { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (params.single_end || params.save_align_intermeds) { -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".sorted.bam")) filename -// else if (filename.endsWith(".sorted.bam.bai")) filename -// else null -// } -// } -// -// input: -// set val(name), file(bam) from ch_mlib_bam_filter -// file bed from ch_genome_filter_regions.collect() -// file bamtools_filter_config from ch_bamtools_filter_config -// -// output: -// set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam -// set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat -// file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc -// -// script: -// prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" -// filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" -// dup_params = params.keep_dups ? "" : "-F 0x0400" -// multimap_params = params.keep_multi_map ? "" : "-q 1" -// blacklist_params = params.blacklist ? "-L $bed" : "" -// name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" -// """ -// samtools view \\ -// $filter_params \\ -// $dup_params \\ -// $multimap_params \\ -// $blacklist_params \\ -// -b ${bam[0]} \\ -// | bamtools filter \\ -// -out ${prefix}.sorted.bam \\ -// -script $bamtools_filter_config -// -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// -// $name_sort_bam -// """ -// } -// -// /* -// * STEP 4.3 Remove orphan reads from paired-end BAM file -// */ -// if (params.single_end) { -// ch_mlib_filter_bam -// .into { ch_mlib_rm_orphan_bam_metrics; -// ch_mlib_rm_orphan_bam_bigwig; -// ch_mlib_rm_orphan_bam_macs; -// ch_mlib_rm_orphan_bam_plotfingerprint; -// ch_mlib_rm_orphan_bam_mrep; -// ch_mlib_name_bam_mlib_counts; -// ch_mlib_name_bam_mrep_counts } -// -// ch_mlib_filter_bam_flagstat -// .into { ch_mlib_rm_orphan_flagstat_bigwig; -// ch_mlib_rm_orphan_flagstat_macs; -// ch_mlib_rm_orphan_flagstat_mqc } -// -// ch_mlib_filter_bam_stats_mqc -// .set { ch_mlib_rm_orphan_stats_mqc } -// } else { -// process MergedLibBAMRemoveOrphan { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".sorted.bam")) filename -// else if (filename.endsWith(".sorted.bam.bai")) filename -// else null -// } -// -// input: -// set val(name), file(bam) from ch_mlib_filter_bam -// -// output: -// set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, -// ch_mlib_rm_orphan_bam_bigwig, -// ch_mlib_rm_orphan_bam_macs, -// ch_mlib_rm_orphan_bam_plotfingerprint, -// ch_mlib_rm_orphan_bam_mrep -// set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, -// ch_mlib_name_bam_mrep_counts -// set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, -// ch_mlib_rm_orphan_flagstat_macs, -// ch_mlib_rm_orphan_flagstat_mqc -// file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// prefix = "${name}.mLb.clN" -// """ -// bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs -// -// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 5.1 preseq analysis after merging libraries and before filtering -// */ -// process MergedLibPreseq { -// tag "$name" -// label 'process_low' -// publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' -// -// when: -// !params.skip_preseq -// -// input: -// set val(name), file(bam) from ch_mlib_bam_preseq -// -// output: -// file "*.ccurve.txt" into ch_mlib_preseq_mqc -// -// script: -// prefix = "${name}.mLb.mkD" -// """ -// preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} -// """ -// } -// -// /* -// * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering -// */ -// process MergedLibMetrics { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("_metrics")) "picard_metrics/$filename" -// else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" -// else null -// } -// -// when: -// !params.skip_picard_metrics -// -// input: -// set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics -// file fasta from ch_fasta -// -// output: -// file "*_metrics" into ch_mlib_collectmetrics_mqc -// file "*.pdf" into ch_mlib_collectmetrics_pdf -// -// script: -// prefix = "${name}.mLb.clN" -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// """ -// picard -Xmx${avail_mem}g CollectMultipleMetrics \\ -// INPUT=${bam[0]} \\ -// OUTPUT=${prefix}.CollectMultipleMetrics \\ -// REFERENCE_SEQUENCE=$fasta \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// """ -// } -// -// /* -// * STEP 5.3 Read depth normalised bigWig -// */ -// process MergedLibBigWig { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("scale_factor.txt")) "scale/$filename" -// else if (filename.endsWith(".bigWig")) "$filename" -// else null -// } -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) -// file sizes from ch_genome_sizes_mlib_bigwig.collect() -// -// output: -// set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile -// file "*scale_factor.txt" into ch_mlib_bigwig_scale -// file "*igv.txt" into ch_mlib_bigwig_igv -// -// script: -// prefix = "${name}.mLb.clN" -// pe_fragment = params.single_end ? "" : "-pc" -// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' -// """ -// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') -// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt -// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph -// -// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig -// -// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt -// """ -// } -// -// /* -// * STEP 5.4 generate gene body coverage plot with deepTools -// */ -// process MergedLibPlotProfile { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' -// -// when: -// !params.skip_plot_profile -// -// input: -// set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile -// file bed from ch_gene_bed -// -// output: -// file '*.{gz,pdf}' into ch_mlib_plotprofile_results -// file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// """ -// computeMatrix scale-regions \\ -// --regionsFileName $bed \\ -// --scoreFileName $bigwig \\ -// --outFileName ${prefix}.computeMatrix.mat.gz \\ -// --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ -// --regionBodyLength 1000 \\ -// --beforeRegionStartLength 3000 \\ -// --afterRegionStartLength 3000 \\ -// --skipZeros \\ -// --smartLabels \\ -// --numberOfProcessors $task.cpus -// -// plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ -// --outFileName ${prefix}.plotProfile.pdf \\ -// --outFileNameData ${prefix}.plotProfile.tab -// """ -// } -// -// /* -// * STEP 5.5 deepTools plotFingerprint -// */ -// process MergedLibPlotFingerprint { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' -// -// when: -// !params.skip_plot_fingerprint -// -// input: -// set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint -// -// output: -// file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results -// file '*.raw.txt' into ch_mlib_plotfingerprint_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' -// """ -// plotFingerprint \\ -// --bamfiles ${bam[0]} \\ -// --plotFile ${prefix}.plotFingerprint.pdf \\ -// $extend \\ -// --labels $prefix \\ -// --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ -// --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ -// --skipZeros \\ -// --numberOfProcessors $task.cpus \\ -// --numberOfSamples $params.fingerprint_bins -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY PEAK ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 6.1 Call peaks with MACS2 and calculate FRiP score -// */ -// process MergedLibMACSCallPeak { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".tsv")) "qc/$filename" -// else if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) -// file mlib_peak_count_header from ch_mlib_peak_count_header -// file mlib_frip_score_header from ch_mlib_frip_score_header -// -// output: -// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output -// set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, -// ch_mlib_macs_qc, -// ch_mlib_macs_consensus, -// ch_mlib_macs_ataqv -// file "*igv.txt" into ch_mlib_macs_igv -// file "*_mqc.tsv" into ch_mlib_macs_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" -// format = params.single_end ? "BAM" : "BAMPE" -// pileup = params.save_macs_pileup ? "-B --SPMR" : "" -// """ -// macs2 callpeak \\ -// -t ${bam[0]} \\ -// $broad \\ -// -f $format \\ -// -g $params.macs_gsize \\ -// -n $prefix \\ -// $pileup \\ -// --keep-dup all \\ -// --nomodel -// -// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv -// -// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') -// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv -// -// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt -// """ -// } -// -// /* -// * STEP 6.2 Annotate peaks with HOMER -// */ -// process MergedLibAnnotatePeaks { -// tag "$name" -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' -// -// when: -// params.macs_gsize -// -// input: -// set val(name), file(peak) from ch_mlib_macs_homer -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.txt" into ch_mlib_macs_annotate -// -// script: -// prefix = "${name}.mLb.clN" -// """ -// annotatePeaks.pl \\ -// $peak \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}_peaks.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation -// */ -// process MergedLibPeakQC { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' -// -// when: -// params.macs_gsize -// -// input: -// file peaks from ch_mlib_macs_qc.collect{ it[1] } -// file annos from ch_mlib_macs_annotate.collect() -// file mlib_peak_annotation_header from ch_mlib_peak_annotation_header -// -// output: -// file "*.{txt,pdf}" into ch_mlib_peak_qc -// file "*.tsv" into ch_mlib_peak_qc_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mLb.clN' -// """ -// plot_macs_qc.r \\ -// -i ${peaks.join(',')} \\ -// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ -// -o ./ \\ -// -p macs_peak.${suffix} -// -// plot_homer_annotatepeaks.r \\ -// -i ${annos.join(',')} \\ -// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ -// -o ./ \\ -// -p macs_annotatePeaks.${suffix} -// -// cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv -// """ -// } -// -// /* -// * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection -// */ -// process MergedLibConsensusPeakSet { -// label 'process_long' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks -// -// input: -// file peaks from ch_mlib_macs_consensus.collect{ it[1] } -// -// output: -// file "*.bed" into ch_mlib_macs_consensus_bed -// file "*.saf" into ch_mlib_macs_consensus_saf -// file "*.boolean.txt" into ch_mlib_macs_consensus_bool -// file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect -// file "*igv.txt" into ch_mlib_macs_consensus_igv -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mLb.clN' -// prefix = "consensus_peaks.${suffix}" -// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') -// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') -// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" -// """ -// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ -// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt -// -// macs2_merged_expand.py \\ -// ${prefix}.txt \\ -// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ -// ${prefix}.boolean.txt \\ -// --min_replicates $params.min_reps_consensus \\ -// $expandparam -// -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed -// -// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf -// -// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt -// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf -// -// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt -// """ -// } -// -// /* -// * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file -// */ -// process MergedLibConsensusPeakSetAnnotate { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks -// -// input: -// file bed from ch_mlib_macs_consensus_bed -// file bool from ch_mlib_macs_consensus_bool -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate -// -// script: -// prefix = "consensus_peaks.mLb.clN" -// """ -// annotatePeaks.pl \\ -// $bed \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}.annotatePeaks.txt -// -// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt -// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 6.6 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 -// */ -// process MergedLibConsensusPeakSetDESeq { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } -// file saf from ch_mlib_macs_consensus_saf.collect() -// file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header -// file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header -// -// output: -// file "*featureCounts.txt" into ch_mlib_macs_consensus_counts -// file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc -// file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results -// file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors -// file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results -// file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed -// file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv -// file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc -// -// script: -// prefix = "consensus_peaks.mLb.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" -// pe_params = params.single_end ? '' : "-p --donotsort" -// """ -// featureCounts \\ -// -F SAF \\ -// -O \\ -// --fracOverlap 0.2 \\ -// -T $task.cpus \\ -// $pe_params \\ -// -a $saf \\ -// -o ${prefix}.featureCounts.txt \\ -// ${bam_files.join(' ')} -// -// featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb -// -// cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv -// cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv -// -// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt -// """ -// } -// -// /* -// * STEP 6.7 Run ataqv on BAM file and corresponding peaks -// */ -// process MergedLibAtaqv { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_ataqv -// -// input: -// set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) -// file autosomes from ch_genome_autosomes.collect() -// file tss_bed from ch_tss_bed -// -// output: -// file "*.json" into ch_mlib_ataqv -// -// script: -// peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" -// mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" -// """ -// ataqv \\ -// --threads $task.cpus \\ -// $peak_param \\ -// --tss-file $tss_bed \\ -// --metrics-file ${name}.ataqv.json \\ -// --name $name \\ -// --ignore-read-groups \\ -// --autosomal-reference-file $autosomes \\ -// $mito_param \\ -// NA \\ -// ${bam[0]} -// """ -// } -// -// /* -// * STEP 6.8 run ataqv mkarv on all JSON files to render web app -// */ -// process MergedLibAtaqvMkarv { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_ataqv -// -// input: -// file json from ch_mlib_ataqv.collect() -// -// output: -// file "html" into ch_mlib_ataqv_mkarv -// -// script: -// """ -// mkarv \\ -// --concurrency $task.cpus \\ -// --force \\ -// ./html/ \\ -// ${json.join(' ')} -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE REPLICATE BAM -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 7 Merge library BAM files across all replicates -// */ -// ch_mlib_rm_orphan_bam_mrep -// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } -// .groupTuple(by: [0]) -// .map { it -> [ it[0], it[1].flatten() ] } -// .set { ch_mlib_rm_orphan_bam_mrep } -// -// process MergedRepBAM { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" -// else filename -// } -// -// input: -// set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep -// -// output: -// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, -// ch_mrep_bam_macs -// set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, -// ch_mrep_bam_flagstat_macs, -// ch_mrep_bam_flagstat_mqc -// file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc -// file "*.txt" into ch_mrep_bam_metrics_mqc -// -// when: -// !params.skip_merge_replicates && replicatesExist -// -// script: -// prefix = "${name}.mRp.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// if (bam_files.size() > 1) { -// """ -// picard -Xmx${avail_mem}g MergeSamFiles \\ -// ${'INPUT='+bam_files.join(' INPUT=')} \\ -// OUTPUT=${name}.sorted.bam \\ -// SORT_ORDER=coordinate \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// samtools index ${name}.sorted.bam -// -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${name}.sorted.bam \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=true \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } else { -// """ -// ln -s ${bams[0]} ${prefix}.sorted.bam -// ln -s ${bams[1]} ${prefix}.sorted.bam.bai -// touch ${prefix}.MarkDuplicates.metrics.txt -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 8.1 Read depth normalised bigWig -// */ -// process MergedRepBigWig { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("scale_factor.txt")) "scale/$filename" -// else if (filename.endsWith(".bigWig")) "$filename" -// else null -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) -// file sizes from ch_genome_sizes_mrep_bigwig.collect() -// -// output: -// set val(name), file("*.bigWig") into ch_mrep_bigwig -// file "*scale_factor.txt" into ch_mrep_bigwig_scale -// file "*igv.txt" into ch_mrep_bigwig_igv -// -// script: -// prefix = "${name}.mRp.clN" -// pe_fragment = params.single_end ? "" : "-pc" -// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' -// """ -// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') -// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt -// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph -// -// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig -// -// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt -// """ -// } -// -// /* -// * STEP 8.2 Call peaks with MACS2 and calculate FRiP score -// */ -// process MergedRepMACSCallPeak { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".tsv")) "qc/$filename" -// else if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) -// file mrep_peak_count_header from ch_mrep_peak_count_header -// file mrep_frip_score_header from ch_mrep_frip_score_header -// -// output: -// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output -// set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, -// ch_mrep_macs_qc, -// ch_mrep_macs_consensus -// file "*igv.txt" into ch_mrep_macs_igv -// file "*_mqc.tsv" into ch_mrep_macs_mqc -// -// script: -// prefix = "${name}.mRp.clN" -// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" -// format = params.single_end ? "BAM" : "BAMPE" -// pileup = params.save_macs_pileup ? "-B --SPMR" : "" -// """ -// macs2 callpeak \\ -// -t ${bam[0]} \\ -// $broad \\ -// -f $format \\ -// -g $params.macs_gsize \\ -// -n $prefix \\ -// $pileup \\ -// --keep-dup all \\ -// --nomodel -// -// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv -// -// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') -// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv -// -// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt -// """ -// } -// -// /* -// * STEP 8.3 Annotate peaks with HOMER -// */ -// process MergedRepAnnotatePeaks { -// tag "$name" -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// set val(name), file(peak) from ch_mrep_macs_homer -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.txt" into ch_mrep_macs_annotate -// -// script: -// prefix = "${name}.mRp.clN" -// """ -// annotatePeaks.pl \\ -// $peak \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}_peaks.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation -// */ -// process MergedRepPeakQC { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// file peaks from ch_mrep_macs_qc.collect{ it[1] } -// file annos from ch_mrep_macs_annotate.collect() -// file mrep_peak_annotation_header from ch_mrep_peak_annotation_header -// -// output: -// file "*.{txt,pdf}" into ch_mrep_peak_qc -// file "*.tsv" into ch_mrep_peak_qc_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mRp.clN' -// """ -// plot_macs_qc.r \\ -// -i ${peaks.join(',')} \\ -// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ -// -o ./ \\ -// -p macs_peak.${suffix} -// -// plot_homer_annotatepeaks.r \\ -// -i ${annos.join(',')} \\ -// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ -// -o ./ \\ -// -p macs_annotatePeaks.${suffix} -// -// cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv -// """ -// } -// -// /* -// * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection -// */ -// process MergedRepConsensusPeakSet { -// label 'process_long' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file peaks from ch_mrep_macs_consensus.collect{ it[1] } -// -// output: -// file "*.bed" into ch_mrep_macs_consensus_bed -// file "*.saf" into ch_mrep_macs_consensus_saf -// file "*.boolean.txt" into ch_mrep_macs_consensus_bool -// file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect -// file "*igv.txt" into ch_mrep_macs_consensus_igv -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mRp.clN' -// prefix = "consensus_peaks.${suffix}" -// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') -// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') -// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" -// """ -// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ -// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt -// -// macs2_merged_expand.py \\ -// ${prefix}.txt \\ -// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ -// ${prefix}.boolean.txt \\ -// $expandparam -// -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed -// -// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf -// -// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt -// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf -// -// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt -// """ -// } -// -// /* -// * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file -// */ -// process MergedRepConsensusPeakSetAnnotate { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file bed from ch_mrep_macs_consensus_bed -// file bool from ch_mrep_macs_consensus_bool -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate -// -// script: -// prefix = "consensus_peaks.mRp.clN" -// """ -// annotatePeaks.pl \\ -// $bed \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}.annotatePeaks.txt -// -// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt -// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 8.7 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 -// */ -// process MergedRepConsensusPeakSetDESeq { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } -// file saf from ch_mrep_macs_consensus_saf.collect() -// file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header -// file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header -// -// output: -// file "*featureCounts.txt" into ch_mrep_macs_consensus_counts -// file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc -// file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results -// file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors -// file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results -// file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed -// file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv -// file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc -// -// script: -// prefix = "consensus_peaks.mRp.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" -// pe_params = params.single_end ? '' : "-p --donotsort" -// """ -// featureCounts \\ -// -F SAF \\ -// -O \\ -// --fracOverlap 0.2 \\ -// -T $task.cpus \\ -// $pe_params \\ -// -a $saf \\ -// -o ${prefix}.featureCounts.txt \\ -// ${bam_files.join(' ')} -// -// featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb -// -// cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv -// cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv -// -// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- IGV -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 9 - Create IGV session file -// */ -// process IGV { -// publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_igv -// -// input: -// file fasta from ch_fasta -// -// file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) -// file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) -// file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) -// file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) -// -// file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) -// file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) -// file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) -// file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) -// -// output: -// file "*.{txt,xml}" into ch_igv_session -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// """ -// cat *.txt > igv_files.txt -// igv_files_to_session.py igv_session.xml igv_files.txt ../../reference_genome/${fasta.getName()} --path_prefix '../../' -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MULTIQC -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * Parse software version numbers -// */ -// process get_software_versions { -// publishDir "${params.outdir}/pipeline_info", mode: 'copy', -// saveAs: { filename -> -// if (filename.indexOf(".csv") > 0) filename -// else null -// } -// -// output: -// file 'software_versions_mqc.yaml' into ch_software_versions_mqc -// file "software_versions.csv" -// -// script: -// """ -// echo $workflow.manifest.version > v_pipeline.txt -// echo $workflow.nextflow.version > v_nextflow.txt -// fastqc --version > v_fastqc.txt -// trim_galore --version > v_trim_galore.txt -// echo \$(bwa 2>&1) > v_bwa.txt -// samtools --version > v_samtools.txt -// bedtools --version > v_bedtools.txt -// echo \$(bamtools --version 2>&1) > v_bamtools.txt -// echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true -// picard MarkDuplicates --version &> v_picard.txt || true -// echo \$(R --version 2>&1) > v_R.txt -// python -c "import pysam; print(pysam.__version__)" > v_pysam.txt -// echo \$(macs2 --version 2>&1) > v_macs2.txt -// touch v_homer.txt -// echo \$(ataqv --version 2>&1) > v_ataqv.txt -// echo \$(featureCounts -v 2>&1) > v_featurecounts.txt -// preseq &> v_preseq.txt -// multiqc --version > v_multiqc.txt -// scrape_software_versions.py &> software_versions_mqc.yaml -// """ -// } -// -// def create_workflow_summary(summary) { -// -// def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') -// yaml_file.text = """ -// id: 'nf-core-atacseq-summary' -// description: " - this information is collected when the pipeline is started." -// section_name: 'nf-core/atacseq Workflow Summary' -// section_href: 'https://github.com/nf-core/atacseq' -// plot_type: 'html' -// data: | -//
-// ${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} -//
-// """.stripIndent() -// -// return yaml_file -// } -// -// /* -// * STEP 10 - MultiQC -// */ -// process MultiQC { -// publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_multiqc -// -// input: -// file multiqc_config from ch_multiqc_config -// -// file ('software_versions/*') from ch_software_versions_mqc.collect() -// file ('workflow_summary/*') from create_workflow_summary(summary) -// -// file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) -// file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) -// file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) -// -// file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() -// -// file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() -// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} -// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() -// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() -// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() -// file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) -// file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) -// file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) -// file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) -// -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) -// -// output: -// file "*multiqc_report.html" into ch_multiqc_report -// file "*_data" -// file "multiqc_plots" -// -// script: -// rtitle = custom_runName ? "--title \"$custom_runName\"" : '' -// rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' -// """ -// multiqc . -f $rtitle $rfilename --config $multiqc_config \\ -// -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- REPORTS/DOCUMENTATION -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 11 - Output description HTML -// */ -// process output_documentation { -// publishDir "${params.outdir}/Documentation", mode: 'copy' -// -// input: -// file output_docs from ch_output_docs -// -// output: -// file "results_description.html" -// -// script: -// """ -// markdown_to_html.r $output_docs results_description.html -// """ -// } -// -// /* -// * Completion e-mail notification -// */ -// workflow.onComplete { -// -// // Set up the e-mail variables -// def subject = "[nf-core/atacseq] Successful: $workflow.runName" -// if (!workflow.success) { -// subject = "[nf-core/atacseq] FAILED: $workflow.runName" -// } -// def email_fields = [:] -// email_fields['version'] = workflow.manifest.version -// email_fields['runName'] = custom_runName ?: workflow.runName -// email_fields['success'] = workflow.success -// email_fields['dateComplete'] = workflow.complete -// email_fields['duration'] = workflow.duration -// email_fields['exitStatus'] = workflow.exitStatus -// email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') -// email_fields['errorReport'] = (workflow.errorReport ?: 'None') -// email_fields['commandLine'] = workflow.commandLine -// email_fields['projectDir'] = workflow.projectDir -// email_fields['summary'] = summary -// email_fields['summary']['Date Started'] = workflow.start -// email_fields['summary']['Date Completed'] = workflow.complete -// email_fields['summary']['Pipeline script file path'] = workflow.scriptFile -// email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId -// if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository -// if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId -// if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision -// if (workflow.container) email_fields['summary']['Docker image'] = workflow.container -// email_fields['summary']['Nextflow Version'] = workflow.nextflow.version -// email_fields['summary']['Nextflow Build'] = workflow.nextflow.build -// email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp -// -// // On success try attach the multiqc report -// def mqc_report = null -// try { -// if (workflow.success) { -// mqc_report = ch_multiqc_report.getVal() -// if (mqc_report.getClass() == ArrayList) { -// log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" -// mqc_report = mqc_report[0] -// } -// } -// } catch (all) { -// log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" -// } -// -// // Check if we are only sending emails on failure -// email_address = params.email -// if (!params.email && params.email_on_fail && !workflow.success) { -// email_address = params.email_on_fail -// } -// -// // Render the TXT template -// def engine = new groovy.text.GStringTemplateEngine() -// def tf = new File("$baseDir/assets/email_template.txt") -// def txt_template = engine.createTemplate(tf).make(email_fields) -// def email_txt = txt_template.toString() -// -// // Render the HTML template -// def hf = new File("$baseDir/assets/email_template.html") -// def html_template = engine.createTemplate(hf).make(email_fields) -// def email_html = html_template.toString() -// -// // Render the sendmail template -// def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] -// def sf = new File("$baseDir/assets/sendmail_template.txt") -// def sendmail_template = engine.createTemplate(sf).make(smail_fields) -// def sendmail_html = sendmail_template.toString() -// -// // Send the HTML e-mail -// if (email_address) { -// try { -// if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } -// // Try to send HTML e-mail using sendmail -// [ 'sendmail', '-t' ].execute() << sendmail_html -// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" -// } catch (all) { -// // Catch failures and try with plaintext -// [ 'mail', '-s', subject, email_address ].execute() << email_txt -// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" -// } -// } -// -// // Write summary e-mail HTML to a file -// def output_d = new File("${params.outdir}/pipeline_info/") -// if (!output_d.exists()) { -// output_d.mkdirs() -// } -// def output_hf = new File(output_d, "pipeline_report.html") -// output_hf.withWriter { w -> w << email_html } -// def output_tf = new File(output_d, "pipeline_report.txt") -// output_tf.withWriter { w -> w << email_txt } -// -// c_reset = params.monochrome_logs ? '' : "\033[0m"; -// c_purple = params.monochrome_logs ? '' : "\033[0;35m"; -// c_green = params.monochrome_logs ? '' : "\033[0;32m"; -// c_red = params.monochrome_logs ? '' : "\033[0;31m"; -// -// if (workflow.stats.ignoredCount > 0 && workflow.success) { -// log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" -// log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}" -// log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}" -// } -// -// if (workflow.success) { -// log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" -// } else { -// checkHostname() -// log.info "${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}" -// } -// -// } +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- FASTQ QC -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 1 - FastQC + */ +process FastQC { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/fastqc", mode: 'copy', + saveAs: { filename -> + filename.endsWith(".zip") ? "zips/$filename" : "$filename" + } + + when: + !params.skip_fastqc + + input: + set val(name), file(reads) from ch_raw_reads_fastqc + + output: + file "*.{zip,html}" into ch_fastqc_reports_mqc + + script: + // Added soft-links to original fastqs for consistent naming in MultiQC + if (params.single_end) { + """ + [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz + fastqc -q -t $task.cpus ${name}.fastq.gz + """ + } else { + """ + [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz + [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz + fastqc -q -t $task.cpus ${name}_1.fastq.gz + fastqc -q -t $task.cpus ${name}_2.fastq.gz + """ + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- ADAPTER TRIMMING -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 2 - Trim Galore! + */ +if (params.skip_trimming) { + ch_trimmed_reads = ch_raw_reads_trimgalore + ch_trimgalore_results_mqc = Channel.empty() + ch_trimgalore_fastqc_reports_mqc = Channel.empty() +} else { + process TrimGalore { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/trim_galore", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".html")) "fastqc/$filename" + else if (filename.endsWith(".zip")) "fastqc/zips/$filename" + else if (filename.endsWith("trimming_report.txt")) "logs/$filename" + else params.save_trimmed ? filename : null + } + + input: + set val(name), file(reads) from ch_raw_reads_trimgalore + + output: + set val(name), file("*.fq.gz") into ch_trimmed_reads + file "*.txt" into ch_trimgalore_results_mqc + file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc + + script: + // Calculate number of --cores for TrimGalore based on value of task.cpus + // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 + // See: https://github.com/nf-core/atacseq/pull/65 + def cores = 1 + if (task.cpus) { + cores = (task.cpus as int) - 4 + if (params.single_end) cores = (task.cpus as int) - 3 + if (cores < 1) cores = 1 + if (cores > 4) cores = 4 + } + + // Added soft-links to original fastqs for consistent naming in MultiQC + c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' + c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' + tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' + tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' + nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' + + // Added soft-links to original fastqs for consistent naming in MultiQC + if (params.single_end) { + """ + [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz + trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz + """ + } else { + """ + [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz + [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz + trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz + """ + } + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- ALIGN -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 3.1 - Align read 1 with bwa + */ +process BWAMem { + tag "$name" + label 'process_high' + + input: + set val(name), file(reads) from ch_trimmed_reads + file index from ch_bwa_index.collect() + + output: + set val(name), file("*.bam") into ch_bwa_bam + + script: + prefix = "${name}.Lb" + rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" + if (params.seq_center) { + rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" + } + """ + bwa mem \\ + -t $task.cpus \\ + -M \\ + -R $rg \\ + ${index}/${bwa_base} \\ + $reads \\ + | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - + """ +} + +/* + * STEP 3.2 - Convert .bam to coordinate sorted .bam + */ +process SortBAM { + tag "$name" + label 'process_medium' + if (params.save_align_intermeds) { + publishDir path: "${params.outdir}/bwa/library", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else filename + } + } + + input: + set val(name), file(bam) from ch_bwa_bam + + output: + set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge + file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc + + script: + prefix = "${name}.Lb" + """ + samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY BAM -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 4.1 Merge BAM files for all libraries from same replicate + */ +ch_sort_bam_merge + .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_sort_bam_merge } + +process MergedLibBAM { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + else params.save_align_intermeds ? filename : null + } + + input: + set val(name), file(bams) from ch_sort_bam_merge + + output: + set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, + ch_mlib_bam_preseq, + ch_mlib_bam_ataqv + file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc + file "*.txt" into ch_mlib_bam_metrics_mqc + + script: + prefix = "${name}.mLb.mkD" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + if (bam_files.size() > 1) { + """ + picard -Xmx${avail_mem}g MergeSamFiles \\ + ${'INPUT='+bam_files.join(' INPUT=')} \\ + OUTPUT=${name}.sorted.bam \\ + SORT_ORDER=coordinate \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + samtools index ${name}.sorted.bam + + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${name}.sorted.bam \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=false \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } else { + """ + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${bam_files[0]} \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=false \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/* + * STEP 4.2 Filter BAM file at merged library-level + */ +process MergedLibBAMFilter { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (params.single_end || params.save_align_intermeds) { + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".sorted.bam")) filename + else if (filename.endsWith(".sorted.bam.bai")) filename + else null + } + } + + input: + set val(name), file(bam) from ch_mlib_bam_filter + file bed from ch_genome_filter_regions.collect() + file bamtools_filter_config from ch_bamtools_filter_config + + output: + set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam + set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat + file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc + + script: + prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" + filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" + dup_params = params.keep_dups ? "" : "-F 0x0400" + multimap_params = params.keep_multi_map ? "" : "-q 1" + blacklist_params = params.blacklist ? "-L $bed" : "" + name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" + """ + samtools view \\ + $filter_params \\ + $dup_params \\ + $multimap_params \\ + $blacklist_params \\ + -b ${bam[0]} \\ + | bamtools filter \\ + -out ${prefix}.sorted.bam \\ + -script $bamtools_filter_config + + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + + $name_sort_bam + """ +} + +/* + * STEP 4.3 Remove orphan reads from paired-end BAM file + */ +if (params.single_end) { + ch_mlib_filter_bam + .into { ch_mlib_rm_orphan_bam_metrics; + ch_mlib_rm_orphan_bam_bigwig; + ch_mlib_rm_orphan_bam_macs; + ch_mlib_rm_orphan_bam_plotfingerprint; + ch_mlib_rm_orphan_bam_mrep; + ch_mlib_name_bam_mlib_counts; + ch_mlib_name_bam_mrep_counts } + + ch_mlib_filter_bam_flagstat + .into { ch_mlib_rm_orphan_flagstat_bigwig; + ch_mlib_rm_orphan_flagstat_macs; + ch_mlib_rm_orphan_flagstat_mqc } + + ch_mlib_filter_bam_stats_mqc + .set { ch_mlib_rm_orphan_stats_mqc } +} else { + process MergedLibBAMRemoveOrphan { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".sorted.bam")) filename + else if (filename.endsWith(".sorted.bam.bai")) filename + else null + } + + input: + set val(name), file(bam) from ch_mlib_filter_bam + + output: + set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, + ch_mlib_rm_orphan_bam_bigwig, + ch_mlib_rm_orphan_bam_macs, + ch_mlib_rm_orphan_bam_plotfingerprint, + ch_mlib_rm_orphan_bam_mrep + set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, + ch_mlib_name_bam_mrep_counts + set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, + ch_mlib_rm_orphan_flagstat_macs, + ch_mlib_rm_orphan_flagstat_mqc + file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + prefix = "${name}.mLb.clN" + """ + bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs + + samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 5.1 preseq analysis after merging libraries and before filtering + */ +process MergedLibPreseq { + tag "$name" + label 'process_low' + publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' + + when: + !params.skip_preseq + + input: + set val(name), file(bam) from ch_mlib_bam_preseq + + output: + file "*.ccurve.txt" into ch_mlib_preseq_mqc + + script: + prefix = "${name}.mLb.mkD" + """ + preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} + """ +} + +/* + * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering + */ +process MergedLibMetrics { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("_metrics")) "picard_metrics/$filename" + else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" + else null + } + + when: + !params.skip_picard_metrics + + input: + set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics + file fasta from ch_fasta + + output: + file "*_metrics" into ch_mlib_collectmetrics_mqc + file "*.pdf" into ch_mlib_collectmetrics_pdf + + script: + prefix = "${name}.mLb.clN" + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + """ + picard -Xmx${avail_mem}g CollectMultipleMetrics \\ + INPUT=${bam[0]} \\ + OUTPUT=${prefix}.CollectMultipleMetrics \\ + REFERENCE_SEQUENCE=$fasta \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + """ +} + +/* + * STEP 5.3 Read depth normalised bigWig + */ +process MergedLibBigWig { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("scale_factor.txt")) "scale/$filename" + else if (filename.endsWith(".bigWig")) "$filename" + else null + } + + input: + set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) + file sizes from ch_genome_sizes_mlib_bigwig.collect() + + output: + set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile + file "*scale_factor.txt" into ch_mlib_bigwig_scale + file "*igv.txt" into ch_mlib_bigwig_igv + + script: + prefix = "${name}.mLb.clN" + pe_fragment = params.single_end ? "" : "-pc" + extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' + """ + SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') + echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph + + bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig + + find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt + """ +} + +/* + * STEP 5.4 generate gene body coverage plot with deepTools + */ +process MergedLibPlotProfile { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' + + when: + !params.skip_plot_profile + + input: + set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile + file bed from ch_gene_bed + + output: + file '*.{gz,pdf}' into ch_mlib_plotprofile_results + file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc + + script: + prefix = "${name}.mLb.clN" + """ + computeMatrix scale-regions \\ + --regionsFileName $bed \\ + --scoreFileName $bigwig \\ + --outFileName ${prefix}.computeMatrix.mat.gz \\ + --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ + --regionBodyLength 1000 \\ + --beforeRegionStartLength 3000 \\ + --afterRegionStartLength 3000 \\ + --skipZeros \\ + --smartLabels \\ + --numberOfProcessors $task.cpus + + plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ + --outFileName ${prefix}.plotProfile.pdf \\ + --outFileNameData ${prefix}.plotProfile.tab + """ +} + +/* + * STEP 5.5 deepTools plotFingerprint + */ +process MergedLibPlotFingerprint { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' + + when: + !params.skip_plot_fingerprint + + input: + set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint + + output: + file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results + file '*.raw.txt' into ch_mlib_plotfingerprint_mqc + + script: + prefix = "${name}.mLb.clN" + extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' + """ + plotFingerprint \\ + --bamfiles ${bam[0]} \\ + --plotFile ${prefix}.plotFingerprint.pdf \\ + $extend \\ + --labels $prefix \\ + --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ + --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ + --skipZeros \\ + --numberOfProcessors $task.cpus \\ + --numberOfSamples $params.fingerprint_bins + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY PEAK ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 6.1 Call peaks with MACS2 and calculate FRiP score + */ +process MergedLibMACSCallPeak { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".tsv")) "qc/$filename" + else if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize + + input: + set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) + file mlib_peak_count_header from ch_mlib_peak_count_header + file mlib_frip_score_header from ch_mlib_frip_score_header + + output: + set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output + set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, + ch_mlib_macs_qc, + ch_mlib_macs_consensus, + ch_mlib_macs_ataqv + file "*igv.txt" into ch_mlib_macs_igv + file "*_mqc.tsv" into ch_mlib_macs_mqc + + script: + prefix = "${name}.mLb.clN" + broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" + format = params.single_end ? "BAM" : "BAMPE" + pileup = params.save_macs_pileup ? "-B --SPMR" : "" + """ + macs2 callpeak \\ + -t ${bam[0]} \\ + $broad \\ + -f $format \\ + -g $params.macs_gsize \\ + -n $prefix \\ + $pileup \\ + --keep-dup all \\ + --nomodel + + cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv + + READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') + grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv + + find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt + """ +} + +/* + * STEP 6.2 Annotate peaks with HOMER + */ +process MergedLibAnnotatePeaks { + tag "$name" + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' + + when: + params.macs_gsize + + input: + set val(name), file(peak) from ch_mlib_macs_homer + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.txt" into ch_mlib_macs_annotate + + script: + prefix = "${name}.mLb.clN" + """ + annotatePeaks.pl \\ + $peak \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}_peaks.annotatePeaks.txt + """ +} + +/* + * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + */ +process MergedLibPeakQC { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' + + when: + params.macs_gsize + + input: + file peaks from ch_mlib_macs_qc.collect{ it[1] } + file annos from ch_mlib_macs_annotate.collect() + file mlib_peak_annotation_header from ch_mlib_peak_annotation_header + + output: + file "*.{txt,pdf}" into ch_mlib_peak_qc + file "*.tsv" into ch_mlib_peak_qc_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mLb.clN' + """ + plot_macs_qc.r \\ + -i ${peaks.join(',')} \\ + -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ + -o ./ \\ + -p macs_peak.${suffix} + + plot_homer_annotatepeaks.r \\ + -i ${annos.join(',')} \\ + -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ + -o ./ \\ + -p macs_annotatePeaks.${suffix} + + cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv + """ +} + +/* + * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + */ +process MergedLibConsensusPeakSet { + label 'process_long' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + + input: + file peaks from ch_mlib_macs_consensus.collect{ it[1] } + + output: + file "*.bed" into ch_mlib_macs_consensus_bed + file "*.saf" into ch_mlib_macs_consensus_saf + file "*.boolean.txt" into ch_mlib_macs_consensus_bool + file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect + file "*igv.txt" into ch_mlib_macs_consensus_igv + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mLb.clN' + prefix = "consensus_peaks.${suffix}" + mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') + collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') + expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + """ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt + + macs2_merged_expand.py \\ + ${prefix}.txt \\ + ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ + ${prefix}.boolean.txt \\ + --min_replicates $params.min_reps_consensus \\ + $expandparam + + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed + + echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf + + sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt + plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf + + find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt + """ +} + +/* + * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file + */ +process MergedLibConsensusPeakSetAnnotate { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + + input: + file bed from ch_mlib_macs_consensus_bed + file bool from ch_mlib_macs_consensus_bool + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate + + script: + prefix = "consensus_peaks.mLb.clN" + """ + annotatePeaks.pl \\ + $bed \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}.annotatePeaks.txt + + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt + """ +} + +/* + * STEP 6.6 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 + */ +process MergedLibConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks + + input: + file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } + file saf from ch_mlib_macs_consensus_saf.collect() + file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header + file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header + + output: + file "*featureCounts.txt" into ch_mlib_macs_consensus_counts + file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc + file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results + file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc + + script: + prefix = "consensus_peaks.mLb.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + pe_params = params.single_end ? '' : "-p --donotsort" + """ + featureCounts \\ + -F SAF \\ + -O \\ + --fracOverlap 0.2 \\ + -T $task.cpus \\ + $pe_params \\ + -a $saf \\ + -o ${prefix}.featureCounts.txt \\ + ${bam_files.join(' ')} + + featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb + + cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv + cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv + + find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt + """ +} + +/* + * STEP 6.7 Run ataqv on BAM file and corresponding peaks + */ +process MergedLibAtaqv { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_ataqv + + input: + set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) + file autosomes from ch_genome_autosomes.collect() + file tss_bed from ch_tss_bed + + output: + file "*.json" into ch_mlib_ataqv + + script: + peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" + mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" + """ + ataqv \\ + --threads $task.cpus \\ + $peak_param \\ + --tss-file $tss_bed \\ + --metrics-file ${name}.ataqv.json \\ + --name $name \\ + --ignore-read-groups \\ + --autosomal-reference-file $autosomes \\ + $mito_param \\ + NA \\ + ${bam[0]} + """ +} + +/* + * STEP 6.8 run ataqv mkarv on all JSON files to render web app + */ +process MergedLibAtaqvMkarv { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_ataqv + + input: + file json from ch_mlib_ataqv.collect() + + output: + file "html" into ch_mlib_ataqv_mkarv + + script: + """ + mkarv \\ + --concurrency $task.cpus \\ + --force \\ + ./html/ \\ + ${json.join(' ')} + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE REPLICATE BAM -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 7 Merge library BAM files across all replicates + */ +ch_mlib_rm_orphan_bam_mrep + .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_mlib_rm_orphan_bam_mrep } + +process MergedRepBAM { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + else filename + } + + input: + set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep + + output: + set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, + ch_mrep_bam_macs + set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, + ch_mrep_bam_flagstat_macs, + ch_mrep_bam_flagstat_mqc + file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc + file "*.txt" into ch_mrep_bam_metrics_mqc + + when: + !params.skip_merge_replicates && replicatesExist + + script: + prefix = "${name}.mRp.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + if (bam_files.size() > 1) { + """ + picard -Xmx${avail_mem}g MergeSamFiles \\ + ${'INPUT='+bam_files.join(' INPUT=')} \\ + OUTPUT=${name}.sorted.bam \\ + SORT_ORDER=coordinate \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + samtools index ${name}.sorted.bam + + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${name}.sorted.bam \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=true \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } else { + """ + ln -s ${bams[0]} ${prefix}.sorted.bam + ln -s ${bams[1]} ${prefix}.sorted.bam.bai + touch ${prefix}.MarkDuplicates.metrics.txt + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 8.1 Read depth normalised bigWig + */ +process MergedRepBigWig { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("scale_factor.txt")) "scale/$filename" + else if (filename.endsWith(".bigWig")) "$filename" + else null + } + + when: + !params.skip_merge_replicates && replicatesExist + + input: + set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) + file sizes from ch_genome_sizes_mrep_bigwig.collect() + + output: + set val(name), file("*.bigWig") into ch_mrep_bigwig + file "*scale_factor.txt" into ch_mrep_bigwig_scale + file "*igv.txt" into ch_mrep_bigwig_igv + + script: + prefix = "${name}.mRp.clN" + pe_fragment = params.single_end ? "" : "-pc" + extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' + """ + SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') + echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph + + bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig + + find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt + """ +} + +/* + * STEP 8.2 Call peaks with MACS2 and calculate FRiP score + */ +process MergedRepMACSCallPeak { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".tsv")) "qc/$filename" + else if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) + file mrep_peak_count_header from ch_mrep_peak_count_header + file mrep_frip_score_header from ch_mrep_frip_score_header + + output: + set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output + set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, + ch_mrep_macs_qc, + ch_mrep_macs_consensus + file "*igv.txt" into ch_mrep_macs_igv + file "*_mqc.tsv" into ch_mrep_macs_mqc + + script: + prefix = "${name}.mRp.clN" + broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" + format = params.single_end ? "BAM" : "BAMPE" + pileup = params.save_macs_pileup ? "-B --SPMR" : "" + """ + macs2 callpeak \\ + -t ${bam[0]} \\ + $broad \\ + -f $format \\ + -g $params.macs_gsize \\ + -n $prefix \\ + $pileup \\ + --keep-dup all \\ + --nomodel + + cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv + + READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') + grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv + + find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt + """ +} + +/* + * STEP 8.3 Annotate peaks with HOMER + */ +process MergedRepAnnotatePeaks { + tag "$name" + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + set val(name), file(peak) from ch_mrep_macs_homer + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.txt" into ch_mrep_macs_annotate + + script: + prefix = "${name}.mRp.clN" + """ + annotatePeaks.pl \\ + $peak \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}_peaks.annotatePeaks.txt + """ +} + +/* + * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + */ +process MergedRepPeakQC { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + file peaks from ch_mrep_macs_qc.collect{ it[1] } + file annos from ch_mrep_macs_annotate.collect() + file mrep_peak_annotation_header from ch_mrep_peak_annotation_header + + output: + file "*.{txt,pdf}" into ch_mrep_peak_qc + file "*.tsv" into ch_mrep_peak_qc_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mRp.clN' + """ + plot_macs_qc.r \\ + -i ${peaks.join(',')} \\ + -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ + -o ./ \\ + -p macs_peak.${suffix} + + plot_homer_annotatepeaks.r \\ + -i ${annos.join(',')} \\ + -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ + -o ./ \\ + -p macs_annotatePeaks.${suffix} + + cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv + """ +} + +/* + * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + */ +process MergedRepConsensusPeakSet { + label 'process_long' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file peaks from ch_mrep_macs_consensus.collect{ it[1] } + + output: + file "*.bed" into ch_mrep_macs_consensus_bed + file "*.saf" into ch_mrep_macs_consensus_saf + file "*.boolean.txt" into ch_mrep_macs_consensus_bool + file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect + file "*igv.txt" into ch_mrep_macs_consensus_igv + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mRp.clN' + prefix = "consensus_peaks.${suffix}" + mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') + collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') + expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + """ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt + + macs2_merged_expand.py \\ + ${prefix}.txt \\ + ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ + ${prefix}.boolean.txt \\ + $expandparam + + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed + + echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf + + sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt + plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf + + find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt + """ +} + +/* + * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file + */ +process MergedRepConsensusPeakSetAnnotate { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file bed from ch_mrep_macs_consensus_bed + file bool from ch_mrep_macs_consensus_bool + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate + + script: + prefix = "consensus_peaks.mRp.clN" + """ + annotatePeaks.pl \\ + $bed \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}.annotatePeaks.txt + + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt + """ +} + +/* + * STEP 8.7 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 + */ +process MergedRepConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } + file saf from ch_mrep_macs_consensus_saf.collect() + file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header + file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header + + output: + file "*featureCounts.txt" into ch_mrep_macs_consensus_counts + file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc + file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results + file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc + + script: + prefix = "consensus_peaks.mRp.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + pe_params = params.single_end ? '' : "-p --donotsort" + """ + featureCounts \\ + -F SAF \\ + -O \\ + --fracOverlap 0.2 \\ + -T $task.cpus \\ + $pe_params \\ + -a $saf \\ + -o ${prefix}.featureCounts.txt \\ + ${bam_files.join(' ')} + + featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb + + cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv + cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv + + find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- IGV -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 9 - Create IGV session file + */ +process IGV { + publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_igv + + input: + file fasta from ch_fasta + + file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) + file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) + file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) + file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + + file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) + file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) + file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) + file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + + output: + file "*.{txt,xml}" into ch_igv_session + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + """ + cat *.txt > igv_files.txt + igv_files_to_session.py igv_session.xml igv_files.txt ../../reference_genome/${fasta.getName()} --path_prefix '../../' + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MULTIQC -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * Parse software version numbers + */ +process get_software_versions { + publishDir "${params.outdir}/pipeline_info", mode: 'copy', + saveAs: { filename -> + if (filename.indexOf(".csv") > 0) filename + else null + } + + output: + file 'software_versions_mqc.yaml' into ch_software_versions_mqc + file "software_versions.csv" + + script: + """ + echo $workflow.manifest.version > v_pipeline.txt + echo $workflow.nextflow.version > v_nextflow.txt + fastqc --version > v_fastqc.txt + trim_galore --version > v_trim_galore.txt + echo \$(bwa 2>&1) > v_bwa.txt + samtools --version > v_samtools.txt + bedtools --version > v_bedtools.txt + echo \$(bamtools --version 2>&1) > v_bamtools.txt + echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true + picard MarkDuplicates --version &> v_picard.txt || true + echo \$(R --version 2>&1) > v_R.txt + python -c "import pysam; print(pysam.__version__)" > v_pysam.txt + echo \$(macs2 --version 2>&1) > v_macs2.txt + touch v_homer.txt + echo \$(ataqv --version 2>&1) > v_ataqv.txt + echo \$(featureCounts -v 2>&1) > v_featurecounts.txt + preseq &> v_preseq.txt + multiqc --version > v_multiqc.txt + scrape_software_versions.py &> software_versions_mqc.yaml + """ +} + +def create_workflow_summary(summary) { + + def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') + yaml_file.text = """ + id: 'nf-core-atacseq-summary' + description: " - this information is collected when the pipeline is started." + section_name: 'nf-core/atacseq Workflow Summary' + section_href: 'https://github.com/nf-core/atacseq' + plot_type: 'html' + data: | +
+${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} +
+ """.stripIndent() + + return yaml_file +} + +/* + * STEP 10 - MultiQC + */ +process MultiQC { + publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_multiqc + + input: + file multiqc_config from ch_multiqc_config + + file ('software_versions/*') from ch_software_versions_mqc.collect() + file ('workflow_summary/*') from create_workflow_summary(summary) + + file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) + file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) + file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) + + file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() + + file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() + file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} + file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() + file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() + file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() + file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) + file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) + file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) + file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) + + file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) + file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) + file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) + + output: + file "*multiqc_report.html" into ch_multiqc_report + file "*_data" + file "multiqc_plots" + + script: + rtitle = custom_runName ? "--title \"$custom_runName\"" : '' + rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' + """ + multiqc . -f $rtitle $rfilename --config $multiqc_config \\ + -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- REPORTS/DOCUMENTATION -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 11 - Output description HTML + */ +process output_documentation { + publishDir "${params.outdir}/Documentation", mode: 'copy' + + input: + file output_docs from ch_output_docs + + output: + file "results_description.html" + + script: + """ + markdown_to_html.r $output_docs results_description.html + """ +} + +/* + * Completion e-mail notification + */ +workflow.onComplete { + + // Set up the e-mail variables + def subject = "[nf-core/atacseq] Successful: $workflow.runName" + if (!workflow.success) { + subject = "[nf-core/atacseq] FAILED: $workflow.runName" + } + def email_fields = [:] + email_fields['version'] = workflow.manifest.version + email_fields['runName'] = custom_runName ?: workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary + email_fields['summary']['Date Started'] = workflow.start + email_fields['summary']['Date Completed'] = workflow.complete + email_fields['summary']['Pipeline script file path'] = workflow.scriptFile + email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision + if (workflow.container) email_fields['summary']['Docker image'] = workflow.container + email_fields['summary']['Nextflow Version'] = workflow.nextflow.version + email_fields['summary']['Nextflow Build'] = workflow.nextflow.build + email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + // On success try attach the multiqc report + def mqc_report = null + try { + if (workflow.success) { + mqc_report = ch_multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList) { + log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" + mqc_report = mqc_report[0] + } + } + } catch (all) { + log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" + } + + // Check if we are only sending emails on failure + email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("$baseDir/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("$baseDir/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + def email_html = html_template.toString() + + // Render the sendmail template + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] + def sf = new File("$baseDir/assets/sendmail_template.txt") + def sendmail_template = engine.createTemplate(sf).make(smail_fields) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + if (email_address) { + try { + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" + } catch (all) { + // Catch failures and try with plaintext + [ 'mail', '-s', subject, email_address ].execute() << email_txt + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" + } + } + + // Write summary e-mail HTML to a file + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() + } + def output_hf = new File(output_d, "pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + def output_tf = new File(output_d, "pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + + c_reset = params.monochrome_logs ? '' : "\033[0m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; + c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_red = params.monochrome_logs ? '' : "\033[0;31m"; + + if (workflow.stats.ignoredCount > 0 && workflow.success) { + log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" + log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}" + log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}" + } + + if (workflow.success) { + log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" + } else { + checkHostname() + log.info "${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}" + } + +} /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// From 70b6c32a1485e36a533966b04ae7bad41961eabd Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 31 Jan 2020 09:38:27 +0000 Subject: [PATCH 082/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f727f28c..d533e46a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report +* [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * Added GitHub Actions CI tests ### `Fixed` From aab71886d01e09d52a3707bd97063871cb2cefd2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 31 Jan 2020 09:38:43 +0000 Subject: [PATCH 083/226] Add featureCounts in separate process --- main.nf | 114 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 77 insertions(+), 37 deletions(-) diff --git a/main.nf b/main.nf index e6294f73..00072f6f 100644 --- a/main.nf +++ b/main.nf @@ -1275,39 +1275,26 @@ process MergedLibConsensusPeakSetAnnotate { } /* - * STEP 6.6 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 + * STEP 6.6 Count reads in consensus peaks with featureCounts */ -process MergedLibConsensusPeakSetDESeq { +process MergedLibConsensusPeakSetCounts { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' when: - params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } file saf from ch_mlib_macs_consensus_saf.collect() - file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header - file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header output: file "*featureCounts.txt" into ch_mlib_macs_consensus_counts file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc - file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results - file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc script: prefix = "consensus_peaks.mLb.clN" bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" pe_params = params.single_end ? '' : "-p --donotsort" """ featureCounts \\ @@ -1319,8 +1306,41 @@ process MergedLibConsensusPeakSetDESeq { -a $saf \\ -o ${prefix}.featureCounts.txt \\ ${bam_files.join(' ')} + """ +} + +/* + * STEP 6.7 Perform differential analysis with DESeq2 + */ +process MergedLibConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks + + input: + file counts from ch_mlib_macs_consensus_counts + file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header + file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header + + output: + file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results + file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc - featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb + script: + prefix = "consensus_peaks.mLb.clN" + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + """ + featurecounts_deseq2.r -i $counts -b '$bam_ext' -o ./ -p $prefix -s .mLb cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv @@ -1330,7 +1350,7 @@ process MergedLibConsensusPeakSetDESeq { } /* - * STEP 6.7 Run ataqv on BAM file and corresponding peaks + * STEP 6.8 Run ataqv on BAM file and corresponding peaks */ process MergedLibAtaqv { tag "$name" @@ -1367,7 +1387,7 @@ process MergedLibAtaqv { } /* - * STEP 6.8 run ataqv mkarv on all JSON files to render web app + * STEP 6.9 run ataqv mkarv on all JSON files to render web app */ process MergedLibAtaqvMkarv { label 'process_medium' @@ -1741,15 +1761,11 @@ process MergedRepConsensusPeakSetAnnotate { } /* - * STEP 8.7 Count reads in consensus peaks with featureCounts and perform differential analysis with DESeq2 + * STEP 8.7 Count reads in consensus peaks with featureCounts */ -process MergedRepConsensusPeakSetDESeq { +process MergedRepConsensusPeakSetCounts { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks @@ -1757,23 +1773,14 @@ process MergedRepConsensusPeakSetDESeq { input: file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } file saf from ch_mrep_macs_consensus_saf.collect() - file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header - file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header output: file "*featureCounts.txt" into ch_mrep_macs_consensus_counts file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc - file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results - file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc script: prefix = "consensus_peaks.mRp.clN" bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" pe_params = params.single_end ? '' : "-p --donotsort" """ featureCounts \\ @@ -1785,8 +1792,41 @@ process MergedRepConsensusPeakSetDESeq { -a $saf \\ -o ${prefix}.featureCounts.txt \\ ${bam_files.join(' ')} + """ +} + +/* + * STEP 8.8 Perform differential analysis with DESeq2 + */ +process MergedRepConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file counts from ch_mrep_macs_consensus_counts + file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header + file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header - featurecounts_deseq2.r -i ${prefix}.featureCounts.txt -b '$bam_ext' -o ./ -p $prefix -s .mLb + output: + file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results + file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc + + script: + prefix = "consensus_peaks.mRp.clN" + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + """ + featurecounts_deseq2.r -i $counts -b '$bam_ext' -o ./ -p $prefix -s .mLb cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv From a46663ea354668562464b29dadaecd3ea9462315 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 31 Jan 2020 10:04:32 +0000 Subject: [PATCH 084/226] Remove Travis badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index eab86f7f..c40fc903 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # ![nfcore/atacseq](docs/images/nf-core-atacseq_logo.png) -[![Build Status](https://travis-ci.com/nf-core/atacseq.svg?branch=master)](https://travis-ci.com/nf-core/atacseq) [![GitHub Actions CI Status](https://github.com/nf-core/atacseq/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/atacseq/actions) [![GitHub Actions Linting Status](https://github.com/nf-core/atacseq/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/atacseq/actions) [![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-brightgreen.svg)](https://www.nextflow.io/) From ccb2175141906cf8fa7660858b41dbf5b418c346 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 31 Jan 2020 10:15:16 +0000 Subject: [PATCH 085/226] Update output docs --- docs/output.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/output.md b/docs/output.md index 6ad1b844..aef77550 100755 --- a/docs/output.md +++ b/docs/output.md @@ -172,10 +172,10 @@ The library-level alignments associated with the same sample are merged and subs * QC plots for peak-to-gene feature annotation: `macs_annotatePeaks.plots.pdf` * MultiQC custom-content files for FRiP score, peak count and peak-to-gene ratios: `*.FRiP_mqc.tsv`, `*.count_mqc.tsv` and `macs_annotatePeaks.summary_mqc.tsv` respectively. -5. **Create consensus set of peaks** +5. **Create and quantify consensus set of peaks** *Documentation*: - [BEDTools](https://bedtools.readthedocs.io/en/latest/) + [BEDTools](https://bedtools.readthedocs.io/en/latest/), [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) *Description*: In order to perform the differential binding analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. @@ -186,10 +186,15 @@ The library-level alignments associated with the same sample are merged and subs ![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) + The featureCounts tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. + + ![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) + *Output directories*: * `bwa/mergedLibrary/macs//consensus/` * Consensus peak-set across all samples in `*.bed` format. * Consensus peak-set across all samples in `*.saf` format. Required by featureCounts for read quantification. + * `.featureCounts.txt` file for read counts across all samples relative to consensus peak-set. * HOMER `*.annotatePeaks.txt` peak-to-gene annotation file for consensus peaks. * Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns: `*.boolean.annotatePeaks.txt`. The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. @@ -200,13 +205,9 @@ The library-level alignments associated with the same sample are merged and subs 6. **Read counting and differential binding analysis** *Documentation*: - [featureCounts](http://bioinf.wehi.edu.au/featureCounts/), [DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html), [R](https://www.r-project.org/) + [DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html), [R](https://www.r-project.org/) *Description*: - The featureCounts tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. - - ![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) - DESeq2 is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. @@ -223,7 +224,6 @@ The library-level alignments associated with the same sample are merged and subs *Output directories*: * `bwa/mergedLibrary/macs//consensus//deseq2/` - * `.featureCounts.txt` file for read counts across all samples relative to consensus peak-set. * Differential binding `*.results.txt` spreadsheet containing results across all consensus peaks and all comparisons. * `*.plots.pdf` file for PCA and hierarchical clustering. * `*.log` file with information for number of differentially bound intervals at different FDR and fold-change thresholds for each comparison. From 2a7f66a295eca7ced6fc3f43aa4574650639a9e6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 31 Jan 2020 17:41:57 +0000 Subject: [PATCH 086/226] Fix Docker --- Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile old mode 100755 new mode 100644 From 74f3de7936c5e902ee5a37bfe555c413bdfe239f Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Tue, 11 Feb 2020 14:48:35 +0100 Subject: [PATCH 087/226] add social preview image rename files --- assets/nf-core-atacseq_social_preview.png | Bin 0 -> 51685 bytes assets/nf-core-atacseq_social_preview.svg | 448 ++++++++++++++++++++++ 2 files changed, 448 insertions(+) create mode 100644 assets/nf-core-atacseq_social_preview.png create mode 100644 assets/nf-core-atacseq_social_preview.svg diff --git a/assets/nf-core-atacseq_social_preview.png b/assets/nf-core-atacseq_social_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..38755a05c79163d920f3a221a64ffe6687161d60 GIT binary patch literal 51685 zcmeFZ^;?u})HQs8ASeRrEutV8hyenMgfs>qD9sFAA}!sGfq{e)A`OBx3@IIofOHNu z42VdV#L)5WOP}xk-ap{`@tNbk4+ogJ<~n2Vz4lt`oHt4eGPH-84kHLcD|`Q*3W89= zQ*vMGgYZx73O*73p>Vh(t40kEPwL07;paoP_ca|5gzh`~KUp{@9W(s$w4;=UqpFRG zql=-vG2-Il!fkGC>0o4NYs_t9ZyLQI%7h^25ZQaT)m&rdh%T-@n8Erb50ent^L`y3 zGVcG8-L84|n$nm^lEPBxs2yd%_USs^R@c?sJ{jQe+pl!YFwZyqg4~JZH>;PpE>ciW zi>VGv9K{OXj2U@ovb?L)r{`hJJ1M02=zi(siRivr5;`JyNNVI$m6QE@j`W^KDE>YD zc8cuWzh_75sgZww_q{HSQ2+boiyP#U|DK%-IEIk_dukYf9R2r<+K9sU-!sWmZ2x=7 z|DDVK-9*U$Mh}9#$a`%d_%|`6Rp@X>2;}Hyw$ApM6H?@bOMI&Hd2fctM{vsK56ov^ zlU~mBWa6}(X3~@kOlAhh9`T!Z-VuoA`awJ(X_o6&sb`ZL{r5_0ta>>0%nx2T#eESO z&gyLiKT1mRzWW(^x?=9@om?(MiPG}XnjP%O3wm-%^c|8lp5?Yr^`iM?JzVDbRCp3C zFqP|@5&mz31y$&gZ^yKK|E9YSB97Av5BPuGSnfh6B$y- z@MK8?&jLaH`KytXHez|Bwac0Hs(5U6*I658@A@) z*l8}0X7CGspZ08`cc0$na-y~D$p3W_vE_z5InBbUe!`(QZ`_yWU3!w;RvdDav0526 zjND2J&R+(d=8^?iM6^0N5VgY;zUaLpMpfHemhz`O+VhI71ft`jc`-zH-Q(YLkOX@p zA|LvS8fsi$ruqJ6pIxx7$C%BbedOGa|M$j|ujwTdCH6h%tW4Fyq=Q%(zXu`6ak6vp zHs9+iYHGf{jRgw z#bKn(Xw!DgSbd<=E~!tuLwWptTvP_F#GdPr(esx_4ygztzWVN#zw}Kjb=Lwn0-6pr^s1e%}|86EX*WfF8wtn^Sq+MQK-d63|J%iga z;mx1g#l;rptJK%%RW2jG|4C7xh1#2|xCg(E0{O0Rfr!g zGMH86>6mebWJpj%ObmSfF*fNmts;w;<>@+Wsq@`&u_D19Su*iew`UF_win1H5y_4- z+^v1tc)<}J)TcQ^iXcGyKOmOm9U-!Dd5Ga^SX=y@(ll@hJv8%T>I z`YghZxd};4#=A54hDt98pL~L5Ha)^X2{U)@T-VzIKCgy|ErWHH@RH_dL^|YLzzGJ1 z=~ls!Rm-^&yRjAlRaq+ykDd8y5|h9YbQ)DrjH8k9T{k72P~8z`6`$TRcGy`2cEoBu zv&|I|5yGThYqVfrQJ0-_+P7JblBP7V-7>gAH!*P}=TG{r>$8Dug;9LeE{6HMn8Y zu207yP^;M53Z_BTdM%w?(wh-p{{nq|3!CK#RzdT2E&)N*$Tv4P-B(%#cbP<-=QIjh z)$B`!gf5F=u~?=T3J8*V7e;dZk<mm$RBfi%J2-f;_T?Kt&~?INPCBZ& zg?|W(S=E^M`uz431!60#Lr#ud|1}aVaoCv#@s;~FOPUE+*ITljJG;LjGccd^{CeZO zef+9MZ{l6kGpcjk7;DY<_RTby1tD)w&&L7BFBpX%JYJGtb9zm}7u^}SCu^ZV9JSkFTR5uYYtzOv10w`jnLUUN+VJtb?Rzj$%9c`2bMm-sIepUpk=qF~T!TAhZU8BNnWoYp#WUW#F} zT?WQABU8L)i+{|E=f@V0*Rd4kHMJSFTMp+Zd1u+Er?;+aN4H<>VojW#ap^v*wW?0| zE-h_&0BRy7x&m`oMa|4N7|)(g;>Jg1VjVGc!k@x0A8?g0&*x2xMJrxXBH;@5_WA9j z@fT^&+PG&ud9u3EidL%4qC zfMkim-&?CFwtU07J7nir+gMj)}6_^vpY^Kw9m=PPY*U z%Phz88kl>{Gia@jV=fhNk_G!0%9uTVyH}QqC;8jm;)*UATN?7uVfhLl}M=N|p_E9PwJ;6wR?Bd>PC&eEuZW_4d^v zFBjWTJ>pvA2h%NYbN{Ql7c9~(EP@2Ab-AEgI_r8^%062>pTjeFQK08H>w1Rw6Q>80 zWWGvh%DKf;y>0TT*LYC?i*qP4amTGc_g@`#u5RfPg|#}te9SnD9+9m3MRLcd$TM3J z%kYzVxT>uT>0nl?+v*JJuw%rEygyV8R$uDRKGR)?RUORLr7F0o);oEJW%;D0uzpdR zE4xei1EOVNz9TC_O-bR4Ak}UadQNdZ!TvgYARBcwv z^cgWW=9@Z*())quMCh*_jl;*8Y4DMOSq0(`ATNS{|9)IuPjs7%4ZpPG;34Mj zUQ6X}K(b`u-3d)5w@DXQYr6H~QCZMHlgDW+w#;mgBhglK{K@xc+B=m2ZY%mT5 zFblTX3NmyT&g)Ml^%#G(PWrZOvCkx~h;VR`Lq!{r8yc6MtrJGUQ-jBRQD0a@#Nc|Dpxshu9 z^z?MO2M<(DOj3rdi=n2lvj~MroIij2&6_v=!NKY}Ix!abjL#FT(VV=zygy>&&qg$V z=Fgo!Mi_2MEbqo&+OUuf7=;yb;t#_1#CHv#YQ$n!{_zcX0Kqh__ zVwn>@*YIwU6#+X>D30i!KJrWE#F^>o=|NarXSb*CNlRxy)|%YAIOj8=G=|fhRr#xZL z7&f)+s|PD2<1Gu_kp!7sZ8BfqJh#f>nxRTM1k5@fN>-yl1*)YoKB6 zM67Tt7%Z~9tiP}G=Jo52wpbB#^S>3&Jax%xQ-jAUl5tMp4tAX>d)0cenxdQ*p*{sk zbxvdGWlI3jw`bX|UX^`*khbgR*XMu`)hVAi^}!|~4LP(= zXBQ8vI6FH_PKbtn|9+2_MOckqd?SHL(E7}rbDP=XaAg#~<%g=Bp6G@`Y+|OR>xa$w&#%VI6w^3k*0B-Z+WU*hc=xUZr8q~<+td$ zBKD`|zz3`K=BB1Dhjy`4s7eeB44S+Ro3H)-yP(D5GyFz@Pg7>=pFg9jqm#9{GC4b6 zJkmQE@55azvcZ%5@Zs&;0ltwoO|> zA&5!fN!qh#@JvVH*H1jX^XH!TiE5Bc;TpxaS zSjFDn-VvyPnNUUX&P-fYMsjjZ&TDyD*-mJNGdEZ6T9R^cz-_U*{XQnPJy!trK5Th; zna}?B{cOzw>Cj8^Aw*UHRUV?OmCH?>-hq{iRol=$FZ~W@oZh}0{hTPRp%KbZF?J0( z*MaV;!-VB7KC5lUsN%&}xjJ0M%YOuR_Xwt|z3lY1A86YMa{~qF_F*gj@bXhu)-_rt zzWZ0NUj1ra$8*;6&(mIm0dBnt4WDho$STogL{nTnmqpZ735~Ah@#g2m zCe6y#t_Q-lKYdMFJ|?E6r5O~Dg}SXwm`}FFiU*67&F~FzHEICiz}av0!Vek{IZolM zt-Mj6Bmv~b@PlW_&!p$4pLQM@x$gq8$^dqy$ZlqIj zK!miR_*LS-k;I01=h>X{g)XmkBBQf=t&+u$Pzz( z+y{iv^el)Y?ksOHMY&&Y{!IzCelA2(5_*2gkDH6bi>t)1@_=~Gf1f2;w0yh~#cM2= zt9>X6K5KWurMkP!Y4#b>UpX=|5)yC%-C6M`g*naRU2$UJM)-%avTqIo{%eiCyWUbX z8RwyJ)1-yknR)Ve9ix6&-|Y5V=jT-PSim#T**|K$*4jP%?JmS|)*Qz12T_AuJv!2U?C>K)qMq;aXJfy81Hm$_{7d3Ou5 zO04}L3)y1b;nQ{DD?ezEaC)+H$P0iQr?qnT8w`q{9{tnAiJRJ-jHh>IzFp+K>n=v> zQT=LNtMc|FR~IC#Gf-UGdeT+-y|z{jiVg2sTjxM~!7?Y%W;R%8&T;M9s@sqhqi!;* zm^%uu3xr&3Y9^TQX@OPKUAn4FmoxMozeHJ7Gr6y4KHp8K$GVuyHYm8~ny31bjKb&g zcMOVw7eSjHLkj>*kQ+Ek0+|J8+I{vMU|Kk!M-o{mxod1Z>f_c1aAK~nH6t7YdxX{V z53oIkJ&<&Bgd8R)$^%vH%ZX8s(djQj?`2wDGYUV0V zD=E1J$p_zX*5}Mgf=IiRpt{n_KO$5>~IJQ3iex_TK~ZoJO%VsSgms2 z7aQ;8#>-H=BihH%suyit)(BfOW%W_Pq+8rn)g>0bi=FJHH{0DF^1Hkgw-~v7xA;l# z@S~N?>72A-$pef>zWZA5tk7% zrmXik= zDSB@(rTS%$c?Pwq)xZ-?4SEbhqNb*H zB5bo7PzscW`YxftFIMPk$-=HzhDH~Yst_9*=dkg|&}y(y_CW+UK1Rr4bu73yc4T_V zb#-GbSewb(?|Jq9?&61@Y;1Pa-f~3s6l6IS=vmq~hIV#5RKRRVbUDd7wu+0<#JfSBjD37 zLZjwqzYCw38%-RhxMkV2B4%3S87&6ac*69(C(d2RT~qA5!M`(e8o7fKxiP6)ofv$9 ziDi+3S;EOfBs_0b&hZPGSN7B=M^BW=g{kW$Te+DJzAKR7gA0{A+x^OCu-l zN&Y5Z&Rv!NXwAFUv)Z@MJ7hXDeB7>G%^ze@yL_n;mv`fsa{U&y3tITpl#YJnQY6jb zRZ(1>tu0t&Gon{y*@sn834uqDc9FwW$NA4GDHhPkXcd?Qq8MbnIU=)SXGc9Grj6OA z!ccQw+-qy9@p60*AQ1Q7Ni0rJ7hSG+aW6ja9oKA)ygUD0dYC(h{RJEU9?DigiM^J- z7!1v%t_#u0q9frc^lQoPq?z>F&kyC1I_Xb$p6Y)|rtdX3!b>Ft}=C3Bf*oP{LQkQkE zMDPB_d)x@R5?K0EnAY4rU2jlWadBZs%X%^Wxh%n)mCD!l(aP3J_etc=kG)^lNV{Eg zw-<_%LRYs_A}k~;Y48`S;`I4dXz0!B+v?msCO>uW-Ld%gYfn+zneOLZ%i)fp%8}EV z>+ZO1d@5GNh-8~zSjfk3-t|2s+fSzM`**YNua7a^c=Uq1YU5G$?1>X6%z(c`yDRa{ z-=R0-8lbBdD0(um9Ah~-F_B?SEURyqbi8%O9XNC+l+iF*;c}JeEHv-t1GYQ-Lmc7k za@9tI#9rdkSi`nhRY}Q4|6zsypvGEkQnFLgolydG3v2FJKM91UQoQ$8dS~fk=_IRs z6kp?_!#c1QFKL-mB5#^9%}xWSU%*Epp*}D$fcE|R+N0`O8i{ZZvAb^!AE|#O(=D?7 zW*0p0xSPFb(Bgh*)eLr*9P`#c!tu9D0B&tR?X(CZXZBRjg9 zprSL|+u1~gFWV>l{hJ$$KKquk8|%=ZPVH?kN-P4HU#M77@Y&N>sx2&1w0#$)R8J=$>@w#*;kmpp4;x87Hxmd$Ka#4JDOzn5|DEBTm{Yd-?Hy#L!Vj z;n#8Eem)_;v$|CBWWCxp&frpY+6ApRwl(*93JJ-n+Rj~}q(`2I_a9~Iro1S7?sXWZ z$LbMVYpLV21v592tO(ngHGik8bcn`Ns1lwh=3j@^nk*1Z8JUGe8m^=#yj zf*aa#WsmHw6-!&L&Gxm2V6+IuHn`P@nwX~Y#VSj_b2#ndoMFfXMuZRTGQg$sd2Kl! z&}C89&@dYiSaBG4F6TFHI#FF8^p7yq_uhQJq7q%#*Qp&Ln&6|)HCF3(WM>TX?DHxg%os<}&J0_bg^SRI_KI+^Ua$K;mYti0i@1~1Jq;{n)5}xj zjUIGVyRsoq{4>Sw-;fpanp$(Ei`JztDwhrAsggPLeqX!p$z_18hfvr`sl-{9k)k8o zYnJN@0*r$XhGldfR#yqY*isoVJl()U;fogs+5`E{b8{=W47;U5O3ps(y>XjOCTMl~ zq*8FhSfAek)2<{LdbGuswq)gh{Nrfg8KEv$qQNT(hE8-=3WqnA#xMXhj7aVv#RCK# z(h%c(W~=YHG5Tt-(xVul6h1Q*DnO^_T?U;usSnqSHv=d1_e$LHt5*C|3{Jx4gLOVV z{3M>P^2+^BOv-z>h(6XB>NFBE&M*Fw74^<^-&fgGcvDC@2t)*ATr}qt>R(Ncf1r%;z_;ueR}HI1o7(D=cHCfRgM$`{*eCY$4O-CuJ^+ISa({Z9Ws2USVj- zI>j$3#F#w}@0%8dem3f+X%O_Y0eGDf+eG6;<10-Nc@Tqvc#zN%(I7P<1-buxO0^36 zl{uX>U>e^zOJW+xU-%!Q-D9!RKOlf_NWQKQr(jCTblAc;nRY|%CuI!`-sfp65y&^@ z4(n63-@5GPzZ!fp)~PRLe1G^Y## z;&bQz_4*jw2?pam=Vg@bJb(V{{ZlbOK11_?5+etNS6ZPI?37svad5~Lk9e0;vV3I} z(0=jh*I>p)o7U6ueL}qIfsc+C7T;1-$J!*kq0Nx99`Q~Ym{Y){Teq(FUy(`P8z9j= zus9$oRSU#Tnj|Rr=_z(5?TTy&A5Jt=X(08`{*(7~0~c7Tv-TWzmYrWbc`t+A83+RNA| zG#9?rg7~9bECXxXnMXSecZ0`(KWQ_oL`iTc7kpYbl^#<0_UXFBcDko_gSb5Qbasn0 z8`w(&+!EJKY_tD9wz{|4$H%DX*)hb#!~|_1yaQQ8oU=x)f8t)J3ESU`+a)hJ`Q_nm zdW!Dy#@@5!)|2TUzc)D%ZXz0}SkCcL+IzT(YBu)9P65H2VJ6nCXvEG&hGJskE5Bu1 zg?zI*nuZ=ddKA!mgaUd=s6nSQBf`Q?bYR}8>w6V-x>NYdoH%)M2HHpv*-RDpZLW$j z#tO&QHf1`1iGstZs0|O@FGgo>TQ0YmyS!zpA!vp1G+}N|ak*?e%=j0ln*IaWUAu?v}~q25~XJ;n-cH7 z3X6`m%+dpx%T>8Eb`SWn8(Qs;PcbzKSPxwZZZOKy>&wv%#0!Tz&kvs7E`wE$9kSm4 zcG{;zhr1F?3*LdoB>lRv04rUDR${v3=i={o zi{H;(|JA>8z-ih*Q!`S)X81{#UV%w#PmV4iGjel4;?lE47WgK!$^vu3m+Ve=P*kL6 z{W!Wg&)>Xx6D5Bjtir;=9{(1Y?dnqb{P}Y_v@8e9gv(1ECOP=|@soBCJ-xJoLtvS? zb@teez{dqrO|x8rdLq0j@6RYWOCi2jDSQ#7ueUT}bQ8l&896+brfVg%ziWQk5LPVU z>Ss+@RaCLC$Y^SA-L*3ztx0nlKYn~F8#N{*k=jx)nOOhVuirI0&ERD8k0Gpi9_!Xg zq&UxI*(6fd7l+9R4*U&gKSjgB0O@Q!gOja>agN%gZUSpTNiw#}9JuTDQ}$dX9pEQqv}RJxmkgZ2U) ztEiddtYuop-0i6x-Ewl?_F##@lm9Y-(xY)52l1YitxVRa1lVw1Ap! zYHH%e@~A})GqGAYFASZ2=Z3m*s_SW)1s>uv)dh!WAHK;whXe#zU5Xa#`u{%ZwwrTj zB&>N>=B|SH_Tmr1R|9t^RiO3)dTB2DShI?S_V?Gs51eK+UHg>q>C=TI(j8@EeKJ?r zlD;iVfbq8Z*Wx@DZou{JZ?#hSwsA0?!W}}wS)e;as_nT)M;c9ccaQG~wR^7Mo;(#< zU+hDxQ149^NlKJG?sUgwsNK+7)cLr#1EF>*o6-N_KJy{|ry7*PD4MD2MKiS1RL9q6 zK?eS8yp6U}(J`3*JsKnh^)LT$D03uX)M$` z7rCeN0vvVZlHycYDqjF*swoe_iqfBFMC)>(`-yWZ{FmoWXG%LTm$>b45aHm+=^{te zEEGImSlnYzyN0`8uKJ~UBK%C7YP`tf0>b0B{-X9txbE{FJv`?PdU%R=_LkQ=*IC^3 zlAj!#WZbJ0Zd;`1>?Y`eAb`$cHz#rksl98wf9A2NskW9+TZ|B@Ubc?`um1@sk2V-r z6!92O@nr6Mtz(^u9xW7z+GE)GzH-@?q?20Ct<^ylb`G{4dH&PLbwR;C*Z}#2)|~H0 z>S@ck`=*Oip=+MJcp{SSnlh=hGjAx z^3!#vo(hrtSa4e0qhltwMow8-S$dY?XPs zb-E{B3FG;4M#Puo+W&HgzaB~ z_q}c^JhTDyBn;wWcRWqE;ZW&yuY*a`zPC;sL%;&65GOi-qrsvYB#05(9mleMk)nj? z@e64e1~&dLzQi4`ha`B$qk0vT|2j_Hjc>sRs%eQg8hXXuN7$e;)Ae z+dPIiKvm7oD6GA3`(nzH>Qx?|KBxg;se%=#CDz!#B$tdP&T&{FHT(YtnSsr=C>*Aj z*g02BU(8A~iCNNtOwzMbGBTDuY0A=;FQb5c z=j7sQowP$08eg&l*QTg@c?&4}O$5(MA3%Z(y!a8sFbCu^>Dlq$zs&#$N?RWEpJwoV zN{95}^lb`R$$lO~+bXR^5bOlBcuugRjx=ishkU~3f9yT3Lsd2;afWEFRXq)IU!|{# z>Im{p2iVI8E;xFP-TQs#swlI^1JU*}YX>9!Vq+yNnBmrz?Pu=it1#-jGMM7G!<-G9xYR3Yy8x zS}Q6l=!miGA6RSID8Afb(L?cDqna$d1tW9x!VKN$sk*_^?^466i+~WBivDV$#6x z$&Axh1{!J>tdU^*1b5{Tm*B9>#=-M{|YY!Yea$Sq3M{{ZO3fKie^2MmA z2;B*UO?dV1R)y`>2?K@1K~3S}mXfEXr+Av+OIC9MavWF?Q3Ev5F?6X6ir7}GjrUkz zVEiNsQTMm{s(Z3DZ^F{d#54f?gDRdk2Afgs4n=0!ZfYPeuzGJ8jyZvk$zqKE?tpQG zZVCX(Q@C>baXF&rN-GBskDwlb5nwS~ZO?f6%-@O+L~6_vf#^}|qgNJq9moA<=k|Wgnc*~D^^B62P z1=Ty#ehgu6$u7H!f=K(ZtGhd}7iD&#DK#%NNqhVHb?(KB5y>dGh$2ZvPK>-Q2oQoc zan>cH2l=gsG(Z9_e1fu;mUaFN;=!3(MH$din82)^7$Zw~3-C2d5{(%4PH2dmt-ZLe zUF!j&Fvl{dR2mwYqQ^milc!M<8Hmf(i0U0F;1*ZQd%;nAt(-WAyA4pX_ucus0aojd zRtR1|_sr6~$0t817CFv^9TFY1_)%A@5Ctk3wQm_%b?2TkDHB z5EbIoW5Gvb-jQ%SO5Cd~u`LMwa19l~9;fN9x~}l|FyNja@7VzE@Sw3fHQ);dlrE!S zu@nKT!8Aa8?m$EB3J15J-3Ax}oV+KiX)%G{q~#Qi@SOx#ozmr!)*Mgg2vg>4D&*D$ z)Zv8q)|}>j{5lQ-e1533J6}kYH5hegc!5s}&}9b*d09a6rGr1iVz{Cdv~g(1Ejd6W zfU;^|ssml5sfsMjH^ZU-a znTy+pr6@QhCy5{&45{7eZ~nVH0}iD_KRf|AfjTWGD+|x7PJytG-UyJ`V?_=Q4*Xzo z*d05&4=eNhZ_Ipp%dG;|)L_Db280Jx1PgTJ6|Q*`ZLyY*{l+3ix2BRl^wK-Q>9%Z; zP*cJ=)wRUc0lt7&E(JnNHssf@Up=3sXuvsf_t2q3a`*4Q>z-D#v&(}xbb{pkIW?7& zpPzp!!v72!f$6HLTl~&LC3dh66T%~+=n=6jh~)==Q(NPa)4caWFDv$TeSYwqD5oSP zB{eTIvr`jFAU8Tctm$RWj~EyiswZ)(a6GEG`Vg$~%kKD2sqMCjPR$tj(P@@+e9 z0VxAj!yj;$eqS!wQczP;G8i}=g>~ECT@Qc%esrY-x~}Q`X6~CKN6DL_7JX;n!lob*gMI7(>mJ}5R7@p{y{Sf;8wiayZ|{7- zQ~A5E1dQK`0@1Cug49rZ)VOJ|h`X5a5XBMXSzzSj#dYakvGr%GY5dEp zV(x`tgQA7%!pSpitZC&kaK0HR4P(?IDakGXfL_;aJRBtMsgTf6R3-ya_6=0U){i%8 zQwgu_?m=5g`W>oxusrbaRWUJLP{@3|SSM|7@wu;>p+OqXIR7Q<3z`iB{uM_D;n*lK zk1s%@elsXOuI4n;)42m=n>8k+)ubD!{+@D|MfgKLS|_kgao=EecFW#u6j$$N0|0+i zb)F)uA)FKTy)lVs9Qgr%(6`ASuI?+B1Li}mLbLZ!;eVl5)-88Nd;8j%N6#+Dxjt*Y z*4Ev5lmyZ(YUY%NP6l@FL?5&j4NMCMzbauL6W8?L0OxK%iAGaG1}4+u>oZCwJ~Jh- z4`e_qKLeRr?cTk6x!OWJPy~a;);_X&t#-m^oxE`20v|Ncfv0X-&tyaIMA>IZ3OftQpa6-KRk!BPsPr1GXQibj-v`k&kVB( zBHAsw_3|(VmGRwqFrdeLw=TB)_5F<&P>4`LPRuz!Gx_uLD`W*_i1z11e?|Cha@|`- zOXzODTC-mR`9N%?<)%9tA;7-D>o2ggOJ!oSm)&$A@t}k*x~ipeH-9@ZYKsS#4?RIN zrZ_sqIQ5j@XZD!sBGe2JMaa*KfNx46iziF$Z?*#sdBj=76ioREkZhT71ds%?^(wU> z#}zCMV$t#q6{X>1GlC{6c$x~%6w2~&-+wNYsm>$@)P=%KaksQ?a-YT6p3(qLQM^nM z#o@a8%ybnDwy1pl{~jNTQ30NPb!VmB60$0)R&x%Ox`Jz`V=P!A2Y{8f^IJPO$uaD+ z@5QB4q6FzT?{UzIQ>PT8d1DAWYP;Z=&nPr7>q&cml3OPY5R)SKe5m2(VLH-a6U3

a4>ls6#7INahRI{zrz7dt?cp{;swu z3XULf?t)#j3w3Bg9z9qTA1CH9gPQDs7-998y8-?~O>xs|?_HFis@z>8eDDjbDuW{w z(AZr=RZmbu&2tIqh2HzyBdB}NeRDhl5AJk>Vuu)rOf>qzwbB8!=dNC*OAj#YS>Sz% zZy-8$%b!0M@@r0X;ZCVs7ddal8wOvSoeIfX6+I;r^WnS(fydfD-scgudw*9jhR>`+ z(g!}I$h4i+>(5uJE#jhgDujiWxXrzLXjkzWb;zKD0h>+?w8j|9B`k8u_W!BZZ&HxSNU}3rebaL+conW{PhTVm#ZR=fFu_&NJ>h==NZZ9x=(*D1H%&vYJ|?v8IcTQLqd+D*M^AeM&Bjo(Sj59fAdBeb@5hu zxHv5i>!N@GqAZ}DO%}BfqH`7B0NyA(?!jGK>%GcNHaMf8#^X}0t(&3gVg9~v7TXr5 z{@adGL%1DRhi6Jl+n^H<9Egk0k;sn8;Bwnm*xaKozdK7+^@&e!-6`o(fF zKEbQtRks8m<b*l>lx|BtmAg88o+FKC?w zO?oEGp2bL&mtXY@%E^g8qqV3@8R*I^NMshUpBwgce@{+w^6)4^p+`;KpxJ*)N@8GS zOoeO-y*12}7Ao1oK@c1?Zs~Bl0CeqY_Of*xJEgQL-HY1CP;Z^KO(p(W&^cN99BS+>-etN&I$zwWP-{)rs&c>bC6Z$lB zg*YJB&KiV?$Gqk9?tWw(_Bb8RTx|FHq%WC&wwH+)DiLAydnGPn^-g2L&K&F{e6~wt zlV`v|Y9c#45Kn;^zGU!4$F5)wOeYGZ!HTIk7Nd}gLT6#88I7LP7pMIxeJ~cIiKal3zW~bl?~3m>27#MKV4f$%V8Vq=BNMUURa#9 zSERde!SAc<`}rZSrw+=ciD(FHzn2`CC!q%%-R+t$%W*F64h?J*hSJKlbthdUkfZ(= zp26W0XafAF(F1Hkpnij2JMs??a=1zHYz+%XBVMAny^AJ#Vy0`5#qsWQ*0N-*cAZp= z$0-e+5?!h$U9DN`jP{%B)30iqG0XdNL{nEa{MO!*$DKP&=0~a76Dg=)WQ27v9KHAE z#O-@e+4gFJE;t9fN{S`OP}00+IYyy;FYJ<3y8U&7D+iDGC%$66bN`Mz?>^(sIJJsO zZ;QgEk#?t68oNbPv6~*e*IjxCGpTRV++5BlO|>y(%xYtJ_ySZ^*B_6Y#$Q?8^l56A z>xujxxt!LkP80NfHuOcfT+4k9`&bF%iD*LBA*AWB37|g&*@%X?_Ve>&urytSPWvhc zM-!RuC{ByZ>z=tfH5t!@NkO{zXC{jiM>8z+o@UHUci2F6X=RpYXs@h;B~hQH4tHOdqTm3h>ZLiMMxmtF8|@1j7}_d(zcfXHGW7 zG{t#S_##d0-z|F1v0_f}xJp3P{&+f@n08RE067a#bLNmBU2n-QfH zu;IMrdX@ex5a;4!aZF7y-o;G|U->-Cni7$t+$d@-q(|{$=!tpH(?Qk)EI;&ko zBKs)MHwk1Tv=!)&Y-==D5G7vNkqaYy7|Y-~O`<=0h6mO3=7dX{dTTEh&KG~CBRhw_ ztmJipn`W8E81rCUMW4CRmd8e#o#aP*n&q%}&iBkqBNdpnLn=7cdOF;RtF~j}%TDX| zGyRAX7HweRW@uzvTRZMTYpmL}NXODJQY+KWe>Q8+kcGQs|7Tm+fvt%S=~ju{+o#+f>()C4+DV7|sW~F5W6moPH-}HjE-uNuy_*`4($}>kgB1_76GAkJ}QJcA4O4AhyUe z<3#B}B+P}v7roBUZ~4m(tFqtLqw*#_KL1XRNW;=DHbvp5-`siS5)TgEa}WC{{4%}p_oXmz-UXMN$_^g%wGaMxUrkS2cAjwEa$Okq6j7x+ zvAJXN)M?dw`xV142DMM(hv%H<9||RubZ>`!v{Nx%$;Z@++%NLVOqZ3k!e^hjAQ+u} z&j>-d@BQ1M<1JOIV_Qq#6?Pr%BOWQT>)4qXU~oua+K8%4-{Mu5;=>Aa#}R|WWarSK zggMCE3?&gF@3EU)yef2Ae&NeuSVgshnzFJ>S7LtBBTcu+CD9iGaPlkF{99Pi9~%Cm zdGwjiDYA3uzv#4}mNz+yFhKo7ZzIJansf$tbBlznhS6CO2w=;uh~JI`wY5@ODrTwKIKw|Od)3jJ%z z(FeZ&|J=p@Zv%5EE+a#(@BmBrdvx@CbSp%CuB5Z`7f~^>Z0iG8FhOS}a)9aK5E0P^ zC8epoJ>uf##>NjwtROQg0}9<3fDv6ePcDgENf{c_nI9;S@mQNv22i-RK+LRtMbCNl z>hum99K`{;E1xjW7&ALRpAB3iX9FdIDp!e09?vL2dIQzMZhWpoS>YyZuLJi9n*oV z4yPXb;HwBe?QXBnLQ8{cULaVd$Hbh874yJqYHEUV8d6 zZaB;UWLfP@s_Mm5#ds`?2yOsGj!&@k#-^s6SFYR-fk{jJ`ST|YYtGNr>27EmI)Sw~ z!OWZqOp!T&Xi%0bW=gHCtq;@EVq9HIw7xt^2aQqz=97Rb+O;8mJhTT!n)Xo#RST!ume6k7VDI{#%73G-PlTrKaBl;4XNSFT-qn3$M| zB6yg`3;O!{nep%qTDh-Vy_bqrkQ#PC`DS371E`Mwz@-h0S?b)}ld&-hDyrG7S)96~ zVN~ zlF(xy(5!UAg@HZzQ*6-p0+uyhCYTl6iP&Om;_vZsW6vX|1%&y*GN;U{-8F5nsw;qx z0uRz#U=Q7qBWmy^B7YA{{yR^q4kr==dbrb3KW~5TZDxTd9jMF?z1}nwf2oYo+1X5> zUHG5$D}fNA9Ko&I1E;S`%OmziMp5*z*%Tb6o!UO_;C#9A!_OlRBQmtoi?Nq$E^+aaA03hK11J&6s|g=ZfIx-XM<9= z*5;u(cNgNnC$Fg32L}UI(X*ql3Ur(7Pvhg`(Kf%zYdZtZ2raL#3yMqI0Y!u!6$NIo z3vTty@eutMB2gDYpbwmVc%V351)DYjslf+)1-Q4+Xw6H01v6v;hyJ!u_bza<8eK4U zTRL>?Kfvz?$4?x&^eQ$&ngz3A{yu^6WE#LTO6Hv5m3E^?Zu0W-nYNt)l|UO-tYqfN zeN#|&vsrz1?9g*q3><2?WwD&7l^i8}L6p(nW7^u@wyg0ba|h}I4)~4d+JTCV8ZJ@t zM%ZB@ptipBV{mXVdfd7|b(z#XeSET51l28G6bZ6n7I@ zdcQo!X%&={Lp$KuQE1;SV=Kq64^(Rr3VE^rQ`SN8#yw{qh$9PjXmyd$F2Oqeot3WXH zxPANS`$_9AU z(v;~Ud{4r7`+mEOfkA>79IaIFVab_*{ZLSBMd)4bo3sFG!@b{SVaS}+Oo<>z9R7of z2+X}dP}0zq7dcESWD-glaFij-I<*D->~ZM9M)X{#oPxrave-;C5rVqi zQ(&qH)7U=ad@+_Vx{;n5rvhwG5zH7|DXTkGkvY5Atn&g&DyXI^U_cG*9IVTOT?=Bv z1F`>yy|;|Ya$DPmZ+qEdBc&)PAqc1-=~7Vc=<6x5xABz1P|j7`@oHD1ug0QdH~%{a$uCn?|*U%ZMnO4f6u zX2Xf6aP;YdA+fGi=tMC?bJ7jC+~)JuyZhlZnx1T$P0vDKqjZRVDJOhIPffyHD!cZd zeE@pY430WQX0vzyF5M#KXp^}-81)^D+e~fOetrWGewV6W3On?FgYiob)!X`y7)1M9 z_MCOcXYc%-6x@kZA|u_rfd&r7lZANmZ*C~S6^j*-oV8M8tEi|tphU|*FP1>#U7j~H zBIt4V^p@h_11hBX&RQvdGFU80q11H>MEWp3wOE`hc3t1A=2fW4_2&#UxC8}DdFJt= zVzJ_tS#Cp?%kyLR)bNKY;@`|if%}HjlugYI%6fc()c0M1Y5=mzfjOJovIO8vegrd_ zg)Ix$=#T5G#V?hI$@y}3;!WBf?=9QP&7E(W;x&)q?m&;`JRxBl_|!BS7V`^Z5qQ)G zA{4?U3sCE4qgRrkJ|O_nZn$X#+pKMW?pW4`G#S^aSEQ0_wly#?DEj!N8lL1&T^lh; z3Zd(CUv52mbImR(#W3l3^eSbfWsn55`K41LI$*KWSYHMBZ6kb4$G*&V8(5%X>-Mz4 zVOtIfoL5CrQBgUHfxoY>L7cJa2n?-|%amg9!w-L@jh6ULPK1157rs6M6k_OU5ch#U zb~&z*{01l+TVmA%NZh?DWV{WX8O~NZ$Mp2{uzppvv>ubP13d}oVy!JX=5^^O@vTDN zcTN8J6NMr{eGOELEq#3nFlvX0SsfA*5?ZyCeQ0Qi*!|7RKbrvR1KhYh?L;>I#57ut zi#5p+74aCtI7uz>-r3o?rL!{{O$p?N8fAxFU0;)O9U@w7VONKZn>X(YDt-auN|EvB zOK|v@l!p2zCR*G!gCp()w%XpWXKH+53Bu;toY>vk8bS7cvVr0#R(*Qt1|NGKAirst z#E372Gw9cEZ@rl=T9b$8lb^pkvprPhzgESzrrEB)F&?&ebqMF5ev9a(b^=bK7XU^B zqZEP3>RtW0NaUnH6BYx*?*-XN8x<= z3b2JbFOnm`NW7}w3RO*Z6$7AjqT}@`tk#P_ZMjT)=i{(IDRWCIiPz0ePm;dFiS`a@ z8cIOo!D6ZAxw=$DtF&8O(^gXpz#4-@NT9bm=`dANbO+FfwtSsIHxGB544rqpR`E;M zad)6OU7VFA4A2C6nZN1h0qs5mjrO9&i%~X?U%PhAr{uUzBFstww$- zWQVNk!((y*gNE)^`F0m5`kms|Ew>(o zChS0P2wpOIVet!*(Xk{J-LFqL)ePL)|p!zc*xAE3Zlkl=$Lh`KO_v()hXv=E9^4UDaM%mI^ zjxJ!E%f`wO92ynu4Gj&wV5LBAj@FH$rT4#(gK|EJgSH1x!nQgs&@gPzxkI=0gRl^* zrKF_TYE3Yx^nl=b83qo#+NBR7hZ#6=YVm^1GHNabvUMZOgHO2uoIJBj0wM}WQ&UsV z%arD!h^OX(n;u0=r)!r3#=-A`*SYsMnO$b^4O0s~e%z2925!p<&)#c91#GbsavyH% zJ>R%nORUG_eN|P}Otrzi8aFVIoFm`?O!UFFV%zqu>g?`}3={ZfhNRxOx7=G9mWzmT zTX#zGDG+-KTqE5SEP9DqhW!`8(LSYfrMohok_n!g3l76}D;93cH?){Gh%_i_YRaol zqhSqXix!#{NW3N~aV`oEn5%C9f0x(FJCFRZyk}wz!vg{X17SD*8=)ZDWEn$(he3E> z7_EKuUj`$*YH?9Gi?l#N3EHj1_(Q!nzTcj*a^z>ET^;y!J}eIbEzp24ceb7fIQSji z@7ym$nU@vMICNuKS9#<;`bJPve=aB}xL~2yPz#vIk5q3u@Ag&cJcr4-10&?z8hxFr zCx`8m1`-V$z4&S`dN2<`CL39_xun<_9x9dL13!gbZTHET7c6DcRybt%=WCw^8L!A z-EuzJ+1ZqI0t2wFMeayI(pVP;9`D6cZZm`7;rQu$(L^s`3rVs3`R;s}1X^4Jm#ISI zlun!^75I}I)~;3l9NaB(!y!sfW!HRAa##7mTw|$<`#%`>KoYH zVpTafIEW>qP)#%aURT#wO4xB5I5-j!jt~tPRgpObf+?tROmCa`>&1mvxk4?O-#>B& zV=B>ug0KHPQ*liP!TbVy>lg~l1O$*3kQ8u+gh4tOw<)ODZbt9s-5)p%sBNQjd%0lF zRvDSRwG}~d+dM6SdbGO>N|XI+7ML8k8grUYp@CIF0ZuBJ?#u4?8vd=Gm@{|>zH8Ix z`h8m z_}PrQ5aI1rrKP8u3+`3n19(bZ?}6#=sOW?PoRg&%8t48A3JS{iVm1gT$1OSvot7cj z$zIXkro5)(tKF!34s~c_e!g$E3p{5Xf8*z!O@A|BO?_kf2QG;`XlhoRhJgg$m?8!3D(PNI?~;pf&34r zqh>Q_Fcz?>p{Mg(iF5FC?kYC%CGsm{`zX&wS11oF9=?5`ezjp=U>$Q^8E!b@{Q2UdAoeVyr>+1tua{9uBDDneB z`WTBkfZAMsrhlJFN=*xZPqc^3ok5J3Er8hw6Qhs1t68r4eW!suj?Rv`-4bh`1aQ(I4S=F{hr!8`8Q*XL-K@=!B{D3@6l1v* zGXtq7>oc$5$T*Kkn3rGMv4lI(U6c2Zq%x>rhsrV!lAJDUye)__wV*Q`@CjP+a7FK5 z49}fNWuV*+NNZ>U-C%lD6%FIepXSxm03)<8wvNk;jgC@dTH+xIT*UHV`>aa6ncKv$ zse#Cw9aKg0FCNeafgZfS5@+xnMDuu`JXR!OQefFDvh6KAN}gp`L+avHA?`RFrROqo z#$bdsde^)kKo7mVwKJ`aJc{??MgHLnU@Ul}4+PE>@B(tz9zpRPhY!DjXDZuArayiJ zy?A$4cY+G`@m$1@Zr1k>>*PG^E6oP4cM(zw@fF1NT3JIS5;Tu*S^i#FM1;;gseupc zh~uYY9D|}7*%i9<<6g}>3p_1}eQJ8zyRqtP4T)Rj4-F%YhtRWol7qKM6aZjV3I=mR zgWgN?%@_*T^UB99V*p1qjl)><#{YNm8pcc>hMrz=t+X26EkY#?hg6goadKqfL*|o(joJ^m>b)y?lf)j&8cDdU(bP%hp$f$@0&v&tTxYoQzQYb9R^zSy*7L&?>P0Iyvc&WCjX)) zy3J#h3z6l`cgNFH1@P@Kbjg9Q0t)pH`f z>hLi9!qH&SEJ=HoJ}V@Ur_qSTeroq`=Zd~Dt@C?$c<=rfvD02yIAsui9?Vo>H+Gx8 z&G>x?dT*QYN$HvBy$jtj##m=^MKm@xlF_*l?TIp50C`~GoB>zAS7zrizMd5a1qB5S z41^be!xZx*X3Sj#bi*!SCO?~BWoO4i$_9nb9(5m6!R1=Bs-Yq|OJ ze%v5wS0q2+f{`=8r&KZ5I5;|@3qMwtStE@YD5}0dh5>OjzhtkkzcVHw?K|%*9xqMm zICofLHMdk>+D~R<{PSfbf5+Ce9b z5Pi9Aa3Nz4f)M|=ZG=bs=3E+%4@d0cQ`BN%?gr0eRdEH`D5;o>;Wi{h^D9~#FM(6L z&HrkNc|9{>=J9=Gbd(wlD$-EU%Yv0rmnwk5lTOlPBTs^k&?0XzD{O0BFFLhPYQZH8 zSpu6FGsK0F>J~lWbDF)73KwC%sR3lnMjpo0P~Zk`gmaK>OkGLoe$wNJzX3ygS4?2W z|6fb)HS_#k>d59gn_~>10Or*w9R6KN1?&W&E#ClHkfr5IQtuITP7*AtOK;vBG{_ZN z@Y@Y>p!B_(Z7I5m7(77TkKkZ0IdsFVEYqwU@xEwtG{6H=cG2tcHWmXHY>rLov+r=K z!KxZ@8r{@hOd6E?iAR?O6f^6P+hVa=6xG<_;o(CZP52=O2JP+bW~jgUUH%(sL{sB~ zx#oX+_LmxSYA)oW+ETVBIj$c#&YL&S+Fn%jKoH}%8}dkuZR{c-M8-ZIL7&L7e4#=K zKW|@JqIzN|uWHoUxO>3nb^+Pf$Sva+6VpI<5KekkAWz^gGzb;M1KHh80ZM52Zb-kz z40yCaA5R3|g0%ZE`(nH$fIbca-8Ze!3+xglFmLLQmB9$bNDaEU`u@ zH6*45&-@ox<|z5ls&DVb+4p?p^E0$%W-!xDfcPM94GOOrRCq@N>-9=-EGl;xm{r6W z4NJS@l&FCJ+B{CrbPY4JX=>>6zLU!sjNj^Li#~h9OYwXJb`guz(Cs*s?-h180R@1T z2~9iwPLvjr>f5Q%+i>1cYW>^LFr1Wb)b9`(8g=?PpuNufNs7T@r#lRAb3sDxsMho5 zyn%ccfwUF%!!Pzzj1{)GcO?k+SD>}st+#LA{$6AE>ecs@IT&&a-QD~jJu;0`BL{7T zwV#j9Buo}>&+cruyY7N6oje1n39%P|R3OTOZ4O?ni18noFewSS#ez=9Ng& zqdwmkzkc)P3&TS)K%6OeJ;@O#SRhVv#>X{l)+lkmOH2N00MCR4Z2(KV;h z>tk(SbQb-AaiZ(SCOx2FQNTp+*i3bnN3wk{j3B^|G^zwlq?%v6c=5sAJRCw^cLn9p z;tG}-?}!NL)J(>@6LAewM%B%uQf~g|&!5e)wrKspW8h)#GTO%Y0?)CyM8CDOiwl;a z!(e!l)?MW?Gnun*7>7fqO8;HDZn)8@pE=QK-?6)_-w^(1GufN5sWS&{S{FDct1j-1 zfB*eAnQ}t*H%9D*2?{+Ff&lP!32g(c=Uurw1`H5O=Tp4)#aZKFKwY7Vf7hYdibvrF zTfvk1J(ClGyV+8h({9Lri(gUGzHa^l%7z{ z#m`Ye86oU{%Sv{rj}rkMv&4=?0`)&m)KRc7-xiF_f^*voItb>FMWZDW{T(h*6HRr2!wrhzGOWDs_&cOB&$sIkK(~jpk1QmBBx3MhVLrO& z7Z6|^KJ$@PNM6lH8q+!+h9Y*3u(Ac#N&tT@My-hDw7=gQr!a>kJ%ES~l>Fvt>qlT0 zfNL6z)YpG;`?6%o5|%`Vo@ycZGLE4k$@yi4txNydr^!7^J21bi@z`4v)(DOSvySJ*)!OE%&QT6*!9uG$nDw?*j{@sX5E0^BInM@hO+B zAuqIhQZ?b%cQ)PNAZ`Sr;AeupbE0XP4!dxqE z3IHs>i=cWCv`Bt(jRr;*@T$=)F;{Ky#mqY<5ys)ehjCDNmAckpoX017LeYA}0USSm zOHxu2oIyBxe;%w7yvp69aS6bbcJ1A(3WzS>(G}x_-{Z$I>Us_lALO5xmzUGBIUMpR za}-DIcdU%PFr6%5)78W#LWk2cJo$b@6^57Lo|MvyFgX&MMIHhyr!$xVxMC)eX{C+E zN923!0lX@nN(Z8r0Su&3w#u{)KOdj`|59;qg*Y|Q3Pn|0_SauZ2M@Y~EFuXGPO zR~<~!Wte*TbM^H=6nuxIA6Dlt+eVfzTLy$fl3>T5KYx;r;@Puj-;vu4{ez0MwDjk~ z!qf0`5QYqqJa&yKpw3!c8c=Shfpu#1FB{|Y0|X1#aWT97nV6^r`Efx8=W5afA{rk~ zUt7Yyr?CpZctzen?FjIw+m>i>ngf{NZsjICN!#Nb2&5iG*{lr>3et|N5jqjWQok+dqJ1cI-juB-(!c@CooRqu3SISfl22Y(b=u_tgMrH^{na zyXMjZl9D-5fm8DlmFU^<{{8zwGn2sqBn$a>>>H1rof*pukl`?q!2&eu83BA%@_q$o zkB1cL)X_9R1s{DC0*@rj8pm^rZ9l@TD1CxeFjITEF*9Ym*u zM8+Tt*50FrDK)IgI_l!0&pR#_*~&jhcAqJT^!)BVY%PH6s#x0yAASzPixT5vlq2r! zpl%Bm1U&TvvwHaAiPXAd$6bUwE#HZl$p_+?u<%Jpj{wUV&-Q(~XP_&fIzl(L_=E#> zq=6o9lQd({owW4!?gn~Gwng~b2--uRhngecF$_aU*xHaLm>mgbaD?Z0g>8!#-dq$^ zW#pnK9Vx?7mMSm+Y>t(i_Z-A@XLEe|%a+DHp&7g_x>B*8P0NgQfo4!;CQ&it73X}KMd_i! zEUDFS^F6_p=hC)wa(+jui${fhI3ev=b!r(um9WdQ(3p8wg+QwS7Ro3`;L8p2cn`eSLa_iseT%IJQw7< zL+h57wE<0&JT*-M;69I0=Y}!*3nip4+rTSkLo68&KmV7f24bHnRtjD;Tb5O)v8a(| zRC#V>dTJ`wd7Pq*E6y1_F{H|i`XnAc3P<)+>|*h7JIyM502fe?t-m&|LxJrfM8%x4 z(YQ=fyfzCRLc4AMM-0=jk)4SW_-OD!o5Qvl?SuN0EMs_dtJoryBTi621IU@auU1Mn zC;|jou-fHGb(X0FcLO1H`#c3gG0LOON-Q`zJs^HwGYuR)gY$@yW?<46&6!T|?M0 zq++ZcK_QIAsjbLS_b+xFIlPG-t8ZwCH;?>8>=95>O-KE7jP|CG4w4m;grG$euY7Rw zT|}g%tT@06@d($A>S)9$IEkjMnVA_yjy&uks$}Tsek#vu9ni+(#!l64b9;;3qO)Kg zKovJa=j?i_pMs=*roeAHJUCc}8Vz~g+3}O(NCu$mFwoC7mPy|!!b&Dy%XMbl1Ru1h z%WfGL4o=bzU{-yBD1rPgyOy@L7Z~03q1|%C-2y~q$7=iRK;bw+MnKdgTlg9`cGkNg z`JIBt^(*=x7GXwYB z<}!2f65`F<=R?CoOvXsq?9?&vLaR6|z-7}y@v73zFb{d5@CbT?jU+d@I{gc1n=+o| zK7_kNS`^sD>EmYgD1hwEE0C^{DMlZ6A&XLo=#8vVy zVID+SA1P@~Vbnf)@h(C)X{S5@X!#$@xeP;Gs^!l^ z#8G7BxLTIpz)9RHfNfx_;a&;7DM=bgJ9fBBo*IxjQ6?-Wb1lUCgV^oBxCsIht+%|6 zF!45JmI<9gSTNI2hsY#KkTdRf`ZfW|SP6eIrz8c9)m0YZc{uR-#`Wtd7uj=@AX)6w zTqf-f42G#7CiOJTT+|;z-kN`|`Jo+-N<_{bBwZ@{CXlj7ppCr1Rxh|%SXj`ZN4qr3u9sI15Z|1wqLmdpV7)SwX^?ACC!3U={mko)pEiq1#q2pdJzIfxT}7n;mBbn61a8ryzO^LX57)+-x+k0{>m52wdmj zQgj#!gogs#2WJ?LJ5KP1tRJAv3!J4>}P zJbVYR-Cg_koxwTovjfr?{AXct@kzjMKH*QEY{khCgU1EA*Y0&=!8SJ`dHApOns#CPa;5) z#|J&8j6Fy?IFOa}!vPiJ8~Y_DCgK_31EU`B7J^m>TCRe^SM+7_i5M}G=sG)yrnBwx zgFT=$&mKG{EUJjZBL$OWJ@+C_P`G5EUDMf>nqF(|ZE7~8lwtN+184KK# z=~6$&@7`tbK4F(QI5`D+YTn1;fZPF5@S^|y>j!Bw=l=D-TSI_e{r5NjpL3i1zxyNW zY=-qMV$rT={)#@)AT&;Ivc|4&$D{@?xZK!E=H zME^GpJ^%lw{Qt^w{lE6c5Ap;A2ggwkGSujq1QJuq3MJAK$Zuh}bc-q%Q!VnW1wM zcbQ22W<>%@w9_;hP}5;t8XAvth6f>?9byULa8I;1^`oa!WEn#rEhEzh$)upe7YOpK zW*!3K(@D}pB_tr7ZV*GoY%j%)rQl1me^f&T0U^z48V7KclyJ0ncboN$|Lh0m>Nb-G zXwLG_RdhLAY_*Jw60%^<=Zqr)Mzx;{HF8bLg%PUC!~SY~D>^_wK7N4EfmX4a>G4tq$!A~Eks z%N{wh-i)8|k}lyvLj4Zh0j!6A#%*#ILK7hCzC?{7Gh>sP7d&O%BxOTS2!O(b^$6$x zXaPRRvp1vJM#=^;!BDYn{`;Qi0m!d$G=yU+)fuU#_$E*Z$`CfM6ThMh-D1?dDR246Icc%%SQu})uIbym2lOSO16=xNiz%UyS z^twv@)^z4UZ#Z`q)%DfVQ8eM>>BzFLV+7->HBEq^2;nVCxT=Hhin6f%~G=!;OF)C}MCB?g&{Pep(FCzvY8 z!U1&MkVIR*4I^q7IL;P~Bu#hoAbEp=)V{`%Zn#5>wL^}ubHv>_)fm9wbG1+=Pwc*5 zIL)6FD+f?WK)e4u4fW79Bn;`Rg6eS`?s$s$Cu$JizI{tDGI)x)=rdB+p{c}!0D?*S zkM$+}yaTP7i-lX4VAoUKzX%gj(Ey=M9EHprv0)t%DdA zxiZX!-;qj4#wRpL*}pbpcWr^j3Ry#*LvGNJN8wAv0EQ*KI$%WVGBDE9j-~uC`b%J4 z6r{G$-RK~suyntHT$xeRI&cc@>P!EOj}tzMCM>fhiNH5Zs9c@(%CmTj8#?=~{JyZ^ zesy$Fa=&anP6M(Oo7MaVqQf&=C=qQ)dzd~(jNN_tR`{THGY;t&zPilIN&9Fp+tR9Di$-JR?XDP!8AyFHm!_XKNhso&sfDH~uPf5NE zigcvz7FgScm=aW?y>Md;75N9jQwdCH7cXy@Pr(>w8PdYg7XI&XmoefBa!mzx6Ey^T z%6KV1x*bwsL-6@&QNaxl4?ZMsV+#9D3@+GQc>s7wSW&`1IvkjrK|8+&S+y^=Ide`$sR#TX)CChcUk__QTi1iFd9tee=B4t1K(< zoAEgI*0ZRs8VS#i`*LzRG96;#nHRqF*50L3JN{jJXsvSF*s;(r7N-R>*+BuF{v$*nHgA}38)*p@fZqh@3VN>(=349S8Un)$@noE>CfnfWsihI zV5oN8jgylov#{sSp8a*G!2lD;SoU9*DyU5lAarf)KfnGFWEj~aqpi2^-0{J!Uz55k zepqd;y=3p=AFg_C)3&!gJ=Z;`ui~i!&%1G|C=mmFG6)Ks zMNALsCtNX~tCi0}AS*m)&jH(Hgk7`oy4z7eO~SC_)j&l@(DS#GhlK2h+D=X%fEvii z6g|<5dB?n4dETgZ9g#yw#Jdkm2QxAh@%v95vA%vCV_j~fk?`Uj9xGY6(HsW=fJSQQ zoj4>uNl$ca&rWd%kUU$Fy9U6SA%ZLIEL6P#J+#23YE$Fo0M;ZKNc{nf4%nh6Zm;DE zcOD<48j6B+A40hf7Aq$ZzT3e5_`vy*Y1Mqwk563@GKz2%JZ0#CBR?Z9W+(J^eh{I` zM=M8!1I;PJoaN$c*Y<^3%HRStDd6Gp@W{v_9Q&=1a$Em= zw@B{PsXz=j(LkVWz?C1@TQCkdss$uHr;kLTBBm#ufH7c&hS1x zL>_Bh2qAenGp|MFY+H;WvIYJ>Ux*Y=Kt%_Ct~^*0xDo_bh1qj*1`6s2pxP8-Qsly9 zgz=jT{s`0wfVmKX20$STFEv)N$(X;EIxV3y+oE07Emq8yS0Aq_qO2R2ByV;I$zr+-_OW%=_TXMm5^IQ>tbkON>Jjt)ez zf@hO}&V9T+roxcF(-j^GJJ!(Y0(W?r31?=(lX#CC#Fd31GxI{get?i&u9=P_F;fsZ z3__%E0vfe7&5&AHh*6#&XZJHdAAPs!GnlQp z@$ffdz6H4&I!rjiAZJg&br0hq! z&eTBo!wRYjALIxR7vw+wSg>*!`2iGuZyWPewvz7mSGGom7COj#!O|{T=8ZW#uV24b z#?WsHTrL%r;cK%T$)YEo+M(jJu`e?~6@KQo_CdYJ&w$!P=;i`Y>x%GdTj&d77RTbF zwGVnNNt`Ei;IaB^XNPEnd{tP7M?@5Yksfh~^egNA0YFX;-+tlZ#p0u{B_sEsM zb#ooh(Er4lX^^2+E0{ld?d8io(|IIxjYCH$pz~@gUW_vE-cD51k1j?ioj7D`aLjknoJ3}_%lsA0itNl;v)QRl;M+T z^rE4J>&_#0&qerkz8z|}9rz_ntmK(&yUU(NyHs9yk>iT>vnX=B$P-D(PlG7dIT`Ph z9+iS-j3L4e0=r8yiFlzAcy%Tsi6|po!xW(RXcQc`I;x>#cCUZ=X_VkIv@SAtL!UO0 zBT8X|q>DlzTE_S^s#_FbHT|&2%HjSdeYbWT|0xe&fDach2BgOSf=4|ecr6nMOhc>8 zi0RjGW1mUCr0Ln32)o+hf)Tui3JMfPy*?)thN>P7scIBZu8us?4BHLa-XM2fB79c* z4X>=;NB2j*co74Tvs;o*#gx7Hc>8J^-&HPJ^s~!A*v-WT3K@zA@N}4%m=Jf~J&7-K z1}wwwHWgS+;QQ9+iSUzq?B(TksGs^H5@g7uY17oP$3&uvB{6~1d$yo9EilwqH;y^|+e}>iYijT9x|JNz^HV)z3iJ9n`uU z?JJp}8hX8918<`9rZAbZFO9;S2X9Y@MEcc&HJ%}PPH_N54?y!<*(U^SbRVSZLMi5-2919fNB8m?9Q9UeZBn2j31El*(!aOc-sMZ}}=t6)H?B2k{bZ+B8pphxeQCD^_9s;Mt z)xeq|6rM^=#;RUzeOJ zk<^i)89KRv;S531a6bePydVkr-)P6E^4Jcx$i*6!LV3pHruRG>bUtnsRp@WW93G3J z*0Fbtmr;$;Dz^m7Y~!xg%_mi$l_(C#1GVXx84>i!>1{fJ4hMxG&InvgsS&D}Qsp#J{o^sNUsyX8jWR-X#Z2z2 z#SGl#7eyXGpBFlr*1VFEI%Jb+>0d4R+nrRwAA3J>FsA5+v_W0a_-w!F?)aHTcx+F0 zZGTYzLkDGof)W+}F~oV=1+F1uB2Q>046GSJ$q{a=SFKV50kfx$BY@p{qb+04?C4Dh zn&_$GU8F2|2nKimb@v2B1CI?gZr=J?;su^+0@kXDUEG~p#O7TJC{<%vVqkQH^QV}# z)(z-HRa4>Y%YNv6_L|kHMk)PG0zm)<)jh2BaP(=;++E0^9NwVb=QtZ<5QstV(bvox z-VxSX0W+_vWOABVT#t;5jDa1Hl3kXqSh1I<6vKXe=%$jz32A-Sqx~Q}yKrKk znaiUGNVU5S#=(s)r$>JOo-=IJysp7oqHnF&gnV`WHlX#UWnV4uH>kMjg`zAFfD&fR zvfv-Qo5f3(@PVA!hg&CM?TRbk!NnB~9aK%rKY0)}dyXTkCl(w>CnV05XCT-*4SnI< zVfLM_eqR{`eu0vKK2A|6CDPFosOAuAmC}m$DzdagEk?EQqJ_NEyf+YJ`Lc`>ZG>B_ zs_WhE3NL;-xaB5F;=WF1tM(E$ik+dOgyKdXw=%&UiTaU9(cWN`&n2JoSEfn_L0LlahEwM&f9P{3M{i@Uo2?sVv4BcEgJ9p_Js4ChqYTYu=(MfgNpk9$KybH~iqXUk$ zKDo=1`hBvDJt)mB#`)j$wv978-SFqvEHj++Q|6X3B>Yf)eS>L&G`IK2X>{OzSWra3 z15v3mMJsi-tUJG|N?kY8`r~<5Kz7`3|3#?4{7v&L@o0(Ya&ey8yzkui0O`W*eknB!u}swtrVI?heB z@r@{^J@WB$i&o*&(&f<;ZS|Fh7aA~L;&WwHeM3;PE%4Zqhmtlcmn~Dq`7c}-fRE)n ziv;kL-F^L21-{$oy@3laiY9ba;?Hq2#h*SA11ntEjy#m)hxe2dRx>uX56xh+p-LX1 z>)U~oKI)xBk%|T`+Tmf2%|T3}T9FAKBg#)13W-#w-Njd?Cv4eXu7+i;+tygpgK}%I z+3Zs!VH^04qv;H$$CI^p9C{Wppg@eTO9bykMpNSg__))lpiyjkv02h~uX%5BvJ&X& z%r;@DjRL>@aAA70#f>Z$-4aJiyd*)+y(B&Srp* z&&|Pr#49B9?Yy4b%y?uCUmEuKom-TjQjrQlbyX*Pf`&rH@L9!`OX3oh{b4V*ltU!Y zaDI!~-#ec}8aRSQQn&I|^)iOuYiCX96;%cM0UcMO+~>NGA$#OZf=*4#(Yg*4@$aVsb8~Zdhb{*iC)yeE5^YRu-5&%6 zJ&K#uLnWW+7WB2<;v{rn`>boxtoz4m`4+@;T#@}2(l*z?k~Tm~ArO-U7;W1uNI*-^ ziyN$tC*f5?u2Yry_@L{ubqq<&kkWUhq@+kFdPztZN{5=4s~0V0v;iq9Hzf&vidTM+ zypxm|3B^L73k^$~IAJoARjvFwpYi0ldFfiS)qaCHQ2mIb9qKLq=VxV^mQ#mu4mV6M z8Y>ksY&`mYt@7rZTcD^-0Uw%N(H<0A%dlyg2t@W&-FBP+FSRnVgc%xWJIT|2vrrS@ zXbGRVcjz@>H!J#J^jN zopJl&dUoU4^-d^2{$Lqy9q)^Ch68}R$ORE2kVpd=xR$zUx0Y&)k#NaxiA&XcQd-d| zufyrV#H5LI5JMv)%`ZEF*1Nq96Is=^@|ghVqR{W>fPp!lZ3OG_i9p9#Q&fW8K-3dv zrhQLI3&|Ty)uFt^_k}@!^qF+GPlP2%TObUrPHYh%1Y00ncW$*PPQ3(1X> zTeohZAoHW$2TUK=Mwf+1Wsg9_DI;|@<-vB}55T}aQCh~m_ZUdAUcInu1;9#GF34Do z&>%GF7AZX?8ZXaYtIx8PKXL?m8y*tJHS}w2d6)y#W7Ww&WpFb(41YT&d&Cgs$I-px z*Ln2CYD=u>@>3fqRE}8hyiAfz&BxU3&1;5fo(mjPdR7AXm7&lo(ebg2h(Zb02X4RS z8L&OZ^djtOhH++j>fLv|pAC|6_Nke;jQ#$7f0MrR>DkacfwhGpwyx-+IeoM_NSty? z;H;@GP||d5?qe=c6gi%Ehs5jwv>*TD00I<%UC<3{erMp+TJRoltZO5Cd*m%+KuVs3Gwm~!5@V0yfvXTqoa~N_q$aeL zK@L(l8|+NP_@m&*E^G7BL$f_dBViK`?6b*JI7qEA#4|CO!pScQw}@TUBYOp&h!!+y zJjas&(W8|WKkFm7 zzm58$SWlmng7AnXibsJZmWNRlPiZ9;@wG90Nv#keky4RTNrMc9yTX;;U^-HZQ!xw> z;2RiUR{_F>54tK&AE(zfK^19OSK?3X@f|aPdKM3lj+UZH1GNMyv<#zDcFI+VU%JG( z0ozg=D3Y7o{6&L9Q@rHP^_(m6A2Pd}axD`}olIK&1)-EK6W-cQ?sc;bPz3Jcmc#E=jIhoJcbd;coN@G@C%fyTe;bwyKLNwP< ziL~jd{${+zVA{eoq$GXPdrW@3Zd$e#_qM0jypF?&=z7(lvl{2~V*xV)X#s!ORUNqS zb?fxF-sPP?yq-CD&3|=#hTWxd3x)g#;%qJih%yKAfe)y5cGTO9@gM;1YbK^nT-;U> z^aU_L=h0D=gL6s8?!qWM6Fm0skZT9TPkj|)xY?!#Ar+Finq}>V4P1b6?J!iXl$}`| z%msO^GC)+etwkjz8{sTvVyeOI?yG(gU3PJ`za$NQv|>Rn{8Z8md9dkI8UcM1L!hM< z0uE&BANkPoqP}uJa-=@t6y-;(G_AZ$hoKkJ`-fT@dUkSg9Z2m1lJf~RQSur6f{GlS z+?A+v?Ld%LG^BimsQ%)qttJR)(4ad&@jU#|K{jj`xR+$r-ZArP6KIT{(TktDjd%xV zXCsg12Yo^js@63jf=~LJAa8z_V)%~{-I;!L<8AuKw6wIYRsKAICLFx!g)0u!^_Un~ ze3Hb))3;1>jZOmN|A>Zr$4jj>CwQin3cwCvKNyWkK;q;Jlw;$?T-k`NBaR4lpjj7n z!Li}0A`7Imb-lOszmBvg*~h2a2QwF$cZy|i8f4FB2hD(R1H;k#Z>yVo^s2@__U4qL zAi5+Y1&3H0Vkm&X7$nzUbzX1WMCo~hs1=@QA*#R*R`Po%9gB-dzX>1#cbLiHoDoDT z?E`M{Go-)a_)%r4rYa5Q{BdaKyRytt>j~y(#uZpLFnNH@)=6Gv#v1MEZR$00^>5ND znhSP=g(B<_Sid|>q!`jVGnNq44PFk6*OC!TTuIp_@WJ!wW~Cy(Ddl)=cR;m-J#Z7^ zm%!*44%FAAnFSV3-`Xx!&UX3zg0bcE4z4$&{L$R|cr6ODPQgC^qXh`HpE81{h@aqCqJp4fZ^b-joS4Y0Z&cWHb+;FQxk3PxCbkaP4GQVc z-DYRXVCNl2A1uqm1tiBGDCiwLnZ2;3Ks3k?Xxj&4nx?Z)Kxn7{&e-xii7k7-JoocK zPttw!#(;kdeuISHoOi9|Q1_<^?_5DIqfJb{q3l=MzC1v0FP7$Nmbiq7T|8prE^cP9PK+VXhHwK;#K$LB}- zGeb|o$V^;mU>a}Z^sZEbbFiIO z0)p?M=WmnRm&f5Xl9kKe6;SQiD*`goTfJg?t`FXEn8sC-xFZEo( zb!tLnf2*Z(AB4-6EWo~Qj_N7=5j%dImg_bi8{A7*i^fH zWttTZ%Lc_f=ka9MJ$}K#JvN$N@9o!fnbfKWl&~4-W+NRVG9%^HO3?+k)-a9;nXsA( z0#GCHGS<{v>Tj$SF4Bh=>CdY}+vWPJ6|5CTiww;dK!FY*WW~_f`17xio<_J|k-NzI z)VF&aGJVO`p@`N4w`yqXFjMs!%%Kqqi7+Bp$H5VgEE2@$qy(XHc#Ku~d$n^5vh$~XOmLqSw}B5O86nVv z7bll5EsWshXi#iktw5dRmU0O;ZGpz1;(TeUq=Nzb?T3qvmrZs}f;EW%>^<>tU}(q} zGle|<;Rp~s+~fU7rMp+4?Du}5SkZ<=nf68M$jt8s7j+v5h?Ll|LobbPph<5muV-~ zZBZ|Na3y6|0^iY(wo@N5uYkHQOB{A|bUXo;ECL@^8O#I^2%dyf>(;G1S$khLUMy^k zGjsKK#O~P&cHsmyMX>0<;_MS%ksNQOsyI1AzH5jcbRk>gGMV4v7=gK+qU- z;dacvhlXP@#}q>8)gqqewN(@PrjG+Ey);CJfyObfOnHe$Nu1H4AjqoDTT;+69i#2t zZM#=STk1}~s6p;)KoHR&YE+s8I}Ei0DrKO@iu5>58AVSk-SWOb++MW}z7k)6O+h)e zmx!Kq+QQ&3X?FpNGX*Z-d;1g&Pllx6xIRGckdK8gmYs*DP#Ec;ataE57_>fNV6yF>KP z4-`9;6Kg`D{Wa1701zNOoXx@WiKvuJ?OY|o4Qs@L!}M4MRiMbT)g z=ZLzkW^!?T;pJh8i942|0J%KTUDEA~J~(tPKf&_vqT)>({T3Xh^`V3-C?( zNvM0?>`b<+e>9HwLFC8PI@fAfS8eu8L66>@^cZ{A$UgZI@+}%Y&p$$D2_Qi)I>9mOSJW?81##_+7m<x$#wYTw z4m@kv3unF%vv|Zysk&ul>HE_yyu)w-HWm4g>Ft*1Hh0$s2M5oJ*zT^cYuY|_ch=YI zlzD+S%T6c-EjxA!{!WD^B=Gfo__MY&_(C7`?&siUr=@LSqtc1z{7isg-{@m%y@+(5 zGNe)0AQT=uNbiWX;6D!6A9=PcUg>@9WV2WJqHnLP45l3b0oyHkl7|MqZ>0HRKKrq| z;X-#Uwx1V2=yd7QrKd#(&Wp1w0kUFCB<Aj$IIW+t#+(3*KO7{&}*Qrvy%sO6J!~)p4(HB z0U}paj7&6Lp1!+h^fyn>4q?vB#FOpC?s_1Vvzv1pirC+LoX!zVXXzQ)c;-YQVxn}i zW}v)O8t{(_;h>ag9q@ zOKzUsneUkMgms)FOu}BVbU*vrwdV)9kHM5Hy#%i@WQ+P>{|AjK+$B)t5o;pFdX0XCzp%P6&;ve&(>`TVZg}`p@s5s{-3eaod#gJ=O}<8q_dEM_A`n z(ISh|spWBUJb*CbqVR%~Gb7A9J<)8fUY3?X`>VCrMbHp6j;1dIv20^4)7- zcQ3DH#RZ$fnvEE%r3yd7A4Qe!2JgLrKS@=GN3qcPemfEwJPz;~Ly`)JWJB1wvP}H> zjv&Fhlmp>L*9I+(^?P7GCT44Xe0%>JF($B2%P)nlMxETd^hXmPJUeCZhEGpIXFXDU zLyBZv03S4G8*$O0r_@o57z$++YN)v6Ax5!Q2pFupBpmKc3e~{tC6!-~#-BpF zR~69Cuwwm+&6#gpi_uqn{ioOZURCdKW%B0;->V0HQQSb{3poE9p1ODC8avyTY(l(CAKmNQo(H7TS)>XO(p!dfQr|JoUCpX*RAOjOaS-(w17`h zQL!@j{z^-FX*i`eDJ1u%T zBw?AJq$F0soZtT(UQp2Z%IYu_*xO;XNj(ttN(!s`8-<7R?q(K%24kqT zXZfU47bI{0M>vqaay z55Q;)%UIr=&UZ<|m>b*f2>C{#ij)0!0H7{ILqPa7*iLMP`;2^!Vyt`IP$!MRnhRh3 z{bT<0y+J@np{s5o2Zf5C#w>>i}SmhwqSNr}K&xN3>y7&;qF z=qW5ul3%>y@Wo_SvAPiHc$Zggu)_EixOf_L%2TJKWGYs>z7?Z=t*#Xr+Q{8~t3}TP zTin#6$V{-K>lUc|j^<-LT)?8Qi2c=hXGG#%^Uu_G5bGMa zB^2ELg)GaGFf<1C#LjZtOc}y-L6R)jU_*b5oM)+G1blt=KNPGyy05p!~^W+v5 zRLZgsA3qj?B_u|B5aahI$AEO;4JU9U(Co8uiC*caPxr}rPqJyw%#~{lPO(3z&mYI$ zA70srV2T#3r3dIfwRGB{%r`=!5(IE}0ZwKV!+@T`lw24GI8vpzFL z2aJbO%F~)({r!T}yipuj%f1)L$)QQh2+w1}0$B{{AFp{AAS!OB5t&c-f?^5~)HhE$ zcOT6UYM3vEat-I=_tjU-(Uv8nK>i2&gC{3%=7;z1pMPB-yBarz;~zsdoHVqCxHz=% z=Z^%EWpS@7^nzg(9r@XT+Y<<)XqA~AzgOce2P_~QGdiaaOBCfI6dQ9&1JD7+cX}1F zYdV-cJVmIXfK*L-1~*smLI3ptfW>D3Gq%DY2FKdo z-9K*8;0Sg;zQC<0XysM77>%2^(mj!YjduYm^+lWIdFwbtzlNBZ_V3h%y6pkpaJQp4 z_7)QV1SlpO15wb*6iaA>sIypsD^D?~s73WoNwE4-0R2cSf$GRz7s-Bm*W244k^p&h z&qc;wtB@849S$U_tK+eTA9=Gm;-@%(?J@$>DXSKl{TUI)BeN5vl!dL4hLn$~4kBgJ z(Ao{66l57rlgpv`H~RtWBlxY{fCVZ`U*D9F^KgrQ*1LOBOfTL81PRGr8qf$~CcP1TXX>F&!LCS?8 zmW1);Ts#+f=%ZS&Vr7+I19OlX_Y(RmM17~m6(ol_Knymr&^DkpoAj@cymmcNMhy)P zm379g3S~HD#({n8PCrayRy^uG4zKp3IghM7=ZzNE8I%SQ7b)zIX>9>~@9qr+kuUlC z%>n_?KMhB?zQvWFF^Kjv_ z`T(4f!#kZ-TbE3i){ogKC@KcvAr+$e*=?ur39SyO5at8c;gpf7amx6{?ECdfUq~o^ z`_@_}68`yzhW6R8qdBZ_z#!UmF^goBHt5thmP3jeOLL74p$J)$Amu3k<-`$^Ay5v9 z=3}5*l++ng@<#=IGn~6C>2ldK&yFljX~pMK5w&Qv$5Vd{BWhkn^ zeMer?HANH&-U+wzvK&D_`|gn%@L%^;@8SS^tB7ES#A#GO2*?L6Qj{M1hr70TLqfk3S1ZDYn_W=#u(JJi80ia zlqpKW4Ycnp`*?BO?a$98K!ak-OCSjwXA3$7K@FvODx`k|C=6HB5y%)+K(^O}Pk~R{ zUu1x9#@!?ci6~{|!2uRVTA-OGYNUE?kRrqfTyW zI)&|ED`sx4icO5dA?0-KggD}C3`6DWiY6_Zixf4rBt?wjDs`Qc(pgQKa#tyjbR$-s z=ezxK{)6+2e&ONa(RK6veBL*&_v`g~ms?#;LP(WOGVOYSy7tull_!yd3|p0RD5?^4 z)`3^`&ZX(oF#heOC|OuctcpUzEjB(oD#9L>j*9(!Qu8%g6?SsLToHTqB()p}1Uczj z?dCr`_G-vk`i@jGeGG5wD3ALMrV{A;8J5ovCw}Lgzf!#5E#*9=>Y#Nayw*AZOaftfr?-3TV^Qt|idhG0}E1x7sjghDyELM%M zqbh=euWfft0&z-cIM3u{wzy@bJ;L5(X_m7XfOv1*RFNiRP`o>0-QI&3rr~1xa^+el zItVqCD$*l>L^gK+T0XKzF(&A1LbJT+24ri1cc+ksa4gaQ+Lxo(I@+VcnNJ&VW}U3A zeKZ03*SfzBM;sQfKSD>lt{~8J%hUE?hW;q>yVzuPUc+n7ifZO*gx|f=KkFYL1;=i_ z&Q_5%om7BJwHEB|h{DV;L5!+oc?HTQSNk0X&qIQ6*~m< z@7ID70ZZ8_T)a%^pqZQUWfpl{VD^#%M$Qgs651dRdqK8zaO?H6Sz? zp2!hM6d#?r1Z@eRLbP5p<*2}}TL6C`{;2(p^VV}TQicfRoBl4+vY-3hJH7VKE;C?2lBX#_q*xXvNu-KkX?3qxaK#R1Ir*!be7!-d9NyQg%*cUhEzLk z^&_l`+jAOYx;9}?6cn@+I{G~w_v)#^E{oUX94a{ro;{R6@BOc;N)wpWaeB7KRu2l= z-c8yz&(1^whx>A7%SqM)&WEIXj^3>n_7nJ2)(~Zo@x0YRkMLAve%e*a9D4(}iyXw0 zO$k(W;aHxxfy+NE7*wGgp68Q@%z+xgboX-JZ&SEZZ)F_mYoRz8%J|1}>J(oPkH_gq z8p~FDeFAFa+$pPAM?wPajOmGP?*5nz?@l{EJoLi4rYnjV(h= zQ0If&|MX*NGyp4k=FE_zV@u4Y8njgd;q0F)e}3cHKy-XUygsmKyqW*gIjJ$tmVKNB zIq6y*1RJ!~(Y!>=S|bO6)w<1t0iHEMWRDqfZrCg_@w!nuj4H?U#P8TF>%8$P3!idt z8!CKpLLI>^b-TF)`jbpCIoEL_PW18l11gsOmX`bJ8)lLSTZ0YhF@R_MRR^|U1V9rY zN$@$0oAlgKDLHK+0R38VNk31JBcQz&x~c12SX-tJgen&*r~{-%Z@d!!k}*ycCKO&l zFf6p4Ez4zY#qTl7VvNS)(O&KGDvgJ;b4ifjvXyd&O)=}>-=EN&(2!QckAe% z{-Nl?XiE_!zA3ce`JIe!jU?V6+7m75C6`VHcQ)Z4i97`))Ic=6%f`WpZy59fW4C~! z7DB)or55iZJ%ifoyp5x5{6OC|GoU(Ha{q*c#3!)QMAK$v6@j-_;|0|U'zeqV73 z^5<8r^+qi$5~NHz++ESp2jFwa|Fb25sPKjqDatFTGP=5fPwMa@-$(2c_2DS4Hr@D0 zF{^nXWAoMp8ldBw8Syr(1(;v(btSc$SGqx#Mz$Vq-~7Dw-?7hz0P^@@rsfD8D~3_S z!LjSt74*=!tYn~|(pTDxRs&T37oj|LpYs05N5dEboes%?L zYF%({205p+)^%ZC2^;wuzR_|_oP@Ub$uYp&`k$Scv8UL5r@g|12%?*ouZ&mHfxgIb zCOrF4D2v;n-%~gSw=Pf8JNWv19AC4C_Za(B{7=AwY>`rnSdk0CU~FJo&y?DpTn52z zrZ#ZhLMll{Ig7kEjW4BiDUxSSy-d7IzV-m*DP<3PFa+j zDYJ2L+mX)%+E5>+b@WZOCE!mivcnyGNkc<C)Jg07u~jufb4zCe&`4SmTlAUBC78|5XHrbQ(Hl zA3hlS2_Kz8(FFn%P5i+HU6H`l-)@s^{8rUYI4zlAnL^M26DZ<|+CqloD`^c+X5#!- zRo@a>L)Los9K-DcG#?WKL=DeNT1ZQH*6n;*hYh1G3vU)+I`N`_>*#Kf_p^OSJ~ zeeC}T!gQc3@A}@6uTbU~q!Hn2NQi=tC+CG2;zKKEkf+sghsYF!P(-bk6&$-S*9>WR zC?SW>QCuqMU$1H`Dtj)YR2P;eT7BhgKV4D!5A~k*o`zp&jSJ=N$Fsb>_wBWDF9e0S z2d_*^Ybj{G$QPkk{D31DHU_75c$j@{(`T#l%lmWtDQ4?SbJi}|Yz_v!Vt4HeVW`3E zwNmayPAg2G`pC*!d`i; zrbji}%uK22iJ?Kc&PaQNT8&!I&+ZjtLT5hV&eChp`fUCLfZEf&nO~I23ZqSnEtRRi z)_rtnv>Lo_VNjNZxw7URJk_=)2%9rw+ouwnn21EHR7a70+O>2VuNW z%EnL`(xF?Cfw-`mdWVDHn6vQ{4eaDHhfK`KKmBoYjwrjRQq=PO@B1aJK|il!?3n(_ z_bez2%w&zEv9M4_z?G>bpi@!NZvT(XY9_1YW7y2~F;a+&cGvGF*lrP7=RMjS@`;P<8rk)~FdARr&Z|MKa z0Iu17GN%!#RUH#IT};dfddfd;*|G%!`98+!z3BkNq9ZRwQQYs<)_zxoZ(y7b)nNoC z3w1cC=b1)1s!+AIb=%KPzT&lTC6~I*Bc#~D;^KMN-W~RQT{Tx9%EBo5IqS;N>HXPi zBTuOJ=jA`j*YNTSd3hLK-j0_S;bm0(zo&`QJ^cb&ca|2%IUbal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + ATAC-seq peak-calling, QC and differential analysis pipeline + atacseq + + + + + + + + + + + + + + + + + + + + + + + + + From 766a1f375e49a8a9db5b0004229d10776c02b141 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Tue, 11 Feb 2020 15:41:50 +0100 Subject: [PATCH 088/226] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d533e46a..7c54f2f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 +* [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * Added GitHub Actions CI tests ### `Fixed` From 7c2956adb1aeb196ef3daba711f8596081d4d0ea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 17 Feb 2020 17:45:55 +0000 Subject: [PATCH 089/226] Update packages --- CHANGELOG.md | 17 ++++++++++------- environment.yml | 21 ++++++++++----------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c54f2f1..e03ca31f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,26 +24,29 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` -* Add genrich `0.6` * Add r-stringi `1.4.3` * Add pigz `2.3.4` * Update gawk `4.2.1` -> `5.0.1` -* Update r-base `3.4.1` -> `3.6.1` +* Update r-base `3.4.1` -> `3.6.2` * Update r-optparse `1.6.0` -> `1.6.4` * Update r-ggplot2 `3.1.0` -> `3.2.1` * Update r-pheatmap `1.0.10` -> `1.0.12` * Update r-lattice `0.20_35` -> `0.20_38` * Update r-upsetr `1.3.3` -> `1.4.0` * Update r-scales `1.0.0` -> `1.1.0` -* Update r-xfun `0.3` -> `0.11` +* Update r-xfun `0.3` -> `0.12` +* Update fastqc `0.11.8` -> `0.11.9` * Update trim-galore `0.5.0` -> `0.6.5` -* Update picard `2.19.0` -> `2.21.3` +* Update samtools `1.9` -> `1.10` +* Update picard `2.19.0` -> `2.21.8` * Update pysam `0.15.2` -> `0.15.3` -* Update bedtools `2.27.1` -> `2.29.0` +* Update bedtools `2.27.1` -> `2.29.2` * Update ucsc-bedgraphtobigwig `377` -> `357` -* Update deeptools `3.2.1` -> `3.3.1` -* Update macs2 `2.1.2` -> `2.2.5` +* Update deeptools `3.2.1` -> `3.3.2` +* Update macs2 `2.1.2` -> `2.2.6` * Update homer `4.9.1` -> `4.10` +* Update ataqv `1.0.0` -> `1.1.1` +* Update subread `1.6.4` -> `2.0.0` * Update multiqc `1.7` -> `1.8` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` diff --git a/environment.yml b/environment.yml index b89ccc24..2fc1a29d 100755 --- a/environment.yml +++ b/environment.yml @@ -8,7 +8,7 @@ channels: dependencies: ## conda-forge packages - conda-forge::gawk=5.0.1 - - conda-forge::r-base=3.6.1 + - conda-forge::r-base=3.6.2 - conda-forge::r-optparse=1.6.4 - conda-forge::r-rcolorbrewer=1.1_2 - conda-forge::r-ggplot2=3.2.1 @@ -17,26 +17,25 @@ dependencies: - conda-forge::r-pheatmap=1.0.12 - conda-forge::r-lattice=0.20_38 - conda-forge::r-upsetr=1.4.0 - - conda-forge::r-xfun=0.11 + - conda-forge::r-xfun=0.12 - conda-forge::pigz=2.3.4 - r::r-stringi=1.4.3 ## bioconda packages - - bioconda::fastqc=0.11.8 + - bioconda::fastqc=0.11.9 - bioconda::trim-galore=0.6.5 - bioconda::bwa=0.7.17 - - bioconda::samtools=1.9 - - bioconda::picard=2.21.3 + - bioconda::samtools=1.10 + - bioconda::picard=2.21.8 - bioconda::bamtools=2.5.1 - bioconda::pysam=0.15.3 - - bioconda::bedtools=2.29.0 + - bioconda::bedtools=2.29.2 - bioconda::ucsc-bedgraphtobigwig=357 - - bioconda::deeptools=3.3.1 - - bioconda::macs2=2.2.5 - - bioconda::genrich=0.6 + - bioconda::deeptools=3.3.2 + - bioconda::macs2=2.2.6 - bioconda::homer=4.10 - - bioconda::ataqv=1.0.0 - - bioconda::subread=1.6.4 + - bioconda::ataqv=1.1.1 + - bioconda::subread=2.0.0 - bioconda::preseq=2.0.3 - bioconda::multiqc=1.8 - bioconda::bioconductor-deseq2=1.26.0 From 7d4e7833f86882e42a976577ab43ea354195d750 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 17 Feb 2020 17:55:14 +0000 Subject: [PATCH 090/226] Downgrade samtools --- CHANGELOG.md | 3 +-- environment.yml | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e03ca31f..35497d86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,9 +37,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update r-xfun `0.3` -> `0.12` * Update fastqc `0.11.8` -> `0.11.9` * Update trim-galore `0.5.0` -> `0.6.5` -* Update samtools `1.9` -> `1.10` * Update picard `2.19.0` -> `2.21.8` -* Update pysam `0.15.2` -> `0.15.3` +* Update pysam `0.15.2` -> `0.15.4` * Update bedtools `2.27.1` -> `2.29.2` * Update ucsc-bedgraphtobigwig `377` -> `357` * Update deeptools `3.2.1` -> `3.3.2` diff --git a/environment.yml b/environment.yml index 2fc1a29d..7381aa34 100755 --- a/environment.yml +++ b/environment.yml @@ -25,10 +25,10 @@ dependencies: - bioconda::fastqc=0.11.9 - bioconda::trim-galore=0.6.5 - bioconda::bwa=0.7.17 - - bioconda::samtools=1.10 + - bioconda::samtools=1.9 - bioconda::picard=2.21.8 - bioconda::bamtools=2.5.1 - - bioconda::pysam=0.15.3 + - bioconda::pysam=0.15.4 - bioconda::bedtools=2.29.2 - bioconda::ucsc-bedgraphtobigwig=357 - bioconda::deeptools=3.3.2 From 04a429f6016741a1e31b83147f384315318d1191 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 19 Feb 2020 14:08:45 +0000 Subject: [PATCH 091/226] Update with template --- .github/workflows/ci.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa664e06..a442aa32 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,22 +5,24 @@ on: [push, pull_request] jobs: test: - runs-on: ubuntu-18.04 + env: + NXF_VER: ${{ matrix.nxf_ver }} + NXF_ANSI_LOG: false + runs-on: ubuntu-latest strategy: matrix: # Nextflow versions: check pipeline minimum and current latest nxf_ver: ['19.10.0', ''] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Install Nextflow run: | - export NXF_VER=${{ matrix.nxf_ver }} - export NXF_ANSI_LOG=false wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - - name: Pull image + - name: Pull docker image run: | - docker pull nfcore/atacseq:dev && docker tag nfcore/atacseq:dev nfcore/atacseq:dev - - name: Run test + docker pull nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:dev + - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker From d8eab7705afc349efd740416ee0b82db83ed3bc7 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 19 Feb 2020 15:19:04 +0000 Subject: [PATCH 092/226] Update packages in environment --- CHANGELOG.md | 4 +++- environment.yml | 6 +++--- main.nf | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35497d86..1c52bb6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,8 +24,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` -* Add r-stringi `1.4.3` * Add pigz `2.3.4` +* Add r-tidyr `1.0.2` +* Add bioconductor-biocparallel `1.20.0` * Update gawk `4.2.1` -> `5.0.1` * Update r-base `3.4.1` -> `3.6.2` * Update r-optparse `1.6.0` -> `1.6.4` @@ -49,6 +50,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update multiqc `1.7` -> `1.8` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` +* Remove r-reshape2 `1.4.3` ### `Deprecated` diff --git a/environment.yml b/environment.yml index 7381aa34..e826b8be 100755 --- a/environment.yml +++ b/environment.yml @@ -12,14 +12,13 @@ dependencies: - conda-forge::r-optparse=1.6.4 - conda-forge::r-rcolorbrewer=1.1_2 - conda-forge::r-ggplot2=3.2.1 - - conda-forge::r-reshape2=1.4.3 + - conda-forge::r-tidyr=1.0.2 - conda-forge::r-scales=1.1.0 - conda-forge::r-pheatmap=1.0.12 - conda-forge::r-lattice=0.20_38 - conda-forge::r-upsetr=1.4.0 - conda-forge::r-xfun=0.12 - - conda-forge::pigz=2.3.4 - - r::r-stringi=1.4.3 + - conda-forge::pigz=2.3.4 ## Required for TrimGalore multi-threading ## bioconda packages - bioconda::fastqc=0.11.9 @@ -38,5 +37,6 @@ dependencies: - bioconda::subread=2.0.0 - bioconda::preseq=2.0.3 - bioconda::multiqc=1.8 + - bioconda::bioconductor-biocparallel=1.20.0 - bioconda::bioconductor-deseq2=1.26.0 - bioconda::bioconductor-vsn=3.54.0 diff --git a/main.nf b/main.nf index 00072f6f..6a384e1b 100644 --- a/main.nf +++ b/main.nf @@ -450,8 +450,8 @@ process MakeGenomeFilter { output: file "$fasta" // FASTA FILE FOR IGV - file "$readme" // AWS IGENOMES FILE CONTAINING ANNOTATION VERSION file "*.fai" // FAI INDEX FOR REFERENCE GENOME + //file "$readme" // AWS IGENOMES FILE CONTAINING ANNOTATION VERSION file "*.bed" into ch_genome_filter_regions // BED FILE WITHOUT BLACKLIST REGIONS & MITOCHONDRIAL CONTIG FOR FILTERING file "*.txt" into ch_genome_autosomes // TEXT FILE CONTAINING LISTING OF AUTOSOMAL CHROMOSOMES FOR ATAQV file "*.sizes" into ch_genome_sizes_mlib_bigwig, // CHROMOSOME SIZES FILE FOR BEDTOOLS From e7beca5123bcd35e91b3a66a445cf7ab4402d224 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 19 Feb 2020 16:27:51 +0000 Subject: [PATCH 093/226] Fix linting --- .github/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a442aa32..0fd5b152 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,8 +21,7 @@ jobs: sudo mv nextflow /usr/local/bin/ - name: Pull docker image run: | - docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:dev + docker pull nfcore/atacseq:dev && docker tag nfcore/atacseq:dev nfcore/atacseq:dev - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker From e6c7d97dc712581e3759bbad65a74a38b047ed5e Mon Sep 17 00:00:00 2001 From: runner Date: Thu, 20 Feb 2020 15:29:38 +0000 Subject: [PATCH 094/226] Template update for nf-core/tools version 1.9 --- .github/CONTRIBUTING.md | 52 ++- .github/ISSUE_TEMPLATE/bug_report.md | 43 ++- .github/ISSUE_TEMPLATE/feature_request.md | 18 +- .github/PULL_REQUEST_TEMPLATE.md | 28 +- .github/markdownlint.yml | 4 - .github/workflows/branch.yml | 16 + .github/workflows/ci.yml | 30 ++ .github/workflows/linting.yml | 50 +++ .gitignore | 3 +- .travis.yml | 42 -- CHANGELOG.md | 14 +- CODE_OF_CONDUCT.md | 2 +- Dockerfile | 12 +- README.md | 53 ++- assets/email_template.html | 2 + assets/email_template.txt | 12 +- assets/multiqc_config.yaml | 4 +- assets/nf-core-atacseq_logo.png | Bin 0 -> 12870 bytes assets/sendmail_template.txt | 17 + bin/markdown_to_html.py | 100 +++++ bin/markdown_to_html.r | 51 --- bin/scrape_software_versions.py | 15 +- conf/awsbatch.config | 18 - conf/base.config | 37 +- conf/igenomes.config | 451 +++++++++++++++++----- conf/test.config | 7 +- docs/images/nf-core-atacseq_logo.png | Bin 0 -> 22032 bytes docs/output.md | 4 +- docs/usage.md | 95 +++-- environment.yml | 10 +- main.nf | 278 +++++++------ nextflow.config | 56 ++- 32 files changed, 1049 insertions(+), 475 deletions(-) create mode 100644 .github/workflows/branch.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/linting.yml delete mode 100644 .travis.yml create mode 100644 assets/nf-core-atacseq_logo.png create mode 100755 bin/markdown_to_html.py delete mode 100755 bin/markdown_to_html.r delete mode 100644 conf/awsbatch.config create mode 100644 docs/images/nf-core-atacseq_logo.png diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6376a3c9..0d1890fa 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,47 +1,57 @@ # nf-core/atacseq: Contributing Guidelines -Hi there! Many thanks for taking an interest in improving nf-core/atacseq. +Hi there! +Many thanks for taking an interest in improving nf-core/atacseq. -We try to manage the required tasks for nf-core/atacseq using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. - -However, don't be put off by this template - other more general issues and suggestions are welcome! Contributions to the code are even more welcome ;) - -> If you need help using or modifying nf-core/atacseq then the best place to ask is on the pipeline channel on [Slack](https://nf-core-invite.herokuapp.com/). +We try to manage the required tasks for nf-core/atacseq using GitHub issues, you probably came to this page when creating one. +Please use the pre-filled template to save time. +However, don't be put off by this template - other more general issues and suggestions are welcome! +Contributions to the code are even more welcome ;) +> If you need help using or modifying nf-core/atacseq then the best place to ask is on the nf-core Slack [#atacseq](https://nfcore.slack.com/channels/atacseq) channel ([join our Slack here](https://nf-co.re/join/slack)). ## Contribution workflow -If you'd like to write some code for nf-core/atacseq, the standard workflow -is as follows: -1. Check that there isn't already an issue about your idea in the - [nf-core/atacseq issues](https://github.com/nf-core/atacseq/issues) to avoid - duplicating work. +If you'd like to write some code for nf-core/atacseq, the standard workflow is as follows: + +1. Check that there isn't already an issue about your idea in the [nf-core/atacseq issues](https://github.com/nf-core/atacseq/issues) to avoid duplicating work * If there isn't one already, please create one so that others know you're working on this -2. Fork the [nf-core/atacseq repository](https://github.com/nf-core/atacseq) to your GitHub account +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/atacseq repository](https://github.com/nf-core/atacseq) to your GitHub account 3. Make the necessary changes / additions within your forked repository -4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged. - -If you're not used to this workflow with git, you can start with some [basic docs from GitHub](https://help.github.com/articles/fork-a-repo/) or even their [excellent interactive tutorial](https://try.github.io/). +4. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged +If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). ## Tests -When you create a pull request with changes, [Travis CI](https://travis-ci.org/) will run automatic tests. + +When you create a pull request with changes, [GitHub Actions](https://github.com/features/actions) will run automatic tests. Typically, pull-requests are only fully reviewed when these tests are passing, though of course we can help out before then. There are typically two types of tests that run: ### Lint Tests -The nf-core has a [set of guidelines](http://nf-co.re/guidelines) which all pipelines must adhere to. + +`nf-core` has a [set of guidelines](https://nf-co.re/developers/guidelines) which all pipelines must adhere to. To enforce these and ensure that all pipelines stay in sync, we have developed a helper tool which runs checks on the pipeline code. This is in the [nf-core/tools repository](https://github.com/nf-core/tools) and once installed can be run locally with the `nf-core lint ` command. If any failures or warnings are encountered, please follow the listed URL for more documentation. ### Pipeline Tests -Each nf-core pipeline should be set up with a minimal set of test-data. -Travis CI then runs the pipeline on this data to ensure that it exists successfully. + +Each `nf-core` pipeline should be set up with a minimal set of test-data. +`GitHub Actions` then runs the pipeline on this data to ensure that it exits successfully. If there are any failures then the automated tests fail. -These tests are run both with the latest available version of Nextflow and also the minimum required version that is stated in the pipeline code. +These tests are run both with the latest available version of `Nextflow` and also the minimum required version that is stated in the pipeline code. + +## Patch + +: warning: Only in the unlikely and regretful event of a release happening with a bug. + +* On your own fork, make a new branch `patch` based on `upstream/master`. +* Fix the bug, and bump version (X.Y.Z+1). +* A PR should be made on `master` from patch to directly this particular bug. ## Getting help -For further information/help, please consult the [nf-core/atacseq documentation](https://github.com/nf-core/atacseq#documentation) and don't hesitate to get in touch on the pipeline channel on [Slack](https://nf-core-invite.herokuapp.com/). + +For further information/help, please consult the [nf-core/atacseq documentation](https://nf-co.re/nf-core/atacseq/docs) and don't hesitate to get in touch on the nf-core Slack [#atacseq](https://nfcore.slack.com/channels/atacseq) channel ([join our Slack here](https://nf-co.re/join/slack)). diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b287bce7..010263cf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,31 +1,42 @@ +# nf-core/atacseq bug report + Hi there! -Thanks for telling us about a problem with the pipeline. Please delete this text and anything that's not relevant from the template below: +Thanks for telling us about a problem with the pipeline. +Please delete this text and anything that's not relevant from the template below: + +## Describe the bug -#### Describe the bug A clear and concise description of what the bug is. -#### Steps to reproduce +## Steps to reproduce + Steps to reproduce the behaviour: + 1. Command line: `nextflow run ...` 2. See error: _Please provide your error message_ -#### Expected behaviour +## Expected behaviour + A clear and concise description of what you expected to happen. -#### System: - - Hardware: [e.g. HPC, Desktop, Cloud...] - - Executor: [e.g. slurm, local, awsbatch...] - - OS: [e.g. CentOS Linux, macOS, Linux Mint...] - - Version [e.g. 7, 10.13.6, 18.3...] +## System + +- Hardware: +- Executor: +- OS: +- Version + +## Nextflow Installation + +- Version: + +## Container engine -#### Nextflow Installation: - - Version: [e.g. 0.31.0] +- Engine: +- version: +- Image tag: -#### Container engine: - - Engine: [e.g. Conda, Docker or Singularity] - - version: [e.g. 1.0.0] - - Image tag: [e.g. nfcore/atacseq:1.0.0] +## Additional context -#### Additional context Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1f025b77..222fe51a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,16 +1,24 @@ +# nf-core/atacseq feature request + Hi there! -Thanks for suggesting a new feature for the pipeline! Please delete this text and anything that's not relevant from the template below: +Thanks for suggesting a new feature for the pipeline! +Please delete this text and anything that's not relevant from the template below: + +## Is your feature request related to a problem? Please describe -#### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. + Ex. I'm always frustrated when [...] -#### Describe the solution you'd like +## Describe the solution you'd like + A clear and concise description of what you want to happen. -#### Describe alternatives you've considered +## Describe alternatives you've considered + A clear and concise description of any alternative solutions or features you've considered. -#### Additional context +## Additional context + Add any other context about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2784b969..67681d0c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,15 +1,19 @@ -Many thanks to contributing to nf-core/atacseq! +# nf-core/atacseq pull request -Please fill in the appropriate checklist below (delete whatever is not relevant). These are the most common things requested on pull requests (PRs). +Many thanks for contributing to nf-core/atacseq! + +Please fill in the appropriate checklist below (delete whatever is not relevant). +These are the most common things requested on pull requests (PRs). ## PR checklist - - [ ] This comment contains a description of changes (with reason) - - [ ] If you've fixed a bug or added code that should be tested, add tests! - - [ ] If necessary, also make a PR on the [nf-core/atacseq branch on the nf-core/test-datasets repo]( https://github.com/nf-core/test-datasets/pull/new/nf-core/atacseq) - - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - - [ ] Make sure your code lints (`nf-core lint .`). - - [ ] Documentation in `docs` is updated - - [ ] `CHANGELOG.md` is updated - - [ ] `README.md` is updated - -**Learn more about contributing:** https://github.com/nf-core/atacseq/tree/master/.github/CONTRIBUTING.md + +- [ ] This comment contains a description of changes (with reason) +- [ ] If you've fixed a bug or added code that should be tested, add tests! +- [ ] If necessary, also make a PR on the [nf-core/atacseq branch on the nf-core/test-datasets repo](https://github.com/nf-core/test-datasets/pull/new/nf-core/atacseq) +- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). +- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Documentation in `docs` is updated +- [ ] `CHANGELOG.md` is updated +- [ ] `README.md` is updated + +**Learn more about contributing:** [CONTRIBUTING.md](https://github.com/nf-core/atacseq/tree/master/.github/CONTRIBUTING.md) \ No newline at end of file diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index e052a635..96b12a70 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -1,9 +1,5 @@ # Markdownlint configuration file default: true, line-length: false -no-multiple-blanks: 0 -blanks-around-headers: false -blanks-around-lists: false -header-increment: false no-duplicate-header: siblings_only: true diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml new file mode 100644 index 00000000..9ba92076 --- /dev/null +++ b/.github/workflows/branch.yml @@ -0,0 +1,16 @@ +name: nf-core branch protection +# This workflow is triggered on PRs to master branch on the repository +# It fails when someone tries to make a PR against the nf-core `master` branch instead of `dev` +on: + pull_request: + branches: + - master + +jobs: + test: + runs-on: ubuntu-18.04 + steps: + # PRs are only ok if coming from an nf-core `dev` branch or a fork `patch` branch + - name: Check PRs + run: | + { [[ $(git remote get-url origin) == *nf-core/atacseq ]] && [[ ${GITHUB_HEAD_REF} = "dev" ]]; } || [[ ${GITHUB_HEAD_REF} == "patch" ]] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..4b730381 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +name: nf-core CI +# This workflow is triggered on pushes and PRs to the repository. +# It runs the pipeline with the minimal test dataset to check that it completes without any syntax errors +on: [push, pull_request] + +jobs: + test: + env: + NXF_VER: ${{ matrix.nxf_ver }} + NXF_ANSI_LOG: false + runs-on: ubuntu-latest + strategy: + matrix: + # Nextflow versions: check pipeline minimum and current latest + nxf_ver: ['19.10.0', ''] + steps: + - uses: actions/checkout@v2 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Pull docker image + run: | + docker pull nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:dev + - name: Run pipeline with test data + run: | + # TODO nf-core: You can customise CI pipeline run tests as required + # (eg. adding multiple test runs with different parameters) + nextflow run ${GITHUB_WORKSPACE} -profile test,docker diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 00000000..1e0827a8 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,50 @@ +name: nf-core linting +# This workflow is triggered on pushes and PRs to the repository. +# It runs the `nf-core lint` and markdown lint tests to ensure that the code meets the nf-core guidelines +on: + push: + pull_request: + release: + types: [published] + +jobs: + Markdown: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '10' + - name: Install markdownlint + run: npm install -g markdownlint-cli + - name: Run Markdownlint + run: markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.github/markdownlint.yml + YAML: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '10' + - name: Install yaml-lint + run: npm install -g yaml-lint + - name: Run yaml-lint + run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml") + nf-core: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install nf-core + - name: Run nf-core lint + run: nf-core lint ${GITHUB_WORKSPACE} diff --git a/.gitignore b/.gitignore index 5b54e3e6..6354f370 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ work/ data/ results/ .DS_Store -tests/test_data +tests/ +testing/ *.pyc diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b00e5355..00000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -sudo: required -language: python -jdk: openjdk8 -services: docker -python: '3.6' -cache: pip -matrix: - fast_finish: true - -before_install: - # PRs to master are only ok if coming from dev branch - - '[ $TRAVIS_PULL_REQUEST = "false" ] || [ $TRAVIS_BRANCH != "master" ] || ([ $TRAVIS_PULL_REQUEST_SLUG = $TRAVIS_REPO_SLUG ] && [ $TRAVIS_PULL_REQUEST_BRANCH = "dev" ])' - # Pull the docker image first so the test doesn't wait for this - - docker pull nfcore/atacseq:dev - # Fake the tag locally so that the pipeline runs properly - # Looks weird when this is :dev to :dev, but makes sense when testing code for a release (:dev to :1.0.1) - - docker tag nfcore/atacseq:dev nfcore/atacseq:dev - -install: - # Install Nextflow - - mkdir /tmp/nextflow && cd /tmp/nextflow - - wget -qO- get.nextflow.io | bash - - sudo ln -s /tmp/nextflow/nextflow /usr/local/bin/nextflow - # Install nf-core/tools - - pip install --upgrade pip - - pip install nf-core - # Reset - - mkdir ${TRAVIS_BUILD_DIR}/tests && cd ${TRAVIS_BUILD_DIR}/tests - # Install markdownlint-cli - - sudo apt-get install npm && npm install -g markdownlint-cli - -env: - - NXF_VER='0.32.0' # Specify a minimum NF version that should be tested and work - - NXF_VER='' # Plus: get the latest NF version and check that it works - -script: - # Lint the pipeline code - - nf-core lint ${TRAVIS_BUILD_DIR} - # Lint the documentation - - markdownlint ${TRAVIS_BUILD_DIR} -c ${TRAVIS_BUILD_DIR}/.github/markdownlint.yml - # Run the pipeline with the test profile - - nextflow run ${TRAVIS_BUILD_DIR} -profile test,docker diff --git a/CHANGELOG.md b/CHANGELOG.md index bf57ded8..cc3d8592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,16 @@ # nf-core/atacseq: Changelog -## v1.0.0 - [date] +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## v1.1.1dev - [date] + Initial release of nf-core/atacseq, created with the [nf-core](http://nf-co.re/) template. + +### `Added` + +### `Fixed` + +### `Dependencies` + +### `Deprecated` diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 09226d0d..cf930c8a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-core-invite.herokuapp.com/). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-co.re/join/slack). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. diff --git a/Dockerfile b/Dockerfile index 194b4b52..e0478eae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,13 @@ -FROM nfcore/base +FROM nfcore/base:1.9 LABEL authors="Harshil Patel" \ - description="Docker image containing all requirements for nf-core/atacseq pipeline" + description="Docker image containing all software requirements for the nf-core/atacseq pipeline" +# Install the conda environment COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a -ENV PATH /opt/conda/envs/nf-core-atacseq-1.0.0/bin:$PATH + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml diff --git a/README.md b/README.md index 28ce2325..e763c96c 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,44 @@ -# nf-core/atacseq +# ![nf-core/atacseq](docs/images/nf-core-atacseq_logo.png) **ATACSeq peak-calling and differential analysis pipeline.**. -[![Build Status](https://travis-ci.com/nf-core/atacseq.svg?branch=master)](https://travis-ci.com/nf-core/atacseq) -[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A50.32.0-brightgreen.svg)](https://www.nextflow.io/) +[![GitHub Actions CI Status](https://github.com/nf-core/atacseq/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/atacseq/actions) +[![GitHub Actions Linting Status](https://github.com/nf-core/atacseq/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/atacseq/actions) +[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-brightgreen.svg)](https://www.nextflow.io/) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](http://bioconda.github.io/) [![Docker](https://img.shields.io/docker/automated/nfcore/atacseq.svg)](https://hub.docker.com/r/nfcore/atacseq) ## Introduction + The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible. +## Quick Start + +i. Install [`nextflow`](https://nf-co.re/usage/installation) + +ii. Install either [`Docker`](https://docs.docker.com/engine/installation/) or [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) for full pipeline reproducibility (please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles)) + +iii. Download the pipeline and test it on a minimal dataset with a single command + +```bash +nextflow run nf-core/atacseq -profile test, +``` + +> Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. + +iv. Start running your own analysis! + + + +```bash +nextflow run nf-core/atacseq -profile --reads '*_R{1,2}.fastq.gz' --genome GRCh37 +``` + +See [usage docs](docs/usage.md) for all of the available options when running the pipeline. ## Documentation + The nf-core/atacseq pipeline comes with documentation about the pipeline, found in the `docs/` directory: 1. [Installation](https://nf-co.re/usage/installation) @@ -27,4 +53,25 @@ The nf-core/atacseq pipeline comes with documentation about the pipeline, found ## Credits + nf-core/atacseq was originally written by Harshil Patel. + +## Contributions and Support + +If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). + +For further information or help, don't hesitate to get in touch on [Slack](https://nfcore.slack.com/channels/atacseq) (you can join with [this invite](https://nf-co.re/join/slack)). + +## Citation + + + + +You can cite the `nf-core` publication as follows: + +> **The nf-core framework for community-curated bioinformatics pipelines.** +> +> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. +> +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). +> ReadCube: [Full Access Link](https://rdcu.be/b1GjZ) diff --git a/assets/email_template.html b/assets/email_template.html index 1c4f6946..098cd4bd 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -11,6 +11,8 @@

+ +

nf-core/atacseq v${version}

Run Name: $runName

diff --git a/assets/email_template.txt b/assets/email_template.txt index 38059dd2..592f0991 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,6 +1,12 @@ -======================================== - nf-core/atacseq v${version} -======================================== +---------------------------------------------------- + ,--./,-. + ___ __ __ __ ___ /,-._.--~\\ + |\\ | |__ __ / ` / \\ |__) |__ } { + | \\| | \\__, \\__/ | \\ |___ \\`-._,-`-, + `._,._,' + nf-core/atacseq v${version} +---------------------------------------------------- + Run Name: $runName <% if (success){ diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 8e6246d7..c00bd44c 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -3,7 +3,9 @@ report_comment: > analysis pipeline. For information about how to interpret these results, please see the documentation. report_section_order: - nf-core/atacseq-software-versions: + software_versions: order: -1000 + nf-core-atacseq-summary: + order: -1001 export_plots: true diff --git a/assets/nf-core-atacseq_logo.png b/assets/nf-core-atacseq_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4afe1fd4cebe0856d265cb96a28631831476c6ec GIT binary patch literal 12870 zcmcJ$Wl)??@Gc6w0fM`GaJS&@4p|@x?h@Q#aR}~i!4fnC3-0c^!GptMK^I?~!|#7i z)%kKi+`3h_YF??DdS|+8y5H&U=b7ja8j6@`WM~Ko2$;%Ba#{!oh)J*SRd11B@A>R3 z=&uh{7bQJ+1O%*s|1QLIHY{=k1R4ZoIcXhm?n$0suEEE~+wKSYROPZ+GYUIWKl^g4 zpCvl%gh|xCKO}dC<##|hAF6|c<=^;2=VN_a)2ONCgAV0S2@9e&fp2uE-mw^YV2DDsR*`FFWIq0ofRUy|*174*+ zR$2Fo|j;E=GHes-TFxB}Y3MB=ZWN6bCrny5Y|$y(aPsSHB zp^JsxzzwmVo`e1oD zht-t|l=v8%Mwr=3h6JpL4Vv35A#=F(I1 zoc=5=5e)Ii@kvz3k{8 zy@N0HVH%&cv2vHP+f&_=r1mZo5Mf&&bKLN=5eJnucg?V=%<|#iiuSI5-Un{{DiA8k zetzP!&B?W+JD@~hf74E#u~f&XLOj%9=D18wVW;{M5W9FYQfg^;;#K!hR`=YHv6GE)`enN-|6jgqH6Q>Jz=9k!~>ZZ>p=iSbtms?!92AsY1m{c zR*wrYjM#Nz?*y0PPncIe5wx)vGM5MynC{l1w$vun#aSO{SyTTOIA9P$9`_5O8@NX>La?Xkvy)SNZxMZqY$<6DqlbzY|_v&!sVxA6)`vtk5Ri85a zy4AX*I?twgKV=#RWgU~F!xT$=gOdSO?O{4(ntICz6Ddf$#%8jq>01uh;R7`M zscVEd2RVta?7>cU8Ji<+eR<+GV{kydfejFJCh>wc7U4O@J=72}#VmyCDj>R;Yz*%!B4 zY7QK~K@9qm*aXVRS1A}q$cG!a-B7Y=IGsxWY&$2K7Gc>%TpJ>(HP}mZwGw{P{3S*( zNQ!-{lnsX!BaUrfH|HxC4hG_G7$efFO29zlsE~0F4Gp}DOVgfa#T0H6|4D2}jdyC8 z451RPsADyzDmnB6uD>ZaY7zQQ40LL1WPPLLEIIAeb60)CU$S*!q5k|tkxk+f7h8LB zKfrHmho!Zjh{K4$UQ|a`o4pVgu;{0(8@u03KRT_@mxJcTy5I%%VL|Yh4COKCaT;jO zQFHp@@UWyjh(LZ5DCjIcVJ38^Hg}ZfT`E> zKjgL~e~X=(b`Gv#J4^bNoXpyF`jGOdW{_ZAqb(kZoLf;9$^wn8h#jp7*^;US7T(et zq8cFLV$mShve8Jx!oA)|XRosx5cD&X2Fdu~rfhqqqSA3Dq+yURW4s_}`{)Jf)On!O zFu9E_snt6mWnaL-`V+BoDz`h&9*x_LRAnCa)g}+-h9))>>%`v5WYP;zV(4ng(oX)O z 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 Nme-K0mNEVMzX0ts1_=NF literal 0 HcmV?d00001 diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 2d671220..fef351fd 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -8,6 +8,23 @@ Content-Type: text/html; charset=utf-8 $email_html +--nfcoremimeboundary +Content-Type: image/png;name="nf-core-atacseq_logo.png" +Content-Transfer-Encoding: base64 +Content-ID: +Content-Disposition: inline; filename="nf-core-atacseq_logo.png" + +<% out << new File("$baseDir/assets/nf-core-atacseq_logo.png"). + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' ) %> + <% if (mqcFile){ def mqcFileObj = new File("$mqcFile") diff --git a/bin/markdown_to_html.py b/bin/markdown_to_html.py new file mode 100755 index 00000000..57cc4263 --- /dev/null +++ b/bin/markdown_to_html.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +from __future__ import print_function +import argparse +import markdown +import os +import sys + +def convert_markdown(in_fn): + input_md = open(in_fn, mode="r", encoding="utf-8").read() + html = markdown.markdown( + "[TOC]\n" + input_md, + extensions = [ + 'pymdownx.extra', + 'pymdownx.b64', + 'pymdownx.highlight', + 'pymdownx.emoji', + 'pymdownx.tilde', + 'toc' + ], + extension_configs = { + 'pymdownx.b64': { + 'base_path': os.path.dirname(in_fn) + }, + 'pymdownx.highlight': { + 'noclasses': True + }, + 'toc': { + 'title': 'Table of Contents' + } + } + ) + return html + +def wrap_html(contents): + header = """ + + + + + +
+ """ + footer = """ +
+ + + """ + return header + contents + footer + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument('mdfile', type=argparse.FileType('r'), nargs='?', + help='File to convert. Defaults to stdin.') + parser.add_argument('-o', '--out', type=argparse.FileType('w'), + default=sys.stdout, + help='Output file name. Defaults to stdout.') + return parser.parse_args(args) + +def main(args=None): + args = parse_args(args) + converted_md = convert_markdown(args.mdfile.name) + html = wrap_html(converted_md) + args.out.write(html) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/bin/markdown_to_html.r b/bin/markdown_to_html.r deleted file mode 100755 index abe13350..00000000 --- a/bin/markdown_to_html.r +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env Rscript - -# Command line argument processing -args = commandArgs(trailingOnly=TRUE) -if (length(args) < 2) { - stop("Usage: markdown_to_html.r ", call.=FALSE) -} -markdown_fn <- args[1] -output_fn <- args[2] - -# Load / install packages -if (!require("markdown")) { - install.packages("markdown", dependencies=TRUE, repos='http://cloud.r-project.org/') - library("markdown") -} - -base_css_fn <- getOption("markdown.HTML.stylesheet") -base_css <- readChar(base_css_fn, file.info(base_css_fn)$size) -custom_css <- paste(base_css, " -body { - padding: 3em; - margin-right: 350px; - max-width: 100%; -} -#toc { - position: fixed; - right: 20px; - width: 300px; - padding-top: 20px; - overflow: scroll; - height: calc(100% - 3em - 20px); -} -#toc_header { - font-size: 1.8em; - font-weight: bold; -} -#toc > ul { - padding-left: 0; - list-style-type: none; -} -#toc > ul ul { padding-left: 20px; } -#toc > ul > li > a { display: none; } -img { max-width: 800px; } -") - -markdownToHTML( - file = markdown_fn, - output = output_fn, - stylesheet = custom_css, - options = c('toc', 'base64_images', 'highlight_code') -) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index d66a7915..8d2ff376 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -18,14 +18,17 @@ # Search each file using its regex for k, v in regexes.items(): - with open(v[0]) as x: - versions = x.read() - match = re.search(v[1], versions) - if match: - results[k] = "v{}".format(match.group(1)) + try: + with open(v[0]) as x: + versions = x.read() + match = re.search(v[1], versions) + if match: + results[k] = "v{}".format(match.group(1)) + except IOError: + results[k] = False # Remove software set to false in results -for k in results: +for k in list(results): if not results[k]: del(results[k]) diff --git a/conf/awsbatch.config b/conf/awsbatch.config deleted file mode 100644 index 14af5866..00000000 --- a/conf/awsbatch.config +++ /dev/null @@ -1,18 +0,0 @@ -/* - * ------------------------------------------------- - * Nextflow config file for running on AWS batch - * ------------------------------------------------- - * Base config needed for running with -profile awsbatch - */ -params { - config_profile_name = 'AWSBATCH' - config_profile_description = 'AWSBATCH Cloud Profile' - config_profile_contact = 'Alexander Peltzer (@apeltzer)' - config_profile_url = 'https://aws.amazon.com/de/batch/' -} - -aws.region = params.awsregion -process.executor = 'awsbatch' -process.queue = params.awsqueue -executor.awscli = '/home/ec2-user/miniconda/bin/aws' -params.tracedir = './' diff --git a/conf/base.config b/conf/base.config index db12e92d..c9cf6f4f 100644 --- a/conf/base.config +++ b/conf/base.config @@ -13,22 +13,39 @@ process { // TODO nf-core: Check the defaults for all processes cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 8.GB * task.attempt, 'memory' ) } - time = { check_max( 2.h * task.attempt, 'time' ) } + memory = { check_max( 7.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' // Process-specific resource requirements + // NOTE - Only one of the labels below are used in the fastqc process in the main script. + // If possible, it would be nice to keep the same label naming convention when + // adding in your processes. // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors -} - -params { - // Defaults only, expecting to be overwritten - max_memory = 128.GB - max_cpus = 16 - max_time = 240.h - igenomes_base = 's3://ngi-igenomes/igenomes/' + withLabel:process_low { + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 14.GB * task.attempt, 'memory' ) } + time = { check_max( 6.h * task.attempt, 'time' ) } + } + withLabel:process_medium { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 42.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } + withLabel:process_high { + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 84.GB * task.attempt, 'memory' ) } + time = { check_max( 10.h * task.attempt, 'time' ) } + } + withLabel:process_long { + time = { check_max( 20.h * task.attempt, 'time' ) } + } + withName:get_software_versions { + cache = false + } + } diff --git a/conf/igenomes.config b/conf/igenomes.config index d19e61f4..2de92422 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -9,139 +9,412 @@ params { // illumina iGenomes reference file paths - // TODO nf-core: Add new reference types and strip out those that are not needed genomes { 'GRCh37' { - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${baseDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${baseDir}/assets/blacklists/hg38-blacklist.bed" } 'GRCm38' { - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${baseDir}/assets/blacklists/GRCm38-blacklist.bed" } 'TAIR10' { - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" } 'EB2' { - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" } 'UMD3.1' { - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" } 'WBcel235' { - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" } 'CanFam3.1' { - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" } 'GRCz10' { - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" } 'BDGP6' { - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" } 'EquCab2' { - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" } 'EB1' { - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } 'Galgal4' { - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" } 'Gm01' { - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" } 'Mmul_1' { - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" } 'IRGSP-1.0' { - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" } 'CHIMP2.1.4' { - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" } 'Rnor_6.0' { - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" } 'R64-1-1' { - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" } 'EF2' { - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" } 'Sbi1' { - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" } 'Sscrofa10.2' { - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" } 'AGPv3' { - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${baseDir}/assets/blacklists/hg38-blacklist.bed" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${baseDir}/assets/blacklists/hg19-blacklist.bed" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${baseDir}/assets/blacklists/mm10-blacklist.bed" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" } } } diff --git a/conf/test.config b/conf/test.config index c77002df..afce8701 100644 --- a/conf/test.config +++ b/conf/test.config @@ -4,20 +4,21 @@ * ------------------------------------------------- * Defines bundled input files and everything required * to run a fast and simple test. Use as follows: - * nextflow run nf-core/atacseq -profile test + * nextflow run nf-core/atacseq -profile test, */ params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on Travis + // Limit resources so that this can run on GitHub Actions max_cpus = 2 max_memory = 6.GB max_time = 48.h + // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - singleEnd = false + single_end = false readPaths = [ ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] diff --git a/docs/images/nf-core-atacseq_logo.png b/docs/images/nf-core-atacseq_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..87a25dab65a107691d52b0590b81d0125c4d1ece GIT binary patch literal 22032 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

yYFH1Jo+^J1$6I&%zTExeBI20^ceywK*>%`-I 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 literal 0 HcmV?d00001 diff --git a/docs/output.md b/docs/output.md index ebed1ce6..d374e010 100644 --- a/docs/output.md +++ b/docs/output.md @@ -5,6 +5,7 @@ This document describes the output produced by the pipeline. Most of the plots a ## Pipeline overview + The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: @@ -12,6 +13,7 @@ and processes data using the following steps: * [MultiQC](#multiqc) - aggregate report, describing results of the whole pipeline ## FastQC + [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%T/A/G/C). You get information about adapter contamination and other overrepresented sequences. For further reading and documentation see the [FastQC help](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). @@ -25,8 +27,8 @@ For further reading and documentation see the [FastQC help](http://www.bioinform * `zips/sample_fastqc.zip` * zip file containing the FastQC report, tab-delimited data file and plot images - ## MultiQC + [MultiQC](http://multiqc.info) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in within the report data directory. The pipeline has special steps which allow the software versions used to be reported in the MultiQC output for future traceability. diff --git a/docs/usage.md b/docs/usage.md index 7f9b905b..9257b8e8 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,8 +2,6 @@ ## Table of contents - - * [Table of contents](#table-of-contents) * [Introduction](#introduction) * [Running the pipeline](#running-the-pipeline) @@ -12,20 +10,23 @@ * [Main arguments](#main-arguments) * [`-profile`](#-profile) * [`--reads`](#--reads) - * [`--singleEnd`](#--singleend) + * [`--single_end`](#--single_end) * [Reference genomes](#reference-genomes) * [`--genome` (using iGenomes)](#--genome-using-igenomes) * [`--fasta`](#--fasta) - * [`--igenomesIgnore`](#--igenomesignore) + * [`--igenomes_ignore`](#--igenomes_ignore) * [Job resources](#job-resources) * [Automatic resubmission](#automatic-resubmission) * [Custom resource requests](#custom-resource-requests) * [AWS Batch specific parameters](#aws-batch-specific-parameters) * [`--awsqueue`](#--awsqueue) * [`--awsregion`](#--awsregion) + * [`--awscli`](#--awscli) * [Other command line parameters](#other-command-line-parameters) * [`--outdir`](#--outdir) * [`--email`](#--email) + * [`--email_on_fail`](#--email_on_fail) + * [`--max_multiqc_email_size`](#--max_multiqc_email_size) * [`-name`](#-name) * [`-resume`](#-resume) * [`-c`](#-c) @@ -37,10 +38,9 @@ * [`--plaintext_email`](#--plaintext_email) * [`--monochrome_logs`](#--monochrome_logs) * [`--multiqc_config`](#--multiqc_config) - - ## Introduction + Nextflow handles job submissions on SLURM or other environments, and supervises running the jobs. Thus the Nextflow process must run until the pipeline is finished. We recommend that you put the process running in the background through `screen` / `tmux` or similar tool. Alternatively you can run nextflow within a cluster job submitted your job scheduler. It is recommended to limit the Nextflow Java virtual machines memory. We recommend adding the following line to your environment (typically in `~/.bashrc` or `~./bash_profile`): @@ -52,6 +52,7 @@ NXF_OPTS='-Xms1g -Xmx4g' ## Running the pipeline + The typical command for running the pipeline is as follows: ```bash @@ -70,6 +71,7 @@ results # Finished results (configurable, see below) ``` ### Updating the pipeline + When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash @@ -77,31 +79,40 @@ nextflow pull nf-core/atacseq ``` ### Reproducibility + It's a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/atacseq releases page](https://github.com/nf-core/atacseq/releases) and find the latest version number - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. - ## Main arguments ### `-profile` -Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. Note that multiple profiles can be loaded, for example: `-profile docker` - the order of arguments is important! -If `-profile` is not specified at all the pipeline will be run locally and expects all software to be installed and available on the `PATH`. +Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. + +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Conda) - see below. + +> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. + +The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). + +Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! +They are loaded in sequence, so later profiles can overwrite earlier profiles. + +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended. -* `awsbatch` - * A generic configuration profile to be used with AWS Batch. -* `conda` - * A generic configuration profile to be used with [conda](https://conda.io/docs/) - * Pulls most software from [Bioconda](https://bioconda.github.io/) * `docker` * A generic configuration profile to be used with [Docker](http://docker.com/) * Pulls software from dockerhub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) * `singularity` * A generic configuration profile to be used with [Singularity](http://singularity.lbl.gov/) * Pulls software from DockerHub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) +* `conda` + * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker or Singularity. + * A generic configuration profile to be used with [Conda](https://conda.io/docs/) + * Pulls most software from [Bioconda](https://bioconda.github.io/) * `test` * A profile with a complete configuration for automated testing * Includes links to test data so needs no other parameters @@ -109,6 +120,7 @@ If `-profile` is not specified at all the pipeline will be run locally and expec ### `--reads` + Use this to specify the location of your input FastQ files. For example: ```bash @@ -123,21 +135,22 @@ Please note the following requirements: If left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz` -### `--singleEnd` -By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--singleEnd` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--reads`. For example: +### `--single_end` + +By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--single_end` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--reads`. For example: ```bash ---singleEnd --reads '*.fastq' +--single_end --reads '*.fastq' ``` It is not possible to run a mixture of single-end and paired-end files in one run. - ## Reference genomes The pipeline config files come bundled with paths to the illumina iGenomes reference index files. If running with docker or AWS, the configuration is set up to use the [AWS-iGenomes](https://ewels.github.io/AWS-iGenomes/) resource. ### `--genome` (using iGenomes) + There are 31 different species supported in the iGenomes references. To run the pipeline, you must specify which to use with the `--genome` flag. You can find the keys to specify the genomes in the [iGenomes config file](../conf/igenomes.config). Common genomes that are supported are: @@ -171,33 +184,48 @@ params { ``` + ### `--fasta` + If you prefer, you can specify the full path to your reference genome when you run the pipeline: ```bash --fasta '[path to Fasta reference]' ``` -### `--igenomesIgnore` +### `--igenomes_ignore` + Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`. ## Job resources + ### Automatic resubmission + Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with an error code of `143` (exceeded requested resources) it will automatically resubmit with higher requests (2 x original, then 3 x original). If it still fails after three times then the pipeline is stopped. ### Custom resource requests + Wherever process-specific requirements are set in the pipeline, the default value can be changed by creating a custom config file. See the files hosted at [`nf-core/configs`](https://github.com/nf-core/configs/tree/master/conf) for examples. If you are likely to be running `nf-core` pipelines regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter (see definition below). You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. -If you have any questions or issues please send us a message on [Slack](https://nf-core-invite.herokuapp.com/). +If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack). ## AWS Batch specific parameters -Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use the `-awsbatch` profile and then specify all of the following parameters. + +Running the pipeline on AWS Batch requires a couple of specific parameters to be set according to your AWS Batch configuration. Please use [`-profile awsbatch`](https://github.com/nf-core/configs/blob/master/conf/awsbatch.config) and then specify all of the following parameters. + ### `--awsqueue` + The JobQueue that you intend to use on AWS Batch. + ### `--awsregion` -The AWS region to run your job in. Default is set to `eu-west-1` but can be adjusted to your needs. + +The AWS region in which to run your job. Default is set to `eu-west-1` but can be adjusted to your needs. + +### `--awscli` + +The [AWS CLI](https://www.nextflow.io/docs/latest/awscloud.html#aws-cli-installation) path in your custom AMI. Default: `/home/ec2-user/miniconda/bin/aws`. Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a S3 storage bucket of your choice - you'll get an error message notifying you if you didn't. @@ -206,12 +234,23 @@ Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a ### `--outdir` + The output directory where the results will be saved. ### `--email` + Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run. +### `--email_on_fail` + +This works exactly as with `--email`, except emails are only sent if the workflow is not successful. + +### `--max_multiqc_email_size` + +Threshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB). + ### `-name` + Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic. This is used in the MultiQC report (if not default) and in the summary HTML / e-mail (always). @@ -219,6 +258,7 @@ This is used in the MultiQC report (if not default) and in the summary HTML / e- **NB:** Single hyphen (core Nextflow option) ### `-resume` + Specify this when restarting a pipeline. Nextflow will used cached results from any pipeline steps where the inputs are the same, continuing from where it got to previously. You can also supply a run name to resume a specific run: `-resume [run-name]`. Use the `nextflow log` command to show previous run names. @@ -226,6 +266,7 @@ You can also supply a run name to resume a specific run: `-resume [run-name]`. U **NB:** Single hyphen (core Nextflow option) ### `-c` + Specify the path to a specific config file (this is a core NextFlow command). **NB:** Single hyphen (core Nextflow option) @@ -233,7 +274,8 @@ Specify the path to a specific config file (this is a core NextFlow command). Note - you can use this to override pipeline defaults. ### `--custom_config_version` -Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default is set to `master`. + +Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`. ```bash ## Download and use config file with following git commid id @@ -241,6 +283,7 @@ Provide git commit id for custom Institutional configs hosted at `nf-core/config ``` ### `--custom_config_base` + If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the @@ -261,22 +304,28 @@ nextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs > files + singularity containers + institutional configs in one go for you, to make this process easier. ### `--max_memory` + Use to set a top-limit for the default memory requirement for each process. Should be a string in the format integer-unit. eg. `--max_memory '8.GB'` ### `--max_time` + Use to set a top-limit for the default time requirement for each process. Should be a string in the format integer-unit. eg. `--max_time '2.h'` ### `--max_cpus` + Use to set a top-limit for the default CPU requirement for each process. Should be a string in the format integer-unit. eg. `--max_cpus 1` ### `--plaintext_email` + Set to receive plain-text e-mails instead of HTML formatted. ### `--monochrome_logs` + Set to disable colourful command line output and live life in monochrome. ### `--multiqc_config` + Specify a path to a custom MultiQC configuration file. diff --git a/environment.yml b/environment.yml index 2fe4a741..e20eb85f 100644 --- a/environment.yml +++ b/environment.yml @@ -1,11 +1,15 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-atacseq-1.0.0 +name: nf-core-atacseq-1.1.1dev channels: - conda-forge - bioconda - defaults dependencies: + - conda-forge::python=3.7.3 + - conda-forge::markdown=3.1.1 + - conda-forge::pymdown-extensions=6.0 + - conda-forge::pygments=2.5.2 # TODO nf-core: Add required software dependencies here - - fastqc=0.11.8 - - multiqc=1.7 + - bioconda::fastqc=0.11.8 + - bioconda::multiqc=1.7 diff --git a/main.nf b/main.nf index ff53c27e..0c5f289b 100644 --- a/main.nf +++ b/main.nf @@ -9,7 +9,6 @@ ---------------------------------------------------------------------------------------- */ - def helpMessage() { // TODO nf-core: Add to this help message with new command line parameters log.info nfcoreHeader() @@ -22,39 +21,41 @@ def helpMessage() { nextflow run nf-core/atacseq --reads '*_R{1,2}.fastq.gz' -profile docker Mandatory arguments: - --reads Path to input data (must be surrounded with quotes) - -profile Configuration profile to use. Can use multiple (comma separated) - Available: conda, docker, singularity, awsbatch, test and more. + --reads [file] Path to input data (must be surrounded with quotes) + -profile [str] Configuration profile to use. Can use multiple (comma separated) + Available: conda, docker, singularity, test, awsbatch, and more Options: - --genome Name of iGenomes reference - --singleEnd Specifies that the input is single end reads + --genome [str] Name of iGenomes reference + --single_end [bool] Specifies that the input is single-end reads - References If not specified in the configuration file or you wish to overwrite any of the references. - --fasta Path to Fasta reference + References If not specified in the configuration file or you wish to overwrite any of the references + --fasta [file] Path to fasta reference Other options: - --outdir The output directory where the results will be saved - --email Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits - --maxMultiqcEmailFileSize Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) - -name Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic. + --outdir [file] The output directory where the results will be saved + --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits + --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful + --max_multiqc_email_size [str] Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) + -name [str] Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic AWSBatch options: - --awsqueue The AWSBatch JobQueue that needs to be set when running on AWSBatch - --awsregion The AWS Region for your AWS Batch job to run on + --awsqueue [str] The AWSBatch JobQueue that needs to be set when running on AWSBatch + --awsregion [str] The AWS Region for your AWS Batch job to run on + --awscli [str] Path to the AWS CLI tool """.stripIndent() } -/* - * SET UP CONFIGURATION VARIABLES - */ - -// Show help emssage -if (params.help){ +// Show help message +if (params.help) { helpMessage() exit 0 } +/* + * SET UP CONFIGURATION VARIABLES + */ + // Check if genome exists in the config file if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(", ")}" @@ -62,103 +63,101 @@ if (params.genomes && params.genome && !params.genomes.containsKey(params.genome // TODO nf-core: Add any reference files that are needed // Configurable reference genomes -fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false -if ( params.fasta ){ - fasta = file(params.fasta) - if( !fasta.exists() ) exit 1, "Fasta file not found: ${params.fasta}" -} // // NOTE - THIS IS NOT USED IN THIS PIPELINE, EXAMPLE ONLY -// If you want to use the above in a process, define the following: +// If you want to use the channel below in a process, define the following: // input: -// file fasta from fasta +// file fasta from ch_fasta // - +params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false +if (params.fasta) { ch_fasta = file(params.fasta, checkIfExists: true) } // Has the run name been specified by the user? // this has the bonus effect of catching both -name and --name custom_runName = params.name -if( !(workflow.runName ==~ /[a-z]+_[a-z]+/) ){ - custom_runName = workflow.runName +if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { + custom_runName = workflow.runName } - -if( workflow.profile == 'awsbatch') { - // AWSBatch sanity checking - if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (workflow.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." +if (workflow.profile.contains('awsbatch')) { + // AWSBatch sanity checking + if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" + // Check outdir paths to be S3 buckets if running on AWSBatch + // related: https://github.com/nextflow-io/nextflow/issues/813 + if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" + // Prevent trace files to be stored on S3 since S3 does not support rolling files. + if (params.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." } // Stage config files -ch_multiqc_config = Channel.fromPath(params.multiqc_config) -ch_output_docs = Channel.fromPath("$baseDir/docs/output.md") +ch_multiqc_config = file("$baseDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() +ch_output_docs = file("$baseDir/docs/output.md", checkIfExists: true) /* * Create a channel for input read files */ -if(params.readPaths){ - if(params.singleEnd){ +if (params.readPaths) { + if (params.single_end) { Channel .from(params.readPaths) - .map { row -> [ row[0], [file(row[1][0])]] } + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true) ] ] } .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { read_files_fastqc; read_files_trimming } + .into { ch_read_files_fastqc; ch_read_files_trimming } } else { Channel .from(params.readPaths) - .map { row -> [ row[0], [file(row[1][0]), file(row[1][1])]] } + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true), file(row[1][1], checkIfExists: true) ] ] } .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { read_files_fastqc; read_files_trimming } + .into { ch_read_files_fastqc; ch_read_files_trimming } } } else { Channel - .fromFilePairs( params.reads, size: params.singleEnd ? 1 : 2 ) - .ifEmpty { exit 1, "Cannot find any reads matching: ${params.reads}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --singleEnd on the command line." } - .into { read_files_fastqc; read_files_trimming } + .fromFilePairs(params.reads, size: params.single_end ? 1 : 2) + .ifEmpty { exit 1, "Cannot find any reads matching: ${params.reads}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --single_end on the command line." } + .into { ch_read_files_fastqc; ch_read_files_trimming } } - // Header log info log.info nfcoreHeader() def summary = [:] -if(workflow.revision) summary['Pipeline Release'] = workflow.revision +if (workflow.revision) summary['Pipeline Release'] = workflow.revision summary['Run Name'] = custom_runName ?: workflow.runName // TODO nf-core: Report custom parameters here summary['Reads'] = params.reads summary['Fasta Ref'] = params.fasta -summary['Data Type'] = params.singleEnd ? 'Single-End' : 'Paired-End' +summary['Data Type'] = params.single_end ? 'Single-End' : 'Paired-End' summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" -if(workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" +if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" summary['Output dir'] = params.outdir summary['Launch dir'] = workflow.launchDir summary['Working dir'] = workflow.workDir summary['Script dir'] = workflow.projectDir summary['User'] = workflow.userName -if(workflow.profile == 'awsbatch'){ - summary['AWS Region'] = params.awsregion - summary['AWS Queue'] = params.awsqueue +if (workflow.profile.contains('awsbatch')) { + summary['AWS Region'] = params.awsregion + summary['AWS Queue'] = params.awsqueue + summary['AWS CLI'] = params.awscli } summary['Config Profile'] = workflow.profile -if(params.config_profile_description) summary['Config Description'] = params.config_profile_description -if(params.config_profile_contact) summary['Config Contact'] = params.config_profile_contact -if(params.config_profile_url) summary['Config URL'] = params.config_profile_url -if(params.email) { - summary['E-mail Address'] = params.email - summary['MultiQC maxsize'] = params.maxMultiqcEmailFileSize +if (params.config_profile_description) summary['Config Description'] = params.config_profile_description +if (params.config_profile_contact) summary['Config Contact'] = params.config_profile_contact +if (params.config_profile_url) summary['Config URL'] = params.config_profile_url +if (params.email || params.email_on_fail) { + summary['E-mail Address'] = params.email + summary['E-mail on failure'] = params.email_on_fail + summary['MultiQC maxsize'] = params.max_multiqc_email_size } log.info summary.collect { k,v -> "${k.padRight(18)}: $v" }.join("\n") -log.info "\033[2m----------------------------------------------------\033[0m" +log.info "-\033[2m--------------------------------------------------\033[0m-" // Check the hostnames against configured profiles checkHostname() -def create_workflow_summary(summary) { - def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') - yaml_file.text = """ +Channel.from(summary.collect{ [it.key, it.value] }) + .map { k,v -> "

$k
${v ?: 'N/A'}
" } + .reduce { a, b -> return [a, b].join("\n ") } + .map { x -> """ id: 'nf-core-atacseq-summary' description: " - this information is collected when the pipeline is started." section_name: 'nf-core/atacseq Workflow Summary' @@ -166,26 +165,23 @@ def create_workflow_summary(summary) { plot_type: 'html' data: |
-${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} + $x
- """.stripIndent() - - return yaml_file -} - + """.stripIndent() } + .set { ch_workflow_summary } /* * Parse software version numbers */ process get_software_versions { publishDir "${params.outdir}/pipeline_info", mode: 'copy', - saveAs: {filename -> - if (filename.indexOf(".csv") > 0) filename - else null - } + saveAs: { filename -> + if (filename.indexOf(".csv") > 0) filename + else null + } output: - file 'software_versions_mqc.yaml' into software_versions_yaml + file 'software_versions_mqc.yaml' into ch_software_versions_yaml file "software_versions.csv" script: @@ -199,30 +195,29 @@ process get_software_versions { """ } - - /* * STEP 1 - FastQC */ process fastqc { tag "$name" + label 'process_medium' publishDir "${params.outdir}/fastqc", mode: 'copy', - saveAs: {filename -> filename.indexOf(".zip") > 0 ? "zips/$filename" : "$filename"} + saveAs: { filename -> + filename.indexOf(".zip") > 0 ? "zips/$filename" : "$filename" + } input: - set val(name), file(reads) from read_files_fastqc + set val(name), file(reads) from ch_read_files_fastqc output: - file "*_fastqc.{zip,html}" into fastqc_results + file "*_fastqc.{zip,html}" into ch_fastqc_results script: """ - fastqc -q $reads + fastqc --quiet --threads $task.cpus $reads """ } - - /* * STEP 2 - MultiQC */ @@ -230,28 +225,28 @@ process multiqc { publishDir "${params.outdir}/MultiQC", mode: 'copy' input: - file multiqc_config from ch_multiqc_config + file (multiqc_config) from ch_multiqc_config + file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) // TODO nf-core: Add in log files from your new processes for MultiQC to find! - file ('fastqc/*') from fastqc_results.collect().ifEmpty([]) - file ('software_versions/*') from software_versions_yaml.collect() - file workflow_summary from create_workflow_summary(summary) + file ('fastqc/*') from ch_fastqc_results.collect().ifEmpty([]) + file ('software_versions/*') from ch_software_versions_yaml.collect() + file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") output: - file "*multiqc_report.html" into multiqc_report + file "*multiqc_report.html" into ch_multiqc_report file "*_data" file "multiqc_plots" script: rtitle = custom_runName ? "--title \"$custom_runName\"" : '' rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' + custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' // TODO nf-core: Specify which MultiQC modules to use with -m for a faster run time """ - multiqc -f $rtitle $rfilename --config $multiqc_config . + multiqc -f $rtitle $rfilename $custom_config_file . """ } - - /* * STEP 3 - Output Description HTML */ @@ -266,12 +261,10 @@ process output_documentation { script: """ - markdown_to_html.r $output_docs results_description.html + markdown_to_html.py $output_docs -o results_description.html """ } - - /* * Completion e-mail notification */ @@ -279,8 +272,8 @@ workflow.onComplete { // Set up the e-mail variables def subject = "[nf-core/atacseq] Successful: $workflow.runName" - if(!workflow.success){ - subject = "[nf-core/atacseq] FAILED: $workflow.runName" + if (!workflow.success) { + subject = "[nf-core/atacseq] FAILED: $workflow.runName" } def email_fields = [:] email_fields['version'] = workflow.manifest.version @@ -298,21 +291,20 @@ workflow.onComplete { email_fields['summary']['Date Completed'] = workflow.complete email_fields['summary']['Pipeline script file path'] = workflow.scriptFile email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId - if(workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository - if(workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId - if(workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision - if(workflow.container) email_fields['summary']['Docker image'] = workflow.container + if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision email_fields['summary']['Nextflow Version'] = workflow.nextflow.version email_fields['summary']['Nextflow Build'] = workflow.nextflow.build email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - // TODO nf-core: If not using MultiQC, strip out this code (including params.maxMultiqcEmailFileSize) + // TODO nf-core: If not using MultiQC, strip out this code (including params.max_multiqc_email_size) // On success try attach the multiqc report def mqc_report = null try { if (workflow.success) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList){ + mqc_report = ch_multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList) { log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" mqc_report = mqc_report[0] } @@ -321,6 +313,12 @@ workflow.onComplete { log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" } + // Check if we are only sending emails on failure + email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + // Render the TXT template def engine = new groovy.text.GStringTemplateEngine() def tf = new File("$baseDir/assets/email_template.txt") @@ -333,89 +331,89 @@ workflow.onComplete { def email_html = html_template.toString() // Render the sendmail template - def smail_fields = [ email: params.email, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.maxMultiqcEmailFileSize.toBytes() ] + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] def sf = new File("$baseDir/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) def sendmail_html = sendmail_template.toString() // Send the HTML e-mail - if (params.email) { + if (email_address) { try { - if( params.plaintext_email ){ throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "[nf-core/atacseq] Sent summary e-mail to $params.email (sendmail)" + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" } catch (all) { - // Catch failures and try with plaintext - [ 'mail', '-s', subject, params.email ].execute() << email_txt - log.info "[nf-core/atacseq] Sent summary e-mail to $params.email (mail)" + // Catch failures and try with plaintext + [ 'mail', '-s', subject, email_address ].execute() << email_txt + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" } } // Write summary e-mail HTML to a file - def output_d = new File( "${params.outdir}/pipeline_info/" ) - if( !output_d.exists() ) { - output_d.mkdirs() + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() } - def output_hf = new File( output_d, "pipeline_report.html" ) + def output_hf = new File(output_d, "pipeline_report.html") output_hf.withWriter { w -> w << email_html } - def output_tf = new File( output_d, "pipeline_report.txt" ) + def output_tf = new File(output_d, "pipeline_report.txt") output_tf.withWriter { w -> w << email_txt } - c_reset = params.monochrome_logs ? '' : "\033[0m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_red = params.monochrome_logs ? '' : "\033[0;31m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; - if (workflow.stats.ignoredCountFmt > 0 && workflow.success) { - log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" - log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCountFmt} ${c_reset}" - log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCountFmt} ${c_reset}" + if (workflow.stats.ignoredCount > 0 && workflow.success) { + log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" + log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" + log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" } - if(workflow.success){ - log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" + if (workflow.success) { + log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" } else { checkHostname() - log.info "${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}" + log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" } } -def nfcoreHeader(){ +def nfcoreHeader() { // Log colors ANSI codes - c_reset = params.monochrome_logs ? '' : "\033[0m"; - c_dim = params.monochrome_logs ? '' : "\033[2m"; c_black = params.monochrome_logs ? '' : "\033[0;30m"; - c_green = params.monochrome_logs ? '' : "\033[0;32m"; - c_yellow = params.monochrome_logs ? '' : "\033[0;33m"; c_blue = params.monochrome_logs ? '' : "\033[0;34m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; c_cyan = params.monochrome_logs ? '' : "\033[0;36m"; + c_dim = params.monochrome_logs ? '' : "\033[2m"; + c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; c_white = params.monochrome_logs ? '' : "\033[0;37m"; + c_yellow = params.monochrome_logs ? '' : "\033[0;33m"; - return """ ${c_dim}----------------------------------------------------${c_reset} + return """ -${c_dim}--------------------------------------------------${c_reset}- ${c_green},--.${c_black}/${c_green},-.${c_reset} ${c_blue} ___ __ __ __ ___ ${c_green}/,-._.--~\'${c_reset} ${c_blue} |\\ | |__ __ / ` / \\ |__) |__ ${c_yellow}} {${c_reset} ${c_blue} | \\| | \\__, \\__/ | \\ |___ ${c_green}\\`-._,-`-,${c_reset} ${c_green}`._,._,\'${c_reset} ${c_purple} nf-core/atacseq v${workflow.manifest.version}${c_reset} - ${c_dim}----------------------------------------------------${c_reset} + -${c_dim}--------------------------------------------------${c_reset}- """.stripIndent() } -def checkHostname(){ +def checkHostname() { def c_reset = params.monochrome_logs ? '' : "\033[0m" def c_white = params.monochrome_logs ? '' : "\033[0;37m" def c_red = params.monochrome_logs ? '' : "\033[1;91m" def c_yellow_bold = params.monochrome_logs ? '' : "\033[1;93m" - if(params.hostnames){ + if (params.hostnames) { def hostname = "hostname".execute().text.trim() params.hostnames.each { prof, hnames -> hnames.each { hname -> - if(hostname.contains(hname) && !workflow.profile.contains(prof)){ + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { log.error "====================================================\n" + " ${c_red}WARNING!${c_reset} You are running with `-profile $workflow.profile`\n" + " but your machine hostname is ${c_white}'$hostname'${c_reset}\n" + diff --git a/nextflow.config b/nextflow.config index 050b5d8f..eba1de20 100644 --- a/nextflow.config +++ b/nextflow.config @@ -10,29 +10,35 @@ params { // Workflow flags // TODO nf-core: Specify your pipeline's command line flags + genome = false reads = "data/*{1,2}.fastq.gz" - singleEnd = false + single_end = false outdir = './results' // Boilerplate options name = false - multiqc_config = "$baseDir/assets/multiqc_config.yaml" + multiqc_config = false email = false - maxMultiqcEmailFileSize = 25.MB + email_on_fail = false + max_multiqc_email_size = 25.MB plaintext_email = false monochrome_logs = false help = false - igenomes_base = "./iGenomes" + igenomes_base = 's3://ngi-igenomes/igenomes/' tracedir = "${params.outdir}/pipeline_info" - awsqueue = false - awsregion = 'eu-west-1' - igenomesIgnore = false + igenomes_ignore = false custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = false config_profile_description = false config_profile_contact = false config_profile_url = false + + // Defaults only, expecting to be overwritten + max_memory = 128.GB + max_cpus = 16 + max_time = 240.h + } // Container slug. Stable releases should specify release tag! @@ -50,19 +56,33 @@ try { } profiles { - awsbatch { includeConfig 'conf/awsbatch.config' } conda { process.conda = "$baseDir/environment.yml" } debug { process.beforeScript = 'echo $HOSTNAME' } - docker { docker.enabled = true } - singularity { singularity.enabled = true } + docker { + docker.enabled = true + // Avoid this error: + // WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + // Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351 + // once this is established and works well, nextflow might implement this behavior as new default. + docker.runOptions = '-u \$(id -u):\$(id -g)' + } + singularity { + singularity.enabled = true + singularity.autoMounts = true + } test { includeConfig 'conf/test.config' } } // Load igenomes.config if required -if(!params.igenomesIgnore){ +if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } +// Export this variable to prevent local Python libraries from conflicting with those in the container +env { + PYTHONNOUSERSITE = 1 +} + // Capture exit codes from upstream processes when piping process.shell = ['/bin/bash', '-euo', 'pipefail'] @@ -89,16 +109,16 @@ manifest { homePage = 'https://github.com/nf-core/atacseq' description = 'ATACSeq peak-calling and differential analysis pipeline.' mainScript = 'main.nf' - nextflowVersion = '>=0.32.0' - version = '1.0.0' + nextflowVersion = '>=19.10.0' + version = '1.1.1dev' } // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { - if(type == 'memory'){ + if (type == 'memory') { try { - if(obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) + if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) return params.max_memory as nextflow.util.MemoryUnit else return obj @@ -106,9 +126,9 @@ def check_max(obj, type) { println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" return obj } - } else if(type == 'time'){ + } else if (type == 'time') { try { - if(obj.compareTo(params.max_time as nextflow.util.Duration) == 1) + if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) return params.max_time as nextflow.util.Duration else return obj @@ -116,7 +136,7 @@ def check_max(obj, type) { println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" return obj } - } else if(type == 'cpus'){ + } else if (type == 'cpus') { try { return Math.min( obj, params.max_cpus as int ) } catch (all) { From f85dca520cb035cd346132ce749549abd838e784 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 21 Feb 2020 16:22:26 +0000 Subject: [PATCH 095/226] Resolve conflicts --- CHANGELOG.md | 1 + main.nf | 254 +++------------------------------------------------ 2 files changed, 15 insertions(+), 240 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1691b0db..a48bb084 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * Added GitHub Actions CI tests +* Update template to tools `1.9` ### `Fixed` diff --git a/main.nf b/main.nf index 88b60b10..43800440 100644 --- a/main.nf +++ b/main.nf @@ -140,6 +140,8 @@ if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { //////////////////////////////////////////////////// // Pipeline config +ch_multiqc_config = file("$baseDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() ch_output_docs = file("$baseDir/docs/output.md", checkIfExists: true) // JSON files required by BAMTools for alignment filtering @@ -150,7 +152,6 @@ if (params.single_end) { } // Header files for MultiQC -ch_multiqc_config = file(params.multiqc_config, checkIfExists: true) ch_mlib_peak_count_header = file("$baseDir/assets/multiqc/mlib_peak_count_header.txt", checkIfExists: true) ch_mlib_frip_score_header = file("$baseDir/assets/multiqc/mlib_frip_score_header.txt", checkIfExists: true) ch_mlib_peak_annotation_header = file("$baseDir/assets/multiqc/mlib_peak_annotation_header.txt", checkIfExists: true) @@ -1258,81 +1259,6 @@ process MergedLibConsensusPeakSetAnnotate { output: file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate -<<<<<<< HEAD - Mandatory arguments: - --reads [file] Path to input data (must be surrounded with quotes) - -profile [str] Configuration profile to use. Can use multiple (comma separated) - Available: conda, docker, singularity, test, awsbatch, and more - - Options: - --genome [str] Name of iGenomes reference - --single_end [bool] Specifies that the input is single-end reads - - References If not specified in the configuration file or you wish to overwrite any of the references - --fasta [file] Path to fasta reference - - Other options: - --outdir [file] The output directory where the results will be saved - --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits - --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful - --max_multiqc_email_size [str] Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) - -name [str] Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic - - AWSBatch options: - --awsqueue [str] The AWSBatch JobQueue that needs to be set when running on AWSBatch - --awsregion [str] The AWS Region for your AWS Batch job to run on - --awscli [str] Path to the AWS CLI tool - """.stripIndent() -} - -// Show help message -if (params.help) { - helpMessage() - exit 0 -} - -/* - * SET UP CONFIGURATION VARIABLES - */ - -// Check if genome exists in the config file -if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(", ")}" -} - -// TODO nf-core: Add any reference files that are needed -// Configurable reference genomes -// -// NOTE - THIS IS NOT USED IN THIS PIPELINE, EXAMPLE ONLY -// If you want to use the channel below in a process, define the following: -// input: -// file fasta from ch_fasta -// -params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false -if (params.fasta) { ch_fasta = file(params.fasta, checkIfExists: true) } - -// Has the run name been specified by the user? -// this has the bonus effect of catching both -name and --name -custom_runName = params.name -if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { - custom_runName = workflow.runName -} - -if (workflow.profile.contains('awsbatch')) { - // AWSBatch sanity checking - if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (params.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." -} - -// Stage config files -ch_multiqc_config = file("$baseDir/assets/multiqc_config.yaml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() -ch_output_docs = file("$baseDir/docs/output.md", checkIfExists: true) -======= script: prefix = "consensus_peaks.mLb.clN" """ @@ -1494,66 +1420,10 @@ process MergedLibAtaqvMkarv { /* -- -- */ /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ->>>>>>> dev /* * STEP 7 Merge library BAM files across all replicates */ -<<<<<<< HEAD -if (params.readPaths) { - if (params.single_end) { - Channel - .from(params.readPaths) - .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true) ] ] } - .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { ch_read_files_fastqc; ch_read_files_trimming } - } else { - Channel - .from(params.readPaths) - .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true), file(row[1][1], checkIfExists: true) ] ] } - .ifEmpty { exit 1, "params.readPaths was empty - no input files supplied" } - .into { ch_read_files_fastqc; ch_read_files_trimming } - } -} else { - Channel - .fromFilePairs(params.reads, size: params.single_end ? 1 : 2) - .ifEmpty { exit 1, "Cannot find any reads matching: ${params.reads}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --single_end on the command line." } - .into { ch_read_files_fastqc; ch_read_files_trimming } -} - -// Header log info -log.info nfcoreHeader() -def summary = [:] -if (workflow.revision) summary['Pipeline Release'] = workflow.revision -summary['Run Name'] = custom_runName ?: workflow.runName -// TODO nf-core: Report custom parameters here -summary['Reads'] = params.reads -summary['Fasta Ref'] = params.fasta -summary['Data Type'] = params.single_end ? 'Single-End' : 'Paired-End' -summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" -if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" -summary['Output dir'] = params.outdir -summary['Launch dir'] = workflow.launchDir -summary['Working dir'] = workflow.workDir -summary['Script dir'] = workflow.projectDir -summary['User'] = workflow.userName -if (workflow.profile.contains('awsbatch')) { - summary['AWS Region'] = params.awsregion - summary['AWS Queue'] = params.awsqueue - summary['AWS CLI'] = params.awscli -} -summary['Config Profile'] = workflow.profile -if (params.config_profile_description) summary['Config Description'] = params.config_profile_description -if (params.config_profile_contact) summary['Config Contact'] = params.config_profile_contact -if (params.config_profile_url) summary['Config URL'] = params.config_profile_url -if (params.email || params.email_on_fail) { - summary['E-mail Address'] = params.email - summary['E-mail on failure'] = params.email_on_fail - summary['MultiQC maxsize'] = params.max_multiqc_email_size -} -log.info summary.collect { k,v -> "${k.padRight(18)}: $v" }.join("\n") -log.info "-\033[2m--------------------------------------------------\033[0m-" -======= ch_mlib_rm_orphan_bam_mrep .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } .groupTuple(by: [0]) @@ -1652,28 +1522,10 @@ process MergedRepBigWig { else if (filename.endsWith(".bigWig")) "$filename" else null } ->>>>>>> dev when: !params.skip_merge_replicates && replicatesExist -<<<<<<< HEAD -Channel.from(summary.collect{ [it.key, it.value] }) - .map { k,v -> "
$k
${v ?: 'N/A'}
" } - .reduce { a, b -> return [a, b].join("\n ") } - .map { x -> """ - id: 'nf-core-atacseq-summary' - description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/atacseq Workflow Summary' - section_href: 'https://github.com/nf-core/atacseq' - plot_type: 'html' - data: | -
- $x -
- """.stripIndent() } - .set { ch_workflow_summary } -======= input: set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) file sizes from ch_genome_sizes_mrep_bigwig.collect() @@ -1751,23 +1603,10 @@ process MergedRepMACSCallPeak { find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt """ } ->>>>>>> dev /* * STEP 8.3 Annotate peaks with HOMER */ -<<<<<<< HEAD -process get_software_versions { - publishDir "${params.outdir}/pipeline_info", mode: 'copy', - saveAs: { filename -> - if (filename.indexOf(".csv") > 0) filename - else null - } - - output: - file 'software_versions_mqc.yaml' into ch_software_versions_yaml - file "software_versions.csv" -======= process MergedRepAnnotatePeaks { tag "$name" label "process_medium" @@ -1783,7 +1622,6 @@ process MergedRepAnnotatePeaks { output: file "*.txt" into ch_mrep_macs_annotate ->>>>>>> dev script: prefix = "${name}.mRp.clN" @@ -1798,8 +1636,6 @@ process MergedRepAnnotatePeaks { """ } -<<<<<<< HEAD -======= /* * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ @@ -1838,32 +1674,9 @@ process MergedRepPeakQC { """ } ->>>>>>> dev /* * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection */ -<<<<<<< HEAD -process fastqc { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/fastqc", mode: 'copy', - saveAs: { filename -> - filename.indexOf(".zip") > 0 ? "zips/$filename" : "$filename" - } - - input: - set val(name), file(reads) from ch_read_files_fastqc - - output: - file "*_fastqc.{zip,html}" into ch_fastqc_results - - script: - """ - fastqc --quiet --threads $task.cpus $reads - """ -} - -======= process MergedRepConsensusPeakSet { label 'process_long' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', @@ -2109,25 +1922,22 @@ process get_software_versions { """ } -def create_workflow_summary(summary) { - - def yaml_file = workDir.resolve('workflow_summary_mqc.yaml') - yaml_file.text = """ - id: 'nf-core-atacseq-summary' +Channel.from(summary.collect{ [it.key, it.value] }) + .map { k,v -> "
$k
${v ?: 'N/A'}
" } + .reduce { a, b -> return [a, b].join("\n ") } + .map { x -> """ + id: 'nf-core-chipseq-summary' description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/atacseq Workflow Summary' - section_href: 'https://github.com/nf-core/atacseq' + section_name: 'nf-core/chipseq Workflow Summary' + section_href: 'https://github.com/nf-core/chipseq' plot_type: 'html' data: |
-${summary.collect { k,v -> "
$k
${v ?: 'N/A'}
" }.join("\n")} + $x
- """.stripIndent() - - return yaml_file -} + """.stripIndent() } + .set { ch_workflow_summary } ->>>>>>> dev /* * STEP 10 - MultiQC */ @@ -2138,18 +1948,11 @@ process MultiQC { !params.skip_multiqc input: -<<<<<<< HEAD file (multiqc_config) from ch_multiqc_config file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) - // TODO nf-core: Add in log files from your new processes for MultiQC to find! - file ('fastqc/*') from ch_fastqc_results.collect().ifEmpty([]) - file ('software_versions/*') from ch_software_versions_yaml.collect() - file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") -======= - file multiqc_config from ch_multiqc_config file ('software_versions/*') from ch_software_versions_mqc.collect() - file ('workflow_summary/*') from create_workflow_summary(summary) + file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) @@ -2177,7 +1980,6 @@ process MultiQC { file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) ->>>>>>> dev output: file "*multiqc_report.html" into ch_multiqc_report @@ -2187,17 +1989,9 @@ process MultiQC { script: rtitle = custom_runName ? "--title \"$custom_runName\"" : '' rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' -<<<<<<< HEAD custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' - // TODO nf-core: Specify which MultiQC modules to use with -m for a faster run time """ - multiqc -f $rtitle $rfilename $custom_config_file . - """ -} - -======= - """ - multiqc . -f $rtitle $rfilename --config $multiqc_config \\ + multiqc . -f $rtitle $rfilename $custom_config_file \\ -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools """ } @@ -2210,7 +2004,6 @@ process MultiQC { /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ->>>>>>> dev /* * STEP 11 - Output description HTML */ @@ -2258,18 +2051,10 @@ workflow.onComplete { if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision -<<<<<<< HEAD -======= - if (workflow.container) email_fields['summary']['Docker image'] = workflow.container ->>>>>>> dev email_fields['summary']['Nextflow Version'] = workflow.nextflow.version email_fields['summary']['Nextflow Build'] = workflow.nextflow.build email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp -<<<<<<< HEAD - // TODO nf-core: If not using MultiQC, strip out this code (including params.max_multiqc_email_size) -======= ->>>>>>> dev // On success try attach the multiqc report def mqc_report = null try { @@ -2337,23 +2122,12 @@ workflow.onComplete { c_reset = params.monochrome_logs ? '' : "\033[0m"; if (workflow.stats.ignoredCount > 0 && workflow.success) { -<<<<<<< HEAD log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" } - if (workflow.success) { log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" -======= - log.info "${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}" - log.info "${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}" - log.info "${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}" - } - - if (workflow.success) { - log.info "${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}" ->>>>>>> dev } else { checkHostname() log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" From a20418663542d3fabdec1b160df1cea367537cb1 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 21 Feb 2020 17:16:46 +0000 Subject: [PATCH 096/226] Downgrade markdown --- CHANGELOG.md | 2 +- environment.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a48bb084..effa777a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` * Add python `3.7.6` -* Add markdown `3.2.1` +* Add markdown `3.1.1` * Add pymdown-extensions `6.0` * Add pygments `2.5.2` * Add pigz `2.3.4` diff --git a/environment.yml b/environment.yml index 1caafa81..af38f938 100755 --- a/environment.yml +++ b/environment.yml @@ -8,7 +8,7 @@ channels: dependencies: ## conda-forge packages - conda-forge::python=3.7.6 - - conda-forge::markdown=3.2.1 + - conda-forge::markdown=3.1.1 - conda-forge::pymdown-extensions=6.0 - conda-forge::pygments=2.5.2 - conda-forge::r-base=3.6.2 From acf62e1b64512f6fe1b74b246cc8660308246e5d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:35:22 +0000 Subject: [PATCH 097/226] Add skip_diff_analysis --- CHANGELOG.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index effa777a..4533fb7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image -* Added GitHub Actions CI tests * Update template to tools `1.9` +* Add `--skip_consensus_peaks` to skip consensus peak generation ### `Fixed` @@ -57,10 +57,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Deprecated` -| Deprecated | Replacement | -|------------------------------|---------------------------| -| `--skip_diff_analysis` | `--skip_consensus_peaks` | - ## [1.1.0] - 2019-11-05 ### `Added` From 54626f0eac3de910e6452dbf87dd702e1845ab96 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:35:26 +0000 Subject: [PATCH 098/226] Add skip_diff_analysis --- docs/usage.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index f3c619dd..9e689f68 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -42,6 +42,7 @@ * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) * [`--skip_consensus_peaks`](#--skip_consensus_peaks) + * [`--skip_diff_analysis`](#--skip_diff_analysis) * [Skipping QC steps](#skipping-qc-steps) * [Job resources](#job-resources) * [Automatic resubmission](#automatic-resubmission) @@ -396,7 +397,11 @@ Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. ### `--skip_consensus_peaks` -Skip consensus peak generation and differential binding analysis. +Skip consensus peak generation, annotation and counting. + +### `--skip_diff_analysis` + +Skip differential accessibility analysis with DESeq2. ## Skipping QC steps From 77a49454bea3a15e30a755678e4116b56bc7aa55 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:35:29 +0000 Subject: [PATCH 099/226] Add skip_diff_analysis --- main.nf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index 43800440..6eaab541 100644 --- a/main.nf +++ b/main.nf @@ -62,7 +62,8 @@ def helpMessage() { --broad_cutoff [float] Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified (Default: 0.1) --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads - --skip_consensus_peaks [bool] Skip consensus peak generation and differential binding analysis + --skip_consensus_peaks [bool] Skip consensus peak generation + --skip_diff_analysis [bool] Skip differential accessibility analysis QC --skip_fastqc [bool] Skip FastQC @@ -254,6 +255,7 @@ if (params.save_align_intermeds) summary['Save Intermeds'] = 'Yes' if (params.save_macs_pileup) summary['Save MACS2 Pileup'] = 'Yes' if (params.skip_merge_replicates) summary['Skip Merge Replicates'] = 'Yes' if (params.skip_consensus_peaks) summary['Skip Consensus Peaks'] = 'Yes' +if (params.skip_diff_analysis) summary['Skip Differential Analysis'] = 'Yes' if (params.skip_fastqc) summary['Skip FastQC'] = 'Yes' if (params.skip_picard_metrics) summary['Skip Picard Metrics'] = 'Yes' if (params.skip_preseq) summary['Skip Preseq'] = 'Yes' @@ -1322,7 +1324,7 @@ process MergedLibConsensusPeakSetDESeq { } when: - params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks + params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis input: file counts from ch_mlib_macs_consensus_counts @@ -1808,7 +1810,7 @@ process MergedRepConsensusPeakSetDESeq { } when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis input: file counts from ch_mrep_macs_consensus_counts From a3f9b09fcb816652244cfc8fc372218197cba5e7 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:35:32 +0000 Subject: [PATCH 100/226] Add skip_diff_analysis --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index 2b0fc062..e5400b59 100755 --- a/nextflow.config +++ b/nextflow.config @@ -41,6 +41,7 @@ params { min_reps_consensus = 1 save_macs_pileup = false skip_consensus_peaks = false + skip_diff_analysis = false // Options: QC skip_fastqc = false From b42ca1c30dcec9869931598ee96c48aa98ee7193 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:54:26 +0000 Subject: [PATCH 101/226] Multi-core DESeq2 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4533fb7a..126041aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 +* [79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * Update template to tools `1.9` -* Add `--skip_consensus_peaks` to skip consensus peak generation +* Parameter `--skip_consensus_peaks` to skip consensus peak generation ### `Fixed` From d917a14433041f16f2de712cdf7599bb6f68a150 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:54:31 +0000 Subject: [PATCH 102/226] Multi-core DESeq2 --- bin/featurecounts_deseq2.r | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bin/featurecounts_deseq2.r b/bin/featurecounts_deseq2.r index c6683cbb..d9c07a0f 100755 --- a/bin/featurecounts_deseq2.r +++ b/bin/featurecounts_deseq2.r @@ -25,6 +25,7 @@ library(ggplot2) library(RColorBrewer) library(pheatmap) library(lattice) +library(BiocParallel) ################################################ ################################################ @@ -32,11 +33,12 @@ library(lattice) ################################################ ################################################ -option_list <- list(make_option(c("-i", "--featurecount_file"), type="character", default=NULL, help="Feature count file generated by the SubRead featureCounts command.", metavar="featurecount_file"), - make_option(c("-b", "--bam_suffix"), type="character", default=NULL, help="Portion of filename after sample name in featurecount file header e.g. '.rmDup.bam' if 'DRUG_R1.rmDup.bam'", metavar="bam_suffix"), +option_list <- list(make_option(c("-i", "--featurecount_file"), type="character", default=NULL, help="Feature count file generated by the SubRead featureCounts command.", metavar="path"), + make_option(c("-b", "--bam_suffix"), type="character", default=NULL, help="Portion of filename after sample name in featurecount file header e.g. '.rmDup.bam' if 'DRUG_R1.rmDup.bam'", metavar="string"), make_option(c("-o", "--outdir"), type="character", default='./', help="Output directory", metavar="path"), - make_option(c("-p", "--outprefix"), type="character", default='differential', help="Output prefix", metavar="character"), - make_option(c("-s", "--outsuffix"), type="character", default='', help="Output suffix for comparison-level results", metavar="character")) + make_option(c("-p", "--outprefix"), type="character", default='differential', help="Output prefix", metavar="string"), + make_option(c("-s", "--outsuffix"), type="character", default='', help="Output suffix for comparison-level results", metavar="string"), + make_option(c("-c", "--cores"), type="integer", default=1, help="Number of cores", metavar="integer")) opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) @@ -86,7 +88,7 @@ if (file.exists(DDSFile) == FALSE) { counts <- count.table[,samples.vec,drop=FALSE] coldata <- data.frame(row.names=colnames(counts),condition=groups) dds <- DESeqDataSetFromMatrix(countData = round(counts), colData = coldata, design = ~ condition) - dds <- DESeq(dds) + dds <- DESeq(dds, parallel=TRUE, BPPARAM=MulticoreParam(opt$cores)) rld <- rlog(dds) save(dds,rld,file=DDSFile) } From 101d004d92e0e6a55c37f0c8587730d13acadbef Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sat, 22 Feb 2020 22:54:34 +0000 Subject: [PATCH 103/226] Multi-core DESeq2 --- main.nf | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/main.nf b/main.nf index 6eaab541..9a127400 100644 --- a/main.nf +++ b/main.nf @@ -1343,7 +1343,13 @@ process MergedLibConsensusPeakSetDESeq { prefix = "consensus_peaks.mLb.clN" bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" """ - featurecounts_deseq2.r -i $counts -b '$bam_ext' -o ./ -p $prefix -s .mLb + featurecounts_deseq2.r \\ + --featurecount_file $counts \\ + --bam_suffix '$bam_ext' \\ + --outdir ./ \\ + --outprefix $prefix \\ + --outsuffix .mLb \\ + --cores $task.cpus cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv @@ -1829,7 +1835,13 @@ process MergedRepConsensusPeakSetDESeq { prefix = "consensus_peaks.mRp.clN" bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" """ - featurecounts_deseq2.r -i $counts -b '$bam_ext' -o ./ -p $prefix -s .mLb + featurecounts_deseq2.r \\ + --featurecount_file $counts \\ + --bam_suffix '$bam_ext' \\ + --outdir ./ \\ + --outprefix $prefix \\ + --outsuffix .mRp \\ + --cores $task.cpus cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv From c4abdf831c85b67d6794a49946ec981af991e23b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 09:38:49 +0000 Subject: [PATCH 104/226] Fix long run-time for large intersects --- bin/plot_peak_intersect.r | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/plot_peak_intersect.r b/bin/plot_peak_intersect.r index 2404b8b9..40abf6d3 100755 --- a/bin/plot_peak_intersect.r +++ b/bin/plot_peak_intersect.r @@ -44,11 +44,13 @@ if (file.exists(OutDir) == FALSE) { comb.dat <- read.table(opt$input_file,sep="\t",header=FALSE) comb.vec <- comb.dat[,2] comb.vec <- setNames(comb.vec,comb.dat[,1]) - sets <- sort(unique(unlist(strsplit(names(comb.vec),split='&'))), decreasing = TRUE) + nintersects = length(names(comb.vec)) if (nintersects > 70) { nintersects <- 70 + comb.vec <- sort(comb.vec, decreasing = TRUE)[1:70] + sets <- sort(unique(unlist(strsplit(names(comb.vec),split='&'))), decreasing = TRUE) } pdf(opt$output_file,onefile=F,height=10,width=20) From 09a25f69a5b4559c1b0e53f33c3670eba1993fea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 10:18:09 +0000 Subject: [PATCH 105/226] Change reference_genome outdir --- docs/output.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/output.md b/docs/output.md index 121d5c84..59fbf36b 100755 --- a/docs/output.md +++ b/docs/output.md @@ -291,7 +291,7 @@ You can skip this portion of the analysis by specifying the `--skip_merge_replic *Description*: An IGV session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, consensus peaks and differential sites. This avoids having to load all of the data individually into IGV for visualisation. - The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `reference_genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. + The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. The file paths in the IGV session file will only work if the results are kept in the same place on your storage. If the results are moved or for example, if you prefer to load the data over the web then just replace the file paths with others that are more appropriate. @@ -317,9 +317,9 @@ You can skip this portion of the analysis by specifying the `--skip_merge_replic Reference genome-specific files can be useful to keep for the downstream processing of the results. *Output directories*: - * `reference_genome/` + * `genome/` A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. - * `reference_genome/BWAIndex/` + * `genome/BWAIndex/` If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes. 2. **Pipeline information** From 1237b27e7da1a9d8284b649741d2f60a149fced2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 10:18:20 +0000 Subject: [PATCH 106/226] Fix annotation readme copy --- main.nf | 3279 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 1641 insertions(+), 1638 deletions(-) diff --git a/main.nf b/main.nf index 9a127400..12a67b31 100644 --- a/main.nf +++ b/main.nf @@ -175,7 +175,12 @@ if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } -if (params.anno_readme && file(params.anno_readme).exists()) { ch_anno_readme = Channel.fromPath(params.anno_readme) } else { ch_anno_readme = Channel.empty() } + +// Save AWS IGenomes file conatining annotation version +if (params.anno_readme && file(params.anno_readme).exists()) { + file("${params.outdir}/genome/").mkdirs() + file(params.anno_readme).copyTo("${params.outdir}/genome/") +} if (params.fasta) { lastPath = params.fasta.lastIndexOf(File.separator) @@ -379,7 +384,7 @@ if (!params.bwa_index) { process BWAIndex { tag "$fasta" label 'process_high' - publishDir path: { params.save_reference ? "${params.outdir}/reference_genome" : params.outdir }, + publishDir path: { params.save_reference ? "${params.outdir}/genome" : params.outdir }, saveAs: { params.save_reference ? it : null }, mode: 'copy' input: @@ -403,7 +408,7 @@ if (!params.gene_bed) { process MakeGeneBED { tag "$gtf" label 'process_low' - publishDir "${params.outdir}/reference_genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: 'copy' input: file gtf from ch_gtf @@ -424,7 +429,7 @@ if (!params.gene_bed) { if (!params.tss_bed) { process MakeTSSBED { tag "$bed" - publishDir "${params.outdir}/reference_genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: 'copy' input: file bed from ch_gene_bed @@ -444,17 +449,15 @@ if (!params.tss_bed) { */ process MakeGenomeFilter { tag "$fasta" - publishDir "${params.outdir}/reference_genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: 'copy' input: file fasta from ch_fasta file blacklist from ch_blacklist.ifEmpty([]) - file readme from ch_anno_readme.ifEmpty([]) output: file "$fasta" // FASTA FILE FOR IGV file "*.fai" // FAI INDEX FOR REFERENCE GENOME - //file "$readme" // AWS IGENOMES FILE CONTAINING ANNOTATION VERSION file "*.bed" into ch_genome_filter_regions // BED FILE WITHOUT BLACKLIST REGIONS & MITOCHONDRIAL CONTIG FOR FILTERING file "*.txt" into ch_genome_autosomes // TEXT FILE CONTAINING LISTING OF AUTOSOMAL CHROMOSOMES FOR ATAQV file "*.sizes" into ch_genome_sizes_mlib_bigwig, // CHROMOSOME SIZES FILE FOR BEDTOOLS @@ -517,1637 +520,1637 @@ process FastQC { } } -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- ADAPTER TRIMMING -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 2 - Trim Galore! - */ -if (params.skip_trimming) { - ch_trimmed_reads = ch_raw_reads_trimgalore - ch_trimgalore_results_mqc = Channel.empty() - ch_trimgalore_fastqc_reports_mqc = Channel.empty() -} else { - process TrimGalore { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/trim_galore", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".html")) "fastqc/$filename" - else if (filename.endsWith(".zip")) "fastqc/zips/$filename" - else if (filename.endsWith("trimming_report.txt")) "logs/$filename" - else params.save_trimmed ? filename : null - } - - input: - set val(name), file(reads) from ch_raw_reads_trimgalore - - output: - set val(name), file("*.fq.gz") into ch_trimmed_reads - file "*.txt" into ch_trimgalore_results_mqc - file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc - - script: - // Calculate number of --cores for TrimGalore based on value of task.cpus - // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 - // See: https://github.com/nf-core/atacseq/pull/65 - def cores = 1 - if (task.cpus) { - cores = (task.cpus as int) - 4 - if (params.single_end) cores = (task.cpus as int) - 3 - if (cores < 1) cores = 1 - if (cores > 4) cores = 4 - } - - // Added soft-links to original fastqs for consistent naming in MultiQC - c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' - c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' - tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' - tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' - nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' - - // Added soft-links to original fastqs for consistent naming in MultiQC - if (params.single_end) { - """ - [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz - trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz - """ - } else { - """ - [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz - [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz - trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz - """ - } - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- ALIGN -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 3.1 - Align read 1 with bwa - */ -process BWAMem { - tag "$name" - label 'process_high' - - input: - set val(name), file(reads) from ch_trimmed_reads - file index from ch_bwa_index.collect() - - output: - set val(name), file("*.bam") into ch_bwa_bam - - script: - prefix = "${name}.Lb" - rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" - if (params.seq_center) { - rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" - } - """ - bwa mem \\ - -t $task.cpus \\ - -M \\ - -R $rg \\ - ${index}/${bwa_base} \\ - $reads \\ - | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - - """ -} - -/* - * STEP 3.2 - Convert .bam to coordinate sorted .bam - */ -process SortBAM { - tag "$name" - label 'process_medium' - if (params.save_align_intermeds) { - publishDir path: "${params.outdir}/bwa/library", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else filename - } - } - - input: - set val(name), file(bam) from ch_bwa_bam - - output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge - file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc - - script: - prefix = "${name}.Lb" - """ - samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY BAM -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 4.1 Merge BAM files for all libraries from same replicate - */ -ch_sort_bam_merge - .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } - .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_sort_bam_merge } - -process MergedLibBAM { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" - else params.save_align_intermeds ? filename : null - } - - input: - set val(name), file(bams) from ch_sort_bam_merge - - output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, - ch_mlib_bam_preseq, - ch_mlib_bam_ataqv - file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc - file "*.txt" into ch_mlib_bam_metrics_mqc - - script: - prefix = "${name}.mLb.mkD" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - if (bam_files.size() > 1) { - """ - picard -Xmx${avail_mem}g MergeSamFiles \\ - ${'INPUT='+bam_files.join(' INPUT=')} \\ - OUTPUT=${name}.sorted.bam \\ - SORT_ORDER=coordinate \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - samtools index ${name}.sorted.bam - - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${name}.sorted.bam \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=false \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } else { - """ - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${bam_files[0]} \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=false \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/* - * STEP 4.2 Filter BAM file at merged library-level - */ -process MergedLibBAMFilter { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (params.single_end || params.save_align_intermeds) { - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename - else null - } - } - - input: - set val(name), file(bam) from ch_mlib_bam_filter - file bed from ch_genome_filter_regions.collect() - file bamtools_filter_config from ch_bamtools_filter_config - - output: - set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam - set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat - file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc - - script: - prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" - filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" - dup_params = params.keep_dups ? "" : "-F 0x0400" - multimap_params = params.keep_multi_map ? "" : "-q 1" - blacklist_params = params.blacklist ? "-L $bed" : "" - name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" - """ - samtools view \\ - $filter_params \\ - $dup_params \\ - $multimap_params \\ - $blacklist_params \\ - -b ${bam[0]} \\ - | bamtools filter \\ - -out ${prefix}.sorted.bam \\ - -script $bamtools_filter_config - - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - - $name_sort_bam - """ -} - -/* - * STEP 4.3 Remove orphan reads from paired-end BAM file - */ -if (params.single_end) { - ch_mlib_filter_bam - .into { ch_mlib_rm_orphan_bam_metrics; - ch_mlib_rm_orphan_bam_bigwig; - ch_mlib_rm_orphan_bam_macs; - ch_mlib_rm_orphan_bam_plotfingerprint; - ch_mlib_rm_orphan_bam_mrep; - ch_mlib_name_bam_mlib_counts; - ch_mlib_name_bam_mrep_counts } - - ch_mlib_filter_bam_flagstat - .into { ch_mlib_rm_orphan_flagstat_bigwig; - ch_mlib_rm_orphan_flagstat_macs; - ch_mlib_rm_orphan_flagstat_mqc } - - ch_mlib_filter_bam_stats_mqc - .set { ch_mlib_rm_orphan_stats_mqc } -} else { - process MergedLibBAMRemoveOrphan { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename - else null - } - - input: - set val(name), file(bam) from ch_mlib_filter_bam - - output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, - ch_mlib_rm_orphan_bam_bigwig, - ch_mlib_rm_orphan_bam_macs, - ch_mlib_rm_orphan_bam_plotfingerprint, - ch_mlib_rm_orphan_bam_mrep - set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, - ch_mlib_name_bam_mrep_counts - set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, - ch_mlib_rm_orphan_flagstat_macs, - ch_mlib_rm_orphan_flagstat_mqc - file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - prefix = "${name}.mLb.clN" - """ - bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs - - samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 5.1 preseq analysis after merging libraries and before filtering - */ -process MergedLibPreseq { - tag "$name" - label 'process_low' - publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' - - when: - !params.skip_preseq - - input: - set val(name), file(bam) from ch_mlib_bam_preseq - - output: - file "*.ccurve.txt" into ch_mlib_preseq_mqc - - script: - prefix = "${name}.mLb.mkD" - """ - preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} - """ -} - -/* - * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering - */ -process MergedLibMetrics { - tag "$name" - label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("_metrics")) "picard_metrics/$filename" - else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" - else null - } - - when: - !params.skip_picard_metrics - - input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics - file fasta from ch_fasta - - output: - file "*_metrics" into ch_mlib_collectmetrics_mqc - file "*.pdf" into ch_mlib_collectmetrics_pdf - - script: - prefix = "${name}.mLb.clN" - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - """ - picard -Xmx${avail_mem}g CollectMultipleMetrics \\ - INPUT=${bam[0]} \\ - OUTPUT=${prefix}.CollectMultipleMetrics \\ - REFERENCE_SEQUENCE=$fasta \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - """ -} - -/* - * STEP 5.3 Read depth normalised bigWig - */ -process MergedLibBigWig { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" - else null - } - - input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mlib_bigwig.collect() - - output: - set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile - file "*scale_factor.txt" into ch_mlib_bigwig_scale - file "*igv.txt" into ch_mlib_bigwig_igv - - script: - prefix = "${name}.mLb.clN" - pe_fragment = params.single_end ? "" : "-pc" - extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' - """ - SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') - echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph - - bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig - - find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt - """ -} - -/* - * STEP 5.4 generate gene body coverage plot with deepTools - */ -process MergedLibPlotProfile { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' - - when: - !params.skip_plot_profile - - input: - set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile - file bed from ch_gene_bed - - output: - file '*.{gz,pdf}' into ch_mlib_plotprofile_results - file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc - - script: - prefix = "${name}.mLb.clN" - """ - computeMatrix scale-regions \\ - --regionsFileName $bed \\ - --scoreFileName $bigwig \\ - --outFileName ${prefix}.computeMatrix.mat.gz \\ - --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ - --regionBodyLength 1000 \\ - --beforeRegionStartLength 3000 \\ - --afterRegionStartLength 3000 \\ - --skipZeros \\ - --smartLabels \\ - --numberOfProcessors $task.cpus - - plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ - --outFileName ${prefix}.plotProfile.pdf \\ - --outFileNameData ${prefix}.plotProfile.tab - """ -} - -/* - * STEP 5.5 deepTools plotFingerprint - */ -process MergedLibPlotFingerprint { - tag "$name" - label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' - - when: - !params.skip_plot_fingerprint - - input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint - - output: - file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results - file '*.raw.txt' into ch_mlib_plotfingerprint_mqc - - script: - prefix = "${name}.mLb.clN" - extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' - """ - plotFingerprint \\ - --bamfiles ${bam[0]} \\ - --plotFile ${prefix}.plotFingerprint.pdf \\ - $extend \\ - --labels $prefix \\ - --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ - --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ - --skipZeros \\ - --numberOfProcessors $task.cpus \\ - --numberOfSamples $params.fingerprint_bins - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE LIBRARY PEAK ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 6.1 Call peaks with MACS2 and calculate FRiP score - */ -process MergedLibMACSCallPeak { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize - - input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) - file mlib_peak_count_header from ch_mlib_peak_count_header - file mlib_frip_score_header from ch_mlib_frip_score_header - - output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output - set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, - ch_mlib_macs_qc, - ch_mlib_macs_consensus, - ch_mlib_macs_ataqv - file "*igv.txt" into ch_mlib_macs_igv - file "*_mqc.tsv" into ch_mlib_macs_mqc - - script: - prefix = "${name}.mLb.clN" - broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" - """ - macs2 callpeak \\ - -t ${bam[0]} \\ - $broad \\ - -f $format \\ - -g $params.macs_gsize \\ - -n $prefix \\ - $pileup \\ - --keep-dup all \\ - --nomodel - - cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv - - READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') - grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv - - find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt - """ -} - -/* - * STEP 6.2 Annotate peaks with HOMER - */ -process MergedLibAnnotatePeaks { - tag "$name" - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' - - when: - params.macs_gsize - - input: - set val(name), file(peak) from ch_mlib_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.txt" into ch_mlib_macs_annotate - - script: - prefix = "${name}.mLb.clN" - """ - annotatePeaks.pl \\ - $peak \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}_peaks.annotatePeaks.txt - """ -} - -/* - * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation - */ -process MergedLibPeakQC { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' - - when: - params.macs_gsize - - input: - file peaks from ch_mlib_macs_qc.collect{ it[1] } - file annos from ch_mlib_macs_annotate.collect() - file mlib_peak_annotation_header from ch_mlib_peak_annotation_header - - output: - file "*.{txt,pdf}" into ch_mlib_peak_qc - file "*.tsv" into ch_mlib_peak_qc_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mLb.clN' - """ - plot_macs_qc.r \\ - -i ${peaks.join(',')} \\ - -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ - -o ./ \\ - -p macs_peak.${suffix} - - plot_homer_annotatepeaks.r \\ - -i ${annos.join(',')} \\ - -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ - -o ./ \\ - -p macs_annotatePeaks.${suffix} - - cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv - """ -} - -/* - * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection - */ -process MergedLibConsensusPeakSet { - label 'process_long' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks - - input: - file peaks from ch_mlib_macs_consensus.collect{ it[1] } - - output: - file "*.bed" into ch_mlib_macs_consensus_bed - file "*.saf" into ch_mlib_macs_consensus_saf - file "*.boolean.txt" into ch_mlib_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect - file "*igv.txt" into ch_mlib_macs_consensus_igv - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mLb.clN' - prefix = "consensus_peaks.${suffix}" - mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" - """ - sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ - | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt - - macs2_merged_expand.py \\ - ${prefix}.txt \\ - ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ - ${prefix}.boolean.txt \\ - --min_replicates $params.min_reps_consensus \\ - $expandparam - - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed - - echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf - - sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt - plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf - - find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt - """ -} - -/* - * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file - */ -process MergedLibConsensusPeakSetAnnotate { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks - - input: - file bed from ch_mlib_macs_consensus_bed - file bool from ch_mlib_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate - - script: - prefix = "consensus_peaks.mLb.clN" - """ - annotatePeaks.pl \\ - $bed \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}.annotatePeaks.txt - - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt - paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt - """ -} - -/* - * STEP 6.6 Count reads in consensus peaks with featureCounts - */ -process MergedLibConsensusPeakSetCounts { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks - - input: - file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } - file saf from ch_mlib_macs_consensus_saf.collect() - - output: - file "*featureCounts.txt" into ch_mlib_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc - - script: - prefix = "consensus_peaks.mLb.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - pe_params = params.single_end ? '' : "-p --donotsort" - """ - featureCounts \\ - -F SAF \\ - -O \\ - --fracOverlap 0.2 \\ - -T $task.cpus \\ - $pe_params \\ - -a $saf \\ - -o ${prefix}.featureCounts.txt \\ - ${bam_files.join(' ')} - """ -} - -/* - * STEP 6.7 Perform differential analysis with DESeq2 - */ -process MergedLibConsensusPeakSetDESeq { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis - - input: - file counts from ch_mlib_macs_consensus_counts - file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header - file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header - - output: - file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results - file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc - - script: - prefix = "consensus_peaks.mLb.clN" - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - """ - featurecounts_deseq2.r \\ - --featurecount_file $counts \\ - --bam_suffix '$bam_ext' \\ - --outdir ./ \\ - --outprefix $prefix \\ - --outsuffix .mLb \\ - --cores $task.cpus - - cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv - cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv - - find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt - """ -} - -/* - * STEP 6.8 Run ataqv on BAM file and corresponding peaks - */ -process MergedLibAtaqv { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_ataqv - - input: - set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) - file autosomes from ch_genome_autosomes.collect() - file tss_bed from ch_tss_bed - - output: - file "*.json" into ch_mlib_ataqv - - script: - peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" - mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" - """ - ataqv \\ - --threads $task.cpus \\ - $peak_param \\ - --tss-file $tss_bed \\ - --metrics-file ${name}.ataqv.json \\ - --name $name \\ - --ignore-read-groups \\ - --autosomal-reference-file $autosomes \\ - $mito_param \\ - NA \\ - ${bam[0]} - """ -} - -/* - * STEP 6.9 run ataqv mkarv on all JSON files to render web app - */ -process MergedLibAtaqvMkarv { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_ataqv - - input: - file json from ch_mlib_ataqv.collect() - - output: - file "html" into ch_mlib_ataqv_mkarv - - script: - """ - mkarv \\ - --concurrency $task.cpus \\ - --force \\ - ./html/ \\ - ${json.join(' ')} - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE REPLICATE BAM -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 7 Merge library BAM files across all replicates - */ -ch_mlib_rm_orphan_bam_mrep - .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } - .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_mlib_rm_orphan_bam_mrep } - -process MergedRepBAM { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" - else filename - } - - input: - set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep - - output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, - ch_mrep_bam_macs - set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, - ch_mrep_bam_flagstat_macs, - ch_mrep_bam_flagstat_mqc - file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc - file "*.txt" into ch_mrep_bam_metrics_mqc - - when: - !params.skip_merge_replicates && replicatesExist - - script: - prefix = "${name}.mRp.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - def avail_mem = 3 - if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." - } else { - avail_mem = task.memory.toGiga() - } - if (bam_files.size() > 1) { - """ - picard -Xmx${avail_mem}g MergeSamFiles \\ - ${'INPUT='+bam_files.join(' INPUT=')} \\ - OUTPUT=${name}.sorted.bam \\ - SORT_ORDER=coordinate \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - samtools index ${name}.sorted.bam - - picard -Xmx${avail_mem}g MarkDuplicates \\ - INPUT=${name}.sorted.bam \\ - OUTPUT=${prefix}.sorted.bam \\ - ASSUME_SORTED=true \\ - REMOVE_DUPLICATES=true \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ - VALIDATION_STRINGENCY=LENIENT \\ - TMP_DIR=tmp - - samtools index ${prefix}.sorted.bam - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } else { - """ - ln -s ${bams[0]} ${prefix}.sorted.bam - ln -s ${bams[1]} ${prefix}.sorted.bam.bai - touch ${prefix}.MarkDuplicates.metrics.txt - samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat - samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats - samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats - """ - } -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 8.1 Read depth normalised bigWig - */ -process MergedRepBigWig { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" - else null - } - - when: - !params.skip_merge_replicates && replicatesExist - - input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mrep_bigwig.collect() - - output: - set val(name), file("*.bigWig") into ch_mrep_bigwig - file "*scale_factor.txt" into ch_mrep_bigwig_scale - file "*igv.txt" into ch_mrep_bigwig_igv - - script: - prefix = "${name}.mRp.clN" - pe_fragment = params.single_end ? "" : "-pc" - extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' - """ - SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') - echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt - genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph - - bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig - - find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt - """ -} - -/* - * STEP 8.2 Call peaks with MACS2 and calculate FRiP score - */ -process MergedRepMACSCallPeak { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) - file mrep_peak_count_header from ch_mrep_peak_count_header - file mrep_frip_score_header from ch_mrep_frip_score_header - - output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output - set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, - ch_mrep_macs_qc, - ch_mrep_macs_consensus - file "*igv.txt" into ch_mrep_macs_igv - file "*_mqc.tsv" into ch_mrep_macs_mqc - - script: - prefix = "${name}.mRp.clN" - broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" - """ - macs2 callpeak \\ - -t ${bam[0]} \\ - $broad \\ - -f $format \\ - -g $params.macs_gsize \\ - -n $prefix \\ - $pileup \\ - --keep-dup all \\ - --nomodel - - cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv - - READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') - grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv - - find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt - """ -} - -/* - * STEP 8.3 Annotate peaks with HOMER - */ -process MergedRepAnnotatePeaks { - tag "$name" - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - set val(name), file(peak) from ch_mrep_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.txt" into ch_mrep_macs_annotate - - script: - prefix = "${name}.mRp.clN" - """ - annotatePeaks.pl \\ - $peak \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}_peaks.annotatePeaks.txt - """ -} - -/* - * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation - */ -process MergedRepPeakQC { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize - - input: - file peaks from ch_mrep_macs_qc.collect{ it[1] } - file annos from ch_mrep_macs_annotate.collect() - file mrep_peak_annotation_header from ch_mrep_peak_annotation_header - - output: - file "*.{txt,pdf}" into ch_mrep_peak_qc - file "*.tsv" into ch_mrep_peak_qc_mqc - - script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mRp.clN' - """ - plot_macs_qc.r \\ - -i ${peaks.join(',')} \\ - -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ - -o ./ \\ - -p macs_peak.${suffix} - - plot_homer_annotatepeaks.r \\ - -i ${annos.join(',')} \\ - -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ - -o ./ \\ - -p macs_annotatePeaks.${suffix} - - cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv - """ -} - -/* - * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection - */ -process MergedRepConsensusPeakSet { - label 'process_long' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file peaks from ch_mrep_macs_consensus.collect{ it[1] } - - output: - file "*.bed" into ch_mrep_macs_consensus_bed - file "*.saf" into ch_mrep_macs_consensus_saf - file "*.boolean.txt" into ch_mrep_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect - file "*igv.txt" into ch_mrep_macs_consensus_igv - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - suffix = 'mRp.clN' - prefix = "consensus_peaks.${suffix}" - mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" - """ - sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ - | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt - - macs2_merged_expand.py \\ - ${prefix}.txt \\ - ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ - ${prefix}.boolean.txt \\ - $expandparam - - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed - - echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf - awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf - - sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt - plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf - - find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt - """ -} - -/* - * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file - */ -process MergedRepConsensusPeakSetAnnotate { - label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file bed from ch_mrep_macs_consensus_bed - file bool from ch_mrep_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf - - output: - file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate - - script: - prefix = "consensus_peaks.mRp.clN" - """ - annotatePeaks.pl \\ - $bed \\ - $fasta \\ - -gid \\ - -gtf $gtf \\ - -cpu $task.cpus \\ - > ${prefix}.annotatePeaks.txt - - cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt - paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt - """ -} - -/* - * STEP 8.7 Count reads in consensus peaks with featureCounts - */ -process MergedRepConsensusPeakSetCounts { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks - - input: - file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } - file saf from ch_mrep_macs_consensus_saf.collect() - - output: - file "*featureCounts.txt" into ch_mrep_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc - - script: - prefix = "consensus_peaks.mRp.clN" - bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - pe_params = params.single_end ? '' : "-p --donotsort" - """ - featureCounts \\ - -F SAF \\ - -O \\ - --fracOverlap 0.2 \\ - -T $task.cpus \\ - $pe_params \\ - -a $saf \\ - -o ${prefix}.featureCounts.txt \\ - ${bam_files.join(' ')} - """ -} - -/* - * STEP 8.8 Perform differential analysis with DESeq2 - */ -process MergedRepConsensusPeakSetDESeq { - label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', - saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null - else filename - } - - when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis - - input: - file counts from ch_mrep_macs_consensus_counts - file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header - file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header - - output: - file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results - file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv - file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc - - script: - prefix = "consensus_peaks.mRp.clN" - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - """ - featurecounts_deseq2.r \\ - --featurecount_file $counts \\ - --bam_suffix '$bam_ext' \\ - --outdir ./ \\ - --outprefix $prefix \\ - --outsuffix .mRp \\ - --cores $task.cpus - - cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv - cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv - - find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- IGV -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 9 - Create IGV session file - */ -process IGV { - publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_igv - - input: - file fasta from ch_fasta - - file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) - file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) - file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) - file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) - - file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) - file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) - file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) - file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) - - output: - file "*.{txt,xml}" into ch_igv_session - - script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ - """ - cat *.txt > igv_files.txt - igv_files_to_session.py igv_session.xml igv_files.txt ../../reference_genome/${fasta.getName()} --path_prefix '../../' - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- MULTIQC -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * Parse software version numbers - */ -process get_software_versions { - publishDir "${params.outdir}/pipeline_info", mode: 'copy', - saveAs: { filename -> - if (filename.indexOf(".csv") > 0) filename - else null - } - - output: - file 'software_versions_mqc.yaml' into ch_software_versions_mqc - file "software_versions.csv" - - script: - """ - echo $workflow.manifest.version > v_pipeline.txt - echo $workflow.nextflow.version > v_nextflow.txt - fastqc --version > v_fastqc.txt - trim_galore --version > v_trim_galore.txt - echo \$(bwa 2>&1) > v_bwa.txt - samtools --version > v_samtools.txt - bedtools --version > v_bedtools.txt - echo \$(bamtools --version 2>&1) > v_bamtools.txt - echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true - picard MarkDuplicates --version &> v_picard.txt || true - echo \$(R --version 2>&1) > v_R.txt - python -c "import pysam; print(pysam.__version__)" > v_pysam.txt - echo \$(macs2 --version 2>&1) > v_macs2.txt - touch v_homer.txt - echo \$(ataqv --version 2>&1) > v_ataqv.txt - echo \$(featureCounts -v 2>&1) > v_featurecounts.txt - preseq &> v_preseq.txt - multiqc --version > v_multiqc.txt - scrape_software_versions.py &> software_versions_mqc.yaml - """ -} - -Channel.from(summary.collect{ [it.key, it.value] }) - .map { k,v -> "
$k
${v ?: 'N/A'}
" } - .reduce { a, b -> return [a, b].join("\n ") } - .map { x -> """ - id: 'nf-core-chipseq-summary' - description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/chipseq Workflow Summary' - section_href: 'https://github.com/nf-core/chipseq' - plot_type: 'html' - data: | -
- $x -
- """.stripIndent() } - .set { ch_workflow_summary } - -/* - * STEP 10 - MultiQC - */ -process MultiQC { - publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' - - when: - !params.skip_multiqc - - input: - file (multiqc_config) from ch_multiqc_config - file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) - - file ('software_versions/*') from ch_software_versions_mqc.collect() - file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") - - file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) - file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) - file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) - - file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() - - file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() - file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) - file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) - - file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) - - output: - file "*multiqc_report.html" into ch_multiqc_report - file "*_data" - file "multiqc_plots" - - script: - rtitle = custom_runName ? "--title \"$custom_runName\"" : '' - rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' - custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' - """ - multiqc . -f $rtitle $rfilename $custom_config_file \\ - -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools - """ -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/* -- -- */ -/* -- REPORTS/DOCUMENTATION -- */ -/* -- -- */ -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -/* - * STEP 11 - Output description HTML - */ -process output_documentation { - publishDir "${params.outdir}/Documentation", mode: 'copy' - - input: - file output_docs from ch_output_docs - - output: - file "results_description.html" - - script: - """ - markdown_to_html.py $output_docs -o results_description.html - """ -} - -/* - * Completion e-mail notification - */ -workflow.onComplete { - - // Set up the e-mail variables - def subject = "[nf-core/atacseq] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[nf-core/atacseq] FAILED: $workflow.runName" - } - def email_fields = [:] - email_fields['version'] = workflow.manifest.version - email_fields['runName'] = custom_runName ?: workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary - email_fields['summary']['Date Started'] = workflow.start - email_fields['summary']['Date Completed'] = workflow.complete - email_fields['summary']['Pipeline script file path'] = workflow.scriptFile - email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision - email_fields['summary']['Nextflow Version'] = workflow.nextflow.version - email_fields['summary']['Nextflow Build'] = workflow.nextflow.build - email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - // On success try attach the multiqc report - def mqc_report = null - try { - if (workflow.success) { - mqc_report = ch_multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList) { - log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" - mqc_report = mqc_report[0] - } - } - } catch (all) { - log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" - } - - // Check if we are only sending emails on failure - email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$baseDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$baseDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - def email_html = html_template.toString() - - // Render the sendmail template - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] - def sf = new File("$baseDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - if (email_address) { - try { - if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" - } catch (all) { - // Catch failures and try with plaintext - [ 'mail', '-s', subject, email_address ].execute() << email_txt - log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" - } - } - - // Write summary e-mail HTML to a file - def output_d = new File("${params.outdir}/pipeline_info/") - if (!output_d.exists()) { - output_d.mkdirs() - } - def output_hf = new File(output_d, "pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - def output_tf = new File(output_d, "pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - - c_green = params.monochrome_logs ? '' : "\033[0;32m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; - c_red = params.monochrome_logs ? '' : "\033[0;31m"; - c_reset = params.monochrome_logs ? '' : "\033[0m"; - - if (workflow.stats.ignoredCount > 0 && workflow.success) { - log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" - log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" - log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" - } - if (workflow.success) { - log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" - } else { - checkHostname() - log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" - } - -} +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- ADAPTER TRIMMING -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 2 - Trim Galore! +// */ +// if (params.skip_trimming) { +// ch_trimmed_reads = ch_raw_reads_trimgalore +// ch_trimgalore_results_mqc = Channel.empty() +// ch_trimgalore_fastqc_reports_mqc = Channel.empty() +// } else { +// process TrimGalore { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/trim_galore", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".html")) "fastqc/$filename" +// else if (filename.endsWith(".zip")) "fastqc/zips/$filename" +// else if (filename.endsWith("trimming_report.txt")) "logs/$filename" +// else params.save_trimmed ? filename : null +// } +// +// input: +// set val(name), file(reads) from ch_raw_reads_trimgalore +// +// output: +// set val(name), file("*.fq.gz") into ch_trimmed_reads +// file "*.txt" into ch_trimgalore_results_mqc +// file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc +// +// script: +// // Calculate number of --cores for TrimGalore based on value of task.cpus +// // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 +// // See: https://github.com/nf-core/atacseq/pull/65 +// def cores = 1 +// if (task.cpus) { +// cores = (task.cpus as int) - 4 +// if (params.single_end) cores = (task.cpus as int) - 3 +// if (cores < 1) cores = 1 +// if (cores > 4) cores = 4 +// } +// +// // Added soft-links to original fastqs for consistent naming in MultiQC +// c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' +// c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' +// tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' +// tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' +// nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' +// +// // Added soft-links to original fastqs for consistent naming in MultiQC +// if (params.single_end) { +// """ +// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz +// trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz +// """ +// } else { +// """ +// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz +// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz +// trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz +// """ +// } +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- ALIGN -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 3.1 - Align read 1 with bwa +// */ +// process BWAMem { +// tag "$name" +// label 'process_high' +// +// input: +// set val(name), file(reads) from ch_trimmed_reads +// file index from ch_bwa_index.collect() +// +// output: +// set val(name), file("*.bam") into ch_bwa_bam +// +// script: +// prefix = "${name}.Lb" +// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" +// if (params.seq_center) { +// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" +// } +// """ +// bwa mem \\ +// -t $task.cpus \\ +// -M \\ +// -R $rg \\ +// ${index}/${bwa_base} \\ +// $reads \\ +// | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - +// """ +// } +// +// /* +// * STEP 3.2 - Convert .bam to coordinate sorted .bam +// */ +// process SortBAM { +// tag "$name" +// label 'process_medium' +// if (params.save_align_intermeds) { +// publishDir path: "${params.outdir}/bwa/library", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else filename +// } +// } +// +// input: +// set val(name), file(bam) from ch_bwa_bam +// +// output: +// set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge +// file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc +// +// script: +// prefix = "${name}.Lb" +// """ +// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY BAM -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 4.1 Merge BAM files for all libraries from same replicate +// */ +// ch_sort_bam_merge +// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } +// .groupTuple(by: [0]) +// .map { it -> [ it[0], it[1].flatten() ] } +// .set { ch_sort_bam_merge } +// +// process MergedLibBAM { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" +// else params.save_align_intermeds ? filename : null +// } +// +// input: +// set val(name), file(bams) from ch_sort_bam_merge +// +// output: +// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, +// ch_mlib_bam_preseq, +// ch_mlib_bam_ataqv +// file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc +// file "*.txt" into ch_mlib_bam_metrics_mqc +// +// script: +// prefix = "${name}.mLb.mkD" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// if (bam_files.size() > 1) { +// """ +// picard -Xmx${avail_mem}g MergeSamFiles \\ +// ${'INPUT='+bam_files.join(' INPUT=')} \\ +// OUTPUT=${name}.sorted.bam \\ +// SORT_ORDER=coordinate \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// samtools index ${name}.sorted.bam +// +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${name}.sorted.bam \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=false \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } else { +// """ +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${bam_files[0]} \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=false \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /* +// * STEP 4.2 Filter BAM file at merged library-level +// */ +// process MergedLibBAMFilter { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (params.single_end || params.save_align_intermeds) { +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".sorted.bam")) filename +// else if (filename.endsWith(".sorted.bam.bai")) filename +// else null +// } +// } +// +// input: +// set val(name), file(bam) from ch_mlib_bam_filter +// file bed from ch_genome_filter_regions.collect() +// file bamtools_filter_config from ch_bamtools_filter_config +// +// output: +// set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam +// set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat +// file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc +// +// script: +// prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" +// filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" +// dup_params = params.keep_dups ? "" : "-F 0x0400" +// multimap_params = params.keep_multi_map ? "" : "-q 1" +// blacklist_params = params.blacklist ? "-L $bed" : "" +// name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" +// """ +// samtools view \\ +// $filter_params \\ +// $dup_params \\ +// $multimap_params \\ +// $blacklist_params \\ +// -b ${bam[0]} \\ +// | bamtools filter \\ +// -out ${prefix}.sorted.bam \\ +// -script $bamtools_filter_config +// +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// +// $name_sort_bam +// """ +// } +// +// /* +// * STEP 4.3 Remove orphan reads from paired-end BAM file +// */ +// if (params.single_end) { +// ch_mlib_filter_bam +// .into { ch_mlib_rm_orphan_bam_metrics; +// ch_mlib_rm_orphan_bam_bigwig; +// ch_mlib_rm_orphan_bam_macs; +// ch_mlib_rm_orphan_bam_plotfingerprint; +// ch_mlib_rm_orphan_bam_mrep; +// ch_mlib_name_bam_mlib_counts; +// ch_mlib_name_bam_mrep_counts } +// +// ch_mlib_filter_bam_flagstat +// .into { ch_mlib_rm_orphan_flagstat_bigwig; +// ch_mlib_rm_orphan_flagstat_macs; +// ch_mlib_rm_orphan_flagstat_mqc } +// +// ch_mlib_filter_bam_stats_mqc +// .set { ch_mlib_rm_orphan_stats_mqc } +// } else { +// process MergedLibBAMRemoveOrphan { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".sorted.bam")) filename +// else if (filename.endsWith(".sorted.bam.bai")) filename +// else null +// } +// +// input: +// set val(name), file(bam) from ch_mlib_filter_bam +// +// output: +// set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, +// ch_mlib_rm_orphan_bam_bigwig, +// ch_mlib_rm_orphan_bam_macs, +// ch_mlib_rm_orphan_bam_plotfingerprint, +// ch_mlib_rm_orphan_bam_mrep +// set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, +// ch_mlib_name_bam_mrep_counts +// set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, +// ch_mlib_rm_orphan_flagstat_macs, +// ch_mlib_rm_orphan_flagstat_mqc +// file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// prefix = "${name}.mLb.clN" +// """ +// bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs +// +// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 5.1 preseq analysis after merging libraries and before filtering +// */ +// process MergedLibPreseq { +// tag "$name" +// label 'process_low' +// publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' +// +// when: +// !params.skip_preseq +// +// input: +// set val(name), file(bam) from ch_mlib_bam_preseq +// +// output: +// file "*.ccurve.txt" into ch_mlib_preseq_mqc +// +// script: +// prefix = "${name}.mLb.mkD" +// """ +// preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} +// """ +// } +// +// /* +// * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering +// */ +// process MergedLibMetrics { +// tag "$name" +// label 'process_medium' +// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("_metrics")) "picard_metrics/$filename" +// else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" +// else null +// } +// +// when: +// !params.skip_picard_metrics +// +// input: +// set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics +// file fasta from ch_fasta +// +// output: +// file "*_metrics" into ch_mlib_collectmetrics_mqc +// file "*.pdf" into ch_mlib_collectmetrics_pdf +// +// script: +// prefix = "${name}.mLb.clN" +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// """ +// picard -Xmx${avail_mem}g CollectMultipleMetrics \\ +// INPUT=${bam[0]} \\ +// OUTPUT=${prefix}.CollectMultipleMetrics \\ +// REFERENCE_SEQUENCE=$fasta \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// """ +// } +// +// /* +// * STEP 5.3 Read depth normalised bigWig +// */ +// process MergedLibBigWig { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("scale_factor.txt")) "scale/$filename" +// else if (filename.endsWith(".bigWig")) "$filename" +// else null +// } +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) +// file sizes from ch_genome_sizes_mlib_bigwig.collect() +// +// output: +// set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile +// file "*scale_factor.txt" into ch_mlib_bigwig_scale +// file "*igv.txt" into ch_mlib_bigwig_igv +// +// script: +// prefix = "${name}.mLb.clN" +// pe_fragment = params.single_end ? "" : "-pc" +// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' +// """ +// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') +// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt +// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph +// +// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig +// +// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt +// """ +// } +// +// /* +// * STEP 5.4 generate gene body coverage plot with deepTools +// */ +// process MergedLibPlotProfile { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' +// +// when: +// !params.skip_plot_profile +// +// input: +// set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile +// file bed from ch_gene_bed +// +// output: +// file '*.{gz,pdf}' into ch_mlib_plotprofile_results +// file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// """ +// computeMatrix scale-regions \\ +// --regionsFileName $bed \\ +// --scoreFileName $bigwig \\ +// --outFileName ${prefix}.computeMatrix.mat.gz \\ +// --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ +// --regionBodyLength 1000 \\ +// --beforeRegionStartLength 3000 \\ +// --afterRegionStartLength 3000 \\ +// --skipZeros \\ +// --smartLabels \\ +// --numberOfProcessors $task.cpus +// +// plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ +// --outFileName ${prefix}.plotProfile.pdf \\ +// --outFileNameData ${prefix}.plotProfile.tab +// """ +// } +// +// /* +// * STEP 5.5 deepTools plotFingerprint +// */ +// process MergedLibPlotFingerprint { +// tag "$name" +// label 'process_high' +// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' +// +// when: +// !params.skip_plot_fingerprint +// +// input: +// set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint +// +// output: +// file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results +// file '*.raw.txt' into ch_mlib_plotfingerprint_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' +// """ +// plotFingerprint \\ +// --bamfiles ${bam[0]} \\ +// --plotFile ${prefix}.plotFingerprint.pdf \\ +// $extend \\ +// --labels $prefix \\ +// --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ +// --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ +// --skipZeros \\ +// --numberOfProcessors $task.cpus \\ +// --numberOfSamples $params.fingerprint_bins +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE LIBRARY PEAK ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 6.1 Call peaks with MACS2 and calculate FRiP score +// */ +// process MergedLibMACSCallPeak { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".tsv")) "qc/$filename" +// else if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) +// file mlib_peak_count_header from ch_mlib_peak_count_header +// file mlib_frip_score_header from ch_mlib_frip_score_header +// +// output: +// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output +// set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, +// ch_mlib_macs_qc, +// ch_mlib_macs_consensus, +// ch_mlib_macs_ataqv +// file "*igv.txt" into ch_mlib_macs_igv +// file "*_mqc.tsv" into ch_mlib_macs_mqc +// +// script: +// prefix = "${name}.mLb.clN" +// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" +// format = params.single_end ? "BAM" : "BAMPE" +// pileup = params.save_macs_pileup ? "-B --SPMR" : "" +// """ +// macs2 callpeak \\ +// -t ${bam[0]} \\ +// $broad \\ +// -f $format \\ +// -g $params.macs_gsize \\ +// -n $prefix \\ +// $pileup \\ +// --keep-dup all \\ +// --nomodel +// +// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv +// +// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') +// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv +// +// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt +// """ +// } +// +// /* +// * STEP 6.2 Annotate peaks with HOMER +// */ +// process MergedLibAnnotatePeaks { +// tag "$name" +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' +// +// when: +// params.macs_gsize +// +// input: +// set val(name), file(peak) from ch_mlib_macs_homer +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.txt" into ch_mlib_macs_annotate +// +// script: +// prefix = "${name}.mLb.clN" +// """ +// annotatePeaks.pl \\ +// $peak \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}_peaks.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation +// */ +// process MergedLibPeakQC { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' +// +// when: +// params.macs_gsize +// +// input: +// file peaks from ch_mlib_macs_qc.collect{ it[1] } +// file annos from ch_mlib_macs_annotate.collect() +// file mlib_peak_annotation_header from ch_mlib_peak_annotation_header +// +// output: +// file "*.{txt,pdf}" into ch_mlib_peak_qc +// file "*.tsv" into ch_mlib_peak_qc_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mLb.clN' +// """ +// plot_macs_qc.r \\ +// -i ${peaks.join(',')} \\ +// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ +// -o ./ \\ +// -p macs_peak.${suffix} +// +// plot_homer_annotatepeaks.r \\ +// -i ${annos.join(',')} \\ +// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ +// -o ./ \\ +// -p macs_annotatePeaks.${suffix} +// +// cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv +// """ +// } +// +// /* +// * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection +// */ +// process MergedLibConsensusPeakSet { +// label 'process_long' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks +// +// input: +// file peaks from ch_mlib_macs_consensus.collect{ it[1] } +// +// output: +// file "*.bed" into ch_mlib_macs_consensus_bed +// file "*.saf" into ch_mlib_macs_consensus_saf +// file "*.boolean.txt" into ch_mlib_macs_consensus_bool +// file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect +// file "*igv.txt" into ch_mlib_macs_consensus_igv +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mLb.clN' +// prefix = "consensus_peaks.${suffix}" +// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') +// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') +// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" +// """ +// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ +// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt +// +// macs2_merged_expand.py \\ +// ${prefix}.txt \\ +// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ +// ${prefix}.boolean.txt \\ +// --min_replicates $params.min_reps_consensus \\ +// $expandparam +// +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed +// +// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf +// +// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt +// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf +// +// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt +// """ +// } +// +// /* +// * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file +// */ +// process MergedLibConsensusPeakSetAnnotate { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks +// +// input: +// file bed from ch_mlib_macs_consensus_bed +// file bool from ch_mlib_macs_consensus_bool +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate +// +// script: +// prefix = "consensus_peaks.mLb.clN" +// """ +// annotatePeaks.pl \\ +// $bed \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}.annotatePeaks.txt +// +// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt +// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 6.6 Count reads in consensus peaks with featureCounts +// */ +// process MergedLibConsensusPeakSetCounts { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks +// +// input: +// file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } +// file saf from ch_mlib_macs_consensus_saf.collect() +// +// output: +// file "*featureCounts.txt" into ch_mlib_macs_consensus_counts +// file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc +// +// script: +// prefix = "consensus_peaks.mLb.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// pe_params = params.single_end ? '' : "-p --donotsort" +// """ +// featureCounts \\ +// -F SAF \\ +// -O \\ +// --fracOverlap 0.2 \\ +// -T $task.cpus \\ +// $pe_params \\ +// -a $saf \\ +// -o ${prefix}.featureCounts.txt \\ +// ${bam_files.join(' ')} +// """ +// } +// +// /* +// * STEP 6.7 Perform differential analysis with DESeq2 +// */ +// process MergedLibConsensusPeakSetDESeq { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis +// +// input: +// file counts from ch_mlib_macs_consensus_counts +// file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header +// file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header +// +// output: +// file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results +// file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors +// file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results +// file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed +// file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv +// file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc +// +// script: +// prefix = "consensus_peaks.mLb.clN" +// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" +// """ +// featurecounts_deseq2.r \\ +// --featurecount_file $counts \\ +// --bam_suffix '$bam_ext' \\ +// --outdir ./ \\ +// --outprefix $prefix \\ +// --outsuffix .mLb \\ +// --cores $task.cpus +// +// cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv +// cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv +// +// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt +// """ +// } +// +// /* +// * STEP 6.8 Run ataqv on BAM file and corresponding peaks +// */ +// process MergedLibAtaqv { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_ataqv +// +// input: +// set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) +// file autosomes from ch_genome_autosomes.collect() +// file tss_bed from ch_tss_bed +// +// output: +// file "*.json" into ch_mlib_ataqv +// +// script: +// peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" +// mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" +// """ +// ataqv \\ +// --threads $task.cpus \\ +// $peak_param \\ +// --tss-file $tss_bed \\ +// --metrics-file ${name}.ataqv.json \\ +// --name $name \\ +// --ignore-read-groups \\ +// --autosomal-reference-file $autosomes \\ +// $mito_param \\ +// NA \\ +// ${bam[0]} +// """ +// } +// +// /* +// * STEP 6.9 run ataqv mkarv on all JSON files to render web app +// */ +// process MergedLibAtaqvMkarv { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_ataqv +// +// input: +// file json from ch_mlib_ataqv.collect() +// +// output: +// file "html" into ch_mlib_ataqv_mkarv +// +// script: +// """ +// mkarv \\ +// --concurrency $task.cpus \\ +// --force \\ +// ./html/ \\ +// ${json.join(' ')} +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE REPLICATE BAM -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 7 Merge library BAM files across all replicates +// */ +// ch_mlib_rm_orphan_bam_mrep +// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } +// .groupTuple(by: [0]) +// .map { it -> [ it[0], it[1].flatten() ] } +// .set { ch_mlib_rm_orphan_bam_mrep } +// +// process MergedRepBAM { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" +// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" +// else if (filename.endsWith(".stats")) "samtools_stats/$filename" +// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" +// else filename +// } +// +// input: +// set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep +// +// output: +// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, +// ch_mrep_bam_macs +// set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, +// ch_mrep_bam_flagstat_macs, +// ch_mrep_bam_flagstat_mqc +// file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc +// file "*.txt" into ch_mrep_bam_metrics_mqc +// +// when: +// !params.skip_merge_replicates && replicatesExist +// +// script: +// prefix = "${name}.mRp.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// def avail_mem = 3 +// if (!task.memory) { +// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." +// } else { +// avail_mem = task.memory.toGiga() +// } +// if (bam_files.size() > 1) { +// """ +// picard -Xmx${avail_mem}g MergeSamFiles \\ +// ${'INPUT='+bam_files.join(' INPUT=')} \\ +// OUTPUT=${name}.sorted.bam \\ +// SORT_ORDER=coordinate \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// samtools index ${name}.sorted.bam +// +// picard -Xmx${avail_mem}g MarkDuplicates \\ +// INPUT=${name}.sorted.bam \\ +// OUTPUT=${prefix}.sorted.bam \\ +// ASSUME_SORTED=true \\ +// REMOVE_DUPLICATES=true \\ +// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ +// VALIDATION_STRINGENCY=LENIENT \\ +// TMP_DIR=tmp +// +// samtools index ${prefix}.sorted.bam +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } else { +// """ +// ln -s ${bams[0]} ${prefix}.sorted.bam +// ln -s ${bams[1]} ${prefix}.sorted.bam.bai +// touch ${prefix}.MarkDuplicates.metrics.txt +// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat +// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats +// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats +// """ +// } +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 8.1 Read depth normalised bigWig +// */ +// process MergedRepBigWig { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith("scale_factor.txt")) "scale/$filename" +// else if (filename.endsWith(".bigWig")) "$filename" +// else null +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) +// file sizes from ch_genome_sizes_mrep_bigwig.collect() +// +// output: +// set val(name), file("*.bigWig") into ch_mrep_bigwig +// file "*scale_factor.txt" into ch_mrep_bigwig_scale +// file "*igv.txt" into ch_mrep_bigwig_igv +// +// script: +// prefix = "${name}.mRp.clN" +// pe_fragment = params.single_end ? "" : "-pc" +// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' +// """ +// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') +// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt +// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph +// +// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig +// +// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt +// """ +// } +// +// /* +// * STEP 8.2 Call peaks with MACS2 and calculate FRiP score +// */ +// process MergedRepMACSCallPeak { +// tag "$name" +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".tsv")) "qc/$filename" +// else if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) +// file mrep_peak_count_header from ch_mrep_peak_count_header +// file mrep_frip_score_header from ch_mrep_frip_score_header +// +// output: +// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output +// set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, +// ch_mrep_macs_qc, +// ch_mrep_macs_consensus +// file "*igv.txt" into ch_mrep_macs_igv +// file "*_mqc.tsv" into ch_mrep_macs_mqc +// +// script: +// prefix = "${name}.mRp.clN" +// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" +// format = params.single_end ? "BAM" : "BAMPE" +// pileup = params.save_macs_pileup ? "-B --SPMR" : "" +// """ +// macs2 callpeak \\ +// -t ${bam[0]} \\ +// $broad \\ +// -f $format \\ +// -g $params.macs_gsize \\ +// -n $prefix \\ +// $pileup \\ +// --keep-dup all \\ +// --nomodel +// +// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv +// +// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') +// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv +// +// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt +// """ +// } +// +// /* +// * STEP 8.3 Annotate peaks with HOMER +// */ +// process MergedRepAnnotatePeaks { +// tag "$name" +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// set val(name), file(peak) from ch_mrep_macs_homer +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.txt" into ch_mrep_macs_annotate +// +// script: +// prefix = "${name}.mRp.clN" +// """ +// annotatePeaks.pl \\ +// $peak \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}_peaks.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation +// */ +// process MergedRepPeakQC { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize +// +// input: +// file peaks from ch_mrep_macs_qc.collect{ it[1] } +// file annos from ch_mrep_macs_annotate.collect() +// file mrep_peak_annotation_header from ch_mrep_peak_annotation_header +// +// output: +// file "*.{txt,pdf}" into ch_mrep_peak_qc +// file "*.tsv" into ch_mrep_peak_qc_mqc +// +// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mRp.clN' +// """ +// plot_macs_qc.r \\ +// -i ${peaks.join(',')} \\ +// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ +// -o ./ \\ +// -p macs_peak.${suffix} +// +// plot_homer_annotatepeaks.r \\ +// -i ${annos.join(',')} \\ +// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ +// -o ./ \\ +// -p macs_annotatePeaks.${suffix} +// +// cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv +// """ +// } +// +// /* +// * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection +// */ +// process MergedRepConsensusPeakSet { +// label 'process_long' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file peaks from ch_mrep_macs_consensus.collect{ it[1] } +// +// output: +// file "*.bed" into ch_mrep_macs_consensus_bed +// file "*.saf" into ch_mrep_macs_consensus_saf +// file "*.boolean.txt" into ch_mrep_macs_consensus_bool +// file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect +// file "*igv.txt" into ch_mrep_macs_consensus_igv +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// suffix = 'mRp.clN' +// prefix = "consensus_peaks.${suffix}" +// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') +// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') +// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" +// """ +// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ +// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt +// +// macs2_merged_expand.py \\ +// ${prefix}.txt \\ +// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ +// ${prefix}.boolean.txt \\ +// $expandparam +// +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed +// +// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf +// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf +// +// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt +// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf +// +// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt +// """ +// } +// +// /* +// * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file +// */ +// process MergedRepConsensusPeakSetAnnotate { +// label "process_medium" +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file bed from ch_mrep_macs_consensus_bed +// file bool from ch_mrep_macs_consensus_bool +// file fasta from ch_fasta +// file gtf from ch_gtf +// +// output: +// file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate +// +// script: +// prefix = "consensus_peaks.mRp.clN" +// """ +// annotatePeaks.pl \\ +// $bed \\ +// $fasta \\ +// -gid \\ +// -gtf $gtf \\ +// -cpu $task.cpus \\ +// > ${prefix}.annotatePeaks.txt +// +// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt +// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt +// """ +// } +// +// /* +// * STEP 8.7 Count reads in consensus peaks with featureCounts +// */ +// process MergedRepConsensusPeakSetCounts { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks +// +// input: +// file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } +// file saf from ch_mrep_macs_consensus_saf.collect() +// +// output: +// file "*featureCounts.txt" into ch_mrep_macs_consensus_counts +// file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc +// +// script: +// prefix = "consensus_peaks.mRp.clN" +// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() +// pe_params = params.single_end ? '' : "-p --donotsort" +// """ +// featureCounts \\ +// -F SAF \\ +// -O \\ +// --fracOverlap 0.2 \\ +// -T $task.cpus \\ +// $pe_params \\ +// -a $saf \\ +// -o ${prefix}.featureCounts.txt \\ +// ${bam_files.join(' ')} +// """ +// } +// +// /* +// * STEP 8.8 Perform differential analysis with DESeq2 +// */ +// process MergedRepConsensusPeakSetDESeq { +// label 'process_medium' +// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', +// saveAs: { filename -> +// if (filename.endsWith(".igv.txt")) null +// else filename +// } +// +// when: +// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis +// +// input: +// file counts from ch_mrep_macs_consensus_counts +// file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header +// file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header +// +// output: +// file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results +// file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors +// file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results +// file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed +// file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv +// file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc +// +// script: +// prefix = "consensus_peaks.mRp.clN" +// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" +// """ +// featurecounts_deseq2.r \\ +// --featurecount_file $counts \\ +// --bam_suffix '$bam_ext' \\ +// --outdir ./ \\ +// --outprefix $prefix \\ +// --outsuffix .mRp \\ +// --cores $task.cpus +// +// cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv +// cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv +// +// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- IGV -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 9 - Create IGV session file +// */ +// process IGV { +// publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_igv +// +// input: +// file fasta from ch_fasta +// +// file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) +// file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) +// file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) +// file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) +// +// file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) +// file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) +// file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) +// file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) +// +// output: +// file "*.{txt,xml}" into ch_igv_session +// +// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ +// """ +// cat *.txt > igv_files.txt +// igv_files_to_session.py igv_session.xml igv_files.txt ../../genome/${fasta.getName()} --path_prefix '../../' +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- MULTIQC -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * Parse software version numbers +// */ +// process get_software_versions { +// publishDir "${params.outdir}/pipeline_info", mode: 'copy', +// saveAs: { filename -> +// if (filename.indexOf(".csv") > 0) filename +// else null +// } +// +// output: +// file 'software_versions_mqc.yaml' into ch_software_versions_mqc +// file "software_versions.csv" +// +// script: +// """ +// echo $workflow.manifest.version > v_pipeline.txt +// echo $workflow.nextflow.version > v_nextflow.txt +// fastqc --version > v_fastqc.txt +// trim_galore --version > v_trim_galore.txt +// echo \$(bwa 2>&1) > v_bwa.txt +// samtools --version > v_samtools.txt +// bedtools --version > v_bedtools.txt +// echo \$(bamtools --version 2>&1) > v_bamtools.txt +// echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true +// picard MarkDuplicates --version &> v_picard.txt || true +// echo \$(R --version 2>&1) > v_R.txt +// python -c "import pysam; print(pysam.__version__)" > v_pysam.txt +// echo \$(macs2 --version 2>&1) > v_macs2.txt +// touch v_homer.txt +// echo \$(ataqv --version 2>&1) > v_ataqv.txt +// echo \$(featureCounts -v 2>&1) > v_featurecounts.txt +// preseq &> v_preseq.txt +// multiqc --version > v_multiqc.txt +// scrape_software_versions.py &> software_versions_mqc.yaml +// """ +// } +// +// Channel.from(summary.collect{ [it.key, it.value] }) +// .map { k,v -> "
$k
${v ?: 'N/A'}
" } +// .reduce { a, b -> return [a, b].join("\n ") } +// .map { x -> """ +// id: 'nf-core-chipseq-summary' +// description: " - this information is collected when the pipeline is started." +// section_name: 'nf-core/chipseq Workflow Summary' +// section_href: 'https://github.com/nf-core/chipseq' +// plot_type: 'html' +// data: | +//
+// $x +//
+// """.stripIndent() } +// .set { ch_workflow_summary } +// +// /* +// * STEP 10 - MultiQC +// */ +// process MultiQC { +// publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' +// +// when: +// !params.skip_multiqc +// +// input: +// file (multiqc_config) from ch_multiqc_config +// file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) +// +// file ('software_versions/*') from ch_software_versions_mqc.collect() +// file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") +// +// file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) +// file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) +// file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) +// +// file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() +// +// file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() +// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} +// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() +// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() +// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() +// file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) +// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) +// file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) +// file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) +// file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) +// +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) +// file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) +// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) +// +// output: +// file "*multiqc_report.html" into ch_multiqc_report +// file "*_data" +// file "multiqc_plots" +// +// script: +// rtitle = custom_runName ? "--title \"$custom_runName\"" : '' +// rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' +// custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' +// """ +// multiqc . -f $rtitle $rfilename $custom_config_file \\ +// -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools +// """ +// } +// +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// /* -- -- */ +// /* -- REPORTS/DOCUMENTATION -- */ +// /* -- -- */ +// /////////////////////////////////////////////////////////////////////////////// +// /////////////////////////////////////////////////////////////////////////////// +// +// /* +// * STEP 11 - Output description HTML +// */ +// process output_documentation { +// publishDir "${params.outdir}/Documentation", mode: 'copy' +// +// input: +// file output_docs from ch_output_docs +// +// output: +// file "results_description.html" +// +// script: +// """ +// markdown_to_html.py $output_docs -o results_description.html +// """ +// } +// +// /* +// * Completion e-mail notification +// */ +// workflow.onComplete { +// +// // Set up the e-mail variables +// def subject = "[nf-core/atacseq] Successful: $workflow.runName" +// if (!workflow.success) { +// subject = "[nf-core/atacseq] FAILED: $workflow.runName" +// } +// def email_fields = [:] +// email_fields['version'] = workflow.manifest.version +// email_fields['runName'] = custom_runName ?: workflow.runName +// email_fields['success'] = workflow.success +// email_fields['dateComplete'] = workflow.complete +// email_fields['duration'] = workflow.duration +// email_fields['exitStatus'] = workflow.exitStatus +// email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') +// email_fields['errorReport'] = (workflow.errorReport ?: 'None') +// email_fields['commandLine'] = workflow.commandLine +// email_fields['projectDir'] = workflow.projectDir +// email_fields['summary'] = summary +// email_fields['summary']['Date Started'] = workflow.start +// email_fields['summary']['Date Completed'] = workflow.complete +// email_fields['summary']['Pipeline script file path'] = workflow.scriptFile +// email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId +// if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository +// if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId +// if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision +// email_fields['summary']['Nextflow Version'] = workflow.nextflow.version +// email_fields['summary']['Nextflow Build'] = workflow.nextflow.build +// email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp +// +// // On success try attach the multiqc report +// def mqc_report = null +// try { +// if (workflow.success) { +// mqc_report = ch_multiqc_report.getVal() +// if (mqc_report.getClass() == ArrayList) { +// log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" +// mqc_report = mqc_report[0] +// } +// } +// } catch (all) { +// log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" +// } +// +// // Check if we are only sending emails on failure +// email_address = params.email +// if (!params.email && params.email_on_fail && !workflow.success) { +// email_address = params.email_on_fail +// } +// +// // Render the TXT template +// def engine = new groovy.text.GStringTemplateEngine() +// def tf = new File("$baseDir/assets/email_template.txt") +// def txt_template = engine.createTemplate(tf).make(email_fields) +// def email_txt = txt_template.toString() +// +// // Render the HTML template +// def hf = new File("$baseDir/assets/email_template.html") +// def html_template = engine.createTemplate(hf).make(email_fields) +// def email_html = html_template.toString() +// +// // Render the sendmail template +// def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] +// def sf = new File("$baseDir/assets/sendmail_template.txt") +// def sendmail_template = engine.createTemplate(sf).make(smail_fields) +// def sendmail_html = sendmail_template.toString() +// +// // Send the HTML e-mail +// if (email_address) { +// try { +// if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } +// // Try to send HTML e-mail using sendmail +// [ 'sendmail', '-t' ].execute() << sendmail_html +// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" +// } catch (all) { +// // Catch failures and try with plaintext +// [ 'mail', '-s', subject, email_address ].execute() << email_txt +// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" +// } +// } +// +// // Write summary e-mail HTML to a file +// def output_d = new File("${params.outdir}/pipeline_info/") +// if (!output_d.exists()) { +// output_d.mkdirs() +// } +// def output_hf = new File(output_d, "pipeline_report.html") +// output_hf.withWriter { w -> w << email_html } +// def output_tf = new File(output_d, "pipeline_report.txt") +// output_tf.withWriter { w -> w << email_txt } +// +// c_green = params.monochrome_logs ? '' : "\033[0;32m"; +// c_purple = params.monochrome_logs ? '' : "\033[0;35m"; +// c_red = params.monochrome_logs ? '' : "\033[0;31m"; +// c_reset = params.monochrome_logs ? '' : "\033[0m"; +// +// if (workflow.stats.ignoredCount > 0 && workflow.success) { +// log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" +// log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" +// log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" +// } +// if (workflow.success) { +// log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" +// } else { +// checkHostname() +// log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" +// } +// +// } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// From 8a5022bce682a538d85e901512ecb9b50dae9f5b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 10:21:08 +0000 Subject: [PATCH 107/226] Remove comments --- main.nf | 3262 +++++++++++++++++++++++++++---------------------------- 1 file changed, 1631 insertions(+), 1631 deletions(-) diff --git a/main.nf b/main.nf index 12a67b31..2df57e44 100644 --- a/main.nf +++ b/main.nf @@ -520,1637 +520,1637 @@ process FastQC { } } -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- ADAPTER TRIMMING -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 2 - Trim Galore! -// */ -// if (params.skip_trimming) { -// ch_trimmed_reads = ch_raw_reads_trimgalore -// ch_trimgalore_results_mqc = Channel.empty() -// ch_trimgalore_fastqc_reports_mqc = Channel.empty() -// } else { -// process TrimGalore { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/trim_galore", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".html")) "fastqc/$filename" -// else if (filename.endsWith(".zip")) "fastqc/zips/$filename" -// else if (filename.endsWith("trimming_report.txt")) "logs/$filename" -// else params.save_trimmed ? filename : null -// } -// -// input: -// set val(name), file(reads) from ch_raw_reads_trimgalore -// -// output: -// set val(name), file("*.fq.gz") into ch_trimmed_reads -// file "*.txt" into ch_trimgalore_results_mqc -// file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc -// -// script: -// // Calculate number of --cores for TrimGalore based on value of task.cpus -// // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 -// // See: https://github.com/nf-core/atacseq/pull/65 -// def cores = 1 -// if (task.cpus) { -// cores = (task.cpus as int) - 4 -// if (params.single_end) cores = (task.cpus as int) - 3 -// if (cores < 1) cores = 1 -// if (cores > 4) cores = 4 -// } -// -// // Added soft-links to original fastqs for consistent naming in MultiQC -// c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' -// c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' -// tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' -// tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' -// nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' -// -// // Added soft-links to original fastqs for consistent naming in MultiQC -// if (params.single_end) { -// """ -// [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz -// trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz -// """ -// } else { -// """ -// [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz -// [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz -// trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz -// """ -// } -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- ALIGN -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 3.1 - Align read 1 with bwa -// */ -// process BWAMem { -// tag "$name" -// label 'process_high' -// -// input: -// set val(name), file(reads) from ch_trimmed_reads -// file index from ch_bwa_index.collect() -// -// output: -// set val(name), file("*.bam") into ch_bwa_bam -// -// script: -// prefix = "${name}.Lb" -// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" -// if (params.seq_center) { -// rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" -// } -// """ -// bwa mem \\ -// -t $task.cpus \\ -// -M \\ -// -R $rg \\ -// ${index}/${bwa_base} \\ -// $reads \\ -// | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - -// """ -// } -// -// /* -// * STEP 3.2 - Convert .bam to coordinate sorted .bam -// */ -// process SortBAM { -// tag "$name" -// label 'process_medium' -// if (params.save_align_intermeds) { -// publishDir path: "${params.outdir}/bwa/library", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else filename -// } -// } -// -// input: -// set val(name), file(bam) from ch_bwa_bam -// -// output: -// set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge -// file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc -// -// script: -// prefix = "${name}.Lb" -// """ -// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY BAM -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 4.1 Merge BAM files for all libraries from same replicate -// */ -// ch_sort_bam_merge -// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } -// .groupTuple(by: [0]) -// .map { it -> [ it[0], it[1].flatten() ] } -// .set { ch_sort_bam_merge } -// -// process MergedLibBAM { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" -// else params.save_align_intermeds ? filename : null -// } -// -// input: -// set val(name), file(bams) from ch_sort_bam_merge -// -// output: -// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, -// ch_mlib_bam_preseq, -// ch_mlib_bam_ataqv -// file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc -// file "*.txt" into ch_mlib_bam_metrics_mqc -// -// script: -// prefix = "${name}.mLb.mkD" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// if (bam_files.size() > 1) { -// """ -// picard -Xmx${avail_mem}g MergeSamFiles \\ -// ${'INPUT='+bam_files.join(' INPUT=')} \\ -// OUTPUT=${name}.sorted.bam \\ -// SORT_ORDER=coordinate \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// samtools index ${name}.sorted.bam -// -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${name}.sorted.bam \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=false \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } else { -// """ -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${bam_files[0]} \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=false \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /* -// * STEP 4.2 Filter BAM file at merged library-level -// */ -// process MergedLibBAMFilter { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (params.single_end || params.save_align_intermeds) { -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".sorted.bam")) filename -// else if (filename.endsWith(".sorted.bam.bai")) filename -// else null -// } -// } -// -// input: -// set val(name), file(bam) from ch_mlib_bam_filter -// file bed from ch_genome_filter_regions.collect() -// file bamtools_filter_config from ch_bamtools_filter_config -// -// output: -// set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam -// set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat -// file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc -// -// script: -// prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" -// filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" -// dup_params = params.keep_dups ? "" : "-F 0x0400" -// multimap_params = params.keep_multi_map ? "" : "-q 1" -// blacklist_params = params.blacklist ? "-L $bed" : "" -// name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" -// """ -// samtools view \\ -// $filter_params \\ -// $dup_params \\ -// $multimap_params \\ -// $blacklist_params \\ -// -b ${bam[0]} \\ -// | bamtools filter \\ -// -out ${prefix}.sorted.bam \\ -// -script $bamtools_filter_config -// -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// -// $name_sort_bam -// """ -// } -// -// /* -// * STEP 4.3 Remove orphan reads from paired-end BAM file -// */ -// if (params.single_end) { -// ch_mlib_filter_bam -// .into { ch_mlib_rm_orphan_bam_metrics; -// ch_mlib_rm_orphan_bam_bigwig; -// ch_mlib_rm_orphan_bam_macs; -// ch_mlib_rm_orphan_bam_plotfingerprint; -// ch_mlib_rm_orphan_bam_mrep; -// ch_mlib_name_bam_mlib_counts; -// ch_mlib_name_bam_mrep_counts } -// -// ch_mlib_filter_bam_flagstat -// .into { ch_mlib_rm_orphan_flagstat_bigwig; -// ch_mlib_rm_orphan_flagstat_macs; -// ch_mlib_rm_orphan_flagstat_mqc } -// -// ch_mlib_filter_bam_stats_mqc -// .set { ch_mlib_rm_orphan_stats_mqc } -// } else { -// process MergedLibBAMRemoveOrphan { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".sorted.bam")) filename -// else if (filename.endsWith(".sorted.bam.bai")) filename -// else null -// } -// -// input: -// set val(name), file(bam) from ch_mlib_filter_bam -// -// output: -// set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, -// ch_mlib_rm_orphan_bam_bigwig, -// ch_mlib_rm_orphan_bam_macs, -// ch_mlib_rm_orphan_bam_plotfingerprint, -// ch_mlib_rm_orphan_bam_mrep -// set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, -// ch_mlib_name_bam_mrep_counts -// set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, -// ch_mlib_rm_orphan_flagstat_macs, -// ch_mlib_rm_orphan_flagstat_mqc -// file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// prefix = "${name}.mLb.clN" -// """ -// bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs -// -// samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 5.1 preseq analysis after merging libraries and before filtering -// */ -// process MergedLibPreseq { -// tag "$name" -// label 'process_low' -// publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' -// -// when: -// !params.skip_preseq -// -// input: -// set val(name), file(bam) from ch_mlib_bam_preseq -// -// output: -// file "*.ccurve.txt" into ch_mlib_preseq_mqc -// -// script: -// prefix = "${name}.mLb.mkD" -// """ -// preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} -// """ -// } -// -// /* -// * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering -// */ -// process MergedLibMetrics { -// tag "$name" -// label 'process_medium' -// publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("_metrics")) "picard_metrics/$filename" -// else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" -// else null -// } -// -// when: -// !params.skip_picard_metrics -// -// input: -// set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics -// file fasta from ch_fasta -// -// output: -// file "*_metrics" into ch_mlib_collectmetrics_mqc -// file "*.pdf" into ch_mlib_collectmetrics_pdf -// -// script: -// prefix = "${name}.mLb.clN" -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// """ -// picard -Xmx${avail_mem}g CollectMultipleMetrics \\ -// INPUT=${bam[0]} \\ -// OUTPUT=${prefix}.CollectMultipleMetrics \\ -// REFERENCE_SEQUENCE=$fasta \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// """ -// } -// -// /* -// * STEP 5.3 Read depth normalised bigWig -// */ -// process MergedLibBigWig { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("scale_factor.txt")) "scale/$filename" -// else if (filename.endsWith(".bigWig")) "$filename" -// else null -// } -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) -// file sizes from ch_genome_sizes_mlib_bigwig.collect() -// -// output: -// set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile -// file "*scale_factor.txt" into ch_mlib_bigwig_scale -// file "*igv.txt" into ch_mlib_bigwig_igv -// -// script: -// prefix = "${name}.mLb.clN" -// pe_fragment = params.single_end ? "" : "-pc" -// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' -// """ -// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') -// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt -// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph -// -// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig -// -// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt -// """ -// } -// -// /* -// * STEP 5.4 generate gene body coverage plot with deepTools -// */ -// process MergedLibPlotProfile { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' -// -// when: -// !params.skip_plot_profile -// -// input: -// set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile -// file bed from ch_gene_bed -// -// output: -// file '*.{gz,pdf}' into ch_mlib_plotprofile_results -// file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// """ -// computeMatrix scale-regions \\ -// --regionsFileName $bed \\ -// --scoreFileName $bigwig \\ -// --outFileName ${prefix}.computeMatrix.mat.gz \\ -// --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ -// --regionBodyLength 1000 \\ -// --beforeRegionStartLength 3000 \\ -// --afterRegionStartLength 3000 \\ -// --skipZeros \\ -// --smartLabels \\ -// --numberOfProcessors $task.cpus -// -// plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ -// --outFileName ${prefix}.plotProfile.pdf \\ -// --outFileNameData ${prefix}.plotProfile.tab -// """ -// } -// -// /* -// * STEP 5.5 deepTools plotFingerprint -// */ -// process MergedLibPlotFingerprint { -// tag "$name" -// label 'process_high' -// publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' -// -// when: -// !params.skip_plot_fingerprint -// -// input: -// set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint -// -// output: -// file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results -// file '*.raw.txt' into ch_mlib_plotfingerprint_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' -// """ -// plotFingerprint \\ -// --bamfiles ${bam[0]} \\ -// --plotFile ${prefix}.plotFingerprint.pdf \\ -// $extend \\ -// --labels $prefix \\ -// --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ -// --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ -// --skipZeros \\ -// --numberOfProcessors $task.cpus \\ -// --numberOfSamples $params.fingerprint_bins -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE LIBRARY PEAK ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 6.1 Call peaks with MACS2 and calculate FRiP score -// */ -// process MergedLibMACSCallPeak { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".tsv")) "qc/$filename" -// else if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) -// file mlib_peak_count_header from ch_mlib_peak_count_header -// file mlib_frip_score_header from ch_mlib_frip_score_header -// -// output: -// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output -// set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, -// ch_mlib_macs_qc, -// ch_mlib_macs_consensus, -// ch_mlib_macs_ataqv -// file "*igv.txt" into ch_mlib_macs_igv -// file "*_mqc.tsv" into ch_mlib_macs_mqc -// -// script: -// prefix = "${name}.mLb.clN" -// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" -// format = params.single_end ? "BAM" : "BAMPE" -// pileup = params.save_macs_pileup ? "-B --SPMR" : "" -// """ -// macs2 callpeak \\ -// -t ${bam[0]} \\ -// $broad \\ -// -f $format \\ -// -g $params.macs_gsize \\ -// -n $prefix \\ -// $pileup \\ -// --keep-dup all \\ -// --nomodel -// -// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv -// -// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') -// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv -// -// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt -// """ -// } -// -// /* -// * STEP 6.2 Annotate peaks with HOMER -// */ -// process MergedLibAnnotatePeaks { -// tag "$name" -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' -// -// when: -// params.macs_gsize -// -// input: -// set val(name), file(peak) from ch_mlib_macs_homer -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.txt" into ch_mlib_macs_annotate -// -// script: -// prefix = "${name}.mLb.clN" -// """ -// annotatePeaks.pl \\ -// $peak \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}_peaks.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation -// */ -// process MergedLibPeakQC { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' -// -// when: -// params.macs_gsize -// -// input: -// file peaks from ch_mlib_macs_qc.collect{ it[1] } -// file annos from ch_mlib_macs_annotate.collect() -// file mlib_peak_annotation_header from ch_mlib_peak_annotation_header -// -// output: -// file "*.{txt,pdf}" into ch_mlib_peak_qc -// file "*.tsv" into ch_mlib_peak_qc_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mLb.clN' -// """ -// plot_macs_qc.r \\ -// -i ${peaks.join(',')} \\ -// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ -// -o ./ \\ -// -p macs_peak.${suffix} -// -// plot_homer_annotatepeaks.r \\ -// -i ${annos.join(',')} \\ -// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ -// -o ./ \\ -// -p macs_annotatePeaks.${suffix} -// -// cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv -// """ -// } -// -// /* -// * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection -// */ -// process MergedLibConsensusPeakSet { -// label 'process_long' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks -// -// input: -// file peaks from ch_mlib_macs_consensus.collect{ it[1] } -// -// output: -// file "*.bed" into ch_mlib_macs_consensus_bed -// file "*.saf" into ch_mlib_macs_consensus_saf -// file "*.boolean.txt" into ch_mlib_macs_consensus_bool -// file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect -// file "*igv.txt" into ch_mlib_macs_consensus_igv -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mLb.clN' -// prefix = "consensus_peaks.${suffix}" -// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') -// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') -// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" -// """ -// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ -// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt -// -// macs2_merged_expand.py \\ -// ${prefix}.txt \\ -// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ -// ${prefix}.boolean.txt \\ -// --min_replicates $params.min_reps_consensus \\ -// $expandparam -// -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed -// -// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf -// -// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt -// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf -// -// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt -// """ -// } -// -// /* -// * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file -// */ -// process MergedLibConsensusPeakSetAnnotate { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks -// -// input: -// file bed from ch_mlib_macs_consensus_bed -// file bool from ch_mlib_macs_consensus_bool -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate -// -// script: -// prefix = "consensus_peaks.mLb.clN" -// """ -// annotatePeaks.pl \\ -// $bed \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}.annotatePeaks.txt -// -// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt -// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 6.6 Count reads in consensus peaks with featureCounts -// */ -// process MergedLibConsensusPeakSetCounts { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks -// -// input: -// file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } -// file saf from ch_mlib_macs_consensus_saf.collect() -// -// output: -// file "*featureCounts.txt" into ch_mlib_macs_consensus_counts -// file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc -// -// script: -// prefix = "consensus_peaks.mLb.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// pe_params = params.single_end ? '' : "-p --donotsort" -// """ -// featureCounts \\ -// -F SAF \\ -// -O \\ -// --fracOverlap 0.2 \\ -// -T $task.cpus \\ -// $pe_params \\ -// -a $saf \\ -// -o ${prefix}.featureCounts.txt \\ -// ${bam_files.join(' ')} -// """ -// } -// -// /* -// * STEP 6.7 Perform differential analysis with DESeq2 -// */ -// process MergedLibConsensusPeakSetDESeq { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis -// -// input: -// file counts from ch_mlib_macs_consensus_counts -// file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header -// file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header -// -// output: -// file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results -// file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors -// file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results -// file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed -// file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv -// file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc -// -// script: -// prefix = "consensus_peaks.mLb.clN" -// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" -// """ -// featurecounts_deseq2.r \\ -// --featurecount_file $counts \\ -// --bam_suffix '$bam_ext' \\ -// --outdir ./ \\ -// --outprefix $prefix \\ -// --outsuffix .mLb \\ -// --cores $task.cpus -// -// cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv -// cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv -// -// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt -// """ -// } -// -// /* -// * STEP 6.8 Run ataqv on BAM file and corresponding peaks -// */ -// process MergedLibAtaqv { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_ataqv -// -// input: -// set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) -// file autosomes from ch_genome_autosomes.collect() -// file tss_bed from ch_tss_bed -// -// output: -// file "*.json" into ch_mlib_ataqv -// -// script: -// peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" -// mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" -// """ -// ataqv \\ -// --threads $task.cpus \\ -// $peak_param \\ -// --tss-file $tss_bed \\ -// --metrics-file ${name}.ataqv.json \\ -// --name $name \\ -// --ignore-read-groups \\ -// --autosomal-reference-file $autosomes \\ -// $mito_param \\ -// NA \\ -// ${bam[0]} -// """ -// } -// -// /* -// * STEP 6.9 run ataqv mkarv on all JSON files to render web app -// */ -// process MergedLibAtaqvMkarv { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_ataqv -// -// input: -// file json from ch_mlib_ataqv.collect() -// -// output: -// file "html" into ch_mlib_ataqv_mkarv -// -// script: -// """ -// mkarv \\ -// --concurrency $task.cpus \\ -// --force \\ -// ./html/ \\ -// ${json.join(' ')} -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE REPLICATE BAM -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 7 Merge library BAM files across all replicates -// */ -// ch_mlib_rm_orphan_bam_mrep -// .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } -// .groupTuple(by: [0]) -// .map { it -> [ it[0], it[1].flatten() ] } -// .set { ch_mlib_rm_orphan_bam_mrep } -// -// process MergedRepBAM { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".flagstat")) "samtools_stats/$filename" -// else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" -// else if (filename.endsWith(".stats")) "samtools_stats/$filename" -// else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" -// else filename -// } -// -// input: -// set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep -// -// output: -// set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, -// ch_mrep_bam_macs -// set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, -// ch_mrep_bam_flagstat_macs, -// ch_mrep_bam_flagstat_mqc -// file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc -// file "*.txt" into ch_mrep_bam_metrics_mqc -// -// when: -// !params.skip_merge_replicates && replicatesExist -// -// script: -// prefix = "${name}.mRp.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// def avail_mem = 3 -// if (!task.memory) { -// log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." -// } else { -// avail_mem = task.memory.toGiga() -// } -// if (bam_files.size() > 1) { -// """ -// picard -Xmx${avail_mem}g MergeSamFiles \\ -// ${'INPUT='+bam_files.join(' INPUT=')} \\ -// OUTPUT=${name}.sorted.bam \\ -// SORT_ORDER=coordinate \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// samtools index ${name}.sorted.bam -// -// picard -Xmx${avail_mem}g MarkDuplicates \\ -// INPUT=${name}.sorted.bam \\ -// OUTPUT=${prefix}.sorted.bam \\ -// ASSUME_SORTED=true \\ -// REMOVE_DUPLICATES=true \\ -// METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ -// VALIDATION_STRINGENCY=LENIENT \\ -// TMP_DIR=tmp -// -// samtools index ${prefix}.sorted.bam -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } else { -// """ -// ln -s ${bams[0]} ${prefix}.sorted.bam -// ln -s ${bams[1]} ${prefix}.sorted.bam.bai -// touch ${prefix}.MarkDuplicates.metrics.txt -// samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat -// samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats -// samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats -// """ -// } -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 8.1 Read depth normalised bigWig -// */ -// process MergedRepBigWig { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith("scale_factor.txt")) "scale/$filename" -// else if (filename.endsWith(".bigWig")) "$filename" -// else null -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) -// file sizes from ch_genome_sizes_mrep_bigwig.collect() -// -// output: -// set val(name), file("*.bigWig") into ch_mrep_bigwig -// file "*scale_factor.txt" into ch_mrep_bigwig_scale -// file "*igv.txt" into ch_mrep_bigwig_igv -// -// script: -// prefix = "${name}.mRp.clN" -// pe_fragment = params.single_end ? "" : "-pc" -// extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' -// """ -// SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') -// echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt -// genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph -// -// bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig -// -// find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt -// """ -// } -// -// /* -// * STEP 8.2 Call peaks with MACS2 and calculate FRiP score -// */ -// process MergedRepMACSCallPeak { -// tag "$name" -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".tsv")) "qc/$filename" -// else if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) -// file mrep_peak_count_header from ch_mrep_peak_count_header -// file mrep_frip_score_header from ch_mrep_frip_score_header -// -// output: -// set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output -// set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, -// ch_mrep_macs_qc, -// ch_mrep_macs_consensus -// file "*igv.txt" into ch_mrep_macs_igv -// file "*_mqc.tsv" into ch_mrep_macs_mqc -// -// script: -// prefix = "${name}.mRp.clN" -// broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" -// format = params.single_end ? "BAM" : "BAMPE" -// pileup = params.save_macs_pileup ? "-B --SPMR" : "" -// """ -// macs2 callpeak \\ -// -t ${bam[0]} \\ -// $broad \\ -// -f $format \\ -// -g $params.macs_gsize \\ -// -n $prefix \\ -// $pileup \\ -// --keep-dup all \\ -// --nomodel -// -// cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv -// -// READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') -// grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv -// -// find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt -// """ -// } -// -// /* -// * STEP 8.3 Annotate peaks with HOMER -// */ -// process MergedRepAnnotatePeaks { -// tag "$name" -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// set val(name), file(peak) from ch_mrep_macs_homer -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.txt" into ch_mrep_macs_annotate -// -// script: -// prefix = "${name}.mRp.clN" -// """ -// annotatePeaks.pl \\ -// $peak \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}_peaks.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation -// */ -// process MergedRepPeakQC { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize -// -// input: -// file peaks from ch_mrep_macs_qc.collect{ it[1] } -// file annos from ch_mrep_macs_annotate.collect() -// file mrep_peak_annotation_header from ch_mrep_peak_annotation_header -// -// output: -// file "*.{txt,pdf}" into ch_mrep_peak_qc -// file "*.tsv" into ch_mrep_peak_qc_mqc -// -// script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mRp.clN' -// """ -// plot_macs_qc.r \\ -// -i ${peaks.join(',')} \\ -// -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ -// -o ./ \\ -// -p macs_peak.${suffix} -// -// plot_homer_annotatepeaks.r \\ -// -i ${annos.join(',')} \\ -// -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ -// -o ./ \\ -// -p macs_annotatePeaks.${suffix} -// -// cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv -// """ -// } -// -// /* -// * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection -// */ -// process MergedRepConsensusPeakSet { -// label 'process_long' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file peaks from ch_mrep_macs_consensus.collect{ it[1] } -// -// output: -// file "*.bed" into ch_mrep_macs_consensus_bed -// file "*.saf" into ch_mrep_macs_consensus_saf -// file "*.boolean.txt" into ch_mrep_macs_consensus_bool -// file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect -// file "*igv.txt" into ch_mrep_macs_consensus_igv -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// suffix = 'mRp.clN' -// prefix = "consensus_peaks.${suffix}" -// mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') -// collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') -// expandparam = params.narrow_peak ? "--is_narrow_peak" : "" -// """ -// sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ -// | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt -// -// macs2_merged_expand.py \\ -// ${prefix}.txt \\ -// ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ -// ${prefix}.boolean.txt \\ -// $expandparam -// -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed -// -// echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf -// awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf -// -// sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt -// plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf -// -// find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt -// """ -// } -// -// /* -// * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file -// */ -// process MergedRepConsensusPeakSetAnnotate { -// label "process_medium" -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file bed from ch_mrep_macs_consensus_bed -// file bool from ch_mrep_macs_consensus_bool -// file fasta from ch_fasta -// file gtf from ch_gtf -// -// output: -// file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate -// -// script: -// prefix = "consensus_peaks.mRp.clN" -// """ -// annotatePeaks.pl \\ -// $bed \\ -// $fasta \\ -// -gid \\ -// -gtf $gtf \\ -// -cpu $task.cpus \\ -// > ${prefix}.annotatePeaks.txt -// -// cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt -// paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt -// """ -// } -// -// /* -// * STEP 8.7 Count reads in consensus peaks with featureCounts -// */ -// process MergedRepConsensusPeakSetCounts { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks -// -// input: -// file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } -// file saf from ch_mrep_macs_consensus_saf.collect() -// -// output: -// file "*featureCounts.txt" into ch_mrep_macs_consensus_counts -// file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc -// -// script: -// prefix = "consensus_peaks.mRp.clN" -// bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() -// pe_params = params.single_end ? '' : "-p --donotsort" -// """ -// featureCounts \\ -// -F SAF \\ -// -O \\ -// --fracOverlap 0.2 \\ -// -T $task.cpus \\ -// $pe_params \\ -// -a $saf \\ -// -o ${prefix}.featureCounts.txt \\ -// ${bam_files.join(' ')} -// """ -// } -// -// /* -// * STEP 8.8 Perform differential analysis with DESeq2 -// */ -// process MergedRepConsensusPeakSetDESeq { -// label 'process_medium' -// publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', -// saveAs: { filename -> -// if (filename.endsWith(".igv.txt")) null -// else filename -// } -// -// when: -// !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis -// -// input: -// file counts from ch_mrep_macs_consensus_counts -// file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header -// file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header -// -// output: -// file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results -// file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors -// file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results -// file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed -// file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv -// file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc -// -// script: -// prefix = "consensus_peaks.mRp.clN" -// bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" -// """ -// featurecounts_deseq2.r \\ -// --featurecount_file $counts \\ -// --bam_suffix '$bam_ext' \\ -// --outdir ./ \\ -// --outprefix $prefix \\ -// --outsuffix .mRp \\ -// --cores $task.cpus -// -// cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv -// cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv -// -// find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- IGV -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 9 - Create IGV session file -// */ -// process IGV { -// publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_igv -// -// input: -// file fasta from ch_fasta -// -// file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) -// file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) -// file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) -// file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) -// -// file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) -// file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) -// file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) -// file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) -// -// output: -// file "*.{txt,xml}" into ch_igv_session -// -// script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ -// """ -// cat *.txt > igv_files.txt -// igv_files_to_session.py igv_session.xml igv_files.txt ../../genome/${fasta.getName()} --path_prefix '../../' -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- MULTIQC -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * Parse software version numbers -// */ -// process get_software_versions { -// publishDir "${params.outdir}/pipeline_info", mode: 'copy', -// saveAs: { filename -> -// if (filename.indexOf(".csv") > 0) filename -// else null -// } -// -// output: -// file 'software_versions_mqc.yaml' into ch_software_versions_mqc -// file "software_versions.csv" -// -// script: -// """ -// echo $workflow.manifest.version > v_pipeline.txt -// echo $workflow.nextflow.version > v_nextflow.txt -// fastqc --version > v_fastqc.txt -// trim_galore --version > v_trim_galore.txt -// echo \$(bwa 2>&1) > v_bwa.txt -// samtools --version > v_samtools.txt -// bedtools --version > v_bedtools.txt -// echo \$(bamtools --version 2>&1) > v_bamtools.txt -// echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true -// picard MarkDuplicates --version &> v_picard.txt || true -// echo \$(R --version 2>&1) > v_R.txt -// python -c "import pysam; print(pysam.__version__)" > v_pysam.txt -// echo \$(macs2 --version 2>&1) > v_macs2.txt -// touch v_homer.txt -// echo \$(ataqv --version 2>&1) > v_ataqv.txt -// echo \$(featureCounts -v 2>&1) > v_featurecounts.txt -// preseq &> v_preseq.txt -// multiqc --version > v_multiqc.txt -// scrape_software_versions.py &> software_versions_mqc.yaml -// """ -// } -// -// Channel.from(summary.collect{ [it.key, it.value] }) -// .map { k,v -> "
$k
${v ?: 'N/A'}
" } -// .reduce { a, b -> return [a, b].join("\n ") } -// .map { x -> """ -// id: 'nf-core-chipseq-summary' -// description: " - this information is collected when the pipeline is started." -// section_name: 'nf-core/chipseq Workflow Summary' -// section_href: 'https://github.com/nf-core/chipseq' -// plot_type: 'html' -// data: | -//
-// $x -//
-// """.stripIndent() } -// .set { ch_workflow_summary } -// -// /* -// * STEP 10 - MultiQC -// */ -// process MultiQC { -// publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' -// -// when: -// !params.skip_multiqc -// -// input: -// file (multiqc_config) from ch_multiqc_config -// file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) -// -// file ('software_versions/*') from ch_software_versions_mqc.collect() -// file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") -// -// file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) -// file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) -// file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) -// -// file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() -// -// file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() -// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} -// file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() -// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() -// file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() -// file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) -// file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) -// file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) -// file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) -// file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) -// -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) -// file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) -// file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) -// -// output: -// file "*multiqc_report.html" into ch_multiqc_report -// file "*_data" -// file "multiqc_plots" -// -// script: -// rtitle = custom_runName ? "--title \"$custom_runName\"" : '' -// rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' -// custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' -// """ -// multiqc . -f $rtitle $rfilename $custom_config_file \\ -// -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools -// """ -// } -// -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// /* -- -- */ -// /* -- REPORTS/DOCUMENTATION -- */ -// /* -- -- */ -// /////////////////////////////////////////////////////////////////////////////// -// /////////////////////////////////////////////////////////////////////////////// -// -// /* -// * STEP 11 - Output description HTML -// */ -// process output_documentation { -// publishDir "${params.outdir}/Documentation", mode: 'copy' -// -// input: -// file output_docs from ch_output_docs -// -// output: -// file "results_description.html" -// -// script: -// """ -// markdown_to_html.py $output_docs -o results_description.html -// """ -// } -// -// /* -// * Completion e-mail notification -// */ -// workflow.onComplete { -// -// // Set up the e-mail variables -// def subject = "[nf-core/atacseq] Successful: $workflow.runName" -// if (!workflow.success) { -// subject = "[nf-core/atacseq] FAILED: $workflow.runName" -// } -// def email_fields = [:] -// email_fields['version'] = workflow.manifest.version -// email_fields['runName'] = custom_runName ?: workflow.runName -// email_fields['success'] = workflow.success -// email_fields['dateComplete'] = workflow.complete -// email_fields['duration'] = workflow.duration -// email_fields['exitStatus'] = workflow.exitStatus -// email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') -// email_fields['errorReport'] = (workflow.errorReport ?: 'None') -// email_fields['commandLine'] = workflow.commandLine -// email_fields['projectDir'] = workflow.projectDir -// email_fields['summary'] = summary -// email_fields['summary']['Date Started'] = workflow.start -// email_fields['summary']['Date Completed'] = workflow.complete -// email_fields['summary']['Pipeline script file path'] = workflow.scriptFile -// email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId -// if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository -// if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId -// if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision -// email_fields['summary']['Nextflow Version'] = workflow.nextflow.version -// email_fields['summary']['Nextflow Build'] = workflow.nextflow.build -// email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp -// -// // On success try attach the multiqc report -// def mqc_report = null -// try { -// if (workflow.success) { -// mqc_report = ch_multiqc_report.getVal() -// if (mqc_report.getClass() == ArrayList) { -// log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" -// mqc_report = mqc_report[0] -// } -// } -// } catch (all) { -// log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" -// } -// -// // Check if we are only sending emails on failure -// email_address = params.email -// if (!params.email && params.email_on_fail && !workflow.success) { -// email_address = params.email_on_fail -// } -// -// // Render the TXT template -// def engine = new groovy.text.GStringTemplateEngine() -// def tf = new File("$baseDir/assets/email_template.txt") -// def txt_template = engine.createTemplate(tf).make(email_fields) -// def email_txt = txt_template.toString() -// -// // Render the HTML template -// def hf = new File("$baseDir/assets/email_template.html") -// def html_template = engine.createTemplate(hf).make(email_fields) -// def email_html = html_template.toString() -// -// // Render the sendmail template -// def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] -// def sf = new File("$baseDir/assets/sendmail_template.txt") -// def sendmail_template = engine.createTemplate(sf).make(smail_fields) -// def sendmail_html = sendmail_template.toString() -// -// // Send the HTML e-mail -// if (email_address) { -// try { -// if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } -// // Try to send HTML e-mail using sendmail -// [ 'sendmail', '-t' ].execute() << sendmail_html -// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" -// } catch (all) { -// // Catch failures and try with plaintext -// [ 'mail', '-s', subject, email_address ].execute() << email_txt -// log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" -// } -// } -// -// // Write summary e-mail HTML to a file -// def output_d = new File("${params.outdir}/pipeline_info/") -// if (!output_d.exists()) { -// output_d.mkdirs() -// } -// def output_hf = new File(output_d, "pipeline_report.html") -// output_hf.withWriter { w -> w << email_html } -// def output_tf = new File(output_d, "pipeline_report.txt") -// output_tf.withWriter { w -> w << email_txt } -// -// c_green = params.monochrome_logs ? '' : "\033[0;32m"; -// c_purple = params.monochrome_logs ? '' : "\033[0;35m"; -// c_red = params.monochrome_logs ? '' : "\033[0;31m"; -// c_reset = params.monochrome_logs ? '' : "\033[0m"; -// -// if (workflow.stats.ignoredCount > 0 && workflow.success) { -// log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" -// log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" -// log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" -// } -// if (workflow.success) { -// log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" -// } else { -// checkHostname() -// log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" -// } -// -// } +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- ADAPTER TRIMMING -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 2 - Trim Galore! + */ +if (params.skip_trimming) { + ch_trimmed_reads = ch_raw_reads_trimgalore + ch_trimgalore_results_mqc = Channel.empty() + ch_trimgalore_fastqc_reports_mqc = Channel.empty() +} else { + process TrimGalore { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/trim_galore", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".html")) "fastqc/$filename" + else if (filename.endsWith(".zip")) "fastqc/zips/$filename" + else if (filename.endsWith("trimming_report.txt")) "logs/$filename" + else params.save_trimmed ? filename : null + } + + input: + set val(name), file(reads) from ch_raw_reads_trimgalore + + output: + set val(name), file("*.fq.gz") into ch_trimmed_reads + file "*.txt" into ch_trimgalore_results_mqc + file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc + + script: + // Calculate number of --cores for TrimGalore based on value of task.cpus + // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 + // See: https://github.com/nf-core/atacseq/pull/65 + def cores = 1 + if (task.cpus) { + cores = (task.cpus as int) - 4 + if (params.single_end) cores = (task.cpus as int) - 3 + if (cores < 1) cores = 1 + if (cores > 4) cores = 4 + } + + // Added soft-links to original fastqs for consistent naming in MultiQC + c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' + c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' + tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' + tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' + nextseq = params.trim_nextseq > 0 ? "--nextseq ${params.trim_nextseq}" : '' + + // Added soft-links to original fastqs for consistent naming in MultiQC + if (params.single_end) { + """ + [ ! -f ${name}.fastq.gz ] && ln -s $reads ${name}.fastq.gz + trim_galore --cores $cores --fastqc --gzip $c_r1 $tpc_r1 $nextseq ${name}.fastq.gz + """ + } else { + """ + [ ! -f ${name}_1.fastq.gz ] && ln -s ${reads[0]} ${name}_1.fastq.gz + [ ! -f ${name}_2.fastq.gz ] && ln -s ${reads[1]} ${name}_2.fastq.gz + trim_galore --cores $cores --paired --fastqc --gzip $c_r1 $c_r2 $tpc_r1 $tpc_r2 $nextseq ${name}_1.fastq.gz ${name}_2.fastq.gz + """ + } + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- ALIGN -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 3.1 - Align read 1 with bwa + */ +process BWAMem { + tag "$name" + label 'process_high' + + input: + set val(name), file(reads) from ch_trimmed_reads + file index from ch_bwa_index.collect() + + output: + set val(name), file("*.bam") into ch_bwa_bam + + script: + prefix = "${name}.Lb" + rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\'" + if (params.seq_center) { + rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" + } + """ + bwa mem \\ + -t $task.cpus \\ + -M \\ + -R $rg \\ + ${index}/${bwa_base} \\ + $reads \\ + | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - + """ +} + +/* + * STEP 3.2 - Convert .bam to coordinate sorted .bam + */ +process SortBAM { + tag "$name" + label 'process_medium' + if (params.save_align_intermeds) { + publishDir path: "${params.outdir}/bwa/library", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else filename + } + } + + input: + set val(name), file(bam) from ch_bwa_bam + + output: + set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge + file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc + + script: + prefix = "${name}.Lb" + """ + samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $name $bam + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY BAM -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 4.1 Merge BAM files for all libraries from same replicate + */ +ch_sort_bam_merge + .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_sort_bam_merge } + +process MergedLibBAM { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + else params.save_align_intermeds ? filename : null + } + + input: + set val(name), file(bams) from ch_sort_bam_merge + + output: + set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, + ch_mlib_bam_preseq, + ch_mlib_bam_ataqv + file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc + file "*.txt" into ch_mlib_bam_metrics_mqc + + script: + prefix = "${name}.mLb.mkD" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + if (bam_files.size() > 1) { + """ + picard -Xmx${avail_mem}g MergeSamFiles \\ + ${'INPUT='+bam_files.join(' INPUT=')} \\ + OUTPUT=${name}.sorted.bam \\ + SORT_ORDER=coordinate \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + samtools index ${name}.sorted.bam + + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${name}.sorted.bam \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=false \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } else { + """ + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${bam_files[0]} \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=false \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/* + * STEP 4.2 Filter BAM file at merged library-level + */ +process MergedLibBAMFilter { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (params.single_end || params.save_align_intermeds) { + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".sorted.bam")) filename + else if (filename.endsWith(".sorted.bam.bai")) filename + else null + } + } + + input: + set val(name), file(bam) from ch_mlib_bam_filter + file bed from ch_genome_filter_regions.collect() + file bamtools_filter_config from ch_bamtools_filter_config + + output: + set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam + set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat + file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc + + script: + prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" + filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" + dup_params = params.keep_dups ? "" : "-F 0x0400" + multimap_params = params.keep_multi_map ? "" : "-q 1" + blacklist_params = params.blacklist ? "-L $bed" : "" + name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" + """ + samtools view \\ + $filter_params \\ + $dup_params \\ + $multimap_params \\ + $blacklist_params \\ + -b ${bam[0]} \\ + | bamtools filter \\ + -out ${prefix}.sorted.bam \\ + -script $bamtools_filter_config + + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + + $name_sort_bam + """ +} + +/* + * STEP 4.3 Remove orphan reads from paired-end BAM file + */ +if (params.single_end) { + ch_mlib_filter_bam + .into { ch_mlib_rm_orphan_bam_metrics; + ch_mlib_rm_orphan_bam_bigwig; + ch_mlib_rm_orphan_bam_macs; + ch_mlib_rm_orphan_bam_plotfingerprint; + ch_mlib_rm_orphan_bam_mrep; + ch_mlib_name_bam_mlib_counts; + ch_mlib_name_bam_mrep_counts } + + ch_mlib_filter_bam_flagstat + .into { ch_mlib_rm_orphan_flagstat_bigwig; + ch_mlib_rm_orphan_flagstat_macs; + ch_mlib_rm_orphan_flagstat_mqc } + + ch_mlib_filter_bam_stats_mqc + .set { ch_mlib_rm_orphan_stats_mqc } +} else { + process MergedLibBAMRemoveOrphan { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".sorted.bam")) filename + else if (filename.endsWith(".sorted.bam.bai")) filename + else null + } + + input: + set val(name), file(bam) from ch_mlib_filter_bam + + output: + set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, + ch_mlib_rm_orphan_bam_bigwig, + ch_mlib_rm_orphan_bam_macs, + ch_mlib_rm_orphan_bam_plotfingerprint, + ch_mlib_rm_orphan_bam_mrep + set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, + ch_mlib_name_bam_mrep_counts + set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, + ch_mlib_rm_orphan_flagstat_macs, + ch_mlib_rm_orphan_flagstat_mqc + file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + prefix = "${name}.mLb.clN" + """ + bampe_rm_orphan.py ${bam[0]} ${prefix}.bam --only_fr_pairs + + samtools sort -@ $task.cpus -o ${prefix}.sorted.bam -T $prefix ${prefix}.bam + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY BAM POST-ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 5.1 preseq analysis after merging libraries and before filtering + */ +process MergedLibPreseq { + tag "$name" + label 'process_low' + publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' + + when: + !params.skip_preseq + + input: + set val(name), file(bam) from ch_mlib_bam_preseq + + output: + file "*.ccurve.txt" into ch_mlib_preseq_mqc + + script: + prefix = "${name}.mLb.mkD" + """ + preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} + """ +} + +/* + * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering + */ +process MergedLibMetrics { + tag "$name" + label 'process_medium' + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("_metrics")) "picard_metrics/$filename" + else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" + else null + } + + when: + !params.skip_picard_metrics + + input: + set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics + file fasta from ch_fasta + + output: + file "*_metrics" into ch_mlib_collectmetrics_mqc + file "*.pdf" into ch_mlib_collectmetrics_pdf + + script: + prefix = "${name}.mLb.clN" + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + """ + picard -Xmx${avail_mem}g CollectMultipleMetrics \\ + INPUT=${bam[0]} \\ + OUTPUT=${prefix}.CollectMultipleMetrics \\ + REFERENCE_SEQUENCE=$fasta \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + """ +} + +/* + * STEP 5.3 Read depth normalised bigWig + */ +process MergedLibBigWig { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("scale_factor.txt")) "scale/$filename" + else if (filename.endsWith(".bigWig")) "$filename" + else null + } + + input: + set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) + file sizes from ch_genome_sizes_mlib_bigwig.collect() + + output: + set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile + file "*scale_factor.txt" into ch_mlib_bigwig_scale + file "*igv.txt" into ch_mlib_bigwig_igv + + script: + prefix = "${name}.mLb.clN" + pe_fragment = params.single_end ? "" : "-pc" + extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' + """ + SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') + echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph + + bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig + + find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedLibrary/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt + """ +} + +/* + * STEP 5.4 generate gene body coverage plot with deepTools + */ +process MergedLibPlotProfile { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' + + when: + !params.skip_plot_profile + + input: + set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile + file bed from ch_gene_bed + + output: + file '*.{gz,pdf}' into ch_mlib_plotprofile_results + file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc + + script: + prefix = "${name}.mLb.clN" + """ + computeMatrix scale-regions \\ + --regionsFileName $bed \\ + --scoreFileName $bigwig \\ + --outFileName ${prefix}.computeMatrix.mat.gz \\ + --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ + --regionBodyLength 1000 \\ + --beforeRegionStartLength 3000 \\ + --afterRegionStartLength 3000 \\ + --skipZeros \\ + --smartLabels \\ + --numberOfProcessors $task.cpus + + plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ + --outFileName ${prefix}.plotProfile.pdf \\ + --outFileNameData ${prefix}.plotProfile.tab + """ +} + +/* + * STEP 5.5 deepTools plotFingerprint + */ +process MergedLibPlotFingerprint { + tag "$name" + label 'process_high' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' + + when: + !params.skip_plot_fingerprint + + input: + set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint + + output: + file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results + file '*.raw.txt' into ch_mlib_plotfingerprint_mqc + + script: + prefix = "${name}.mLb.clN" + extend = (params.single_end && params.fragment_size > 0) ? "--extendReads ${params.fragment_size}" : '' + """ + plotFingerprint \\ + --bamfiles ${bam[0]} \\ + --plotFile ${prefix}.plotFingerprint.pdf \\ + $extend \\ + --labels $prefix \\ + --outRawCounts ${prefix}.plotFingerprint.raw.txt \\ + --outQualityMetrics ${prefix}.plotFingerprint.qcmetrics.txt \\ + --skipZeros \\ + --numberOfProcessors $task.cpus \\ + --numberOfSamples $params.fingerprint_bins + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE LIBRARY PEAK ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 6.1 Call peaks with MACS2 and calculate FRiP score + */ +process MergedLibMACSCallPeak { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".tsv")) "qc/$filename" + else if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize + + input: + set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) + file mlib_peak_count_header from ch_mlib_peak_count_header + file mlib_frip_score_header from ch_mlib_frip_score_header + + output: + set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output + set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, + ch_mlib_macs_qc, + ch_mlib_macs_consensus, + ch_mlib_macs_ataqv + file "*igv.txt" into ch_mlib_macs_igv + file "*_mqc.tsv" into ch_mlib_macs_mqc + + script: + prefix = "${name}.mLb.clN" + broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" + format = params.single_end ? "BAM" : "BAMPE" + pileup = params.save_macs_pileup ? "-B --SPMR" : "" + """ + macs2 callpeak \\ + -t ${bam[0]} \\ + $broad \\ + -f $format \\ + -g $params.macs_gsize \\ + -n $prefix \\ + $pileup \\ + --keep-dup all \\ + --nomodel + + cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mlib_peak_count_header - > ${prefix}_peaks.count_mqc.tsv + + READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') + grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mlib_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv + + find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt + """ +} + +/* + * STEP 6.2 Annotate peaks with HOMER + */ +process MergedLibAnnotatePeaks { + tag "$name" + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' + + when: + params.macs_gsize + + input: + set val(name), file(peak) from ch_mlib_macs_homer + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.txt" into ch_mlib_macs_annotate + + script: + prefix = "${name}.mLb.clN" + """ + annotatePeaks.pl \\ + $peak \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}_peaks.annotatePeaks.txt + """ +} + +/* + * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + */ +process MergedLibPeakQC { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' + + when: + params.macs_gsize + + input: + file peaks from ch_mlib_macs_qc.collect{ it[1] } + file annos from ch_mlib_macs_annotate.collect() + file mlib_peak_annotation_header from ch_mlib_peak_annotation_header + + output: + file "*.{txt,pdf}" into ch_mlib_peak_qc + file "*.tsv" into ch_mlib_peak_qc_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mLb.clN' + """ + plot_macs_qc.r \\ + -i ${peaks.join(',')} \\ + -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ + -o ./ \\ + -p macs_peak.${suffix} + + plot_homer_annotatepeaks.r \\ + -i ${annos.join(',')} \\ + -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ + -o ./ \\ + -p macs_annotatePeaks.${suffix} + + cat $mlib_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv + """ +} + +/* + * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + */ +process MergedLibConsensusPeakSet { + label 'process_long' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + + input: + file peaks from ch_mlib_macs_consensus.collect{ it[1] } + + output: + file "*.bed" into ch_mlib_macs_consensus_bed + file "*.saf" into ch_mlib_macs_consensus_saf + file "*.boolean.txt" into ch_mlib_macs_consensus_bool + file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect + file "*igv.txt" into ch_mlib_macs_consensus_igv + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mLb.clN' + prefix = "consensus_peaks.${suffix}" + mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') + collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') + expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + """ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt + + macs2_merged_expand.py \\ + ${prefix}.txt \\ + ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ + ${prefix}.boolean.txt \\ + --min_replicates $params.min_reps_consensus \\ + $expandparam + + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed + + echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf + + sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt + plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf + + find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt + """ +} + +/* + * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file + */ +process MergedLibConsensusPeakSetAnnotate { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + + input: + file bed from ch_mlib_macs_consensus_bed + file bool from ch_mlib_macs_consensus_bool + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate + + script: + prefix = "consensus_peaks.mLb.clN" + """ + annotatePeaks.pl \\ + $bed \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}.annotatePeaks.txt + + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt + """ +} + +/* + * STEP 6.6 Count reads in consensus peaks with featureCounts + */ +process MergedLibConsensusPeakSetCounts { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + + input: + file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } + file saf from ch_mlib_macs_consensus_saf.collect() + + output: + file "*featureCounts.txt" into ch_mlib_macs_consensus_counts + file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc + + script: + prefix = "consensus_peaks.mLb.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + pe_params = params.single_end ? '' : "-p --donotsort" + """ + featureCounts \\ + -F SAF \\ + -O \\ + --fracOverlap 0.2 \\ + -T $task.cpus \\ + $pe_params \\ + -a $saf \\ + -o ${prefix}.featureCounts.txt \\ + ${bam_files.join(' ')} + """ +} + +/* + * STEP 6.7 Perform differential analysis with DESeq2 + */ +process MergedLibConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis + + input: + file counts from ch_mlib_macs_consensus_counts + file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header + file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header + + output: + file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results + file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc + + script: + prefix = "consensus_peaks.mLb.clN" + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + """ + featurecounts_deseq2.r \\ + --featurecount_file $counts \\ + --bam_suffix '$bam_ext' \\ + --outdir ./ \\ + --outprefix $prefix \\ + --outsuffix .mLb \\ + --cores $task.cpus + + cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv + cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv + + find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt + """ +} + +/* + * STEP 6.8 Run ataqv on BAM file and corresponding peaks + */ +process MergedLibAtaqv { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_ataqv + + input: + set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) + file autosomes from ch_genome_autosomes.collect() + file tss_bed from ch_tss_bed + + output: + file "*.json" into ch_mlib_ataqv + + script: + peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" + mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" + """ + ataqv \\ + --threads $task.cpus \\ + $peak_param \\ + --tss-file $tss_bed \\ + --metrics-file ${name}.ataqv.json \\ + --name $name \\ + --ignore-read-groups \\ + --autosomal-reference-file $autosomes \\ + $mito_param \\ + NA \\ + ${bam[0]} + """ +} + +/* + * STEP 6.9 run ataqv mkarv on all JSON files to render web app + */ +process MergedLibAtaqvMkarv { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_ataqv + + input: + file json from ch_mlib_ataqv.collect() + + output: + file "html" into ch_mlib_ataqv_mkarv + + script: + """ + mkarv \\ + --concurrency $task.cpus \\ + --force \\ + ./html/ \\ + ${json.join(' ')} + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE REPLICATE BAM -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 7 Merge library BAM files across all replicates + */ +ch_mlib_rm_orphan_bam_mrep + .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_mlib_rm_orphan_bam_mrep } + +process MergedRepBAM { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".flagstat")) "samtools_stats/$filename" + else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" + else if (filename.endsWith(".stats")) "samtools_stats/$filename" + else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + else filename + } + + input: + set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep + + output: + set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, + ch_mrep_bam_macs + set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, + ch_mrep_bam_flagstat_macs, + ch_mrep_bam_flagstat_mqc + file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc + file "*.txt" into ch_mrep_bam_metrics_mqc + + when: + !params.skip_merge_replicates && replicatesExist + + script: + prefix = "${name}.mRp.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + def avail_mem = 3 + if (!task.memory) { + log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + } else { + avail_mem = task.memory.toGiga() + } + if (bam_files.size() > 1) { + """ + picard -Xmx${avail_mem}g MergeSamFiles \\ + ${'INPUT='+bam_files.join(' INPUT=')} \\ + OUTPUT=${name}.sorted.bam \\ + SORT_ORDER=coordinate \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + samtools index ${name}.sorted.bam + + picard -Xmx${avail_mem}g MarkDuplicates \\ + INPUT=${name}.sorted.bam \\ + OUTPUT=${prefix}.sorted.bam \\ + ASSUME_SORTED=true \\ + REMOVE_DUPLICATES=true \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt \\ + VALIDATION_STRINGENCY=LENIENT \\ + TMP_DIR=tmp + + samtools index ${prefix}.sorted.bam + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } else { + """ + ln -s ${bams[0]} ${prefix}.sorted.bam + ln -s ${bams[1]} ${prefix}.sorted.bam.bai + touch ${prefix}.MarkDuplicates.metrics.txt + samtools flagstat ${prefix}.sorted.bam > ${prefix}.sorted.bam.flagstat + samtools idxstats ${prefix}.sorted.bam > ${prefix}.sorted.bam.idxstats + samtools stats ${prefix}.sorted.bam > ${prefix}.sorted.bam.stats + """ + } +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MERGE REPLICATE BAM POST-ANALYSIS -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 8.1 Read depth normalised bigWig + */ +process MergedRepBigWig { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith("scale_factor.txt")) "scale/$filename" + else if (filename.endsWith(".bigWig")) "$filename" + else null + } + + when: + !params.skip_merge_replicates && replicatesExist + + input: + set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) + file sizes from ch_genome_sizes_mrep_bigwig.collect() + + output: + set val(name), file("*.bigWig") into ch_mrep_bigwig + file "*scale_factor.txt" into ch_mrep_bigwig_scale + file "*igv.txt" into ch_mrep_bigwig_igv + + script: + prefix = "${name}.mRp.clN" + pe_fragment = params.single_end ? "" : "-pc" + extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' + """ + SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') + echo \$SCALE_FACTOR > ${prefix}.scale_factor.txt + genomeCoverageBed -ibam ${bam[0]} -bg -scale \$SCALE_FACTOR $pe_fragment $extend | sort -T '.' -k1,1 -k2,2n > ${prefix}.bedGraph + + bedGraphToBigWig ${prefix}.bedGraph $sizes ${prefix}.bigWig + + find * -type f -name "*.bigWig" -exec echo -e "bwa/mergedReplicate/bigwig/"{}"\\t0,0,178" \\; > ${prefix}.bigWig.igv.txt + """ +} + +/* + * STEP 8.2 Call peaks with MACS2 and calculate FRiP score + */ +process MergedRepMACSCallPeak { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".tsv")) "qc/$filename" + else if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) + file mrep_peak_count_header from ch_mrep_peak_count_header + file mrep_frip_score_header from ch_mrep_frip_score_header + + output: + set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output + set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, + ch_mrep_macs_qc, + ch_mrep_macs_consensus + file "*igv.txt" into ch_mrep_macs_igv + file "*_mqc.tsv" into ch_mrep_macs_mqc + + script: + prefix = "${name}.mRp.clN" + broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" + format = params.single_end ? "BAM" : "BAMPE" + pileup = params.save_macs_pileup ? "-B --SPMR" : "" + """ + macs2 callpeak \\ + -t ${bam[0]} \\ + $broad \\ + -f $format \\ + -g $params.macs_gsize \\ + -n $prefix \\ + $pileup \\ + --keep-dup all \\ + --nomodel + + cat ${prefix}_peaks.${PEAK_TYPE} | wc -l | awk -v OFS='\t' '{ print "${name}", \$1 }' | cat $mrep_peak_count_header - > ${prefix}_peaks.count_mqc.tsv + + READS_IN_PEAKS=\$(intersectBed -a ${bam[0]} -b ${prefix}_peaks.${PEAK_TYPE} -bed -c -f 0.20 | awk -F '\t' '{sum += \$NF} END {print sum}') + grep 'mapped (' $flagstat | awk -v a="\$READS_IN_PEAKS" -v OFS='\t' '{print "${name}", a/\$1}' | cat $mrep_frip_score_header - > ${prefix}_peaks.FRiP_mqc.tsv + + find * -type f -name "*.${PEAK_TYPE}" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/"{}"\\t0,0,178" \\; > ${prefix}_peaks.igv.txt + """ +} + +/* + * STEP 8.3 Annotate peaks with HOMER + */ +process MergedRepAnnotatePeaks { + tag "$name" + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + set val(name), file(peak) from ch_mrep_macs_homer + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.txt" into ch_mrep_macs_annotate + + script: + prefix = "${name}.mRp.clN" + """ + annotatePeaks.pl \\ + $peak \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}_peaks.annotatePeaks.txt + """ +} + +/* + * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + */ +process MergedRepPeakQC { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize + + input: + file peaks from ch_mrep_macs_qc.collect{ it[1] } + file annos from ch_mrep_macs_annotate.collect() + file mrep_peak_annotation_header from ch_mrep_peak_annotation_header + + output: + file "*.{txt,pdf}" into ch_mrep_peak_qc + file "*.tsv" into ch_mrep_peak_qc_mqc + + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mRp.clN' + """ + plot_macs_qc.r \\ + -i ${peaks.join(',')} \\ + -s ${peaks.join(',').replaceAll(".${suffix}_peaks.${PEAK_TYPE}","")} \\ + -o ./ \\ + -p macs_peak.${suffix} + + plot_homer_annotatepeaks.r \\ + -i ${annos.join(',')} \\ + -s ${annos.join(',').replaceAll(".${suffix}_peaks.annotatePeaks.txt","")} \\ + -o ./ \\ + -p macs_annotatePeaks.${suffix} + + cat $mrep_peak_annotation_header macs_annotatePeaks.${suffix}.summary.txt > macs_annotatePeaks.${suffix}.summary_mqc.tsv + """ +} + +/* + * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + */ +process MergedRepConsensusPeakSet { + label 'process_long' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file peaks from ch_mrep_macs_consensus.collect{ it[1] } + + output: + file "*.bed" into ch_mrep_macs_consensus_bed + file "*.saf" into ch_mrep_macs_consensus_saf + file "*.boolean.txt" into ch_mrep_macs_consensus_bool + file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect + file "*igv.txt" into ch_mrep_macs_consensus_igv + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + suffix = 'mRp.clN' + prefix = "consensus_peaks.${suffix}" + mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') + collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') + expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + """ + sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ + | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt + + macs2_merged_expand.py \\ + ${prefix}.txt \\ + ${peaks.collect{it.toString()}.sort().join(',').replaceAll("_peaks.${PEAK_TYPE}","")} \\ + ${prefix}.boolean.txt \\ + $expandparam + + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$1, \$2, \$3, \$4, "0", "+" }' ${prefix}.boolean.txt > ${prefix}.bed + + echo -e "GeneID\tChr\tStart\tEnd\tStrand" > ${prefix}.saf + awk -v FS='\t' -v OFS='\t' 'FNR > 1 { print \$4, \$1, \$2, \$3, "+" }' ${prefix}.boolean.txt >> ${prefix}.saf + + sed -i 's/.${suffix}//g' ${prefix}.boolean.intersect.txt + plot_peak_intersect.r -i ${prefix}.boolean.intersect.txt -o ${prefix}.boolean.intersect.plot.pdf + + find * -type f -name "${prefix}.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/"{}"\\t0,0,0" \\; > ${prefix}.bed.igv.txt + """ +} + +/* + * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file + */ +process MergedRepConsensusPeakSetAnnotate { + label "process_medium" + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file bed from ch_mrep_macs_consensus_bed + file bool from ch_mrep_macs_consensus_bool + file fasta from ch_fasta + file gtf from ch_gtf + + output: + file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate + + script: + prefix = "consensus_peaks.mRp.clN" + """ + annotatePeaks.pl \\ + $bed \\ + $fasta \\ + -gid \\ + -gtf $gtf \\ + -cpu $task.cpus \\ + > ${prefix}.annotatePeaks.txt + + cut -f2- ${prefix}.annotatePeaks.txt | awk 'NR==1; NR > 1 {print \$0 | "sort -T '.' -k1,1 -k2,2n"}' | cut -f6- > tmp.txt + paste $bool tmp.txt > ${prefix}.boolean.annotatePeaks.txt + """ +} + +/* + * STEP 8.7 Count reads in consensus peaks with featureCounts + */ +process MergedRepConsensusPeakSetCounts { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + + input: + file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } + file saf from ch_mrep_macs_consensus_saf.collect() + + output: + file "*featureCounts.txt" into ch_mrep_macs_consensus_counts + file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc + + script: + prefix = "consensus_peaks.mRp.clN" + bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() + pe_params = params.single_end ? '' : "-p --donotsort" + """ + featureCounts \\ + -F SAF \\ + -O \\ + --fracOverlap 0.2 \\ + -T $task.cpus \\ + $pe_params \\ + -a $saf \\ + -o ${prefix}.featureCounts.txt \\ + ${bam_files.join(' ')} + """ +} + +/* + * STEP 8.8 Perform differential analysis with DESeq2 + */ +process MergedRepConsensusPeakSetDESeq { + label 'process_medium' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + saveAs: { filename -> + if (filename.endsWith(".igv.txt")) null + else filename + } + + when: + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis + + input: + file counts from ch_mrep_macs_consensus_counts + file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header + file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header + + output: + file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results + file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors + file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results + file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed + file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv + file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc + + script: + prefix = "consensus_peaks.mRp.clN" + bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + """ + featurecounts_deseq2.r \\ + --featurecount_file $counts \\ + --bam_suffix '$bam_ext' \\ + --outdir ./ \\ + --outprefix $prefix \\ + --outsuffix .mRp \\ + --cores $task.cpus + + cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv + cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv + + find * -type f -name "*.FDR0.05.results.bed" -exec echo -e "bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2/"{}"\\t255,0,0" \\; > ${prefix}.igv.txt + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- IGV -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 9 - Create IGV session file + */ +process IGV { + publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_igv + + input: + file fasta from ch_fasta + + file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) + file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) + file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) + file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + + file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) + file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) + file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) + file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + + output: + file "*.{txt,xml}" into ch_igv_session + + script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ + """ + cat *.txt > igv_files.txt + igv_files_to_session.py igv_session.xml igv_files.txt ../../genome/${fasta.getName()} --path_prefix '../../' + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- MULTIQC -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * Parse software version numbers + */ +process get_software_versions { + publishDir "${params.outdir}/pipeline_info", mode: 'copy', + saveAs: { filename -> + if (filename.indexOf(".csv") > 0) filename + else null + } + + output: + file 'software_versions_mqc.yaml' into ch_software_versions_mqc + file "software_versions.csv" + + script: + """ + echo $workflow.manifest.version > v_pipeline.txt + echo $workflow.nextflow.version > v_nextflow.txt + fastqc --version > v_fastqc.txt + trim_galore --version > v_trim_galore.txt + echo \$(bwa 2>&1) > v_bwa.txt + samtools --version > v_samtools.txt + bedtools --version > v_bedtools.txt + echo \$(bamtools --version 2>&1) > v_bamtools.txt + echo \$(plotFingerprint --version 2>&1) > v_deeptools.txt || true + picard MarkDuplicates --version &> v_picard.txt || true + echo \$(R --version 2>&1) > v_R.txt + python -c "import pysam; print(pysam.__version__)" > v_pysam.txt + echo \$(macs2 --version 2>&1) > v_macs2.txt + touch v_homer.txt + echo \$(ataqv --version 2>&1) > v_ataqv.txt + echo \$(featureCounts -v 2>&1) > v_featurecounts.txt + preseq &> v_preseq.txt + multiqc --version > v_multiqc.txt + scrape_software_versions.py &> software_versions_mqc.yaml + """ +} + +Channel.from(summary.collect{ [it.key, it.value] }) + .map { k,v -> "
$k
${v ?: 'N/A'}
" } + .reduce { a, b -> return [a, b].join("\n ") } + .map { x -> """ + id: 'nf-core-chipseq-summary' + description: " - this information is collected when the pipeline is started." + section_name: 'nf-core/chipseq Workflow Summary' + section_href: 'https://github.com/nf-core/chipseq' + plot_type: 'html' + data: | +
+ $x +
+ """.stripIndent() } + .set { ch_workflow_summary } + +/* + * STEP 10 - MultiQC + */ +process MultiQC { + publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' + + when: + !params.skip_multiqc + + input: + file (multiqc_config) from ch_multiqc_config + file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) + + file ('software_versions/*') from ch_software_versions_mqc.collect() + file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") + + file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) + file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) + file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) + + file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() + + file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() + file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} + file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() + file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() + file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() + file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) + file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) + file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) + file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) + file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) + + file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) + file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) + file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) + file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) + + output: + file "*multiqc_report.html" into ch_multiqc_report + file "*_data" + file "multiqc_plots" + + script: + rtitle = custom_runName ? "--title \"$custom_runName\"" : '' + rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' + custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' + """ + multiqc . -f $rtitle $rfilename $custom_config_file \\ + -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools + """ +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +/* -- -- */ +/* -- REPORTS/DOCUMENTATION -- */ +/* -- -- */ +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +/* + * STEP 11 - Output description HTML + */ +process output_documentation { + publishDir "${params.outdir}/Documentation", mode: 'copy' + + input: + file output_docs from ch_output_docs + + output: + file "results_description.html" + + script: + """ + markdown_to_html.py $output_docs -o results_description.html + """ +} + +/* + * Completion e-mail notification + */ +workflow.onComplete { + + // Set up the e-mail variables + def subject = "[nf-core/atacseq] Successful: $workflow.runName" + if (!workflow.success) { + subject = "[nf-core/atacseq] FAILED: $workflow.runName" + } + def email_fields = [:] + email_fields['version'] = workflow.manifest.version + email_fields['runName'] = custom_runName ?: workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary + email_fields['summary']['Date Started'] = workflow.start + email_fields['summary']['Date Completed'] = workflow.complete + email_fields['summary']['Pipeline script file path'] = workflow.scriptFile + email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision + email_fields['summary']['Nextflow Version'] = workflow.nextflow.version + email_fields['summary']['Nextflow Build'] = workflow.nextflow.build + email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + // On success try attach the multiqc report + def mqc_report = null + try { + if (workflow.success) { + mqc_report = ch_multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList) { + log.warn "[nf-core/atacseq] Found multiple reports from process 'multiqc', will use only one" + mqc_report = mqc_report[0] + } + } + } catch (all) { + log.warn "[nf-core/atacseq] Could not attach MultiQC report to summary email" + } + + // Check if we are only sending emails on failure + email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("$baseDir/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("$baseDir/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + def email_html = html_template.toString() + + // Render the sendmail template + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, baseDir: "$baseDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] + def sf = new File("$baseDir/assets/sendmail_template.txt") + def sendmail_template = engine.createTemplate(sf).make(smail_fields) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + if (email_address) { + try { + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (sendmail)" + } catch (all) { + // Catch failures and try with plaintext + [ 'mail', '-s', subject, email_address ].execute() << email_txt + log.info "[nf-core/atacseq] Sent summary e-mail to $email_address (mail)" + } + } + + // Write summary e-mail HTML to a file + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() + } + def output_hf = new File(output_d, "pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + def output_tf = new File(output_d, "pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + + c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; + c_red = params.monochrome_logs ? '' : "\033[0;31m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; + + if (workflow.stats.ignoredCount > 0 && workflow.success) { + log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" + log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" + log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" + } + if (workflow.success) { + log.info "-${c_purple}[nf-core/atacseq]${c_green} Pipeline completed successfully${c_reset}-" + } else { + checkHostname() + log.info "-${c_purple}[nf-core/atacseq]${c_red} Pipeline completed with errors${c_reset}-" + } + +} /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// From befcb911db5272df8cbb3c483343722f3fece5e0 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 12:25:59 +0000 Subject: [PATCH 108/226] Update CHANGELOG --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 126041aa..724036e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Added` * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! +* [#71](https://github.com/nf-core/atacseq/issues/71) - consensus_peaks.mLb.clN.boolean.intersect.plot.pdf not generated * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 -* [79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 +* [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image + * Update template to tools `1.9` * Parameter `--skip_consensus_peaks` to skip consensus peak generation From 36b212fa51fade3aecda57192967f73ec7a55816 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 12:26:12 +0000 Subject: [PATCH 109/226] Change ataqv suffix --- main.nf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index 2df57e44..dbe5900f 100644 --- a/main.nf +++ b/main.nf @@ -1351,7 +1351,7 @@ process MergedLibConsensusPeakSetDESeq { --bam_suffix '$bam_ext' \\ --outdir ./ \\ --outprefix $prefix \\ - --outsuffix .mLb \\ + --outsuffix .mLb.clN \\ --cores $task.cpus cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv @@ -1381,6 +1381,7 @@ process MergedLibAtaqv { file "*.json" into ch_mlib_ataqv script: + suffix = 'mLb.clN' peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" """ @@ -1388,7 +1389,7 @@ process MergedLibAtaqv { --threads $task.cpus \\ $peak_param \\ --tss-file $tss_bed \\ - --metrics-file ${name}.ataqv.json \\ + --metrics-file ${name}.${suffix}.ataqv.json \\ --name $name \\ --ignore-read-groups \\ --autosomal-reference-file $autosomes \\ @@ -1843,7 +1844,7 @@ process MergedRepConsensusPeakSetDESeq { --bam_suffix '$bam_ext' \\ --outdir ./ \\ --outprefix $prefix \\ - --outsuffix .mRp \\ + --outsuffix .mRp.clN \\ --cores $task.cpus cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv From d6546e38abd5c6f01be129be78bba43e835f9e5c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 12:43:40 +0000 Subject: [PATCH 110/226] Argggh copy paste --- main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index dbe5900f..27e6dfa3 100644 --- a/main.nf +++ b/main.nf @@ -1944,10 +1944,10 @@ Channel.from(summary.collect{ [it.key, it.value] }) .map { k,v -> "
$k
${v ?: 'N/A'}
" } .reduce { a, b -> return [a, b].join("\n ") } .map { x -> """ - id: 'nf-core-chipseq-summary' + id: 'nf-core-atacseq-summary' description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/chipseq Workflow Summary' - section_href: 'https://github.com/nf-core/chipseq' + section_name: 'nf-core/atacseq Workflow Summary' + section_href: 'https://github.com/nf-core/atacseq' plot_type: 'html' data: |
From 6aed3ccf2d2e8233ced5adc26ef406ddb7864e41 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 24 Feb 2020 14:26:27 +0000 Subject: [PATCH 111/226] Consistent metavar definitions --- bin/plot_homer_annotatepeaks.r | 6 +++--- bin/plot_macs_qc.r | 6 +++--- bin/plot_peak_intersect.r | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/plot_homer_annotatepeaks.r b/bin/plot_homer_annotatepeaks.r index 57ca4b67..6219ae28 100755 --- a/bin/plot_homer_annotatepeaks.r +++ b/bin/plot_homer_annotatepeaks.r @@ -17,10 +17,10 @@ library(scales) ################################################ ################################################ -option_list <- list(make_option(c("-i", "--homer_files"), type="character", default=NULL, help="Comma-separated list of homer annotated text files.", metavar="anno_files"), - make_option(c("-s", "--sample_ids"), type="character", default=NULL, help="Comma-separated list of sample ids associated with homer annotated text files. Must be unique and in same order as homer files input.", metavar="sampleids"), +option_list <- list(make_option(c("-i", "--homer_files"), type="character", default=NULL, help="Comma-separated list of homer annotated text files.", metavar="path"), + make_option(c("-s", "--sample_ids"), type="character", default=NULL, help="Comma-separated list of sample ids associated with homer annotated text files. Must be unique and in same order as homer files input.", metavar="string"), make_option(c("-o", "--outdir"), type="character", default='./', help="Output directory", metavar="path"), - make_option(c("-p", "--outprefix"), type="character", default='homer_annotation', help="Output prefix", metavar="character")) + make_option(c("-p", "--outprefix"), type="character", default='homer_annotation', help="Output prefix", metavar="string")) opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) diff --git a/bin/plot_macs_qc.r b/bin/plot_macs_qc.r index 2360505f..b8e25d56 100755 --- a/bin/plot_macs_qc.r +++ b/bin/plot_macs_qc.r @@ -17,10 +17,10 @@ library(scales) ################################################ ################################################ -option_list <- list(make_option(c("-i", "--peak_files"), type="character", default=NULL, help="Comma-separated list of peak files.", metavar="peak_files"), - make_option(c("-s", "--sample_ids"), type="character", default=NULL, help="Comma-separated list of sample ids associated with peak files. Must be unique and in same order as peaks files input.", metavar="sampleids"), +option_list <- list(make_option(c("-i", "--peak_files"), type="character", default=NULL, help="Comma-separated list of peak files.", metavar="path"), + make_option(c("-s", "--sample_ids"), type="character", default=NULL, help="Comma-separated list of sample ids associated with peak files. Must be unique and in same order as peaks files input.", metavar="string"), make_option(c("-o", "--outdir"), type="character", default='./', help="Output directory", metavar="path"), - make_option(c("-p", "--outprefix"), type="character", default='macs2_peakqc', help="Output prefix", metavar="character")) + make_option(c("-p", "--outprefix"), type="character", default='macs2_peakqc', help="Output prefix", metavar="string")) opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) diff --git a/bin/plot_peak_intersect.r b/bin/plot_peak_intersect.r index 40abf6d3..513e44b3 100755 --- a/bin/plot_peak_intersect.r +++ b/bin/plot_peak_intersect.r @@ -15,8 +15,8 @@ library(UpSetR) ################################################ ################################################ -option_list <- list(make_option(c("-i", "--input_file"), type="character", default=NULL, help="Path to tab-delimited file containing two columns i.e sample1&sample2&sample3 indicating intersect between samples set size.", metavar="input_file"), - make_option(c("-o", "--output_file"), type="character", default=NULL, help="Path to output file with '.pdf' extension.", metavar="output_file")) +option_list <- list(make_option(c("-i", "--input_file"), type="character", default=NULL, help="Path to tab-delimited file containing two columns i.e sample1&sample2&sample3 indicating intersect between samples set size.", metavar="path"), + make_option(c("-o", "--output_file"), type="character", default=NULL, help="Path to output file with '.pdf' extension.", metavar="path")) opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) From 5dc2eb974082a74193f9a617805c28d0e29671ba Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:15:47 +0000 Subject: [PATCH 112/226] Create empty .Rprofile in Dockerfile --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index e0478eae..55dc5359 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,3 +11,6 @@ ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH # Dump the details of the installed packages to a file for posterity RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml + +# Instruct R processes to use this empty file instead of clashing with a local version +RUN touch .Rprofile From 3efa0f111a5b66c9a58c44d17ebffe1159938c79 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:17:56 +0000 Subject: [PATCH 113/226] Export R_PROFILE_USER in env scope --- nextflow.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index e5400b59..5d4b32c5 100755 --- a/nextflow.config +++ b/nextflow.config @@ -127,9 +127,10 @@ if (!params.igenomes_ignore) { // Increase time available to build conda environment conda { createTimeout = "60 min" } -// Export this variable to prevent local Python libraries from conflicting with those in the container +// Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 + R_PROFILE_USER=~/.Rprofile } // Capture exit codes from upstream processes when piping From 9d780ee23d0923404b759ccf2de03021e54cc9ce Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:21:08 +0000 Subject: [PATCH 114/226] Add spaces --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 5d4b32c5..9df96d6b 100755 --- a/nextflow.config +++ b/nextflow.config @@ -130,7 +130,7 @@ conda { createTimeout = "60 min" } // Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 - R_PROFILE_USER=~/.Rprofile + R_PROFILE_USER = ~/.Rprofile } // Capture exit codes from upstream processes when piping From e55663678854a97de6dc1125ad79f9f82da54ac9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:36:37 +0000 Subject: [PATCH 115/226] Add quotes --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 9df96d6b..32b9e1ff 100755 --- a/nextflow.config +++ b/nextflow.config @@ -130,7 +130,7 @@ conda { createTimeout = "60 min" } // Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 - R_PROFILE_USER = ~/.Rprofile + R_PROFILE_USER = "~/.Rprofile" } // Capture exit codes from upstream processes when piping From cf6c5c39d890a3a69afa42b9316db02670b85f8b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:43:18 +0000 Subject: [PATCH 116/226] Replace read.table with read.csv --- bin/plot_homer_annotatepeaks.r | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/plot_homer_annotatepeaks.r b/bin/plot_homer_annotatepeaks.r index 6219ae28..4a867d8f 100755 --- a/bin/plot_homer_annotatepeaks.r +++ b/bin/plot_homer_annotatepeaks.r @@ -57,7 +57,7 @@ plot.feature.dat <- data.frame() for (idx in 1:length(HomerFiles)) { sampleid = SampleIDs[idx] - anno.dat <- read.table(HomerFiles[idx], sep="\t", header=TRUE,quote="") + anno.dat <- read.csv(HomerFiles[idx], sep="\t", header=TRUE) anno.dat <- anno.dat[,c("Annotation","Distance.to.TSS","Nearest.PromoterID")] ## REPLACE UNASSIGNED FEATURE ENTRIES WITH SENSIBLE VALUES From 162926716ffee5a466ea8db2e41eee98ae1aea1f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 11:50:26 +0000 Subject: [PATCH 117/226] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 724036e7..494a8b20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image - * Update template to tools `1.9` * Parameter `--skip_consensus_peaks` to skip consensus peak generation @@ -22,6 +21,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created +* [#86](https://github.com/nf-core/atacseq/issues/86) - bug in the plot_homer_annotatepeaks.r script * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From 2defdec83e1008d6f88a2e6bd7c6072239bdea91 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:39:34 +0000 Subject: [PATCH 118/226] Update CHANGELOG --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 494a8b20..1c775b1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * Update template to tools `1.9` -* Parameter `--skip_consensus_peaks` to skip consensus peak generation +* Parameters: + * `--skip_consensus_peaks` to skip consensus peak generation + * `--deseq2_vst` to use `vst` transformation instead of `rlog` with DESeq2 ### `Fixed` From 806f772363f7a330eee031e80b5381a17b23c011 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:39:42 +0000 Subject: [PATCH 119/226] Add .Renviron --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 55dc5359..ecae8934 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,5 +12,6 @@ ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH # Dump the details of the installed packages to a file for posterity RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml -# Instruct R processes to use this empty file instead of clashing with a local version +# Instruct R processes to use these empty files instead of clashing with a local version RUN touch .Rprofile +RUN touch .Renviron From 1a31d9d07cd62deb98a5bd1694f4a3ff3e5246f8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:39:46 +0000 Subject: [PATCH 120/226] Add .Renviron --- nextflow.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nextflow.config b/nextflow.config index 32b9e1ff..f2485777 100755 --- a/nextflow.config +++ b/nextflow.config @@ -41,6 +41,9 @@ params { min_reps_consensus = 1 save_macs_pileup = false skip_consensus_peaks = false + + // Options: Differential analysis + deseq2_vst = false skip_diff_analysis = false // Options: QC @@ -131,6 +134,7 @@ conda { createTimeout = "60 min" } env { PYTHONNOUSERSITE = 1 R_PROFILE_USER = "~/.Rprofile" + R_ENVIRON_USER = "~/.Renviron" } // Capture exit codes from upstream processes when piping From eff61ea2f91e2968fa8502aa81e9318d6e8fdbe4 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:39:59 +0000 Subject: [PATCH 121/226] Add vsn parameter --- bin/featurecounts_deseq2.r | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/featurecounts_deseq2.r b/bin/featurecounts_deseq2.r index d9c07a0f..e19fd977 100755 --- a/bin/featurecounts_deseq2.r +++ b/bin/featurecounts_deseq2.r @@ -38,6 +38,7 @@ option_list <- list(make_option(c("-i", "--featurecount_file"), type="character" make_option(c("-o", "--outdir"), type="character", default='./', help="Output directory", metavar="path"), make_option(c("-p", "--outprefix"), type="character", default='differential', help="Output prefix", metavar="string"), make_option(c("-s", "--outsuffix"), type="character", default='', help="Output suffix for comparison-level results", metavar="string"), + make_option(c("-v", "--vst"), type="logical", default=FALSE, help="Run vst transform instead of rlog", metavar="boolean"), make_option(c("-c", "--cores"), type="integer", default=1, help="Number of cores", metavar="integer")) opt_parser <- OptionParser(option_list=option_list) @@ -89,7 +90,11 @@ if (file.exists(DDSFile) == FALSE) { coldata <- data.frame(row.names=colnames(counts),condition=groups) dds <- DESeqDataSetFromMatrix(countData = round(counts), colData = coldata, design = ~ condition) dds <- DESeq(dds, parallel=TRUE, BPPARAM=MulticoreParam(opt$cores)) - rld <- rlog(dds) + if (!opt$vst) { + rld <- rlog(dds) + } else { + rld <- vst(dds) + } save(dds,rld,file=DDSFile) } From 657e559042cb282cc4f821f3ddc5c793574bcd8d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:40:13 +0000 Subject: [PATCH 122/226] Add deseq2_vsn parameter --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 59fbf36b..c35eda84 100755 --- a/docs/output.md +++ b/docs/output.md @@ -210,7 +210,7 @@ The library-level alignments associated with the same sample are merged and subs *Description*: DESeq2 is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. - This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. + This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vsn` parameter to the pipeline. ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) From e3b7543a059bce8b7b0253954f688cdb5adae737 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:40:19 +0000 Subject: [PATCH 123/226] Add deseq2_vsn parameter --- docs/usage.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 9e689f68..21ed1171 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -42,6 +42,8 @@ * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) * [`--skip_consensus_peaks`](#--skip_consensus_peaks) +* [Differential analysis](#differential_analysis) + * [`--deseq2_vst`](#--deseq2_vst) * [`--skip_diff_analysis`](#--skip_diff_analysis) * [Skipping QC steps](#skipping-qc-steps) * [Job resources](#job-resources) @@ -399,6 +401,12 @@ Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. Skip consensus peak generation, annotation and counting. +## Differential analysis + +### `--deseq2_vst` + +Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization). + ### `--skip_diff_analysis` Skip differential accessibility analysis with DESeq2. From ccdd4a73492407dd097c2e739e47952efa80569e Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 15:40:33 +0000 Subject: [PATCH 124/226] Add deseq2_vsn parameter --- main.nf | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/main.nf b/main.nf index 27e6dfa3..0bcbcee2 100644 --- a/main.nf +++ b/main.nf @@ -63,6 +63,9 @@ def helpMessage() { --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads --skip_consensus_peaks [bool] Skip consensus peak generation + + Differential analysis + --deseq2_vst [bool] Use vst transformation instead of rlog with DESeq2 --skip_diff_analysis [bool] Skip differential accessibility analysis QC @@ -260,6 +263,7 @@ if (params.save_align_intermeds) summary['Save Intermeds'] = 'Yes' if (params.save_macs_pileup) summary['Save MACS2 Pileup'] = 'Yes' if (params.skip_merge_replicates) summary['Skip Merge Replicates'] = 'Yes' if (params.skip_consensus_peaks) summary['Skip Consensus Peaks'] = 'Yes' +if (params.deseq2_vst) summary['Use DESeq2 vst Transform'] = 'Yes' if (params.skip_diff_analysis) summary['Skip Differential Analysis'] = 'Yes' if (params.skip_fastqc) summary['Skip FastQC'] = 'Yes' if (params.skip_picard_metrics) summary['Skip Picard Metrics'] = 'Yes' @@ -1345,6 +1349,7 @@ process MergedLibConsensusPeakSetDESeq { script: prefix = "consensus_peaks.mLb.clN" bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + vst = params.deseq2_vst ? "--vst TRUE" : "" """ featurecounts_deseq2.r \\ --featurecount_file $counts \\ @@ -1352,7 +1357,8 @@ process MergedLibConsensusPeakSetDESeq { --outdir ./ \\ --outprefix $prefix \\ --outsuffix .mLb.clN \\ - --cores $task.cpus + --cores $task.cpus \\ + $vst \\ cat $mlib_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mlib_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv @@ -1838,6 +1844,7 @@ process MergedRepConsensusPeakSetDESeq { script: prefix = "consensus_peaks.mRp.clN" bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" + vst = params.deseq2_vst ? "--vst TRUE" : "" """ featurecounts_deseq2.r \\ --featurecount_file $counts \\ @@ -1845,7 +1852,8 @@ process MergedRepConsensusPeakSetDESeq { --outdir ./ \\ --outprefix $prefix \\ --outsuffix .mRp.clN \\ - --cores $task.cpus + --cores $task.cpus \\ + $vst cat $mrep_deseq2_pca_header ${prefix}.pca.vals.txt > ${prefix}.pca.vals_mqc.tsv cat $mrep_deseq2_clustering_header ${prefix}.sample.dists.txt > ${prefix}.sample.dists_mqc.tsv From e8f1584185547abaae1de14f2eb044de94753a48 Mon Sep 17 00:00:00 2001 From: mashehu Date: Wed, 11 Mar 2020 17:13:22 +0100 Subject: [PATCH 125/226] fix typo --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index c35eda84..57df45a0 100755 --- a/docs/output.md +++ b/docs/output.md @@ -210,7 +210,7 @@ The library-level alignments associated with the same sample are merged and subs *Description*: DESeq2 is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. - This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vsn` parameter to the pipeline. + This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) From a1516de9689401afd84e5a2617d08ba539e9765f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 18:25:09 +0000 Subject: [PATCH 126/226] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c775b1d..309e36c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update template to tools `1.9` * Parameters: * `--skip_consensus_peaks` to skip consensus peak generation - * `--deseq2_vst` to use `vst` transformation instead of `rlog` with DESeq2 + * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 ### `Fixed` From 62177aa596ad80a1c4d39a0c05968f6ca917b9f6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 18:43:08 +0000 Subject: [PATCH 127/226] Update contributors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24153332..aa81ccc8 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ The pipeline was developed by [Harshil Patel](mailto:harshil.patel@crick.ac.uk). The [nf-core/rnaseq](https://github.com/nf-core/rnaseq) and [nf-core/chipseq](https://github.com/nf-core/chipseq) pipelines developed by Phil Ewels were initially used as a template for this pipeline. Many thanks to Phil for all of his help and advice, and the team at SciLifeLab. -Many thanks to others who have helped out along the way too, including (but not limited to): [@apeltzer](https://github.com/apeltzer), [@sven1103](https://github.com/sven1103), [@MaxUlysse](https://github.com/MaxUlysse), [@micans](https://github.com/micans), [@jinmingda](https://github.com/jinmingda), [@ktrns](https://github.com/ktrns), [@crickbabs](https://github.com/crickbabs), [@pditommaso](https://github.com/pditommaso). +Many thanks to others who have helped out and contributed along the way too, including (but not limited to): [@apeltzer](https://github.com/apeltzer), [@crickbabs](https://github.com/crickbabs), [drewjbeh](https://github.com/drewjbeh), [@houghtos](https://github.com/houghtos), [@jinmingda](https://github.com/jinmingda), [@ktrns](https://github.com/ktrns), [@MaxUlysse](https://github.com/MaxUlysse), [@mashehu](https://github.com/mashehu), [@micans](https://github.com/micans), [@pditommaso](https://github.com/pditommaso) and [@sven1103](https://github.com/sven1103). ## Contributions and Support From 391ae6ad9b277d8f3b26f3c944e2059bcac0c7a5 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 11 Mar 2020 18:43:19 +0000 Subject: [PATCH 128/226] Link to vst docs --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 57df45a0..b1a4a71c 100755 --- a/docs/output.md +++ b/docs/output.md @@ -210,7 +210,7 @@ The library-level alignments associated with the same sample are merged and subs *Description*: DESeq2 is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. - This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. + This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) From 73737141939b8aa0f4c7f27a780fd2d1d9a56530 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Mar 2020 11:33:41 +0000 Subject: [PATCH 129/226] Update Docker citation --- CITATIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index 68e539f1..2ef37fed 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -97,4 +97,4 @@ * [Singularity](https://www.ncbi.nlm.nih.gov/pubmed/28494014/) > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. -* [Docker](https://www.docker.com/) +* [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) From 7ccb24ac5da31b02fb5fe2ead7197f862624f0c3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 12 Mar 2020 13:59:30 +0000 Subject: [PATCH 130/226] Change home to root --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index f2485777..6c8fe99c 100755 --- a/nextflow.config +++ b/nextflow.config @@ -133,8 +133,8 @@ conda { createTimeout = "60 min" } // Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 - R_PROFILE_USER = "~/.Rprofile" - R_ENVIRON_USER = "~/.Renviron" + R_PROFILE_USER = "/.Rprofile" + R_ENVIRON_USER = "/.Renviron" } // Capture exit codes from upstream processes when piping From f86556c8e1d305aee4141833985be6a1c0517113 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Mar 2020 14:41:25 +0000 Subject: [PATCH 131/226] Bump version to 1.2.0 --- .github/workflows/ci.yml | 2 +- Dockerfile | 4 ++-- environment.yml | 2 +- nextflow.config | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a442aa32..2f69d7c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: - name: Pull docker image run: | docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker diff --git a/Dockerfile b/Dockerfile index ecae8934..715e6892 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,10 +7,10 @@ COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a # Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH +ENV PATH /opt/conda/envs/nf-core-atacseq-1.2.0/bin:$PATH # Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml +RUN conda env export --name nf-core-atacseq-1.2.0 > nf-core-atacseq-1.2.0.yml # Instruct R processes to use these empty files instead of clashing with a local version RUN touch .Rprofile diff --git a/environment.yml b/environment.yml index af38f938..535b7768 100755 --- a/environment.yml +++ b/environment.yml @@ -1,6 +1,6 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-atacseq-1.1.1dev +name: nf-core-atacseq-1.2.0 channels: - conda-forge - bioconda diff --git a/nextflow.config b/nextflow.config index 6c8fe99c..97d2c64c 100755 --- a/nextflow.config +++ b/nextflow.config @@ -92,7 +92,7 @@ params { // Container slug. Stable releases should specify release tag! // Developmental code should specify :dev -process.container = 'nfcore/atacseq:dev' +process.container = 'nfcore/atacseq:1.2.0' // Load base.config by default for all pipelines includeConfig 'conf/base.config' @@ -164,7 +164,7 @@ manifest { description = 'ATACSeq peak-calling and differential analysis pipeline.' mainScript = 'main.nf' nextflowVersion = '>=19.10.0' - version = '1.1.1dev' + version = '1.2.0' } // Function to ensure that resource requirements don't go beyond From af4502f9d749cfca34bfb2dfea0920dbadfe55b3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 13 Mar 2020 21:50:50 +0000 Subject: [PATCH 132/226] Change data in CHANGELOG --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 309e36c7..5d65c7eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [Unpublished Version / DEV] +## [1.2.0] - 2020-03-20 ### `Added` @@ -60,8 +60,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update bioconductor-vsn `3.46.0` -> `3.54.0` * Remove r-reshape2 `1.4.3` -### `Deprecated` - ## [1.1.0] - 2019-11-05 ### `Added` From 0f52c525f1e3d414988a1eea36e28390c348a004 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:02:36 +0000 Subject: [PATCH 133/226] Replace with bedgraphToBigWig --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aa81ccc8..d9ae7a95 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool * reads that arent in FR orientation ([`Pysam`](http://pysam.readthedocs.io/en/latest/installation.html); *paired-end only*) * reads where only one read of the pair fails the above criteria ([`Pysam`](http://pysam.readthedocs.io/en/latest/installation.html); *paired-end only*) 3. Alignment-level QC and estimation of library complexity ([`picard`](https://broadinstitute.github.io/picard/), [`Preseq`](http://smithlabresearch.org/software/preseq/)) - 4. Create normalised bigWig files scaled to 1 million mapped reads ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`wigToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) + 4. Create normalised bigWig files scaled to 1 million mapped reads ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) 5. Generate gene-body meta-profile from bigWig files ([`deepTools`](https://deeptools.readthedocs.io/en/develop/content/tools/plotProfile.html)) 6. Calculate genome-wide enrichment ([`deepTools`](https://deeptools.readthedocs.io/en/develop/content/tools/plotFingerprint.html)) 7. Call broad/narrow peaks ([`MACS2`](https://github.com/taoliu/MACS)) @@ -48,7 +48,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool 6. Merge filtered alignments across replicates ([`picard`](https://broadinstitute.github.io/picard/)) 1. Re-mark duplicates ([`picard`](https://broadinstitute.github.io/picard/)) 2. Remove duplicate reads ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) - 3. Create normalised bigWig files scaled to 1 million mapped reads ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`wigToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) + 3. Create normalised bigWig files scaled to 1 million mapped reads ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) 4. Call broad/narrow peaks ([`MACS2`](https://github.com/taoliu/MACS)) 5. Annotate peaks relative to gene features ([`HOMER`](http://homer.ucsd.edu/homer/download.html)) 6. Create consensus peakset across all samples and create tabular file to aid in the filtering of the data ([`BEDTools`](https://github.com/arq5x/bedtools2/)) From 2e8c9796e88930c1bb34ac34294ea2c35c0b5cee Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:02:46 +0000 Subject: [PATCH 134/226] Fix section headers --- main.nf | 113 +++++++++++++++++++++++++++----------------------------- 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/main.nf b/main.nf index 0bcbcee2..05f716af 100644 --- a/main.nf +++ b/main.nf @@ -100,25 +100,28 @@ def helpMessage() { /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// -/* - * SET UP CONFIGURATION VARIABLES - */ - // Show help message if (params.help) { helpMessage() exit 0 } -// Check if genome exists in the config file -if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(", ")}" +// Has the run name been specified by the user? +// this has the bonus effect of catching both -name and --name +custom_runName = params.name +if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { + custom_runName = workflow.runName } //////////////////////////////////////////////////// /* -- DEFAULT PARAMETER VALUES -- */ //////////////////////////////////////////////////// +// Check if genome exists in the config file +if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(", ")}" +} + // Configurable variables params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false params.bwa_index = params.genome ? params.genomes[ params.genome ].bwa ?: false : false @@ -132,13 +135,6 @@ params.anno_readme = params.genome ? params.genomes[ params.genome ].readme ?: f // Global variables def PEAK_TYPE = params.narrow_peak ? "narrowPeak" : "broadPeak" -// Has the run name been specified by the user? -// this has the bonus effect of catching both -name and --name -custom_runName = params.name -if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { - custom_runName = workflow.runName -} - //////////////////////////////////////////////////// /* -- CONFIG FILES -- */ //////////////////////////////////////////////////// @@ -172,19 +168,12 @@ ch_mrep_deseq2_clustering_header = file("$baseDir/assets/multiqc/mrep_deseq2_clu /* -- VALIDATE INPUTS -- */ //////////////////////////////////////////////////// -// Validate inputs if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } -// Save AWS IGenomes file conatining annotation version -if (params.anno_readme && file(params.anno_readme).exists()) { - file("${params.outdir}/genome/").mkdirs() - file(params.anno_readme).copyTo("${params.outdir}/genome/") -} - if (params.fasta) { lastPath = params.fasta.lastIndexOf(File.separator) bwa_base = params.fasta.substring(lastPath+1) @@ -202,6 +191,12 @@ if (params.bwa_index) { .set { ch_bwa_index } } +// Save AWS IGenomes file containing annotation version +if (params.anno_readme && file(params.anno_readme).exists()) { + file("${params.outdir}/genome/").mkdirs() + file(params.anno_readme).copyTo("${params.outdir}/genome/") +} + //////////////////////////////////////////////////// /* -- AWS -- */ //////////////////////////////////////////////////// @@ -319,7 +314,7 @@ if (!params.macs_gsize) { /////////////////////////////////////////////////////////////////////////////// /* - * PREPROCESSING - REFORMAT DESIGN FILE AND CHECK VALIDITY + * PREPROCESSING: Reformat design file and check validitiy */ process CheckDesign { tag "$design" @@ -382,7 +377,7 @@ multipleGroups = design_multiple_samples /////////////////////////////////////////////////////////////////////////////// /* - * PREPROCESSING - Build BWA index + * PREPROCESSING: Build BWA index */ if (!params.bwa_index) { process BWAIndex { @@ -406,7 +401,7 @@ if (!params.bwa_index) { } /* - * PREPROCESSING - Generate gene BED file + * PREPROCESSING: Generate gene BED file */ if (!params.gene_bed) { process MakeGeneBED { @@ -428,7 +423,7 @@ if (!params.gene_bed) { } /* - * PREPROCESSING - Generate TSS BED file + * PREPROCESSING: Generate TSS BED file */ if (!params.tss_bed) { process MakeTSSBED { @@ -449,7 +444,7 @@ if (!params.tss_bed) { } /* - * PREPROCESSING - Prepare genome intervals for filtering + * PREPROCESSING: Prepare genome intervals for filtering */ process MakeGenomeFilter { tag "$fasta" @@ -488,7 +483,7 @@ process MakeGenomeFilter { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 1 - FastQC + * STEP 1: FastQC */ process FastQC { tag "$name" @@ -533,7 +528,7 @@ process FastQC { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 2 - Trim Galore! + * STEP 2: Trim Galore! */ if (params.skip_trimming) { ch_trimmed_reads = ch_raw_reads_trimgalore @@ -603,7 +598,7 @@ if (params.skip_trimming) { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 3.1 - Align read 1 with bwa + * STEP 3.1: Map read(s) with bwa mem */ process BWAMem { tag "$name" @@ -634,7 +629,7 @@ process BWAMem { } /* - * STEP 3.2 - Convert .bam to coordinate sorted .bam + * STEP 3.2: Convert BAM to coordinate sorted BAM */ process SortBAM { tag "$name" @@ -676,7 +671,7 @@ process SortBAM { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 4.1 Merge BAM files for all libraries from same replicate + * STEP 4.1: Merge BAM files for all libraries from same sample replicate */ ch_sort_bam_merge .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } @@ -759,7 +754,7 @@ process MergedLibBAM { } /* - * STEP 4.2 Filter BAM file at merged library-level + * STEP 4.2: Filter BAM file at merged library-level */ process MergedLibBAMFilter { tag "$name" @@ -814,7 +809,7 @@ process MergedLibBAMFilter { } /* - * STEP 4.3 Remove orphan reads from paired-end BAM file + * STEP 4.3: Remove orphan reads from paired-end BAM file */ if (params.single_end) { ch_mlib_filter_bam @@ -886,7 +881,7 @@ if (params.single_end) { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 5.1 preseq analysis after merging libraries and before filtering + * STEP 5.1: Preseq analysis after merging libraries and before filtering */ process MergedLibPreseq { tag "$name" @@ -910,7 +905,7 @@ process MergedLibPreseq { } /* - * STEP 5.2 Picard CollectMultipleMetrics after merging libraries and filtering + * STEP 5.2: Picard CollectMultipleMetrics after merging libraries and filtering */ process MergedLibMetrics { tag "$name" @@ -952,7 +947,7 @@ process MergedLibMetrics { } /* - * STEP 5.3 Read depth normalised bigWig + * STEP 5.3: Read depth normalised bigWig */ process MergedLibBigWig { tag "$name" @@ -989,7 +984,7 @@ process MergedLibBigWig { } /* - * STEP 5.4 generate gene body coverage plot with deepTools + * STEP 5.4: Generate gene body coverage plot with deepTools plotProfile */ process MergedLibPlotProfile { tag "$name" @@ -1029,7 +1024,7 @@ process MergedLibPlotProfile { } /* - * STEP 5.5 deepTools plotFingerprint + * STEP 5.5: deepTools plotFingerprint */ process MergedLibPlotFingerprint { tag "$name" @@ -1072,7 +1067,7 @@ process MergedLibPlotFingerprint { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 6.1 Call peaks with MACS2 and calculate FRiP score + * STEP 6.1: Call peaks with MACS2 and calculate FRiP score */ process MergedLibMACSCallPeak { tag "$name" @@ -1127,7 +1122,7 @@ process MergedLibMACSCallPeak { } /* - * STEP 6.2 Annotate peaks with HOMER + * STEP 6.2: Annotate peaks with HOMER */ process MergedLibAnnotatePeaks { tag "$name" @@ -1159,7 +1154,7 @@ process MergedLibAnnotatePeaks { } /* - * STEP 6.3 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + * STEP 6.3: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ process MergedLibPeakQC { label "process_medium" @@ -1197,7 +1192,7 @@ process MergedLibPeakQC { } /* - * STEP 6.4 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + * STEP 6.4: Consensus peaks across samples, create boolean filtering file, SAF file for featureCounts and UpSetR plot for intersection */ process MergedLibConsensusPeakSet { label 'process_long' @@ -1250,7 +1245,7 @@ process MergedLibConsensusPeakSet { } /* - * STEP 6.5 Annotate consensus peaks with HOMER, and add annotation to boolean output file + * STEP 6.5: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ process MergedLibConsensusPeakSetAnnotate { label "process_medium" @@ -1285,7 +1280,7 @@ process MergedLibConsensusPeakSetAnnotate { } /* - * STEP 6.6 Count reads in consensus peaks with featureCounts + * STEP 6.6: Count reads in consensus peaks with featureCounts */ process MergedLibConsensusPeakSetCounts { label 'process_medium' @@ -1320,7 +1315,7 @@ process MergedLibConsensusPeakSetCounts { } /* - * STEP 6.7 Perform differential analysis with DESeq2 + * STEP 6.7: Differential analysis with DESeq2 */ process MergedLibConsensusPeakSetDESeq { label 'process_medium' @@ -1368,7 +1363,7 @@ process MergedLibConsensusPeakSetDESeq { } /* - * STEP 6.8 Run ataqv on BAM file and corresponding peaks + * STEP 6.8: Run ataqv on BAM file and corresponding peaks */ process MergedLibAtaqv { tag "$name" @@ -1406,7 +1401,7 @@ process MergedLibAtaqv { } /* - * STEP 6.9 run ataqv mkarv on all JSON files to render web app + * STEP 6.9: Run ataqv mkarv on all JSON files to render web app */ process MergedLibAtaqvMkarv { label 'process_medium' @@ -1440,7 +1435,7 @@ process MergedLibAtaqvMkarv { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 7 Merge library BAM files across all replicates + * STEP 7: Merge library BAM files across all replicates */ ch_mlib_rm_orphan_bam_mrep .map { it -> [ it[0].split('_')[0..-2].join('_'), it[1] ] } @@ -1529,7 +1524,7 @@ process MergedRepBAM { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 8.1 Read depth normalised bigWig + * STEP 8.1: Read depth normalised bigWig */ process MergedRepBigWig { tag "$name" @@ -1569,7 +1564,7 @@ process MergedRepBigWig { } /* - * STEP 8.2 Call peaks with MACS2 and calculate FRiP score + * STEP 8.2: Call peaks with MACS2 and calculate FRiP score */ process MergedRepMACSCallPeak { tag "$name" @@ -1623,7 +1618,7 @@ process MergedRepMACSCallPeak { } /* - * STEP 8.3 Annotate peaks with HOMER + * STEP 8.3: Annotate peaks with HOMER */ process MergedRepAnnotatePeaks { tag "$name" @@ -1655,7 +1650,7 @@ process MergedRepAnnotatePeaks { } /* - * STEP 8.4 Aggregated QC plots for peaks, FRiP and peak-to-gene annotation + * STEP 8.4: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ process MergedRepPeakQC { label "process_medium" @@ -1693,7 +1688,7 @@ process MergedRepPeakQC { } /* - * STEP 8.5 Consensus peaks across samples, create boolean filtering file, .saf file for featureCounts and UpSetR plot for intersection + * STEP 8.5: Consensus peaks across samples, create boolean filtering file, SAF file for featureCounts and UpSetR plot for intersection */ process MergedRepConsensusPeakSet { label 'process_long' @@ -1745,7 +1740,7 @@ process MergedRepConsensusPeakSet { } /* - * STEP 8.6 Annotate consensus peaks with HOMER, and add annotation to boolean output file + * STEP 8.6: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ process MergedRepConsensusPeakSetAnnotate { label "process_medium" @@ -1780,7 +1775,7 @@ process MergedRepConsensusPeakSetAnnotate { } /* - * STEP 8.7 Count reads in consensus peaks with featureCounts + * STEP 8.7: Count reads in consensus peaks with featureCounts */ process MergedRepConsensusPeakSetCounts { label 'process_medium' @@ -1815,7 +1810,7 @@ process MergedRepConsensusPeakSetCounts { } /* - * STEP 8.8 Perform differential analysis with DESeq2 + * STEP 8.8: Differential analysis with DESeq2 */ process MergedRepConsensusPeakSetDESeq { label 'process_medium' @@ -1871,7 +1866,7 @@ process MergedRepConsensusPeakSetDESeq { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 9 - Create IGV session file + * STEP 9: Create IGV session file */ process IGV { publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' @@ -1965,7 +1960,7 @@ Channel.from(summary.collect{ [it.key, it.value] }) .set { ch_workflow_summary } /* - * STEP 10 - MultiQC + * STEP 10: MultiQC */ process MultiQC { publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' @@ -2031,7 +2026,7 @@ process MultiQC { /////////////////////////////////////////////////////////////////////////////// /* - * STEP 11 - Output description HTML + * STEP 11: Output description HTML */ process output_documentation { publishDir "${params.outdir}/Documentation", mode: 'copy' From 5011d65af02a674efccc583857af40ce7b352129 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:37:50 +0000 Subject: [PATCH 135/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d65c7eb..07410391 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Parameters: * `--skip_consensus_peaks` to skip consensus peak generation * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 + * `--publish_dir_mode` to customise method of publishing results to output directory [nf-core/tools#585](https://github.com/nf-core/tools/issues/585) ### `Fixed` From f206945ea413f57184e6bff454fe4f980dc22365 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:37:58 +0000 Subject: [PATCH 136/226] Add docs for --publish_dir_mode --- docs/usage.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 21ed1171..c5f0d7a8 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -55,6 +55,7 @@ * [`--awscli`](#--awscli) * [Other command line parameters](#other-command-line-parameters) * [`--outdir`](#--outdir) + * [`--publish_dir_mode`](#--publish_dir_mode) * [`--email`](#--email) * [`--email_on_fail`](#--email_on_fail) * [`--max_multiqc_email_size`](#--max_multiqc_email_size) @@ -465,6 +466,10 @@ Please make sure to also set the `-w/--work-dir` and `--outdir` parameters to a The output directory where the results will be saved. +### `--publish_dir_mode` + +Value passed to Nextflow [`publishDir`](https://www.nextflow.io/docs/latest/process.html#publishdir) directive for publishing results in the output directory. Available: 'symlink', 'rellink', 'link', 'copy', 'copyNoFollow' and 'move' (Default: 'copy'). + ### `--email` Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run. From 71214275297a5c5362a4ee225f5234d5d45fdd75 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:38:10 +0000 Subject: [PATCH 137/226] Add --publish_dir_mode --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index 97d2c64c..f13b839f 100755 --- a/nextflow.config +++ b/nextflow.config @@ -71,6 +71,7 @@ params { // Options: Other help = false outdir = './results' + publish_dir_mode = 'copy' igenomes_base = 's3://ngi-igenomes/igenomes/' igenomes_ignore = false max_multiqc_email_size = 25.MB From 2d924fdf457ec7c2a9b7407c983b6f897ce2ae80 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Sun, 15 Mar 2020 19:38:24 +0000 Subject: [PATCH 138/226] Replace copy with --publish_dir_mode --- main.nf | 77 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/main.nf b/main.nf index 05f716af..a801fcdd 100644 --- a/main.nf +++ b/main.nf @@ -80,6 +80,7 @@ def helpMessage() { Other --outdir [file] The output directory where the results will be saved + --publish_dir_mode [str] Mode for publishing results in the output directory. Available: symlink, rellink, link, copy, copyNoFollow, move (Default: copy) --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful --max_multiqc_email_size [str] Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) @@ -318,7 +319,7 @@ if (!params.macs_gsize) { */ process CheckDesign { tag "$design" - publishDir "${params.outdir}/pipeline_info", mode: 'copy' + publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode input: file design from ch_input @@ -384,7 +385,7 @@ if (!params.bwa_index) { tag "$fasta" label 'process_high' publishDir path: { params.save_reference ? "${params.outdir}/genome" : params.outdir }, - saveAs: { params.save_reference ? it : null }, mode: 'copy' + saveAs: { params.save_reference ? it : null }, mode: params.publish_dir_mode input: file fasta from ch_fasta @@ -407,7 +408,7 @@ if (!params.gene_bed) { process MakeGeneBED { tag "$gtf" label 'process_low' - publishDir "${params.outdir}/genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: file gtf from ch_gtf @@ -428,7 +429,7 @@ if (!params.gene_bed) { if (!params.tss_bed) { process MakeTSSBED { tag "$bed" - publishDir "${params.outdir}/genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: file bed from ch_gene_bed @@ -448,7 +449,7 @@ if (!params.tss_bed) { */ process MakeGenomeFilter { tag "$fasta" - publishDir "${params.outdir}/genome", mode: 'copy' + publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: file fasta from ch_fasta @@ -488,7 +489,7 @@ process MakeGenomeFilter { process FastQC { tag "$name" label 'process_medium' - publishDir "${params.outdir}/fastqc", mode: 'copy', + publishDir "${params.outdir}/fastqc", mode: params.publish_dir_mode, saveAs: { filename -> filename.endsWith(".zip") ? "zips/$filename" : "$filename" } @@ -538,7 +539,7 @@ if (params.skip_trimming) { process TrimGalore { tag "$name" label 'process_high' - publishDir "${params.outdir}/trim_galore", mode: 'copy', + publishDir "${params.outdir}/trim_galore", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".html")) "fastqc/$filename" else if (filename.endsWith(".zip")) "fastqc/zips/$filename" @@ -635,7 +636,7 @@ process SortBAM { tag "$name" label 'process_medium' if (params.save_align_intermeds) { - publishDir path: "${params.outdir}/bwa/library", mode: 'copy', + publishDir path: "${params.outdir}/bwa/library", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".flagstat")) "samtools_stats/$filename" else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" @@ -682,7 +683,7 @@ ch_sort_bam_merge process MergedLibBAM { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".flagstat")) "samtools_stats/$filename" else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" @@ -759,7 +760,7 @@ process MergedLibBAM { process MergedLibBAMFilter { tag "$name" label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> if (params.single_end || params.save_align_intermeds) { if (filename.endsWith(".flagstat")) "samtools_stats/$filename" @@ -832,7 +833,7 @@ if (params.single_end) { process MergedLibBAMRemoveOrphan { tag "$name" label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".flagstat")) "samtools_stats/$filename" else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" @@ -886,7 +887,7 @@ if (params.single_end) { process MergedLibPreseq { tag "$name" label 'process_low' - publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: params.publish_dir_mode when: !params.skip_preseq @@ -910,7 +911,7 @@ process MergedLibPreseq { process MergedLibMetrics { tag "$name" label 'process_medium' - publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: 'copy', + publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith("_metrics")) "picard_metrics/$filename" else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" @@ -952,7 +953,7 @@ process MergedLibMetrics { process MergedLibBigWig { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith("scale_factor.txt")) "scale/$filename" else if (filename.endsWith(".bigWig")) "$filename" @@ -989,7 +990,7 @@ process MergedLibBigWig { process MergedLibPlotProfile { tag "$name" label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: params.publish_dir_mode when: !params.skip_plot_profile @@ -1029,7 +1030,7 @@ process MergedLibPlotProfile { process MergedLibPlotFingerprint { tag "$name" label 'process_high' - publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: params.publish_dir_mode when: !params.skip_plot_fingerprint @@ -1072,7 +1073,7 @@ process MergedLibPlotFingerprint { process MergedLibMACSCallPeak { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".tsv")) "qc/$filename" else if (filename.endsWith(".igv.txt")) null @@ -1127,7 +1128,7 @@ process MergedLibMACSCallPeak { process MergedLibAnnotatePeaks { tag "$name" label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: params.macs_gsize @@ -1158,7 +1159,7 @@ process MergedLibAnnotatePeaks { */ process MergedLibPeakQC { label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: params.macs_gsize @@ -1196,7 +1197,7 @@ process MergedLibPeakQC { */ process MergedLibConsensusPeakSet { label 'process_long' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".igv.txt")) null else filename @@ -1249,7 +1250,7 @@ process MergedLibConsensusPeakSet { */ process MergedLibConsensusPeakSetAnnotate { label "process_medium" - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks @@ -1284,7 +1285,7 @@ process MergedLibConsensusPeakSetAnnotate { */ process MergedLibConsensusPeakSetCounts { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks @@ -1319,7 +1320,7 @@ process MergedLibConsensusPeakSetCounts { */ process MergedLibConsensusPeakSetDESeq { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".igv.txt")) null else filename @@ -1368,7 +1369,7 @@ process MergedLibConsensusPeakSetDESeq { process MergedLibAtaqv { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: params.publish_dir_mode when: !params.skip_ataqv @@ -1405,7 +1406,7 @@ process MergedLibAtaqv { */ process MergedLibAtaqvMkarv { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: params.publish_dir_mode when: !params.skip_ataqv @@ -1446,7 +1447,7 @@ ch_mlib_rm_orphan_bam_mrep process MergedRepBAM { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedReplicate", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".flagstat")) "samtools_stats/$filename" else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" @@ -1529,7 +1530,7 @@ process MergedRepBAM { process MergedRepBigWig { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith("scale_factor.txt")) "scale/$filename" else if (filename.endsWith(".bigWig")) "$filename" @@ -1569,7 +1570,7 @@ process MergedRepBigWig { process MergedRepMACSCallPeak { tag "$name" label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".tsv")) "qc/$filename" else if (filename.endsWith(".igv.txt")) null @@ -1623,7 +1624,7 @@ process MergedRepMACSCallPeak { process MergedRepAnnotatePeaks { tag "$name" label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize @@ -1654,7 +1655,7 @@ process MergedRepAnnotatePeaks { */ process MergedRepPeakQC { label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize @@ -1692,7 +1693,7 @@ process MergedRepPeakQC { */ process MergedRepConsensusPeakSet { label 'process_long' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".igv.txt")) null else filename @@ -1744,7 +1745,7 @@ process MergedRepConsensusPeakSet { */ process MergedRepConsensusPeakSetAnnotate { label "process_medium" - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks @@ -1779,7 +1780,7 @@ process MergedRepConsensusPeakSetAnnotate { */ process MergedRepConsensusPeakSetCounts { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: 'copy' + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks @@ -1814,7 +1815,7 @@ process MergedRepConsensusPeakSetCounts { */ process MergedRepConsensusPeakSetDESeq { label 'process_medium' - publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: 'copy', + publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.endsWith(".igv.txt")) null else filename @@ -1869,7 +1870,7 @@ process MergedRepConsensusPeakSetDESeq { * STEP 9: Create IGV session file */ process IGV { - publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/igv/${PEAK_TYPE}", mode: params.publish_dir_mode when: !params.skip_igv @@ -1909,7 +1910,7 @@ process IGV { * Parse software version numbers */ process get_software_versions { - publishDir "${params.outdir}/pipeline_info", mode: 'copy', + publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode, saveAs: { filename -> if (filename.indexOf(".csv") > 0) filename else null @@ -1963,7 +1964,7 @@ Channel.from(summary.collect{ [it.key, it.value] }) * STEP 10: MultiQC */ process MultiQC { - publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: 'copy' + publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: params.publish_dir_mode when: !params.skip_multiqc @@ -2029,7 +2030,7 @@ process MultiQC { * STEP 11: Output description HTML */ process output_documentation { - publishDir "${params.outdir}/Documentation", mode: 'copy' + publishDir "${params.outdir}/Documentation", mode: params.publish_dir_mode input: file output_docs from ch_output_docs From 4fe6230a7bdb0f2e157487b6cb19326d606c1cd8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 16 Mar 2020 11:49:46 +0000 Subject: [PATCH 139/226] Units of 6GB for GCP --- conf/base.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/base.config b/conf/base.config index f1a6373c..92a48f32 100755 --- a/conf/base.config +++ b/conf/base.config @@ -12,7 +12,7 @@ process { cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 7.GB * task.attempt, 'memory' ) } + memory = { check_max( 6.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } @@ -22,17 +22,17 @@ process { // Process-specific resource requirements withLabel:process_low { cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 14.GB * task.attempt, 'memory' ) } + memory = { check_max( 12.GB * task.attempt, 'memory' ) } time = { check_max( 6.h * task.attempt, 'time' ) } } withLabel:process_medium { cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 42.GB * task.attempt, 'memory' ) } + memory = { check_max( 36.GB * task.attempt, 'memory' ) } time = { check_max( 8.h * task.attempt, 'time' ) } } withLabel:process_high { cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 84.GB * task.attempt, 'memory' ) } + memory = { check_max( 72.GB * task.attempt, 'memory' ) } time = { check_max( 16.h * task.attempt, 'time' ) } } withLabel:process_long { From 1933d43e3b9bc2ac6cc7e7f0e47395a63932df28 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 16 Mar 2020 12:07:44 +0000 Subject: [PATCH 140/226] Add matrix tests --- .github/workflows/ci.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f69d7c5..a3cff843 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,3 +26,25 @@ jobs: - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker + + parameters: + env: + NXF_VER: '19.10.0' + NXF_ANSI_LOG: false + runs-on: ubuntu-latest + strategy: + matrix: + parameters: [--single_end, --skip_trimming, --skip_merge_replicates, --skip_consensus_peaks, --skip_multiqc] + steps: + - uses: actions/checkout@v2 + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Pull docker image + run: | + docker pull nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 + - name: Run pipeline with various options + run: | + nextflow run ${GITHUB_WORKSPACE} -profile test,docker ${{ matrix.parameters }} From 1bce248549a7f843fbc53b280fcd495e2bd4a908 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Mar 2020 16:41:05 +0000 Subject: [PATCH 141/226] Fix tyop --- main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.nf b/main.nf index a801fcdd..185138b4 100644 --- a/main.nf +++ b/main.nf @@ -45,7 +45,7 @@ def helpMessage() { --clip_r1 [int] Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads) (Default: 0) --clip_r2 [int] Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only) (Default: 0) --three_prime_clip_r1 [int] Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed (Default: 0) - --three_prime_clip_r2 [int] Instructs Trim Galore to re move bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed (Default: 0) + --three_prime_clip_r2 [int] Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed (Default: 0) --trim_nextseq [int] Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails (Default: 0) --skip_trimming [bool] Skip the adapter trimming step --save_trimmed [bool] Save the trimmed FastQ files in the results directory From 284ae30f86b1ea1658901bde1e2233ae4da08a2a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Mar 2020 16:41:25 +0000 Subject: [PATCH 142/226] First stab at generating json schema file --- nextflow_schema.json | 501 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 501 insertions(+) create mode 100644 nextflow_schema.json diff --git a/nextflow_schema.json b/nextflow_schema.json new file mode 100644 index 00000000..f447d0ff --- /dev/null +++ b/nextflow_schema.json @@ -0,0 +1,501 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/nf-core/atacseq/master/nextflow_schema.json", + "title": "nf-core/atacseq pipeline parameters", + "description": "ATACSeq peak-calling and differential analysis pipeline.", + "type": "object", + "properties": { + "Generic options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "input": { + "type": "string", + "default": "'./design.csv'", + "description": "Comma-separated file containing information about the samples in the experiment", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input)." + }, + "single_end": { + "type": "boolean", + "description": "Specifies that the input is single-end reads", + "fa_icon": "", + "default": "False", + "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, specify `--single_end` on the command line when you launch the pipeline. It is not possible to run a mixture of single-end and paired-end files in one run." + }, + "fragment_size": { + "type": "integer", + "default": "0", + "description": "Estimated fragment size used to extend single-end reads" + }, + "fingerprint_bins": { + "type": "integer", + "default": "500000", + "description": "Number of genomic bins to use when calculating deepTools fingerprint plot" + }, + "seq_center": { + "type": "string", + "default": "false", + "description": "Sequencing center information to be added to read group of BAM files" + } + }, + "required": [ + "input" + ] + }, + "Reference genome options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "genome": { + "type": "string", + "description": "Name of iGenomes reference", + "fa_icon": "", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files. For example: `--genome GRCh38`.", + "default": "false" + }, + "fasta": { + "type": "string", + "default": "false", + "description": "Path to Fasta reference. Not mandatory when using reference in iGenomes config via --genome", + "help_text": "Full path to fasta file containing reference genome (*mandatory* if `--genome` is not specified). If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs." + }, + "gtf": { + "type": "string", + "default": "false", + "description": "Path to GTF file. Not mandatory when using reference in iGenomes config via --genome" + }, + "bwa_index": { + "type": "string", + "default": "false", + "description": "Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa" + }, + "gene_bed": { + "type": "string", + "default": "false", + "description": "Path to BED file containing gene intervals. This will be created from the GTF file if not specified." + }, + "tss_bed": { + "type": "string", + "default": "false", + "description": "Path to BED file containing transcription start sites. This will be created from the gene BED file if not specified." + }, + "macs_gsize": { + "type": "string", + "default": "false", + "description": "Effective genome size parameter required by MACS2. If using iGenomes config, values have only been provided when --genome is set as GRCh37, GRCm38, hg19, mm10, BDGP6 and WBcel235", + "help_text": "[Effective genome size](https://github.com/taoliu/MACS#-g--gsize) parameter required by MACS2. These have been provided when `--genome` is set as *GRCh37*, *GRCh38*, *GRCm38*, *WBcel235*, *BDGP6*, *R64-1-1*, *EF2*, *hg38*, *hg19* and *mm10*. For other genomes, if this parameter is not specified then the MACS2 peak-calling and differential analysis will be skipped." + }, + "blacklist": { + "type": "string", + "default": "false", + "description": "Path to blacklist regions (.BED format), used for filtering alignments", + "help_text": "If provided, alignments that overlap with the regions in this file will be filtered out (see [ENCODE blacklists](https://sites.google.com/site/anshulkundaje/projects/blacklists)). The file should be in BED format. Blacklisted regions for *GRCh37*, *GRCh38*, *GRCm38*, *hg19*, *hg38*, *mm10* are bundled with the pipeline in the [`blacklists`](../assets/blacklists/) directory, and as such will be automatically used if any of those genomes are specified with the `--genome` parameter." + }, + "mito_name": { + "type": "string", + "default": "false", + "description": "Name of Mitochondrial chomosome in genome fasta (e.g. chrM). Reads aligning to this contig are filtered out", + "help_text": "Name of mitochondrial chomosome in reference assembly. Reads aligning to this contig are filtered out if a valid identifier is provided otherwise this step is skipped. Where possible these have been provided in the [`igenomes.config`](../conf/igenomes.config)." + }, + "save_reference": { + "type": "boolean", + "default": "False", + "description": "If generated by the pipeline save the BWA index in the results directory", + "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times." + }, + "igenomes_base": { + "type": "string", + "description": "Directory / URL base for iGenomes references", + "default": "s3://ngi-igenomes/igenomes/", + "fa_icon": "", + "hidden": true + }, + "igenomes_ignore": { + "type": "boolean", + "description": "Do not load the iGenomes reference config", + "fa_icon": "", + "hidden": true, + "default": "False", + "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + } + }, + "required": [ + "fasta", + "gtf" + ] + }, + "Adapter trimming options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "clip_r1": { + "type": "integer", + "default": "0", + "description": "Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads)" + }, + "clip_r2": { + "type": "integer", + "default": "0", + "description": "Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only)" + }, + "three_prime_clip_r1": { + "type": "integer", + "default": "0", + "description": "Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed" + }, + "three_prime_clip_r2": { + "type": "integer", + "default": "0", + "description": "Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed" + }, + "trim_nextseq": { + "type": "integer", + "default": "0", + "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails", + "help_text": "This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases." + }, + "skip_trimming": { + "type": "boolean", + "default": "False", + "description": "Skip the adapter trimming step", + "help_text": "Skip the adapter trimming step. Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data." + }, + "save_trimmed": { + "type": "boolean", + "default": "False", + "description": "Save the trimmed FastQ files in the results directory", + "help_text": "By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete." + } + } + }, + "Alignment options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "keep_mito": { + "type": "boolean", + "default": "False", + "description": "Reads mapping to mitochondrial contig are not filtered from alignments" + }, + "keep_dups": { + "type": "boolean", + "default": "False", + "description": "Duplicate reads are not filtered from alignments" + }, + "keep_multi_map": { + "type": "boolean", + "default": "False", + "description": "Reads mapping to multiple locations are not filtered from alignments" + }, + "skip_merge_replicates": { + "type": "boolean", + "default": "False", + "description": "Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries", + "help_text": "An additional series of steps are performed by the pipeline by merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed." + }, + "save_align_intermeds": { + "type": "boolean", + "default": "False", + "description": "Save the intermediate BAM files from the alignment step", + "help_text": "By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set this parameter to also save other intermediate BAM files." + } + } + }, + "Peak calling options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "narrow_peak": { + "type": "boolean", + "default": "False", + "description": "Run MACS2 in narrowPeak mode", + "help_text": "MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode." + }, + "broad_cutoff": { + "type": "number", + "default": "0.1", + "description": "Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified", + "help_text": "Specifies broad cut-off value for MACS2. Only used when `--narrow_peak` isnt specified." + }, + "min_reps_consensus": { + "type": "integer", + "default": "1", + "description": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak", + "help_text": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a \"reproducible\" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded." + }, + "save_macs_pileup": { + "type": "boolean", + "default": "False", + "description": "Instruct MACS2 to create bedGraph files normalised to signal per million reads" + }, + "skip_consensus_peaks": { + "type": "boolean", + "default": "False", + "description": "Skip consensus peak generation, annotation and counting" + } + } + }, + "Differential analysis options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "deseq2_vst": { + "type": "boolean", + "default": "False", + "description": "Use vst transformation instead of rlog with DESeq2", + "help_text": "Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization)." + }, + "skip_diff_analysis": { + "type": "boolean", + "default": "False", + "description": "Skip differential accessibility analysis" + } + } + }, + "Process skipping options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "skip_fastqc": { + "type": "boolean", + "default": "False", + "description": "Skip FastQC" + }, + "skip_picard_metrics": { + "type": "boolean", + "default": "False", + "description": "Skip Picard CollectMultipleMetrics" + }, + "skip_preseq": { + "type": "boolean", + "default": "False", + "description": "Skip Preseq" + }, + "skip_plot_profile": { + "type": "boolean", + "default": "False", + "description": "Skip deepTools plotProfile" + }, + "skip_plot_fingerprint": { + "type": "boolean", + "default": "False", + "description": "Skip deepTools plotFingerprint" + }, + "skip_ataqv": { + "type": "boolean", + "default": "False", + "description": "Skip Ataqv" + }, + "skip_igv": { + "type": "boolean", + "default": "False", + "description": "Skip IGV" + }, + "skip_multiqc": { + "type": "boolean", + "default": "False", + "description": "Skip MultiQC" + } + } + }, + "Pipeline config options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "multiqc_config": { + "type": "string", + "description": "Custom config file to supply to MultiQC", + "default": "false", + "fa_icon": "", + "hidden": true + }, + "bamtools_filter_pe_config": { + "type": "string", + "default": "\"$baseDir/assets/bamtools_filter_pe.json\"", + "hidden": true, + "description": "BAMTools JSON file with custom filters for paired-end data" + }, + "bamtools_filter_se_config": { + "type": "string", + "default": "\"$baseDir/assets/bamtools_filter_se.json\"", + "hidden": true, + "description": "BAMTools JSON file with custom filters for single-end data" + } + } + }, + "Institutional config options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "custom_config_version": { + "type": "string", + "description": "Git commit id for Institutional configs", + "default": "master", + "hidden": true + }, + "custom_config_base": { + "type": "string", + "description": "Base directory for Institutional configs", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "hidden": true, + "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files\nfrom the internet. If you don't need them, then this is not a problem. If you do need them,\nyou should download the files from the repo and tell nextflow where to find them with the `--custom_config_base` option." + }, + "hostnames": { + "type": "string", + "description": "Institutional configs hostname", + "default": "false", + "hidden": true + }, + "config_profile_description": { + "type": "string", + "description": "Institutional config description", + "hidden": true, + "default": "false" + }, + "config_profile_contact": { + "type": "string", + "description": "Institutional config contact information", + "hidden": true, + "default": "false" + }, + "config_profile_url": { + "type": "string", + "description": "Institutional config URL link", + "hidden": true, + "default": "false" + } + } + }, + "Max job request options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "max_cpus": { + "type": "integer", + "description": "Maximum number of CPUs that can be requested for any single job", + "default": 16, + "fa_icon": "", + "hidden": true, + "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" + }, + "max_memory": { + "type": "string", + "description": "Maximum amount of memory that can be requested for any single job", + "default": "128 GB", + "fa_icon": "", + "hidden": true, + "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" + }, + "max_time": { + "type": "string", + "description": "Maximum amount of time that can be requested for any single job", + "default": "10d", + "fa_icon": "", + "hidden": true, + "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" + } + } + }, + "Pipeline template options": { + "type": "object", + "description": "", + "default": "", + "properties": { + "help": { + "type": "boolean", + "description": "Display help text", + "hidden": true, + "fa_icon": "", + "default": "False" + }, + "outdir": { + "type": "string", + "description": "The output directory where the results will be saved", + "default": "./results", + "fa_icon": "" + }, + "publish_dir_mode": { + "type": "string", + "default": "copy", + "hidden": true, + "description": "Method used to save pipeline results to output directory", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See https://www.nextflow.io/docs/latest/process.html#publishdir for details.", + "fa_icon": "", + "enum": [ + "symlink", + "rellink", + "link", + "copy", + "copyNoFollow", + "mov" + ] + }, + "name": { + "type": "string", + "description": "Workflow name", + "fa_icon": "", + "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles.", + "default": "false" + }, + "email": { + "type": "string", + "description": "Email address for completion summary", + "fa_icon": "", + "help_text": "An email address to send a summary email to when the pipeline is completed.", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "email_on_fail": { + "type": "string", + "description": "Email address for completion summary, only when pipeline fails", + "fa_icon": "", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully." + }, + "plaintext_email": { + "type": "boolean", + "description": "Send plain-text email instead of HTML", + "fa_icon": "", + "hidden": true, + "default": "False" + }, + "max_multiqc_email_size": { + "type": "string", + "description": "File size limit when attaching MultiQC reports to summary emails", + "default": "25 MB", + "fa_icon": "", + "hidden": true + }, + "monochrome_logs": { + "type": "boolean", + "description": "Do not use coloured log outputs", + "fa_icon": "", + "hidden": true, + "default": "False" + }, + "tracedir": { + "type": "string", + "description": "Directory to keep pipeline Nextflow logs and reports", + "default": "\"${params.outdir}/pipeline_info\"", + "fa_icon": "", + "hidden": true + }, + "clusterOptions": { + "type": "string", + "default": "false", + "description": "Arguments passed to Nextflow clusterOptions", + "hidden": true + } + } + } + } +} From f55f18e3586c74c82aaf66df6851f95b8cab2994 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Mar 2020 17:21:36 +0000 Subject: [PATCH 143/226] Update params --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index f13b839f..9e16c428 100755 --- a/nextflow.config +++ b/nextflow.config @@ -9,6 +9,7 @@ params { // Options: Generic + input = './design.csv' single_end = false seq_center = false fragment_size = 0 From f579b54e6451248c97fe9c8eebf70318cbc55fa5 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 17 Mar 2020 17:25:40 +0000 Subject: [PATCH 144/226] Update schema --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f447d0ff..25137d7c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -12,7 +12,7 @@ "properties": { "input": { "type": "string", - "default": "'./design.csv'", + "default": "./design.csv", "description": "Comma-separated file containing information about the samples in the experiment", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input)." }, From 5e4b0a7b0570bac21622eecb2109aebbf4fd7a62 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 25 Mar 2020 12:40:07 +0000 Subject: [PATCH 145/226] Update schema --- nextflow_schema.json | 145 ++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 92 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 25137d7c..767d5691 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -7,8 +7,6 @@ "properties": { "Generic options": { "type": "object", - "description": "", - "default": "", "properties": { "input": { "type": "string", @@ -19,23 +17,22 @@ "single_end": { "type": "boolean", "description": "Specifies that the input is single-end reads", - "fa_icon": "", - "default": "False", + "fa_icon": "fas fa-align-center", + "default": false, "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, specify `--single_end` on the command line when you launch the pipeline. It is not possible to run a mixture of single-end and paired-end files in one run." }, "fragment_size": { "type": "integer", - "default": "0", + "default": 0, "description": "Estimated fragment size used to extend single-end reads" }, "fingerprint_bins": { "type": "integer", - "default": "500000", + "default": 500000, "description": "Number of genomic bins to use when calculating deepTools fingerprint plot" }, "seq_center": { "type": "string", - "default": "false", "description": "Sequencing center information to be added to read group of BAM files" } }, @@ -45,63 +42,52 @@ }, "Reference genome options": { "type": "object", - "description": "", - "default": "", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference", - "fa_icon": "", + "fa_icon": "fas fa-book", "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files. For example: `--genome GRCh38`.", - "default": "false" }, "fasta": { "type": "string", - "default": "false", "description": "Path to Fasta reference. Not mandatory when using reference in iGenomes config via --genome", "help_text": "Full path to fasta file containing reference genome (*mandatory* if `--genome` is not specified). If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs." }, "gtf": { "type": "string", - "default": "false", "description": "Path to GTF file. Not mandatory when using reference in iGenomes config via --genome" }, "bwa_index": { "type": "string", - "default": "false", "description": "Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa" }, "gene_bed": { "type": "string", - "default": "false", "description": "Path to BED file containing gene intervals. This will be created from the GTF file if not specified." }, "tss_bed": { "type": "string", - "default": "false", "description": "Path to BED file containing transcription start sites. This will be created from the gene BED file if not specified." }, "macs_gsize": { "type": "string", - "default": "false", "description": "Effective genome size parameter required by MACS2. If using iGenomes config, values have only been provided when --genome is set as GRCh37, GRCm38, hg19, mm10, BDGP6 and WBcel235", "help_text": "[Effective genome size](https://github.com/taoliu/MACS#-g--gsize) parameter required by MACS2. These have been provided when `--genome` is set as *GRCh37*, *GRCh38*, *GRCm38*, *WBcel235*, *BDGP6*, *R64-1-1*, *EF2*, *hg38*, *hg19* and *mm10*. For other genomes, if this parameter is not specified then the MACS2 peak-calling and differential analysis will be skipped." }, "blacklist": { "type": "string", - "default": "false", "description": "Path to blacklist regions (.BED format), used for filtering alignments", "help_text": "If provided, alignments that overlap with the regions in this file will be filtered out (see [ENCODE blacklists](https://sites.google.com/site/anshulkundaje/projects/blacklists)). The file should be in BED format. Blacklisted regions for *GRCh37*, *GRCh38*, *GRCm38*, *hg19*, *hg38*, *mm10* are bundled with the pipeline in the [`blacklists`](../assets/blacklists/) directory, and as such will be automatically used if any of those genomes are specified with the `--genome` parameter." }, "mito_name": { "type": "string", - "default": "false", "description": "Name of Mitochondrial chomosome in genome fasta (e.g. chrM). Reads aligning to this contig are filtered out", "help_text": "Name of mitochondrial chomosome in reference assembly. Reads aligning to this contig are filtered out if a valid identifier is provided otherwise this step is skipped. Where possible these have been provided in the [`igenomes.config`](../conf/igenomes.config)." }, "save_reference": { "type": "boolean", - "default": "False", + "default": false, "description": "If generated by the pipeline save the BWA index in the results directory", "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times." }, @@ -109,15 +95,15 @@ "type": "string", "description": "Directory / URL base for iGenomes references", "default": "s3://ngi-igenomes/igenomes/", - "fa_icon": "", + "fa_icon": "fas fa-cloud-download-alt", "hidden": true }, "igenomes_ignore": { "type": "boolean", "description": "Do not load the iGenomes reference config", - "fa_icon": "", + "fa_icon": "fas fa-ban", "hidden": true, - "default": "False", + "default": false, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." } }, @@ -128,44 +114,42 @@ }, "Adapter trimming options": { "type": "object", - "description": "", - "default": "", "properties": { "clip_r1": { "type": "integer", - "default": "0", + "default": 0, "description": "Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads)" }, "clip_r2": { "type": "integer", - "default": "0", + "default": 0, "description": "Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only)" }, "three_prime_clip_r1": { "type": "integer", - "default": "0", + "default": 0, "description": "Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed" }, "three_prime_clip_r2": { "type": "integer", - "default": "0", + "default": 0, "description": "Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed" }, "trim_nextseq": { "type": "integer", - "default": "0", + "default": 0, "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails", "help_text": "This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases." }, "skip_trimming": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip the adapter trimming step", "help_text": "Skip the adapter trimming step. Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data." }, "save_trimmed": { "type": "boolean", - "default": "False", + "default": false, "description": "Save the trimmed FastQ files in the results directory", "help_text": "By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete." } @@ -173,33 +157,31 @@ }, "Alignment options": { "type": "object", - "description": "", - "default": "", "properties": { "keep_mito": { "type": "boolean", - "default": "False", + "default": false, "description": "Reads mapping to mitochondrial contig are not filtered from alignments" }, "keep_dups": { "type": "boolean", - "default": "False", + "default": false, "description": "Duplicate reads are not filtered from alignments" }, "keep_multi_map": { "type": "boolean", - "default": "False", + "default": false, "description": "Reads mapping to multiple locations are not filtered from alignments" }, "skip_merge_replicates": { "type": "boolean", - "default": "False", + "default": false, "description": "Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries", "help_text": "An additional series of steps are performed by the pipeline by merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed." }, "save_align_intermeds": { "type": "boolean", - "default": "False", + "default": false, "description": "Save the intermediate BAM files from the alignment step", "help_text": "By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set this parameter to also save other intermediate BAM files." } @@ -207,114 +189,105 @@ }, "Peak calling options": { "type": "object", - "description": "", - "default": "", "properties": { "narrow_peak": { "type": "boolean", - "default": "False", + "default": false, "description": "Run MACS2 in narrowPeak mode", "help_text": "MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode." }, "broad_cutoff": { "type": "number", - "default": "0.1", + "default": 0.1, "description": "Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified", "help_text": "Specifies broad cut-off value for MACS2. Only used when `--narrow_peak` isnt specified." }, "min_reps_consensus": { "type": "integer", - "default": "1", + "default": 1, "description": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak", "help_text": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a \"reproducible\" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded." }, "save_macs_pileup": { "type": "boolean", - "default": "False", + "default": false, "description": "Instruct MACS2 to create bedGraph files normalised to signal per million reads" }, "skip_consensus_peaks": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip consensus peak generation, annotation and counting" } } }, "Differential analysis options": { "type": "object", - "description": "", - "default": "", "properties": { "deseq2_vst": { "type": "boolean", - "default": "False", + "default": false, "description": "Use vst transformation instead of rlog with DESeq2", "help_text": "Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization)." }, "skip_diff_analysis": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip differential accessibility analysis" } } }, "Process skipping options": { "type": "object", - "description": "", - "default": "", "properties": { "skip_fastqc": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip FastQC" }, "skip_picard_metrics": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip Picard CollectMultipleMetrics" }, "skip_preseq": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip Preseq" }, "skip_plot_profile": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip deepTools plotProfile" }, "skip_plot_fingerprint": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip deepTools plotFingerprint" }, "skip_ataqv": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip Ataqv" }, "skip_igv": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip IGV" }, "skip_multiqc": { "type": "boolean", - "default": "False", + "default": false, "description": "Skip MultiQC" } } }, "Pipeline config options": { "type": "object", - "description": "", - "default": "", "properties": { "multiqc_config": { "type": "string", "description": "Custom config file to supply to MultiQC", - "default": "false", - "fa_icon": "", + "fa_icon": "fas fa-cog", "hidden": true }, "bamtools_filter_pe_config": { @@ -333,8 +306,6 @@ }, "Institutional config options": { "type": "object", - "description": "", - "default": "", "properties": { "custom_config_version": { "type": "string", @@ -352,39 +323,33 @@ "hostnames": { "type": "string", "description": "Institutional configs hostname", - "default": "false", "hidden": true }, "config_profile_description": { "type": "string", "description": "Institutional config description", "hidden": true, - "default": "false" }, "config_profile_contact": { "type": "string", "description": "Institutional config contact information", "hidden": true, - "default": "false" }, "config_profile_url": { "type": "string", "description": "Institutional config URL link", "hidden": true, - "default": "false" } } }, "Max job request options": { "type": "object", - "description": "", - "default": "", "properties": { "max_cpus": { "type": "integer", "description": "Maximum number of CPUs that can be requested for any single job", "default": 16, - "fa_icon": "", + "fa_icon": "fas fa-microchip", "hidden": true, "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" }, @@ -392,7 +357,7 @@ "type": "string", "description": "Maximum amount of memory that can be requested for any single job", "default": "128 GB", - "fa_icon": "", + "fa_icon": "fas fa-memory", "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, @@ -400,7 +365,7 @@ "type": "string", "description": "Maximum amount of time that can be requested for any single job", "default": "10d", - "fa_icon": "", + "fa_icon": "far fa-clock", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } @@ -408,21 +373,19 @@ }, "Pipeline template options": { "type": "object", - "description": "", - "default": "", "properties": { "help": { "type": "boolean", "description": "Display help text", "hidden": true, - "fa_icon": "", - "default": "False" + "fa_icon": "fas fa-question-circle", + "default": false }, "outdir": { "type": "string", "description": "The output directory where the results will be saved", "default": "./results", - "fa_icon": "" + "fa_icon": "fas fa-folder-open" }, "publish_dir_mode": { "type": "string", @@ -430,7 +393,7 @@ "hidden": true, "description": "Method used to save pipeline results to output directory", "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See https://www.nextflow.io/docs/latest/process.html#publishdir for details.", - "fa_icon": "", + "fa_icon": "fas fa-copy", "enum": [ "symlink", "rellink", @@ -443,55 +406,53 @@ "name": { "type": "string", "description": "Workflow name", - "fa_icon": "", + "fa_icon": "fas fa-fingerprint", "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles.", - "default": "false" }, "email": { "type": "string", "description": "Email address for completion summary", - "fa_icon": "", + "fa_icon": "fas fa-envelope", "help_text": "An email address to send a summary email to when the pipeline is completed.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails", - "fa_icon": "", + "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully." }, "plaintext_email": { "type": "boolean", "description": "Send plain-text email instead of HTML", - "fa_icon": "", + "fa_icon": "fas fa-remove-format", "hidden": true, - "default": "False" + "default": false }, "max_multiqc_email_size": { "type": "string", "description": "File size limit when attaching MultiQC reports to summary emails", "default": "25 MB", - "fa_icon": "", + "fa_icon": "fas fa-file-upload", "hidden": true }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs", - "fa_icon": "", + "fa_icon": "fas fa-palette", "hidden": true, - "default": "False" + "default": false }, "tracedir": { "type": "string", "description": "Directory to keep pipeline Nextflow logs and reports", "default": "\"${params.outdir}/pipeline_info\"", - "fa_icon": "", + "fa_icon": "fas fa-cogs", "hidden": true }, "clusterOptions": { "type": "string", - "default": "false", "description": "Arguments passed to Nextflow clusterOptions", "hidden": true } From cb7a0a2df4f1e85a062e43392d67becad4656867 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 25 Mar 2020 14:43:18 +0000 Subject: [PATCH 146/226] Fix schema with latest changes --- nextflow_schema.json | 312 +++++++++++++++++++++++++++---------------- 1 file changed, 198 insertions(+), 114 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 767d5691..2cf59615 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -11,96 +11,116 @@ "input": { "type": "string", "default": "./design.csv", - "description": "Comma-separated file containing information about the samples in the experiment", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input)." + "description": "Comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input).", + "fa_icon": "fas fa-file-csv" }, "single_end": { "type": "boolean", - "description": "Specifies that the input is single-end reads", + "description": "Specifies that the input is single-end reads.", "fa_icon": "fas fa-align-center", "default": false, - "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, specify `--single_end` on the command line when you launch the pipeline. It is not possible to run a mixture of single-end and paired-end files in one run." + "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, specify this parameter on the command line when you launch the pipeline. It is not possible to run a mixture of single-end and paired-end files in one run." }, "fragment_size": { "type": "integer", "default": 0, - "description": "Estimated fragment size used to extend single-end reads" + "description": "Estimated fragment size used to extend single-end reads.", + "fa_icon": "fas fa-align-justify", + "help_text": "" }, "fingerprint_bins": { "type": "integer", "default": 500000, - "description": "Number of genomic bins to use when calculating deepTools fingerprint plot" + "description": "Number of genomic bins to use when calculating deepTools fingerprint plot.", + "fa_icon": "fas fa-dumpster" }, "seq_center": { "type": "string", - "description": "Sequencing center information to be added to read group of BAM files" + "description": "Sequencing center information to be added to read group of BAM files.", + "fa_icon": "fas fa-synagogue" } }, "required": [ "input" - ] + ], + "fa_icon": "fas fa-terminal" }, "Reference genome options": { "type": "object", "properties": { "genome": { "type": "string", - "description": "Name of iGenomes reference", + "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files. For example: `--genome GRCh38`.", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`." }, "fasta": { "type": "string", - "description": "Path to Fasta reference. Not mandatory when using reference in iGenomes config via --genome", - "help_text": "Full path to fasta file containing reference genome (*mandatory* if `--genome` is not specified). If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs." + "description": "Path to Fasta reference file.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "far fa-file-code" }, "gtf": { "type": "string", - "description": "Path to GTF file. Not mandatory when using reference in iGenomes config via --genome" + "description": "Path to GTF annotation file.", + "fa_icon": "fas fa-file-invoice", + "help_text": "This parameter is *mandatory* if `--genome` is not specified." }, "bwa_index": { "type": "string", - "description": "Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa" + "description": "Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa.", + "fa_icon": "fas fa-bezier-curve", + "help_text": "" }, "gene_bed": { "type": "string", - "description": "Path to BED file containing gene intervals. This will be created from the GTF file if not specified." + "description": "Path to BED file containing gene intervals. This will be created from the GTF file if not specified.", + "fa_icon": "fas fa-procedures", + "help_text": "" }, "tss_bed": { "type": "string", - "description": "Path to BED file containing transcription start sites. This will be created from the gene BED file if not specified." + "description": "Path to BED file containing transcription start sites. This will be created from the gene BED file if not specified.", + "fa_icon": "fas fa-procedures", + "help_text": "" }, "macs_gsize": { "type": "string", - "description": "Effective genome size parameter required by MACS2. If using iGenomes config, values have only been provided when --genome is set as GRCh37, GRCm38, hg19, mm10, BDGP6 and WBcel235", - "help_text": "[Effective genome size](https://github.com/taoliu/MACS#-g--gsize) parameter required by MACS2. These have been provided when `--genome` is set as *GRCh37*, *GRCh38*, *GRCm38*, *WBcel235*, *BDGP6*, *R64-1-1*, *EF2*, *hg38*, *hg19* and *mm10*. For other genomes, if this parameter is not specified then the MACS2 peak-calling and differential analysis will be skipped." + "description": "Effective genome size parameter required by MACS2.", + "help_text": "[Effective genome size](https://github.com/taoliu/MACS#-g--gsize) parameter required by MACS2. If using an iGenomes reference these have been provided when `--genome` is set as *GRCh37*, *GRCh38*, *GRCm38*, *WBcel235*, *BDGP6*, *R64-1-1*, *EF2*, *hg38*, *hg19* and *mm10*. For other genomes, if this parameter is not specified then the MACS2 peak-calling and differential analysis will be skipped.", + "fa_icon": "fas fa-arrows-alt-h" }, "blacklist": { "type": "string", - "description": "Path to blacklist regions (.BED format), used for filtering alignments", - "help_text": "If provided, alignments that overlap with the regions in this file will be filtered out (see [ENCODE blacklists](https://sites.google.com/site/anshulkundaje/projects/blacklists)). The file should be in BED format. Blacklisted regions for *GRCh37*, *GRCh38*, *GRCm38*, *hg19*, *hg38*, *mm10* are bundled with the pipeline in the [`blacklists`](../assets/blacklists/) directory, and as such will be automatically used if any of those genomes are specified with the `--genome` parameter." + "description": "Path to blacklist regions in BED format, used for filtering alignments.", + "help_text": "If provided, alignments that overlap with the regions in this file will be filtered out (see [ENCODE blacklists](https://sites.google.com/site/anshulkundaje/projects/blacklists)). The file should be in BED format. Blacklisted regions for *GRCh37*, *GRCh38*, *GRCm38*, *hg19*, *hg38*, *mm10* are bundled with the pipeline in the [`blacklists`](../assets/blacklists/) directory, and as such will be automatically used if any of those genomes are specified with the `--genome` parameter.", + "fa_icon": "fas fa-clipboard-list" }, "mito_name": { "type": "string", - "description": "Name of Mitochondrial chomosome in genome fasta (e.g. chrM). Reads aligning to this contig are filtered out", - "help_text": "Name of mitochondrial chomosome in reference assembly. Reads aligning to this contig are filtered out if a valid identifier is provided otherwise this step is skipped. Where possible these have been provided in the [`igenomes.config`](../conf/igenomes.config)." + "description": "Name of Mitochondrial chomosome in reference assembly e.g. chrM.", + "help_text": "Reads aligning to this contig are filtered out if a valid identifier is provided otherwise this step is skipped. Where possible these have been provided in the [`igenomes.config`](../conf/igenomes.config).", + "fa_icon": "fas fa-signature" }, "save_reference": { "type": "boolean", "default": false, - "description": "If generated by the pipeline save the BWA index in the results directory", - "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times." + "description": "If generated by the pipeline save the BWA index in the results directory.", + "help_text": "If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times.", + "fa_icon": "fas fa-save" }, "igenomes_base": { "type": "string", - "description": "Directory / URL base for iGenomes references", + "description": "Directory / URL base for iGenomes references.", "default": "s3://ngi-igenomes/igenomes/", "fa_icon": "fas fa-cloud-download-alt", - "hidden": true + "hidden": true, + "help_text": "" }, "igenomes_ignore": { "type": "boolean", - "description": "Do not load the iGenomes reference config", + "description": "Do not load the iGenomes reference config.", "fa_icon": "fas fa-ban", "hidden": true, "default": false, @@ -110,7 +130,8 @@ "required": [ "fasta", "gtf" - ] + ], + "fa_icon": "fas fa-dna" }, "Adapter trimming options": { "type": "object", @@ -118,42 +139,52 @@ "clip_r1": { "type": "integer", "default": 0, - "description": "Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads)" + "description": "Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads).", + "fa_icon": "fas fa-cut", + "help_text": "" }, "clip_r2": { "type": "integer", "default": 0, - "description": "Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only)" + "description": "Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only).", + "fa_icon": "fas fa-cut", + "help_text": "" }, "three_prime_clip_r1": { "type": "integer", "default": 0, - "description": "Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed" + "description": "Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed.", + "fa_icon": "fas fa-cut" }, "three_prime_clip_r2": { "type": "integer", "default": 0, - "description": "Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed" + "description": "Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed.", + "fa_icon": "fas fa-cut" }, "trim_nextseq": { "type": "integer", "default": 0, - "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails", - "help_text": "This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases." + "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails.", + "help_text": "This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases.", + "fa_icon": "fas fa-cut" }, "skip_trimming": { "type": "boolean", "default": false, - "description": "Skip the adapter trimming step", - "help_text": "Skip the adapter trimming step. Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data." + "description": "Skip the adapter trimming step.", + "help_text": "Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data.", + "fa_icon": "fas fa-forward" }, "save_trimmed": { "type": "boolean", "default": false, - "description": "Save the trimmed FastQ files in the results directory", - "help_text": "By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete." + "description": "Save the trimmed FastQ files in the results directory.", + "help_text": "By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete.", + "fa_icon": "fas fa-save" } - } + }, + "fa_icon": "fas fa-cut" }, "Alignment options": { "type": "object", @@ -161,31 +192,37 @@ "keep_mito": { "type": "boolean", "default": false, - "description": "Reads mapping to mitochondrial contig are not filtered from alignments" + "description": "Reads mapping to mitochondrial contig are not filtered from alignments.", + "fa_icon": "fas fa-cart-arrow-down" }, "keep_dups": { "type": "boolean", "default": false, - "description": "Duplicate reads are not filtered from alignments" + "description": "Duplicate reads are not filtered from alignments.", + "fa_icon": "fas fa-cart-arrow-down" }, "keep_multi_map": { "type": "boolean", "default": false, - "description": "Reads mapping to multiple locations are not filtered from alignments" + "description": "Reads mapping to multiple locations are not filtered from alignments.", + "fa_icon": "fas fa-cart-arrow-down" }, "skip_merge_replicates": { "type": "boolean", "default": false, - "description": "Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries", - "help_text": "An additional series of steps are performed by the pipeline by merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed." + "description": "Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries.", + "help_text": "An additional series of steps are performed by the pipeline for merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed.", + "fa_icon": "fas fa-forward" }, "save_align_intermeds": { "type": "boolean", "default": false, - "description": "Save the intermediate BAM files from the alignment step", - "help_text": "By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set this parameter to also save other intermediate BAM files." + "description": "Save the intermediate BAM files from the alignment step.", + "help_text": "By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set this parameter to also save other intermediate BAM files.", + "fa_icon": "fas fa-save" } - } + }, + "fa_icon": "fas fa-map-signs" }, "Peak calling options": { "type": "object", @@ -193,32 +230,39 @@ "narrow_peak": { "type": "boolean", "default": false, - "description": "Run MACS2 in narrowPeak mode", - "help_text": "MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode." + "description": "Run MACS2 in narrowPeak mode.", + "help_text": "MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode.", + "fa_icon": "fas fa-arrows-alt-h" }, "broad_cutoff": { "type": "number", "default": 0.1, - "description": "Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified", - "help_text": "Specifies broad cut-off value for MACS2. Only used when `--narrow_peak` isnt specified." + "description": "Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified.", + "fa_icon": "fas fa-hand-scissors" }, "min_reps_consensus": { "type": "integer", "default": 1, - "description": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak", - "help_text": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a \"reproducible\" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded." + "description": "Number of biological replicates required from a given condition for a peak to contribute to a consensus peak.", + "help_text": "If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a \"reproducible\" set of consensus peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded.", + "fa_icon": "fas fa-sort-numeric-down" }, "save_macs_pileup": { "type": "boolean", "default": false, - "description": "Instruct MACS2 to create bedGraph files normalised to signal per million reads" + "description": "Instruct MACS2 to create bedGraph files normalised to signal per million reads.", + "fa_icon": "fas fa-save", + "help_text": "" }, "skip_consensus_peaks": { "type": "boolean", "default": false, - "description": "Skip consensus peak generation, annotation and counting" + "description": "Skip consensus peak generation, annotation and counting.", + "fa_icon": "fas fa-forward", + "help_text": "" } - } + }, + "fa_icon": "fas fa-chart-area" }, "Differential analysis options": { "type": "object", @@ -226,15 +270,19 @@ "deseq2_vst": { "type": "boolean", "default": false, - "description": "Use vst transformation instead of rlog with DESeq2", - "help_text": "Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization)." + "description": "Use vst transformation instead of rlog with DESeq2.", + "help_text": "See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization).", + "fa_icon": "fas fa-dolly" }, "skip_diff_analysis": { "type": "boolean", "default": false, - "description": "Skip differential accessibility analysis" + "description": "Skip differential accessibility analysis.", + "fa_icon": "fas fa-forward", + "help_text": "" } - } + }, + "fa_icon": "fas fa-not-equal" }, "Process skipping options": { "type": "object", @@ -242,112 +290,139 @@ "skip_fastqc": { "type": "boolean", "default": false, - "description": "Skip FastQC" + "description": "Skip FastQC.", + "fa_icon": "fas fa-forward" }, "skip_picard_metrics": { "type": "boolean", "default": false, - "description": "Skip Picard CollectMultipleMetrics" + "description": "Skip Picard CollectMultipleMetrics.", + "fa_icon": "fas fa-forward" }, "skip_preseq": { "type": "boolean", "default": false, - "description": "Skip Preseq" + "description": "Skip Preseq.", + "fa_icon": "fas fa-forward" }, "skip_plot_profile": { "type": "boolean", "default": false, - "description": "Skip deepTools plotProfile" + "description": "Skip deepTools plotProfile.", + "fa_icon": "fas fa-forward" }, "skip_plot_fingerprint": { "type": "boolean", "default": false, - "description": "Skip deepTools plotFingerprint" + "description": "Skip deepTools plotFingerprint.", + "fa_icon": "fas fa-forward" }, "skip_ataqv": { "type": "boolean", "default": false, - "description": "Skip Ataqv" + "description": "Skip Ataqv.", + "fa_icon": "fas fa-forward" }, "skip_igv": { "type": "boolean", "default": false, - "description": "Skip IGV" + "description": "Skip IGV.", + "fa_icon": "fas fa-forward" }, "skip_multiqc": { "type": "boolean", "default": false, - "description": "Skip MultiQC" + "description": "Skip MultiQC.", + "fa_icon": "fas fa-forward" } - } + }, + "fa_icon": "fas fa-forward" }, "Pipeline config options": { "type": "object", "properties": { "multiqc_config": { "type": "string", - "description": "Custom config file to supply to MultiQC", + "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", - "hidden": true + "hidden": true, + "help_text": "" }, "bamtools_filter_pe_config": { "type": "string", - "default": "\"$baseDir/assets/bamtools_filter_pe.json\"", + "default": "$baseDir/assets/bamtools_filter_pe.json", "hidden": true, - "description": "BAMTools JSON file with custom filters for paired-end data" + "description": "BAMTools JSON file with custom filters for paired-end data.", + "fa_icon": "fas fa-cog", + "help_text": "" }, "bamtools_filter_se_config": { "type": "string", - "default": "\"$baseDir/assets/bamtools_filter_se.json\"", + "default": "$baseDir/assets/bamtools_filter_se.json", "hidden": true, - "description": "BAMTools JSON file with custom filters for single-end data" + "description": "BAMTools JSON file with custom filters for single-end data.", + "fa_icon": "fas fa-cog", + "help_text": "" } - } + }, + "fa_icon": "fas fa-cog" }, "Institutional config options": { "type": "object", "properties": { "custom_config_version": { "type": "string", - "description": "Git commit id for Institutional configs", + "description": "Git commit id for Institutional configs.", "default": "master", - "hidden": true + "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "" }, "custom_config_base": { "type": "string", - "description": "Base directory for Institutional configs", + "description": "Base directory for Institutional configs.", "default": "https://raw.githubusercontent.com/nf-core/configs/master", "hidden": true, - "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files\nfrom the internet. If you don't need them, then this is not a problem. If you do need them,\nyou should download the files from the repo and tell nextflow where to find them with the `--custom_config_base` option." + "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", + "fa_icon": "fas fa-users-cog" }, "hostnames": { "type": "string", - "description": "Institutional configs hostname", - "hidden": true + "description": "Institutional configs hostname.", + "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "" }, "config_profile_description": { "type": "string", - "description": "Institutional config description", + "description": "Institutional config description.", "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "" }, "config_profile_contact": { "type": "string", - "description": "Institutional config contact information", + "description": "Institutional config contact information.", "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "" }, "config_profile_url": { "type": "string", - "description": "Institutional config URL link", + "description": "Institutional config URL link.", "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "" } - } + }, + "fa_icon": "fas fa-university" }, "Max job request options": { "type": "object", "properties": { "max_cpus": { "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job", + "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", "hidden": true, @@ -355,44 +430,46 @@ }, "max_memory": { "type": "string", - "description": "Maximum amount of memory that can be requested for any single job", - "default": "128 GB", + "description": "Maximum amount of memory that can be requested for any single job.", + "default": "128.GB", "fa_icon": "fas fa-memory", "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, "max_time": { "type": "string", - "description": "Maximum amount of time that can be requested for any single job", - "default": "10d", + "description": "Maximum amount of time that can be requested for any single job.", + "default": "240.h", "fa_icon": "far fa-clock", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } - } + }, + "fa_icon": "fab fa-acquisitions-incorporated" }, "Pipeline template options": { "type": "object", "properties": { "help": { "type": "boolean", - "description": "Display help text", + "description": "Display help text.", "hidden": true, "fa_icon": "fas fa-question-circle", "default": false }, "outdir": { "type": "string", - "description": "The output directory where the results will be saved", + "description": "The output directory where the results will be saved.", "default": "./results", - "fa_icon": "fas fa-folder-open" + "fa_icon": "fas fa-folder-open", + "help_text": "" }, "publish_dir_mode": { "type": "string", "default": "copy", "hidden": true, - "description": "Method used to save pipeline results to output directory", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See https://www.nextflow.io/docs/latest/process.html#publishdir for details.", + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", "fa_icon": "fas fa-copy", "enum": [ "symlink", @@ -405,58 +482,65 @@ }, "name": { "type": "string", - "description": "Workflow name", + "description": "Workflow name.", "fa_icon": "fas fa-fingerprint", - "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles.", + "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles." }, "email": { "type": "string", - "description": "Email address for completion summary", + "description": "Email address for completion summary.", "fa_icon": "fas fa-envelope", "help_text": "An email address to send a summary email to when the pipeline is completed.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" }, "email_on_fail": { "type": "string", - "description": "Email address for completion summary, only when pipeline fails", + "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully." }, "plaintext_email": { "type": "boolean", - "description": "Send plain-text email instead of HTML", + "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", "hidden": true, - "default": false + "default": false, + "help_text": "" }, "max_multiqc_email_size": { "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails", - "default": "25 MB", + "description": "File size limit when attaching MultiQC reports to summary emails.", + "default": "25.MB", "fa_icon": "fas fa-file-upload", - "hidden": true + "hidden": true, + "help_text": "" }, "monochrome_logs": { "type": "boolean", - "description": "Do not use coloured log outputs", + "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", "hidden": true, - "default": false + "default": false, + "help_text": "" }, "tracedir": { "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports", - "default": "\"${params.outdir}/pipeline_info\"", + "description": "Directory to keep pipeline Nextflow logs and reports.", + "default": "${params.outdir}/pipeline_info", "fa_icon": "fas fa-cogs", - "hidden": true + "hidden": true, + "help_text": "" }, "clusterOptions": { "type": "string", - "description": "Arguments passed to Nextflow clusterOptions", - "hidden": true + "description": "Arguments passed to Nextflow clusterOptions.", + "hidden": true, + "fa_icon": "fas fa-network-wired", + "help_text": "" } - } + }, + "fa_icon": "fas fa-file-import" } } } From 9fd388b68a901fd0a1a5df45eed4a21312095cc0 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 25 Mar 2020 16:34:24 +0000 Subject: [PATCH 147/226] Remove required field --- nextflow_schema.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 2cf59615..4487fd5e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -127,10 +127,6 @@ "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." } }, - "required": [ - "fasta", - "gtf" - ], "fa_icon": "fas fa-dna" }, "Adapter trimming options": { From 3d8e305d80f62a3c6a92854c5fe8eadbd66fb661 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 25 Mar 2020 17:54:36 +0000 Subject: [PATCH 148/226] Add PE param to preseq --- main.nf | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 185138b4..563b2bc0 100644 --- a/main.nf +++ b/main.nf @@ -897,11 +897,20 @@ process MergedLibPreseq { output: file "*.ccurve.txt" into ch_mlib_preseq_mqc + file "*.log" into ch_mlib_preseq_log script: prefix = "${name}.mLb.mkD" + pe = params.single_end ? "" : "-pe" """ - preseq lc_extrap -v -output ${prefix}.ccurve.txt -bam ${bam[0]} + preseq lc_extrap \\ + -output ${prefix}.ccurve.txt \\ + -verbose \\ + -bam \\ + $pe \\ + -seed 1 \\ + ${bam[0]} + cp .command.err ${prefix}.command.log """ } From 7749ebc2e3a4123eea9d88d7b68013c1545d97d3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 25 Mar 2020 18:02:51 +0000 Subject: [PATCH 149/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07410391..d23a798a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image +* [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? * Update template to tools `1.9` * Parameters: * `--skip_consensus_peaks` to skip consensus peak generation From 2947cc2de3f01e8b053b161df9631c55f5d1f69f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 26 Mar 2020 12:13:32 +0000 Subject: [PATCH 150/226] Update nextflow.config --- nextflow.config | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 nextflow.config diff --git a/nextflow.config b/nextflow.config old mode 100755 new mode 100644 From 999c8b3925de895a9951422730d18d677a29e4ac Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 26 Mar 2020 14:18:15 +0000 Subject: [PATCH 151/226] Add aws tests --- .github/workflows/awstest.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/awstest.yml diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml new file mode 100644 index 00000000..5bde6ff4 --- /dev/null +++ b/.github/workflows/awstest.yml @@ -0,0 +1,31 @@ +name: nf-core AWS test +# This workflow is triggered on PRs to the master branch. +# It runs the -profile 'test' on AWS batch + +on: + push: + branches: + - master + - dev # just for testing purposes, to be removed + release: + types: [published] + +jobs: + run-awstest: + name: Run AWS test + runs-on: ubuntu-latest + steps: + - name: Setup Miniconda + uses: goanpeca/setup-miniconda@v1.0.2 + with: + auto-update-conda: true + python-version: 3.7 + - name: Install awscli + run: conda install -c conda-forge awscli + - name: Start AWS batch job + env: + AWS_ACCESS_KEY_ID: ${{secrets.AWS_KEY_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_KEY_SECRET}} + TOWER_ACCESS_TOKEN: ${{secrets.TOWER_ACCESS_TOKEN}} + run: | + aws batch submit-job --region eu-west-1 --job-name nf-core-atacseq --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' --job-definition nextflow --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' From 21375791ccaf51cdadcbb03c14331b9873b03cfc Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 26 Mar 2020 17:54:12 +0000 Subject: [PATCH 152/226] Add test config for full test --- conf/test_full.config | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100755 conf/test_full.config diff --git a/conf/test_full.config b/conf/test_full.config new file mode 100755 index 00000000..94cd8e5e --- /dev/null +++ b/conf/test_full.config @@ -0,0 +1,19 @@ +/* + * ------------------------------------------------- + * Nextflow config file for running tests + * ------------------------------------------------- + * Defines bundled input files and everything required + * to run a full pipeline test. Use as follows: + * nextflow run nf-core/atacseq -profile test_full, + */ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design_full.csv' + + // Genome references + genome = 'hg19' +} From 288030606ad83941937f5eb555d7dee6e2ec5e98 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 26 Mar 2020 17:54:22 +0000 Subject: [PATCH 153/226] Add profile for full test --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index 9e16c428..2d5009de 100644 --- a/nextflow.config +++ b/nextflow.config @@ -122,6 +122,7 @@ profiles { singularity.autoMounts = true } test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } } // Load igenomes.config if required From 157c5189056b24a834c7a8b4bbc0bf8e52c82c19 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 26 Mar 2020 17:55:35 +0000 Subject: [PATCH 154/226] Change test to test_full --- .github/workflows/awstest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 5bde6ff4..ae7732b1 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -1,6 +1,6 @@ name: nf-core AWS test # This workflow is triggered on PRs to the master branch. -# It runs the -profile 'test' on AWS batch +# It runs the -profile 'test_full' on AWS batch on: push: @@ -28,4 +28,4 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_KEY_SECRET}} TOWER_ACCESS_TOKEN: ${{secrets.TOWER_ACCESS_TOKEN}} run: | - aws batch submit-job --region eu-west-1 --job-name nf-core-atacseq --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' --job-definition nextflow --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' + aws batch submit-job --region eu-west-1 --job-name nf-core-atacseq --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' --job-definition nextflow --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' From 61d22ad1207f19cbe89b0cefb530e6e42e59340c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 27 Mar 2020 11:01:58 +0000 Subject: [PATCH 155/226] Test on PR instead of push --- .github/workflows/awstest.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index ae7732b1..8902016a 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -3,10 +3,11 @@ name: nf-core AWS test # It runs the -profile 'test_full' on AWS batch on: - push: + #push: + pull_request: branches: - master - - dev # just for testing purposes, to be removed + #- dev # just for testing purposes, to be removed release: types: [published] From c0db0ff4d699b368789213aeb7d26d331b1e60ea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 27 Mar 2020 11:07:55 +0000 Subject: [PATCH 156/226] Remove comments --- .github/workflows/awstest.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 8902016a..b7a47e78 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -3,11 +3,9 @@ name: nf-core AWS test # It runs the -profile 'test_full' on AWS batch on: - #push: pull_request: branches: - master - #- dev # just for testing purposes, to be removed release: types: [published] From 5d88e0c766c920d9324df378a0d3d1bc6cec56a3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 27 Mar 2020 13:11:15 +0000 Subject: [PATCH 157/226] Change pull_request to pull --- .github/workflows/awstest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index b7a47e78..8ccdb4cf 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -3,7 +3,7 @@ name: nf-core AWS test # It runs the -profile 'test_full' on AWS batch on: - pull_request: + push: branches: - master release: From 3048f996cfac6d86dff9691324bc4b405c18f3b1 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 27 Mar 2020 15:20:50 +0000 Subject: [PATCH 158/226] Push to dev --- .github/workflows/awstest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 8ccdb4cf..542c1976 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -6,6 +6,7 @@ on: push: branches: - master + - dev release: types: [published] From 5f81accd28cd7eda2bb373df6fabb941ce321c15 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 27 Mar 2020 17:13:02 +0000 Subject: [PATCH 159/226] Update schema --- nextflow_schema.json | 100 +++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 51 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 4487fd5e..83c5b73e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -5,7 +5,7 @@ "description": "ATACSeq peak-calling and differential analysis pipeline.", "type": "object", "properties": { - "Generic options": { + "Input/output options": { "type": "object", "properties": { "input": { @@ -29,16 +29,24 @@ "fa_icon": "fas fa-align-justify", "help_text": "" }, - "fingerprint_bins": { - "type": "integer", - "default": 500000, - "description": "Number of genomic bins to use when calculating deepTools fingerprint plot.", - "fa_icon": "fas fa-dumpster" - }, "seq_center": { "type": "string", "description": "Sequencing center information to be added to read group of BAM files.", "fa_icon": "fas fa-synagogue" + }, + "outdir": { + "type": "string", + "description": "The output directory where the results will be saved.", + "default": "./results", + "fa_icon": "fas fa-folder-open", + "help_text": "" + }, + "email": { + "type": "string", + "description": "Email address for completion summary.", + "fa_icon": "fas fa-envelope", + "help_text": "An email address to send a summary email to when the pipeline is completed.", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" } }, "required": [ @@ -216,6 +224,22 @@ "description": "Save the intermediate BAM files from the alignment step.", "help_text": "By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set this parameter to also save other intermediate BAM files.", "fa_icon": "fas fa-save" + }, + "bamtools_filter_pe_config": { + "type": "string", + "default": "$baseDir/assets/bamtools_filter_pe.json", + "hidden": true, + "description": "BAMTools JSON file with custom filters for paired-end data.", + "fa_icon": "fas fa-cog", + "help_text": "" + }, + "bamtools_filter_se_config": { + "type": "string", + "default": "$baseDir/assets/bamtools_filter_se.json", + "hidden": true, + "description": "BAMTools JSON file with custom filters for single-end data.", + "fa_icon": "fas fa-cog", + "help_text": "" } }, "fa_icon": "fas fa-map-signs" @@ -334,35 +358,6 @@ }, "fa_icon": "fas fa-forward" }, - "Pipeline config options": { - "type": "object", - "properties": { - "multiqc_config": { - "type": "string", - "description": "Custom config file to supply to MultiQC.", - "fa_icon": "fas fa-cog", - "hidden": true, - "help_text": "" - }, - "bamtools_filter_pe_config": { - "type": "string", - "default": "$baseDir/assets/bamtools_filter_pe.json", - "hidden": true, - "description": "BAMTools JSON file with custom filters for paired-end data.", - "fa_icon": "fas fa-cog", - "help_text": "" - }, - "bamtools_filter_se_config": { - "type": "string", - "default": "$baseDir/assets/bamtools_filter_se.json", - "hidden": true, - "description": "BAMTools JSON file with custom filters for single-end data.", - "fa_icon": "fas fa-cog", - "help_text": "" - } - }, - "fa_icon": "fas fa-cog" - }, "Institutional config options": { "type": "object", "properties": { @@ -443,7 +438,7 @@ }, "fa_icon": "fab fa-acquisitions-incorporated" }, - "Pipeline template options": { + "Generic options": { "type": "object", "properties": { "help": { @@ -453,12 +448,12 @@ "fa_icon": "fas fa-question-circle", "default": false }, - "outdir": { - "type": "string", - "description": "The output directory where the results will be saved.", - "default": "./results", - "fa_icon": "fas fa-folder-open", - "help_text": "" + "fingerprint_bins": { + "type": "integer", + "default": 500000, + "hidden": true, + "description": "Number of genomic bins to use when calculating deepTools fingerprint plot.", + "fa_icon": "fas fa-dumpster" }, "publish_dir_mode": { "type": "string", @@ -480,20 +475,15 @@ "type": "string", "description": "Workflow name.", "fa_icon": "fas fa-fingerprint", + "hidden": true, "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles." }, - "email": { - "type": "string", - "description": "Email address for completion summary.", - "fa_icon": "fas fa-envelope", - "help_text": "An email address to send a summary email to when the pipeline is completed.", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" - }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "hidden": true, "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully." }, "plaintext_email": { @@ -520,6 +510,13 @@ "default": false, "help_text": "" }, + "multiqc_config": { + "type": "string", + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true, + "help_text": "" + }, "tracedir": { "type": "string", "description": "Directory to keep pipeline Nextflow logs and reports.", @@ -538,5 +535,6 @@ }, "fa_icon": "fas fa-file-import" } - } + }, + "required": ["Input/output options"] } From 4ee6b312be05122e70318c92f6b87efb96bdfc42 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 29 Apr 2020 17:39:55 +0100 Subject: [PATCH 160/226] import errno --- bin/bampe_rm_orphan.py | 1 + bin/get_autosomes.py | 1 + bin/igv_files_to_session.py | 1 + bin/macs2_merged_expand.py | 1 + 4 files changed, 4 insertions(+) diff --git a/bin/bampe_rm_orphan.py b/bin/bampe_rm_orphan.py index 439a53ee..5b0a6f72 100755 --- a/bin/bampe_rm_orphan.py +++ b/bin/bampe_rm_orphan.py @@ -8,6 +8,7 @@ import os import pysam +import errno import argparse ############################################ diff --git a/bin/get_autosomes.py b/bin/get_autosomes.py index a8603b6b..2d530561 100755 --- a/bin/get_autosomes.py +++ b/bin/get_autosomes.py @@ -7,6 +7,7 @@ ####################################################################### import os +import errno import argparse ############################################ diff --git a/bin/igv_files_to_session.py b/bin/igv_files_to_session.py index 6dc6aabe..48e749c8 100755 --- a/bin/igv_files_to_session.py +++ b/bin/igv_files_to_session.py @@ -7,6 +7,7 @@ ####################################################################### import os +import errno import argparse ############################################ diff --git a/bin/macs2_merged_expand.py b/bin/macs2_merged_expand.py index 55c3a057..f4e84a14 100755 --- a/bin/macs2_merged_expand.py +++ b/bin/macs2_merged_expand.py @@ -7,6 +7,7 @@ ####################################################################### import os +import errno import argparse ############################################ From d8d827d8b2b19eab0b527dd7035dd09d244f003c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 16:29:52 +0100 Subject: [PATCH 161/226] Fix #102 --- bin/featurecounts_deseq2.r | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/featurecounts_deseq2.r b/bin/featurecounts_deseq2.r index e19fd977..b75335a5 100755 --- a/bin/featurecounts_deseq2.r +++ b/bin/featurecounts_deseq2.r @@ -78,7 +78,7 @@ if (file.exists(opt$outdir) == FALSE) { setwd(opt$outdir) samples.vec <- sort(colnames(count.table)) -groups <- substr(samples.vec, 1, nchar(samples.vec)-3) +groups <- sub("_[^_]+$", "", samples.vec) print(unique(groups)) if (length(unique(groups)) == 1) { quit(save = "no", status = 0, runLast = FALSE) From 60380e60fc6b84648470771b9d96761ca02813e2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 16:46:25 +0100 Subject: [PATCH 162/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d23a798a..bc4856d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * [#86](https://github.com/nf-core/atacseq/issues/86) - bug in the plot_homer_annotatepeaks.r script +* [#102](https://github.com/nf-core/atacseq/issues/102) - Incorrect Group ID assigned by featurecounts_deseq2.r * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From 61bdc50a6d7cf4ca91be47c526da7360d1db6257 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 17:57:02 +0100 Subject: [PATCH 163/226] Revert bump-versions --- .github/workflows/ci.yml | 4 ++-- Dockerfile | 4 ++-- environment.yml | 2 +- nextflow.config | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3cff843..baa82785 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: - name: Pull docker image run: | docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 + docker tag nfcore/atacseq:dev nfcore/atacseq:dev - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker @@ -44,7 +44,7 @@ jobs: - name: Pull docker image run: | docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 + docker tag nfcore/atacseq:dev nfcore/atacseq:dev - name: Run pipeline with various options run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker ${{ matrix.parameters }} diff --git a/Dockerfile b/Dockerfile index 715e6892..ecae8934 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,10 +7,10 @@ COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a # Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-atacseq-1.2.0/bin:$PATH +ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH # Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-atacseq-1.2.0 > nf-core-atacseq-1.2.0.yml +RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml # Instruct R processes to use these empty files instead of clashing with a local version RUN touch .Rprofile diff --git a/environment.yml b/environment.yml index 535b7768..af38f938 100755 --- a/environment.yml +++ b/environment.yml @@ -1,6 +1,6 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-atacseq-1.2.0 +name: nf-core-atacseq-1.1.1dev channels: - conda-forge - bioconda diff --git a/nextflow.config b/nextflow.config index 2d5009de..7e00b824 100644 --- a/nextflow.config +++ b/nextflow.config @@ -94,7 +94,7 @@ params { // Container slug. Stable releases should specify release tag! // Developmental code should specify :dev -process.container = 'nfcore/atacseq:1.2.0' +process.container = 'nfcore/atacseq:dev' // Load base.config by default for all pipelines includeConfig 'conf/base.config' @@ -167,7 +167,7 @@ manifest { description = 'ATACSeq peak-calling and differential analysis pipeline.' mainScript = 'main.nf' nextflowVersion = '>=19.10.0' - version = '1.2.0' + version = '1.1.1dev' } // Function to ensure that resource requirements don't go beyond From ad0a7d5c64c0be14982fca9053fa85faa9821463 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 17:57:15 +0100 Subject: [PATCH 164/226] Update CHANGELOG --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc4856d1..4a9e34af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,11 +22,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` -* [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE -* [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * [#86](https://github.com/nf-core/atacseq/issues/86) - bug in the plot_homer_annotatepeaks.r script * [#102](https://github.com/nf-core/atacseq/issues/102) - Incorrect Group ID assigned by featurecounts_deseq2.r +* [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE +* [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * Make executables in `bin/` compatible with Python 3 ### `Dependencies` From 3d6f33f49c0c57e465b3a5318cfe109c9c1e62e1 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 17:57:21 +0100 Subject: [PATCH 165/226] Update CITATIOSN --- CITATIONS.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 2ef37fed..9af4aba2 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,9 +1,14 @@ # nf-core/atacseq: Citations -## Pipeline tools +## [nf-core](https://www.ncbi.nlm.nih.gov/pubmed/32055031/) + +> Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. ReadCube: [Full Access Link](https://rdcu.be/b1GjZ). + +## [Nextflow](https://www.ncbi.nlm.nih.gov/pubmed/28398311/) -* [Nextflow](https://www.ncbi.nlm.nih.gov/pubmed/28398311/) - > Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. +> Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. + +## Pipeline tools * [BWA](https://www.ncbi.nlm.nih.gov/pubmed/19451168/) > Li H, Durbin R. Fast and accurate short read alignment with Burrows-Wheeler transform. Bioinformatics. 2009 Jul 15;25(14):1754-60. doi: 10.1093/bioinformatics/btp324. Epub 2009 May 18. PubMed PMID: 19451168; PubMed Central PMCID: PMC2705234. From 5a20b8f5f3084c15d9e67f27e587319fdc519d6f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 18:41:51 +0100 Subject: [PATCH 166/226] Update package versions --- CHANGELOG.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a9e34af..ecaf3995 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,30 +32,31 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` * Add python `3.7.6` -* Add markdown `3.1.1` -* Add pymdown-extensions `6.0` -* Add pygments `2.5.2` +* Add markdown `3.2.2` +* Add pymdown-extensions `7.1` +* Add pygments `2.6.1` * Add pigz `2.3.4` -* Add r-tidyr `1.0.2` +* Add r-tidyr `1.1.0` * Add bioconductor-biocparallel `1.20.0` -* Update gawk `4.2.1` -> `5.0.1` +* Update gawk `4.2.1` -> `5.1.0` * Update r-base `3.4.1` -> `3.6.2` -* Update r-optparse `1.6.0` -> `1.6.4` -* Update r-ggplot2 `3.1.0` -> `3.2.1` +* Update r-optparse `1.6.0` -> `1.6.6` +* Update r-ggplot2 `3.1.0` -> `3.3.0` * Update r-pheatmap `1.0.10` -> `1.0.12` -* Update r-lattice `0.20_35` -> `0.20_40` +* Update r-lattice `0.20_35` -> `0.20_41` * Update r-upsetr `1.3.3` -> `1.4.0` -* Update r-scales `1.0.0` -> `1.1.0` -* Update r-xfun `0.3` -> `0.12` +* Update r-scales `1.0.0` -> `1.1.1` +* Update r-xfun `0.3` -> `0.14` * Update fastqc `0.11.8` -> `0.11.9` * Update trim-galore `0.5.0` -> `0.6.5` -* Update picard `2.19.0` -> `2.21.9` -* Update pysam `0.15.2` -> `0.15.4` +* Update samtools `1.9` -> `1.10` +* Update picard `2.19.0` -> `2.22.8` +* Update pysam `0.15.2` -> `0.15.3` * Update bedtools `2.27.1` -> `2.29.2` * Update ucsc-bedgraphtobigwig `377` -> `357` -* Update deeptools `3.2.1` -> `3.3.2` -* Update macs2 `2.1.2` -> `2.2.6` -* Update homer `4.9.1` -> `4.10` +* Update deeptools `3.2.1` -> `3.4.3` +* Update macs2 `2.1.2` -> `2.2.7.1` +* Update homer `4.9.1` -> `4.11` * Update ataqv `1.0.0` -> `1.1.1` * Update subread `1.6.4` -> `2.0.0` * Update multiqc `1.7` -> `1.8` From e69998b8db9e7155011e58d4cfb0c6bae4932758 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 18:41:59 +0100 Subject: [PATCH 167/226] Update environment --- environment.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/environment.yml b/environment.yml index af38f938..ea559a1c 100755 --- a/environment.yml +++ b/environment.yml @@ -8,35 +8,35 @@ channels: dependencies: ## conda-forge packages - conda-forge::python=3.7.6 - - conda-forge::markdown=3.1.1 - - conda-forge::pymdown-extensions=6.0 - - conda-forge::pygments=2.5.2 + - conda-forge::markdown=3.2.2 + - conda-forge::pymdown-extensions=7.1 + - conda-forge::pygments=2.6.1 - conda-forge::r-base=3.6.2 - - conda-forge::r-optparse=1.6.4 + - conda-forge::r-optparse=1.6.6 - conda-forge::r-rcolorbrewer=1.1_2 - - conda-forge::r-ggplot2=3.2.1 - - conda-forge::r-tidyr=1.0.2 - - conda-forge::r-scales=1.1.0 + - conda-forge::r-ggplot2=3.3.0 + - conda-forge::r-tidyr=1.1.0 + - conda-forge::r-scales=1.1.1 - conda-forge::r-pheatmap=1.0.12 - - conda-forge::r-lattice=0.20_40 + - conda-forge::r-lattice=0.20_41 - conda-forge::r-upsetr=1.4.0 - - conda-forge::r-xfun=0.12 - - conda-forge::gawk=5.0.1 + - conda-forge::r-xfun=0.14 + - conda-forge::gawk=5.1.0 - conda-forge::pigz=2.3.4 ## Required for TrimGalore multi-threading ## bioconda packages - bioconda::fastqc=0.11.9 - bioconda::trim-galore=0.6.5 - bioconda::bwa=0.7.17 - - bioconda::samtools=1.9 - - bioconda::picard=2.21.9 + - bioconda::samtools=1.10 + - bioconda::picard=2.22.8 - bioconda::bamtools=2.5.1 - - bioconda::pysam=0.15.4 + - bioconda::pysam=0.15.3 - bioconda::bedtools=2.29.2 - bioconda::ucsc-bedgraphtobigwig=357 - - bioconda::deeptools=3.3.2 - - bioconda::macs2=2.2.6 - - bioconda::homer=4.10 + - bioconda::deeptools=3.4.3 + - bioconda::macs2=2.2.7.1 + - bioconda::homer=4.11 - bioconda::ataqv=1.1.1 - bioconda::subread=2.0.0 - bioconda::preseq=2.0.3 From b21264bc90f2b6e5ba90e1c86c5159405aedf703 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 21:46:12 +0100 Subject: [PATCH 168/226] Update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecaf3995..e8b4dc51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [1.2.0] - 2020-03-20 +## [1.2.0] - 2020-06-04 ### `Added` From 5200e75e2523dbd0a300984103e3529852555158 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Thu, 28 May 2020 22:00:33 +0100 Subject: [PATCH 169/226] Remove CI test --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index baa82785..86b5670e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - parameters: [--single_end, --skip_trimming, --skip_merge_replicates, --skip_consensus_peaks, --skip_multiqc] + parameters: [--single_end, --skip_trimming, --skip_merge_replicates, --skip_consensus_peaks] steps: - uses: actions/checkout@v2 - name: Install Nextflow From f7be7694d8f2d4f2b1be6969982127a2dfe68102 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 12:43:17 +0100 Subject: [PATCH 170/226] Remove AWS test --- .github/workflows/awstest.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 542c1976..8ccdb4cf 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -6,7 +6,6 @@ on: push: branches: - master - - dev release: types: [published] From b2c1a517fc12ff6af978a6879dd047160ec005c8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 12:43:23 +0100 Subject: [PATCH 171/226] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8b4dc51..ecf512d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Add pygments `2.6.1` * Add pigz `2.3.4` * Add r-tidyr `1.1.0` +* Add r-reshape2 `1.4.4` * Add bioconductor-biocparallel `1.20.0` * Update gawk `4.2.1` -> `5.1.0` * Update r-base `3.4.1` -> `3.6.2` From aa7f4c564767b7a4bca493fe9856b87bd13ff67f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 12:43:32 +0100 Subject: [PATCH 172/226] Add reshape2 --- environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yml b/environment.yml index ea559a1c..2c7bab71 100755 --- a/environment.yml +++ b/environment.yml @@ -14,6 +14,7 @@ dependencies: - conda-forge::r-base=3.6.2 - conda-forge::r-optparse=1.6.6 - conda-forge::r-rcolorbrewer=1.1_2 + - conda-forge::r-reshape2=1.4.4 - conda-forge::r-ggplot2=3.3.0 - conda-forge::r-tidyr=1.1.0 - conda-forge::r-scales=1.1.1 From da3cb03f54bea0e4a3aa8024b53c60629418df6f Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 12:43:41 +0100 Subject: [PATCH 173/226] Change process names --- main.nf | 72 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/main.nf b/main.nf index cba830ce..516acda4 100644 --- a/main.nf +++ b/main.nf @@ -318,7 +318,7 @@ if (!params.macs_gsize) { /* * PREPROCESSING: Reformat design file and check validitiy */ -process CheckDesign { +process CHECK_DESIGN { tag "$design" publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode @@ -382,7 +382,7 @@ multipleGroups = design_multiple_samples * PREPROCESSING: Build BWA index */ if (!params.bwa_index) { - process BWAIndex { + process BWA_INDEX { tag "$fasta" label 'process_high' publishDir path: { params.save_reference ? "${params.outdir}/genome" : params.outdir }, @@ -406,7 +406,7 @@ if (!params.bwa_index) { * PREPROCESSING: Generate gene BED file */ if (!params.gene_bed) { - process MakeGeneBED { + process MAKE_GENE_BED { tag "$gtf" label 'process_low' publishDir "${params.outdir}/genome", mode: params.publish_dir_mode @@ -428,7 +428,7 @@ if (!params.gene_bed) { * PREPROCESSING: Generate TSS BED file */ if (!params.tss_bed) { - process MakeTSSBED { + process MAKE_TSS_BED { tag "$bed" publishDir "${params.outdir}/genome", mode: params.publish_dir_mode @@ -448,7 +448,7 @@ if (!params.tss_bed) { /* * PREPROCESSING: Prepare genome intervals for filtering */ -process MakeGenomeFilter { +process MAKE_GENOME_FILTER { tag "$fasta" publishDir "${params.outdir}/genome", mode: params.publish_dir_mode @@ -487,7 +487,7 @@ process MakeGenomeFilter { /* * STEP 1: FastQC */ -process FastQC { +process FASTQC { tag "$name" label 'process_medium' publishDir "${params.outdir}/fastqc", mode: params.publish_dir_mode, @@ -537,7 +537,7 @@ if (params.skip_trimming) { ch_trimgalore_results_mqc = Channel.empty() ch_trimgalore_fastqc_reports_mqc = Channel.empty() } else { - process TrimGalore { + process TRIMGALORE { tag "$name" label 'process_high' publishDir "${params.outdir}/trim_galore", mode: params.publish_dir_mode, @@ -602,7 +602,7 @@ if (params.skip_trimming) { /* * STEP 3.1: Map read(s) with bwa mem */ -process BWAMem { +process BWA_MEM { tag "$name" label 'process_high' @@ -633,7 +633,7 @@ process BWAMem { /* * STEP 3.2: Convert BAM to coordinate sorted BAM */ -process SortBAM { +process SORT_BAM { tag "$name" label 'process_medium' if (params.save_align_intermeds) { @@ -681,7 +681,7 @@ ch_sort_bam_merge .map { it -> [ it[0], it[1].flatten() ] } .set { ch_sort_bam_merge } -process MergedLibBAM { +process MERGED_LIB_BAM { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, @@ -758,7 +758,7 @@ process MergedLibBAM { /* * STEP 4.2: Filter BAM file at merged library-level */ -process MergedLibBAMFilter { +process MERGED_LIB_BAM_FILTER { tag "$name" label 'process_medium' publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, @@ -831,7 +831,7 @@ if (params.single_end) { ch_mlib_filter_bam_stats_mqc .set { ch_mlib_rm_orphan_stats_mqc } } else { - process MergedLibBAMRemoveOrphan { + process MERGED_LIB_BAM_REMOVE_ORPHAN { tag "$name" label 'process_medium' publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, @@ -885,7 +885,7 @@ if (params.single_end) { /* * STEP 5.1: Preseq analysis after merging libraries and before filtering */ -process MergedLibPreseq { +process MERGED_LIB_PRESEQ { tag "$name" label 'process_low' publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: params.publish_dir_mode @@ -918,7 +918,7 @@ process MergedLibPreseq { /* * STEP 5.2: Picard CollectMultipleMetrics after merging libraries and filtering */ -process MergedLibMetrics { +process MERGED_LIB_PICARD_METRICS { tag "$name" label 'process_medium' publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, @@ -960,7 +960,7 @@ process MergedLibMetrics { /* * STEP 5.3: Read depth normalised bigWig */ -process MergedLibBigWig { +process MERGED_LIB_BIGWIG { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: params.publish_dir_mode, @@ -997,7 +997,7 @@ process MergedLibBigWig { /* * STEP 5.4: Generate gene body coverage plot with deepTools plotProfile */ -process MergedLibPlotProfile { +process MERGED_LIB_PLOTPROFILE { tag "$name" label 'process_high' publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotProfile", mode: params.publish_dir_mode @@ -1037,7 +1037,7 @@ process MergedLibPlotProfile { /* * STEP 5.5: deepTools plotFingerprint */ -process MergedLibPlotFingerprint { +process MERGED_LIB_PLOTFINGERPRINT { tag "$name" label 'process_high' publishDir "${params.outdir}/bwa/mergedLibrary/deepTools/plotFingerprint", mode: params.publish_dir_mode @@ -1080,7 +1080,7 @@ process MergedLibPlotFingerprint { /* * STEP 6.1: Call peaks with MACS2 and calculate FRiP score */ -process MergedLibMACSCallPeak { +process MERGED_LIB_MACS2 { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, @@ -1135,7 +1135,7 @@ process MergedLibMACSCallPeak { /* * STEP 6.2: Annotate peaks with HOMER */ -process MergedLibAnnotatePeaks { +process MERGED_LIB_MACS2_ANNOTATE { tag "$name" label "process_medium" publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode @@ -1167,7 +1167,7 @@ process MergedLibAnnotatePeaks { /* * STEP 6.3: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ -process MergedLibPeakQC { +process MERGED_LIB_MACS2_QC { label "process_medium" publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode @@ -1205,7 +1205,7 @@ process MergedLibPeakQC { /* * STEP 6.4: Consensus peaks across samples, create boolean filtering file, SAF file for featureCounts and UpSetR plot for intersection */ -process MergedLibConsensusPeakSet { +process MERGED_LIB_CONSENSUS { label 'process_long' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> @@ -1258,7 +1258,7 @@ process MergedLibConsensusPeakSet { /* * STEP 6.5: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ -process MergedLibConsensusPeakSetAnnotate { +process MERGED_LIB_CONSENSUS_ANNOTATE { label "process_medium" publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode @@ -1293,7 +1293,7 @@ process MergedLibConsensusPeakSetAnnotate { /* * STEP 6.6: Count reads in consensus peaks with featureCounts */ -process MergedLibConsensusPeakSetCounts { +process MERGED_LIB_CONSENSUS_COUNTS { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode @@ -1328,7 +1328,7 @@ process MergedLibConsensusPeakSetCounts { /* * STEP 6.7: Differential analysis with DESeq2 */ -process MergedLibConsensusPeakSetDESeq { +process MERGED_LIB_CONSENSUS_DESEQ2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> @@ -1376,7 +1376,7 @@ process MergedLibConsensusPeakSetDESeq { /* * STEP 6.8: Run ataqv on BAM file and corresponding peaks */ -process MergedLibAtaqv { +process MERGED_LIB_ATAQV { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: params.publish_dir_mode @@ -1414,7 +1414,7 @@ process MergedLibAtaqv { /* * STEP 6.9: Run ataqv mkarv on all JSON files to render web app */ -process MergedLibAtaqvMkarv { +process MERGED_LIB_ATAQV_MKARV { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/ataqv/${PEAK_TYPE}", mode: params.publish_dir_mode @@ -1454,7 +1454,7 @@ ch_mlib_rm_orphan_bam_mrep .map { it -> [ it[0], it[1].flatten() ] } .set { ch_mlib_rm_orphan_bam_mrep } -process MergedRepBAM { +process MERGED_REP_BAM { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate", mode: params.publish_dir_mode, @@ -1537,7 +1537,7 @@ process MergedRepBAM { /* * STEP 8.1: Read depth normalised bigWig */ -process MergedRepBigWig { +process MERGED_REP_BIGWIG { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: params.publish_dir_mode, @@ -1577,7 +1577,7 @@ process MergedRepBigWig { /* * STEP 8.2: Call peaks with MACS2 and calculate FRiP score */ -process MergedRepMACSCallPeak { +process MERGED_REP_MACS2 { tag "$name" label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, @@ -1631,7 +1631,7 @@ process MergedRepMACSCallPeak { /* * STEP 8.3: Annotate peaks with HOMER */ -process MergedRepAnnotatePeaks { +process MERGED_REP_MACS2_ANNOTATE { tag "$name" label "process_medium" publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode @@ -1663,7 +1663,7 @@ process MergedRepAnnotatePeaks { /* * STEP 8.4: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ -process MergedRepPeakQC { +process MERGED_REP_MACS2_QC { label "process_medium" publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode @@ -1701,7 +1701,7 @@ process MergedRepPeakQC { /* * STEP 8.5: Consensus peaks across samples, create boolean filtering file, SAF file for featureCounts and UpSetR plot for intersection */ -process MergedRepConsensusPeakSet { +process MERGED_REP_CONSENSUS { label 'process_long' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> @@ -1753,7 +1753,7 @@ process MergedRepConsensusPeakSet { /* * STEP 8.6: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ -process MergedRepConsensusPeakSetAnnotate { +process MERGED_REP_CONSENSUS_ANNOTATE { label "process_medium" publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode @@ -1788,7 +1788,7 @@ process MergedRepConsensusPeakSetAnnotate { /* * STEP 8.7: Count reads in consensus peaks with featureCounts */ -process MergedRepConsensusPeakSetCounts { +process MERGED_REP_CONSENSUS_COUNTS { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode @@ -1823,7 +1823,7 @@ process MergedRepConsensusPeakSetCounts { /* * STEP 8.8: Differential analysis with DESeq2 */ -process MergedRepConsensusPeakSetDESeq { +process MERGED_REP_CONSENSUS_DESEQ2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> @@ -1973,7 +1973,7 @@ Channel.from(summary.collect{ [it.key, it.value] }) /* * STEP 10: MultiQC */ -process MultiQC { +process MULTIQC { publishDir "${params.outdir}/multiqc/${PEAK_TYPE}", mode: params.publish_dir_mode when: From 894857bb074ac052394386dc5d1f956bb310aff3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 13:29:52 +0100 Subject: [PATCH 174/226] Update MultiQC config --- assets/multiqc_config.yaml | 41 ++++++++++++++++++++++++-------------- main.nf | 4 +--- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index e76c08b7..5d07c929 100755 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -3,19 +3,20 @@ report_comment: > analysis pipeline. For information about how to interpret these results, please see the documentation. -export_plots: true +data_format: 'yaml' -fn_clean_exts: - - 'fastq.gz' - - '_trimmed' - - '_val' - - 'sorted.bam' - - '.Lb' - - 'mkD' - - 'clN' - - 'mLb' - - 'mRp' - - '_peaks' +run_modules: + - custom_content + - fastqc + - cutadapt + - samtools + - picard + - preseq + - featureCounts + - deeptools + +exclude_modules: + - 'general_stats' module_order: - fastqc: @@ -115,12 +116,22 @@ report_section_order: order: -2100 custom_plot_config: - picard-insertsize: + picard_insert_size: cpswitch_c_active: False smooth_points: 1000 - featurecounts: cpswitch_c_active: False - featurecounts-1: cpswitch_c_active: False + +extra_fn_clean_exts: + - 'fastq.gz' + - '_trimmed' + - '_val' + - 'sorted.bam' + - '.Lb' + - 'mkD' + - 'clN' + - 'mLb' + - 'mRp' + - '_peaks' diff --git a/main.nf b/main.nf index 516acda4..5840803e 100644 --- a/main.nf +++ b/main.nf @@ -2016,15 +2016,13 @@ process MULTIQC { output: file "*multiqc_report.html" into ch_multiqc_report file "*_data" - file "multiqc_plots" script: rtitle = custom_runName ? "--title \"$custom_runName\"" : '' rfilename = custom_runName ? "--filename " + custom_runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" : '' custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' """ - multiqc . -f $rtitle $rfilename $custom_config_file \\ - -m custom_content -m fastqc -m cutadapt -m samtools -m picard -m preseq -m featureCounts -m deeptools + multiqc . -f $rtitle $rfilename $custom_config_file """ } From 2c1ab3a4dbe5d2072570d7f72adb2e60f93444a9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 16:59:05 +0100 Subject: [PATCH 175/226] Add label error_ignore --- conf/base.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/base.config b/conf/base.config index 92a48f32..0fab975e 100755 --- a/conf/base.config +++ b/conf/base.config @@ -38,6 +38,9 @@ process { withLabel:process_long { time = { check_max( 20.h * task.attempt, 'time' ) } } + withLabel:error_ignore { + errorStrategy = 'ignore' + } withName:get_software_versions { cache = false } From fc484e1dc9858c5bc1f8f5481ec1966ab5d0eca4 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Fri, 29 May 2020 16:59:23 +0100 Subject: [PATCH 176/226] Ignore Preseq failures --- main.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/main.nf b/main.nf index 5840803e..c673f201 100644 --- a/main.nf +++ b/main.nf @@ -888,6 +888,7 @@ if (params.single_end) { process MERGED_LIB_PRESEQ { tag "$name" label 'process_low' + label 'error_ignore' publishDir "${params.outdir}/bwa/mergedLibrary/preseq", mode: params.publish_dir_mode when: From 852944907d13115aa64fb56a4e16bfb040dafa1f Mon Sep 17 00:00:00 2001 From: Harshil Patel Date: Sat, 30 May 2020 11:52:37 +0100 Subject: [PATCH 177/226] Update environment.yml --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 2c7bab71..66ce39c7 100755 --- a/environment.yml +++ b/environment.yml @@ -41,7 +41,7 @@ dependencies: - bioconda::ataqv=1.1.1 - bioconda::subread=2.0.0 - bioconda::preseq=2.0.3 - - bioconda::multiqc=1.8 + - bioconda::multiqc=1.9 - bioconda::bioconductor-biocparallel=1.20.0 - bioconda::bioconductor-deseq2=1.26.0 - bioconda::bioconductor-vsn=3.54.0 From 6eedb07fb79050799bd9c22bc6a448f0045535ea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 1 Jun 2020 22:06:35 +0100 Subject: [PATCH 178/226] Add --skip_peak_qc parameter --- CHANGELOG.md | 2 ++ docs/usage.md | 5 +++++ main.nf | 10 ++++++---- nextflow.config | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecf512d1..c147c815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? * Update template to tools `1.9` +* Capitalise process names * Parameters: + * `--skip_peak_qc` to skip MACS2 peak QC plot generation * `--skip_consensus_peaks` to skip consensus peak generation * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 * `--publish_dir_mode` to customise method of publishing results to output directory [nf-core/tools#585](https://github.com/nf-core/tools/issues/585) diff --git a/docs/usage.md b/docs/usage.md index c5f0d7a8..ec64225c 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -41,6 +41,7 @@ * [`--broad_cutoff`](#--broad_cutoff) * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) + * [`--skip_peak_qc`](#--skip_peak_qc) * [`--skip_consensus_peaks`](#--skip_consensus_peaks) * [Differential analysis](#differential_analysis) * [`--deseq2_vst`](#--deseq2_vst) @@ -398,6 +399,10 @@ Number of biological replicates required from a given condition for a peak to co Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. +### `--skip_peak_qc` + +Skip MACS2 peak QC plot generation. + ### `--skip_consensus_peaks` Skip consensus peak generation, annotation and counting. diff --git a/main.nf b/main.nf index c673f201..a475fc9b 100644 --- a/main.nf +++ b/main.nf @@ -62,6 +62,7 @@ def helpMessage() { --broad_cutoff [float] Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified (Default: 0.1) --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads + --skip_peak_qc [bool] Skip MACS2 peak QC plot generation --skip_consensus_peaks [bool] Skip consensus peak generation Differential analysis @@ -259,6 +260,7 @@ if (params.save_trimmed) summary['Save Trimmed'] = 'Yes' if (params.save_align_intermeds) summary['Save Intermeds'] = 'Yes' if (params.save_macs_pileup) summary['Save MACS2 Pileup'] = 'Yes' if (params.skip_merge_replicates) summary['Skip Merge Replicates'] = 'Yes' +if (params.skip_peak_qc) summary['Skip MACS2 Peak QC'] = 'Yes' if (params.skip_consensus_peaks) summary['Skip Consensus Peaks'] = 'Yes' if (params.deseq2_vst) summary['Use DESeq2 vst Transform'] = 'Yes' if (params.skip_diff_analysis) summary['Skip Differential Analysis'] = 'Yes' @@ -1173,7 +1175,7 @@ process MERGED_LIB_MACS2_QC { publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: - params.macs_gsize + params.macs_gsize && !params.skip_peak_qc input: file peaks from ch_mlib_macs_qc.collect{ it[1] } @@ -1669,7 +1671,7 @@ process MERGED_REP_MACS2_QC { publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && !params.skip_peak_qc input: file peaks from ch_mrep_macs_qc.collect{ it[1] } @@ -1677,9 +1679,9 @@ process MERGED_REP_MACS2_QC { file mrep_peak_annotation_header from ch_mrep_peak_annotation_header output: - file "*.{txt,pdf}" into ch_mrep_peak_qc file "*.tsv" into ch_mrep_peak_qc_mqc - + file "*.{txt,pdf}" + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mRp.clN' """ diff --git a/nextflow.config b/nextflow.config index 7e00b824..e0adef1b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -41,6 +41,7 @@ params { broad_cutoff = 0.1 min_reps_consensus = 1 save_macs_pileup = false + skip_peak_qc = false skip_consensus_peaks = false // Options: Differential analysis From 61ace7de72ccc66ab7639849dcbd076fb7e227a2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 1 Jun 2020 22:22:40 +0100 Subject: [PATCH 179/226] Remove orphan channels --- main.nf | 64 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/main.nf b/main.nf index a475fc9b..304ac497 100644 --- a/main.nf +++ b/main.nf @@ -171,11 +171,11 @@ ch_mrep_deseq2_clustering_header = file("$baseDir/assets/multiqc/mrep_deseq2_clu /* -- VALIDATE INPUTS -- */ //////////////////////////////////////////////////// -if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } -if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } -if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } -if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } -if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } +if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } +if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } +if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } +if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } +if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } if (params.fasta) { lastPath = params.fasta.lastIndexOf(File.separator) @@ -269,11 +269,11 @@ if (params.skip_picard_metrics) summary['Skip Picard Metrics'] = 'Yes' if (params.skip_preseq) summary['Skip Preseq'] = 'Yes' if (params.skip_plot_profile) summary['Skip plotProfile'] = 'Yes' if (params.skip_plot_fingerprint) summary['Skip plotFingerprint'] = 'Yes' -if (params.skip_ataqv) summary['Skip Ataqv'] = 'Yes' +if (params.skip_ataqv) summary['Skip Ataqv'] = 'Yes' if (params.skip_igv) summary['Skip IGV'] = 'Yes' if (params.skip_multiqc) summary['Skip MultiQC'] = 'Yes' summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" -if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" +if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" summary['Output Dir'] = params.outdir summary['Launch Dir'] = workflow.launchDir summary['Working Dir'] = workflow.workDir @@ -901,7 +901,7 @@ process MERGED_LIB_PRESEQ { output: file "*.ccurve.txt" into ch_mlib_preseq_mqc - file "*.log" into ch_mlib_preseq_log + file "*.log" script: prefix = "${name}.mLb.mkD" @@ -940,7 +940,7 @@ process MERGED_LIB_PICARD_METRICS { output: file "*_metrics" into ch_mlib_collectmetrics_mqc - file "*.pdf" into ch_mlib_collectmetrics_pdf + file "*.pdf" script: prefix = "${name}.mLb.clN" @@ -979,8 +979,8 @@ process MERGED_LIB_BIGWIG { output: set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile - file "*scale_factor.txt" into ch_mlib_bigwig_scale file "*igv.txt" into ch_mlib_bigwig_igv + file "*scale_factor.txt" script: prefix = "${name}.mLb.clN" @@ -1013,8 +1013,8 @@ process MERGED_LIB_PLOTPROFILE { file bed from ch_gene_bed output: - file '*.{gz,pdf}' into ch_mlib_plotprofile_results file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc + file '*.{gz,pdf}' script: prefix = "${name}.mLb.clN" @@ -1052,8 +1052,8 @@ process MERGED_LIB_PLOTFINGERPRINT { set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint output: - file '*.{txt,pdf}' into ch_mlib_plotfingerprint_results file '*.raw.txt' into ch_mlib_plotfingerprint_mqc + file '*.{txt,pdf}' script: prefix = "${name}.mLb.clN" @@ -1102,13 +1102,13 @@ process MERGED_LIB_MACS2 { file mlib_frip_score_header from ch_mlib_frip_score_header output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mlib_macs_output set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, ch_mlib_macs_qc, ch_mlib_macs_consensus, ch_mlib_macs_ataqv file "*igv.txt" into ch_mlib_macs_igv file "*_mqc.tsv" into ch_mlib_macs_mqc + path "*.{bed,xls,gappedPeak,bdg}" script: prefix = "${name}.mLb.clN" @@ -1183,8 +1183,8 @@ process MERGED_LIB_MACS2_QC { file mlib_peak_annotation_header from ch_mlib_peak_annotation_header output: - file "*.{txt,pdf}" into ch_mlib_peak_qc file "*.tsv" into ch_mlib_peak_qc_mqc + file "*.{txt,pdf}" script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mLb.clN' @@ -1226,8 +1226,8 @@ process MERGED_LIB_CONSENSUS { file "*.bed" into ch_mlib_macs_consensus_bed file "*.saf" into ch_mlib_macs_consensus_saf file "*.boolean.txt" into ch_mlib_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mlib_macs_consensus_intersect file "*igv.txt" into ch_mlib_macs_consensus_igv + file "*.intersect.{txt,plot.pdf}" script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mLb.clN' @@ -1275,7 +1275,7 @@ process MERGED_LIB_CONSENSUS_ANNOTATE { file gtf from ch_gtf output: - file "*.annotatePeaks.txt" into ch_mlib_macs_consensus_annotate + file "*.annotatePeaks.txt" script: prefix = "consensus_peaks.mLb.clN" @@ -1348,12 +1348,12 @@ process MERGED_LIB_CONSENSUS_DESEQ2 { file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header output: - file "*.{RData,results.txt,pdf,log}" into ch_mlib_macs_consensus_deseq_results - file "sizeFactors" into ch_mlib_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mlib_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mlib_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc + file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv + file "*.{RData,results.txt,pdf,log}" + file "sizeFactors" + file "*vs*/*.{pdf,txt}" + file "*vs*/*.bed" script: prefix = "consensus_peaks.mLb.clN" @@ -1428,7 +1428,7 @@ process MERGED_LIB_ATAQV_MKARV { file json from ch_mlib_ataqv.collect() output: - file "html" into ch_mlib_ataqv_mkarv + file "html" script: """ @@ -1559,8 +1559,8 @@ process MERGED_REP_BIGWIG { output: set val(name), file("*.bigWig") into ch_mrep_bigwig - file "*scale_factor.txt" into ch_mrep_bigwig_scale file "*igv.txt" into ch_mrep_bigwig_igv + file "*scale_factor.txt" script: prefix = "${name}.mRp.clN" @@ -1599,12 +1599,12 @@ process MERGED_REP_MACS2 { file mrep_frip_score_header from ch_mrep_frip_score_header output: - set val(name), file("*.{bed,xls,gappedPeak,bdg}") into ch_mrep_macs_output set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, ch_mrep_macs_qc, ch_mrep_macs_consensus file "*igv.txt" into ch_mrep_macs_igv file "*_mqc.tsv" into ch_mrep_macs_mqc + path "*.{bed,xls,gappedPeak,bdg}" script: prefix = "${name}.mRp.clN" @@ -1681,7 +1681,7 @@ process MERGED_REP_MACS2_QC { output: file "*.tsv" into ch_mrep_peak_qc_mqc file "*.{txt,pdf}" - + script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mRp.clN' """ @@ -1722,8 +1722,8 @@ process MERGED_REP_CONSENSUS { file "*.bed" into ch_mrep_macs_consensus_bed file "*.saf" into ch_mrep_macs_consensus_saf file "*.boolean.txt" into ch_mrep_macs_consensus_bool - file "*.intersect.{txt,plot.pdf}" into ch_mrep_macs_consensus_intersect file "*igv.txt" into ch_mrep_macs_consensus_igv + file "*.intersect.{txt,plot.pdf}" script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mRp.clN' @@ -1770,7 +1770,7 @@ process MERGED_REP_CONSENSUS_ANNOTATE { file gtf from ch_gtf output: - file "*.annotatePeaks.txt" into ch_mrep_macs_consensus_annotate + file "*.annotatePeaks.txt" script: prefix = "consensus_peaks.mRp.clN" @@ -1843,12 +1843,12 @@ process MERGED_REP_CONSENSUS_DESEQ2 { file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header output: - file "*.{RData,results.txt,pdf,log}" into ch_mrep_macs_consensus_deseq_results - file "sizeFactors" into ch_mrep_macs_consensus_deseq_factors - file "*vs*/*.{pdf,txt}" into ch_mrep_macs_consensus_deseq_comp_results - file "*vs*/*.bed" into ch_mrep_macs_consensus_deseq_comp_bed - file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc + file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv + file "*.{RData,results.txt,pdf,log}" + file "sizeFactors" + file "*vs*/*.{pdf,txt}" + file "*vs*/*.bed" script: prefix = "consensus_peaks.mRp.clN" From 36e90ec07bbf658ba2a3027703b1335ae8756d6d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Mon, 1 Jun 2020 23:54:49 +0100 Subject: [PATCH 180/226] Replace set with tuple --- main.nf | 70 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/main.nf b/main.nf index 304ac497..6b41a14a 100644 --- a/main.nf +++ b/main.nf @@ -501,7 +501,7 @@ process FASTQC { !params.skip_fastqc input: - set val(name), file(reads) from ch_raw_reads_fastqc + tuple val(name), path(reads) from ch_raw_reads_fastqc output: file "*.{zip,html}" into ch_fastqc_reports_mqc @@ -551,10 +551,10 @@ if (params.skip_trimming) { } input: - set val(name), file(reads) from ch_raw_reads_trimgalore + tuple val(name), path(reads) from ch_raw_reads_trimgalore output: - set val(name), file("*.fq.gz") into ch_trimmed_reads + tuple val(name), path("*.fq.gz") into ch_trimmed_reads file "*.txt" into ch_trimgalore_results_mqc file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc @@ -609,11 +609,11 @@ process BWA_MEM { label 'process_high' input: - set val(name), file(reads) from ch_trimmed_reads + tuple val(name), path(reads) from ch_trimmed_reads file index from ch_bwa_index.collect() output: - set val(name), file("*.bam") into ch_bwa_bam + tuple val(name), path("*.bam") into ch_bwa_bam script: prefix = "${name}.Lb" @@ -649,10 +649,10 @@ process SORT_BAM { } input: - set val(name), file(bam) from ch_bwa_bam + tuple val(name), path(bam) from ch_bwa_bam output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge + tuple val(name), path("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc script: @@ -696,10 +696,10 @@ process MERGED_LIB_BAM { } input: - set val(name), file(bams) from ch_sort_bam_merge + tuple val(name), path(bams) from ch_sort_bam_merge output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, + tuple val(name), path("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, ch_mlib_bam_preseq, ch_mlib_bam_ataqv file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc @@ -776,13 +776,13 @@ process MERGED_LIB_BAM_FILTER { } input: - set val(name), file(bam) from ch_mlib_bam_filter + tuple val(name), path(bam) from ch_mlib_bam_filter file bed from ch_genome_filter_regions.collect() file bamtools_filter_config from ch_bamtools_filter_config output: - set val(name), file("*.{bam,bam.bai}") into ch_mlib_filter_bam - set val(name), file("*.flagstat") into ch_mlib_filter_bam_flagstat + tuple val(name), path("*.{bam,bam.bai}") into ch_mlib_filter_bam + tuple val(name), path("*.flagstat") into ch_mlib_filter_bam_flagstat file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc script: @@ -847,17 +847,17 @@ if (params.single_end) { } input: - set val(name), file(bam) from ch_mlib_filter_bam + tuple val(name), path(bam) from ch_mlib_filter_bam output: - set val(name), file("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, + tuple val(name), path("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, ch_mlib_rm_orphan_bam_bigwig, ch_mlib_rm_orphan_bam_macs, ch_mlib_rm_orphan_bam_plotfingerprint, ch_mlib_rm_orphan_bam_mrep - set val(name), file("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, + tuple val(name), path("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, ch_mlib_name_bam_mrep_counts - set val(name), file("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, + tuple val(name), path("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, ch_mlib_rm_orphan_flagstat_macs, ch_mlib_rm_orphan_flagstat_mqc file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc @@ -897,7 +897,7 @@ process MERGED_LIB_PRESEQ { !params.skip_preseq input: - set val(name), file(bam) from ch_mlib_bam_preseq + tuple val(name), path(bam) from ch_mlib_bam_preseq output: file "*.ccurve.txt" into ch_mlib_preseq_mqc @@ -935,7 +935,7 @@ process MERGED_LIB_PICARD_METRICS { !params.skip_picard_metrics input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_metrics + tuple val(name), path(bam) from ch_mlib_rm_orphan_bam_metrics file fasta from ch_fasta output: @@ -974,11 +974,11 @@ process MERGED_LIB_BIGWIG { } input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) + tuple val(name), path(bam), path(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) file sizes from ch_genome_sizes_mlib_bigwig.collect() output: - set val(name), file("*.bigWig") into ch_mlib_bigwig_plotprofile + tuple val(name), path("*.bigWig") into ch_mlib_bigwig_plotprofile file "*igv.txt" into ch_mlib_bigwig_igv file "*scale_factor.txt" @@ -1009,7 +1009,7 @@ process MERGED_LIB_PLOTPROFILE { !params.skip_plot_profile input: - set val(name), file(bigwig) from ch_mlib_bigwig_plotprofile + tuple val(name), path(bigwig) from ch_mlib_bigwig_plotprofile file bed from ch_gene_bed output: @@ -1049,7 +1049,7 @@ process MERGED_LIB_PLOTFINGERPRINT { !params.skip_plot_fingerprint input: - set val(name), file(bam) from ch_mlib_rm_orphan_bam_plotfingerprint + tuple val(name), path(bam) from ch_mlib_rm_orphan_bam_plotfingerprint output: file '*.raw.txt' into ch_mlib_plotfingerprint_mqc @@ -1097,12 +1097,12 @@ process MERGED_LIB_MACS2 { params.macs_gsize input: - set val(name), file(bam), file(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) + tuple val(name), path(bam), path(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) file mlib_peak_count_header from ch_mlib_peak_count_header file mlib_frip_score_header from ch_mlib_frip_score_header output: - set val(name), file("*$PEAK_TYPE") into ch_mlib_macs_homer, + tuple val(name), path("*$PEAK_TYPE") into ch_mlib_macs_homer, ch_mlib_macs_qc, ch_mlib_macs_consensus, ch_mlib_macs_ataqv @@ -1147,7 +1147,7 @@ process MERGED_LIB_MACS2_ANNOTATE { params.macs_gsize input: - set val(name), file(peak) from ch_mlib_macs_homer + tuple val(name), path(peak) from ch_mlib_macs_homer file fasta from ch_fasta file gtf from ch_gtf @@ -1388,7 +1388,7 @@ process MERGED_LIB_ATAQV { !params.skip_ataqv input: - set val(name), file(bam), file(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) + tuple val(name), path(bam), path(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) file autosomes from ch_genome_autosomes.collect() file tss_bed from ch_tss_bed @@ -1470,12 +1470,12 @@ process MERGED_REP_BAM { } input: - set val(name), file(bams) from ch_mlib_rm_orphan_bam_mrep + tuple val(name), path(bams) from ch_mlib_rm_orphan_bam_mrep output: - set val(name), file("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, + tuple val(name), path("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, ch_mrep_bam_macs - set val(name), file("*.flagstat") into ch_mrep_bam_flagstat_bigwig, + tuple val(name), path("*.flagstat") into ch_mrep_bam_flagstat_bigwig, ch_mrep_bam_flagstat_macs, ch_mrep_bam_flagstat_mqc file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc @@ -1554,11 +1554,11 @@ process MERGED_REP_BIGWIG { !params.skip_merge_replicates && replicatesExist input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) + tuple val(name), path(bam), path(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) file sizes from ch_genome_sizes_mrep_bigwig.collect() output: - set val(name), file("*.bigWig") into ch_mrep_bigwig + tuple val(name), path("*.bigWig") into ch_mrep_bigwig file "*igv.txt" into ch_mrep_bigwig_igv file "*scale_factor.txt" @@ -1594,12 +1594,12 @@ process MERGED_REP_MACS2 { !params.skip_merge_replicates && replicatesExist && params.macs_gsize input: - set val(name), file(bam), file(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) + tuple val(name), path(bam), path(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) file mrep_peak_count_header from ch_mrep_peak_count_header file mrep_frip_score_header from ch_mrep_frip_score_header output: - set val(name), file("*$PEAK_TYPE") into ch_mrep_macs_homer, + tuple val(name), path("*$PEAK_TYPE") into ch_mrep_macs_homer, ch_mrep_macs_qc, ch_mrep_macs_consensus file "*igv.txt" into ch_mrep_macs_igv @@ -1643,7 +1643,7 @@ process MERGED_REP_MACS2_ANNOTATE { !params.skip_merge_replicates && replicatesExist && params.macs_gsize input: - set val(name), file(peak) from ch_mrep_macs_homer + tuple val(name), path(peak) from ch_mrep_macs_homer file fasta from ch_fasta file gtf from ch_gtf @@ -1902,7 +1902,7 @@ process IGV { file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) output: - file "*.{txt,xml}" into ch_igv_session + file "*.{txt,xml}" script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ """ From a84a5117667ac4e5eae56d58f9d8b86226935b8b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 10:00:21 +0100 Subject: [PATCH 181/226] Unify syntax --- main.nf | 578 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 289 insertions(+), 289 deletions(-) diff --git a/main.nf b/main.nf index 6b41a14a..82fb4ee4 100644 --- a/main.nf +++ b/main.nf @@ -135,7 +135,7 @@ params.blacklist = params.genome ? params.genomes[ params.genome ].blacklist ?: params.anno_readme = params.genome ? params.genomes[ params.genome ].readme ?: false : false // Global variables -def PEAK_TYPE = params.narrow_peak ? "narrowPeak" : "broadPeak" +def PEAK_TYPE = params.narrow_peak ? 'narrowPeak' : 'broadPeak' //////////////////////////////////////////////////// /* -- CONFIG FILES -- */ @@ -171,8 +171,8 @@ ch_mrep_deseq2_clustering_header = file("$baseDir/assets/multiqc/mrep_deseq2_clu /* -- VALIDATE INPUTS -- */ //////////////////////////////////////////////////// -if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, "Samples design file not specified!" } -if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, "GTF annotation file not specified!" } +if (params.input) { ch_input = file(params.input, checkIfExists: true) } else { exit 1, 'Samples design file not specified!' } +if (params.gtf) { ch_gtf = file(params.gtf, checkIfExists: true) } else { exit 1, 'GTF annotation file not specified!' } if (params.gene_bed) { ch_gene_bed = file(params.gene_bed, checkIfExists: true) } if (params.tss_bed) { ch_tss_bed = file(params.tss_bed, checkIfExists: true) } if (params.blacklist) { ch_blacklist = Channel.fromPath(params.blacklist, checkIfExists: true) } else { ch_blacklist = Channel.empty() } @@ -182,7 +182,7 @@ if (params.fasta) { bwa_base = params.fasta.substring(lastPath+1) ch_fasta = file(params.fasta, checkIfExists: true) } else { - exit 1, "Fasta file not specified!" + exit 1, 'Fasta file not specified!' } if (params.bwa_index) { @@ -206,12 +206,12 @@ if (params.anno_readme && file(params.anno_readme).exists()) { if (workflow.profile.contains('awsbatch')) { // AWSBatch sanity checking - if (!params.awsqueue || !params.awsregion) exit 1, "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" + if (!params.awsqueue || !params.awsregion) exit 1, 'Specify correct --awsqueue and --awsregion parameters on AWSBatch!' // Check outdir paths to be S3 buckets if running on AWSBatch // related: https://github.com/nextflow-io/nextflow/issues/813 - if (!params.outdir.startsWith('s3:')) exit 1, "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" + if (!params.outdir.startsWith('s3:')) exit 1, 'Outdir not on S3 - specify S3 Bucket to run on AWSBatch!' // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (params.tracedir.startsWith('s3:')) exit 1, "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." + if (params.tracedir.startsWith('s3:')) exit 1, 'Specify a local tracedir or run without trace! S3 cannot be used for tracefiles.' } /////////////////////////////////////////////////////////////////////////////// @@ -247,7 +247,7 @@ if (params.skip_trimming) { summary['Trim R2'] = "$params.clip_r2 bp" summary["Trim 3' R1"] = "$params.three_prime_clip_r1 bp" summary["Trim 3' R2"] = "$params.three_prime_clip_r2 bp" - summary["NextSeq Trim"] = "$params.trim_nextseq bp" + summary['NextSeq Trim'] = "$params.trim_nextseq bp" } if (params.seq_center) summary['Sequencing Center'] = params.seq_center if (params.single_end) summary['Fragment Size'] = "$params.fragment_size bp" @@ -293,7 +293,7 @@ if (params.email || params.email_on_fail) { summary['E-mail on failure'] = params.email_on_fail summary['MultiQC Max Size'] = params.max_multiqc_email_size } -log.info summary.collect { k,v -> "${k.padRight(21)}: $v" }.join("\n") +log.info summary.collect { k,v -> "${k.padRight(21)}: $v" }.join('\n') log.info "-\033[2m--------------------------------------------------\033[0m-" // Check the hostnames against configured profiles @@ -325,10 +325,10 @@ process CHECK_DESIGN { publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode input: - file design from ch_input + path design from ch_input output: - file "*.csv" into ch_design_reads_csv + path '*.csv' into ch_design_reads_csv script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ """ @@ -391,10 +391,10 @@ if (!params.bwa_index) { saveAs: { params.save_reference ? it : null }, mode: params.publish_dir_mode input: - file fasta from ch_fasta + path fasta from ch_fasta output: - file "BWAIndex" into ch_bwa_index + path 'BWAIndex' into ch_bwa_index script: """ @@ -414,10 +414,10 @@ if (!params.gene_bed) { publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: - file gtf from ch_gtf + path gtf from ch_gtf output: - file "*.bed" into ch_gene_bed + path '*.bed' into ch_gene_bed script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ """ @@ -435,10 +435,10 @@ if (!params.tss_bed) { publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: - file bed from ch_gene_bed + path bed from ch_gene_bed output: - file "*.bed" into ch_tss_bed + path '*.bed' into ch_tss_bed script: """ @@ -455,21 +455,21 @@ process MAKE_GENOME_FILTER { publishDir "${params.outdir}/genome", mode: params.publish_dir_mode input: - file fasta from ch_fasta - file blacklist from ch_blacklist.ifEmpty([]) + path fasta from ch_fasta + path blacklist from ch_blacklist.ifEmpty([]) output: - file "$fasta" // FASTA FILE FOR IGV - file "*.fai" // FAI INDEX FOR REFERENCE GENOME - file "*.bed" into ch_genome_filter_regions // BED FILE WITHOUT BLACKLIST REGIONS & MITOCHONDRIAL CONTIG FOR FILTERING - file "*.txt" into ch_genome_autosomes // TEXT FILE CONTAINING LISTING OF AUTOSOMAL CHROMOSOMES FOR ATAQV - file "*.sizes" into ch_genome_sizes_mlib_bigwig, // CHROMOSOME SIZES FILE FOR BEDTOOLS + path "$fasta" // FASTA FILE FOR IGV + path '*.fai' // FAI INDEX FOR REFERENCE GENOME + path '*.bed' into ch_genome_filter_regions // BED FILE WITHOUT BLACKLIST REGIONS & MITOCHONDRIAL CONTIG FOR FILTERING + path '*.txt' into ch_genome_autosomes // TEXT FILE CONTAINING LISTING OF AUTOSOMAL CHROMOSOMES FOR ATAQV + path '*.sizes' into ch_genome_sizes_mlib_bigwig, // CHROMOSOME SIZES FILE FOR BEDTOOLS ch_genome_sizes_mrep_bigwig script: blacklist_filter = params.blacklist ? "sortBed -i $blacklist -g ${fasta}.sizes | complementBed -i stdin -g ${fasta}.sizes" : "awk '{print \$1, '0' , \$2}' OFS='\t' ${fasta}.sizes" - name_filter = params.mito_name ? "| awk '\$1 !~ /${params.mito_name}/ {print \$0}'": "" - mito_filter = params.keep_mito ? "" : name_filter + name_filter = params.mito_name ? "| awk '\$1 !~ /${params.mito_name}/ {print \$0}'": '' + mito_filter = params.keep_mito ? '' : name_filter """ samtools faidx $fasta get_autosomes.py ${fasta}.fai ${fasta}.autosomes.txt @@ -494,7 +494,7 @@ process FASTQC { label 'process_medium' publishDir "${params.outdir}/fastqc", mode: params.publish_dir_mode, saveAs: { filename -> - filename.endsWith(".zip") ? "zips/$filename" : "$filename" + filename.endsWith('.zip') ? "zips/$filename" : filename } when: @@ -504,7 +504,7 @@ process FASTQC { tuple val(name), path(reads) from ch_raw_reads_fastqc output: - file "*.{zip,html}" into ch_fastqc_reports_mqc + path '*.{zip,html}' into ch_fastqc_reports_mqc script: // Added soft-links to original fastqs for consistent naming in MultiQC @@ -544,9 +544,9 @@ if (params.skip_trimming) { label 'process_high' publishDir "${params.outdir}/trim_galore", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".html")) "fastqc/$filename" - else if (filename.endsWith(".zip")) "fastqc/zips/$filename" - else if (filename.endsWith("trimming_report.txt")) "logs/$filename" + if (filename.endsWith('.html')) "fastqc/$filename" + else if (filename.endsWith('.zip')) "fastqc/zips/$filename" + else if (filename.endsWith('trimming_report.txt')) "logs/$filename" else params.save_trimmed ? filename : null } @@ -554,9 +554,9 @@ if (params.skip_trimming) { tuple val(name), path(reads) from ch_raw_reads_trimgalore output: - tuple val(name), path("*.fq.gz") into ch_trimmed_reads - file "*.txt" into ch_trimgalore_results_mqc - file "*.{zip,html}" into ch_trimgalore_fastqc_reports_mqc + tuple val(name), path('*.fq.gz') into ch_trimmed_reads + path '*.txt' into ch_trimgalore_results_mqc + path '*.{zip,html}' into ch_trimgalore_fastqc_reports_mqc script: // Calculate number of --cores for TrimGalore based on value of task.cpus @@ -610,10 +610,10 @@ process BWA_MEM { input: tuple val(name), path(reads) from ch_trimmed_reads - file index from ch_bwa_index.collect() + path index from ch_bwa_index.collect() output: - tuple val(name), path("*.bam") into ch_bwa_bam + tuple val(name), path('*.bam') into ch_bwa_bam script: prefix = "${name}.Lb" @@ -641,9 +641,9 @@ process SORT_BAM { if (params.save_align_intermeds) { publishDir path: "${params.outdir}/bwa/library", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" + if (filename.endsWith('.flagstat')) "samtools_stats/$filename" + else if (filename.endsWith('.idxstats')) "samtools_stats/$filename" + else if (filename.endsWith('.stats')) "samtools_stats/$filename" else filename } } @@ -652,8 +652,8 @@ process SORT_BAM { tuple val(name), path(bam) from ch_bwa_bam output: - tuple val(name), path("*.sorted.{bam,bam.bai}") into ch_sort_bam_merge - file "*.{flagstat,idxstats,stats}" into ch_sort_bam_flagstat_mqc + tuple val(name), path('*.sorted.{bam,bam.bai}') into ch_sort_bam_merge + path '*.{flagstat,idxstats,stats}' into ch_sort_bam_flagstat_mqc script: prefix = "${name}.Lb" @@ -688,10 +688,10 @@ process MERGED_LIB_BAM { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + if (filename.endsWith('.flagstat')) "samtools_stats/$filename" + else if (filename.endsWith('.idxstats')) "samtools_stats/$filename" + else if (filename.endsWith('.stats')) "samtools_stats/$filename" + else if (filename.endsWith('.metrics.txt')) "picard_metrics/$filename" else params.save_align_intermeds ? filename : null } @@ -700,17 +700,17 @@ process MERGED_LIB_BAM { output: tuple val(name), path("*${prefix}.sorted.{bam,bam.bai}") into ch_mlib_bam_filter, - ch_mlib_bam_preseq, - ch_mlib_bam_ataqv - file "*.{flagstat,idxstats,stats}" into ch_mlib_bam_stats_mqc - file "*.txt" into ch_mlib_bam_metrics_mqc + ch_mlib_bam_preseq, + ch_mlib_bam_ataqv + path '*.{flagstat,idxstats,stats}' into ch_mlib_bam_stats_mqc + path '*.txt' into ch_mlib_bam_metrics_mqc script: prefix = "${name}.mLb.mkD" bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() def avail_mem = 3 if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { avail_mem = task.memory.toGiga() } @@ -766,32 +766,32 @@ process MERGED_LIB_BAM_FILTER { publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> if (params.single_end || params.save_align_intermeds) { - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename + if (filename.endsWith('.flagstat')) "samtools_stats/$filename" + else if (filename.endsWith('.idxstats')) "samtools_stats/$filename" + else if (filename.endsWith('.stats')) "samtools_stats/$filename" + else if (filename.endsWith('.sorted.bam')) filename + else if (filename.endsWith('.sorted.bam.bai')) filename else null } } input: tuple val(name), path(bam) from ch_mlib_bam_filter - file bed from ch_genome_filter_regions.collect() - file bamtools_filter_config from ch_bamtools_filter_config + path bed from ch_genome_filter_regions.collect() + path bamtools_filter_config from ch_bamtools_filter_config output: - tuple val(name), path("*.{bam,bam.bai}") into ch_mlib_filter_bam - tuple val(name), path("*.flagstat") into ch_mlib_filter_bam_flagstat - file "*.{idxstats,stats}" into ch_mlib_filter_bam_stats_mqc + tuple val(name), path('*.{bam,bam.bai}') into ch_mlib_filter_bam + tuple val(name), path('*.flagstat') into ch_mlib_filter_bam_flagstat + path '*.{idxstats,stats}' into ch_mlib_filter_bam_stats_mqc script: prefix = params.single_end ? "${name}.mLb.clN" : "${name}.mLb.flT" - filter_params = params.single_end ? "-F 0x004" : "-F 0x004 -F 0x0008 -f 0x001" - dup_params = params.keep_dups ? "" : "-F 0x0400" - multimap_params = params.keep_multi_map ? "" : "-q 1" - blacklist_params = params.blacklist ? "-L $bed" : "" - name_sort_bam = params.single_end ? "" : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" + filter_params = params.single_end ? '-F 0x004' : '-F 0x004 -F 0x0008 -f 0x001' + dup_params = params.keep_dups ? '' : '-F 0x0400' + multimap_params = params.keep_multi_map ? '' : '-q 1' + blacklist_params = params.blacklist ? "-L $bed" : '' + name_sort_bam = params.single_end ? '' : "samtools sort -n -@ $task.cpus -o ${prefix}.bam -T $prefix ${prefix}.sorted.bam" """ samtools view \\ $filter_params \\ @@ -838,11 +838,11 @@ if (params.single_end) { label 'process_medium' publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".sorted.bam")) filename - else if (filename.endsWith(".sorted.bam.bai")) filename + if (filename.endsWith('.flagstat')) "samtools_stats/$filename" + else if (filename.endsWith('.idxstats')) "samtools_stats/$filename" + else if (filename.endsWith('.stats')) "samtools_stats/$filename" + else if (filename.endsWith('.sorted.bam')) filename + else if (filename.endsWith('.sorted.bam.bai')) filename else null } @@ -850,17 +850,17 @@ if (params.single_end) { tuple val(name), path(bam) from ch_mlib_filter_bam output: - tuple val(name), path("*.sorted.{bam,bam.bai}") into ch_mlib_rm_orphan_bam_metrics, - ch_mlib_rm_orphan_bam_bigwig, - ch_mlib_rm_orphan_bam_macs, - ch_mlib_rm_orphan_bam_plotfingerprint, - ch_mlib_rm_orphan_bam_mrep + tuple val(name), path('*.sorted.{bam,bam.bai}') into ch_mlib_rm_orphan_bam_metrics, + ch_mlib_rm_orphan_bam_bigwig, + ch_mlib_rm_orphan_bam_macs, + ch_mlib_rm_orphan_bam_plotfingerprint, + ch_mlib_rm_orphan_bam_mrep tuple val(name), path("${prefix}.bam") into ch_mlib_name_bam_mlib_counts, - ch_mlib_name_bam_mrep_counts - tuple val(name), path("*.flagstat") into ch_mlib_rm_orphan_flagstat_bigwig, - ch_mlib_rm_orphan_flagstat_macs, - ch_mlib_rm_orphan_flagstat_mqc - file "*.{idxstats,stats}" into ch_mlib_rm_orphan_stats_mqc + ch_mlib_name_bam_mrep_counts + tuple val(name), path('*.flagstat') into ch_mlib_rm_orphan_flagstat_bigwig, + ch_mlib_rm_orphan_flagstat_macs, + ch_mlib_rm_orphan_flagstat_mqc + path '*.{idxstats,stats}' into ch_mlib_rm_orphan_stats_mqc script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ prefix = "${name}.mLb.clN" @@ -900,12 +900,12 @@ process MERGED_LIB_PRESEQ { tuple val(name), path(bam) from ch_mlib_bam_preseq output: - file "*.ccurve.txt" into ch_mlib_preseq_mqc - file "*.log" + path '*.ccurve.txt' into ch_mlib_preseq_mqc + path '*.log' script: prefix = "${name}.mLb.mkD" - pe = params.single_end ? "" : "-pe" + pe = params.single_end ? '' : '-pe' """ preseq lc_extrap \\ -output ${prefix}.ccurve.txt \\ @@ -926,8 +926,8 @@ process MERGED_LIB_PICARD_METRICS { label 'process_medium' publishDir path: "${params.outdir}/bwa/mergedLibrary", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith("_metrics")) "picard_metrics/$filename" - else if (filename.endsWith(".pdf")) "picard_metrics/pdf/$filename" + if (filename.endsWith('_metrics')) "picard_metrics/$filename" + else if (filename.endsWith('.pdf')) "picard_metrics/pdf/$filename" else null } @@ -936,17 +936,17 @@ process MERGED_LIB_PICARD_METRICS { input: tuple val(name), path(bam) from ch_mlib_rm_orphan_bam_metrics - file fasta from ch_fasta + path fasta from ch_fasta output: - file "*_metrics" into ch_mlib_collectmetrics_mqc - file "*.pdf" + path '*_metrics' into ch_mlib_collectmetrics_mqc + path '*.pdf' script: prefix = "${name}.mLb.clN" def avail_mem = 3 if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { avail_mem = task.memory.toGiga() } @@ -968,23 +968,23 @@ process MERGED_LIB_BIGWIG { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/bigwig", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" + if (filename.endsWith('scale_factor.txt')) "scale/$filename" + else if (filename.endsWith('.bigWig')) filename else null } input: tuple val(name), path(bam), path(flagstat) from ch_mlib_rm_orphan_bam_bigwig.join(ch_mlib_rm_orphan_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mlib_bigwig.collect() + path sizes from ch_genome_sizes_mlib_bigwig.collect() output: - tuple val(name), path("*.bigWig") into ch_mlib_bigwig_plotprofile - file "*igv.txt" into ch_mlib_bigwig_igv - file "*scale_factor.txt" + tuple val(name), path('*.bigWig') into ch_mlib_bigwig_plotprofile + path '*igv.txt' into ch_mlib_bigwig_igv + path '*scale_factor.txt' script: prefix = "${name}.mLb.clN" - pe_fragment = params.single_end ? "" : "-pc" + pe_fragment = params.single_end ? '' : '-pc' extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' """ SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') @@ -1010,11 +1010,11 @@ process MERGED_LIB_PLOTPROFILE { input: tuple val(name), path(bigwig) from ch_mlib_bigwig_plotprofile - file bed from ch_gene_bed + path bed from ch_gene_bed output: - file '*.plotProfile.tab' into ch_mlib_plotprofile_mqc - file '*.{gz,pdf}' + path '*.plotProfile.tab' into ch_mlib_plotprofile_mqc + path '*.{gz,pdf}' script: prefix = "${name}.mLb.clN" @@ -1052,8 +1052,8 @@ process MERGED_LIB_PLOTFINGERPRINT { tuple val(name), path(bam) from ch_mlib_rm_orphan_bam_plotfingerprint output: - file '*.raw.txt' into ch_mlib_plotfingerprint_mqc - file '*.{txt,pdf}' + path '*.raw.txt' into ch_mlib_plotfingerprint_mqc + path '*.{txt,pdf}' script: prefix = "${name}.mLb.clN" @@ -1088,8 +1088,8 @@ process MERGED_LIB_MACS2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.tsv')) "qc/$filename" + else if (filename.endsWith('.igv.txt')) null else filename } @@ -1098,23 +1098,23 @@ process MERGED_LIB_MACS2 { input: tuple val(name), path(bam), path(flagstat) from ch_mlib_rm_orphan_bam_macs.join(ch_mlib_rm_orphan_flagstat_macs, by: [0]) - file mlib_peak_count_header from ch_mlib_peak_count_header - file mlib_frip_score_header from ch_mlib_frip_score_header + path mlib_peak_count_header from ch_mlib_peak_count_header + path mlib_frip_score_header from ch_mlib_frip_score_header output: tuple val(name), path("*$PEAK_TYPE") into ch_mlib_macs_homer, - ch_mlib_macs_qc, - ch_mlib_macs_consensus, - ch_mlib_macs_ataqv - file "*igv.txt" into ch_mlib_macs_igv - file "*_mqc.tsv" into ch_mlib_macs_mqc - path "*.{bed,xls,gappedPeak,bdg}" + ch_mlib_macs_qc, + ch_mlib_macs_consensus, + ch_mlib_macs_ataqv + path '*igv.txt' into ch_mlib_macs_igv + path '*_mqc.tsv' into ch_mlib_macs_mqc + path '*.{bed,xls,gappedPeak,bdg}' script: prefix = "${name}.mLb.clN" broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" + format = params.single_end ? 'BAM' : 'BAMPE' + pileup = params.save_macs_pileup ? '-B --SPMR' : '' """ macs2 callpeak \\ -t ${bam[0]} \\ @@ -1140,7 +1140,7 @@ process MERGED_LIB_MACS2 { */ process MERGED_LIB_MACS2_ANNOTATE { tag "$name" - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: @@ -1148,11 +1148,11 @@ process MERGED_LIB_MACS2_ANNOTATE { input: tuple val(name), path(peak) from ch_mlib_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf + path fasta from ch_fasta + path gtf from ch_gtf output: - file "*.txt" into ch_mlib_macs_annotate + path '*.txt' into ch_mlib_macs_annotate script: prefix = "${name}.mLb.clN" @@ -1171,20 +1171,20 @@ process MERGED_LIB_MACS2_ANNOTATE { * STEP 6.3: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ process MERGED_LIB_MACS2_QC { - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: params.macs_gsize && !params.skip_peak_qc input: - file peaks from ch_mlib_macs_qc.collect{ it[1] } - file annos from ch_mlib_macs_annotate.collect() - file mlib_peak_annotation_header from ch_mlib_peak_annotation_header + path peaks from ch_mlib_macs_qc.collect{ it[1] } + path annos from ch_mlib_macs_annotate.collect() + path mlib_peak_annotation_header from ch_mlib_peak_annotation_header output: - file "*.tsv" into ch_mlib_peak_qc_mqc - file "*.{txt,pdf}" + path '*.tsv' into ch_mlib_peak_qc_mqc + path '*.{txt,pdf}' script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mLb.clN' @@ -1212,7 +1212,7 @@ process MERGED_LIB_CONSENSUS { label 'process_long' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.igv.txt')) null else filename } @@ -1220,21 +1220,21 @@ process MERGED_LIB_CONSENSUS { params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: - file peaks from ch_mlib_macs_consensus.collect{ it[1] } + path peaks from ch_mlib_macs_consensus.collect{ it[1] } output: - file "*.bed" into ch_mlib_macs_consensus_bed - file "*.saf" into ch_mlib_macs_consensus_saf - file "*.boolean.txt" into ch_mlib_macs_consensus_bool - file "*igv.txt" into ch_mlib_macs_consensus_igv - file "*.intersect.{txt,plot.pdf}" + path '*.bed' into ch_mlib_macs_consensus_bed + path '*.saf' into ch_mlib_macs_consensus_saf + path '*.boolean.txt' into ch_mlib_macs_consensus_bool + path '*igv.txt' into ch_mlib_macs_consensus_igv + path '*.intersect.{txt,plot.pdf}' script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mLb.clN' prefix = "consensus_peaks.${suffix}" mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + collapsecols = params.narrow_peak ? (['collapse']*9).join(',') : (['collapse']*8).join(',') + expandparam = params.narrow_peak ? '--is_narrow_peak' : '' """ sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt @@ -1262,23 +1262,23 @@ process MERGED_LIB_CONSENSUS { * STEP 6.5: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ process MERGED_LIB_CONSENSUS_ANNOTATE { - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: - file bed from ch_mlib_macs_consensus_bed - file bool from ch_mlib_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf + path bed from ch_mlib_macs_consensus_bed + path bool from ch_mlib_macs_consensus_bool + path fasta from ch_fasta + path gtf from ch_gtf output: - file "*.annotatePeaks.txt" + path '*.annotatePeaks.txt' script: - prefix = "consensus_peaks.mLb.clN" + prefix = 'consensus_peaks.mLb.clN' """ annotatePeaks.pl \\ $bed \\ @@ -1304,17 +1304,17 @@ process MERGED_LIB_CONSENSUS_COUNTS { params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks input: - file bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } - file saf from ch_mlib_macs_consensus_saf.collect() + path bams from ch_mlib_name_bam_mlib_counts.collect{ it[1] } + path saf from ch_mlib_macs_consensus_saf.collect() output: - file "*featureCounts.txt" into ch_mlib_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mlib_macs_consensus_counts_mqc + path '*featureCounts.txt' into ch_mlib_macs_consensus_counts + path '*featureCounts.txt.summary' into ch_mlib_macs_consensus_counts_mqc script: - prefix = "consensus_peaks.mLb.clN" + prefix = 'consensus_peaks.mLb.clN' bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - pe_params = params.single_end ? '' : "-p --donotsort" + pe_params = params.single_end ? '' : '-p --donotsort' """ featureCounts \\ -F SAF \\ @@ -1335,7 +1335,7 @@ process MERGED_LIB_CONSENSUS_DESEQ2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.igv.txt')) null else filename } @@ -1343,22 +1343,22 @@ process MERGED_LIB_CONSENSUS_DESEQ2 { params.macs_gsize && replicatesExist && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis input: - file counts from ch_mlib_macs_consensus_counts - file mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header - file mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header + path counts from ch_mlib_macs_consensus_counts + path mlib_deseq2_pca_header from ch_mlib_deseq2_pca_header + path mlib_deseq2_clustering_header from ch_mlib_deseq2_clustering_header output: - file "*.tsv" into ch_mlib_macs_consensus_deseq_mqc - file "*igv.txt" into ch_mlib_macs_consensus_deseq_comp_igv - file "*.{RData,results.txt,pdf,log}" - file "sizeFactors" - file "*vs*/*.{pdf,txt}" - file "*vs*/*.bed" + path '*.tsv' into ch_mlib_macs_consensus_deseq_mqc + path '*igv.txt' into ch_mlib_macs_consensus_deseq_comp_igv + path '*.{RData,results.txt,pdf,log}' + path 'sizeFactors' + path '*vs*/*.{pdf,txt}' + path '*vs*/*.bed' script: - prefix = "consensus_peaks.mLb.clN" - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - vst = params.deseq2_vst ? "--vst TRUE" : "" + prefix = 'consensus_peaks.mLb.clN' + bam_ext = params.single_end ? '.mLb.clN.sorted.bam' : '.mLb.clN.bam' + vst = params.deseq2_vst ? '--vst TRUE' : '' """ featurecounts_deseq2.r \\ --featurecount_file $counts \\ @@ -1389,16 +1389,16 @@ process MERGED_LIB_ATAQV { input: tuple val(name), path(bam), path(peak) from ch_mlib_bam_ataqv.join(ch_mlib_macs_ataqv, by: [0]) - file autosomes from ch_genome_autosomes.collect() - file tss_bed from ch_tss_bed + path autosomes from ch_genome_autosomes.collect() + path tss_bed from ch_tss_bed output: - file "*.json" into ch_mlib_ataqv + path '*.json' into ch_mlib_ataqv script: suffix = 'mLb.clN' - peak_param = params.macs_gsize ? "--peak-file ${peak}" : "" - mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : "" + peak_param = params.macs_gsize ? "--peak-file ${peak}" : '' + mito_param = params.mito_name ? "--mitochondrial-reference-name ${params.mito_name}" : '' """ ataqv \\ --threads $task.cpus \\ @@ -1425,10 +1425,10 @@ process MERGED_LIB_ATAQV_MKARV { !params.skip_ataqv input: - file json from ch_mlib_ataqv.collect() + path json from ch_mlib_ataqv.collect() output: - file "html" + path 'html' script: """ @@ -1462,10 +1462,10 @@ process MERGED_REP_BAM { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".flagstat")) "samtools_stats/$filename" - else if (filename.endsWith(".idxstats")) "samtools_stats/$filename" - else if (filename.endsWith(".stats")) "samtools_stats/$filename" - else if (filename.endsWith(".metrics.txt")) "picard_metrics/$filename" + if (filename.endsWith('.flagstat')) "samtools_stats/$filename" + else if (filename.endsWith('.idxstats')) "samtools_stats/$filename" + else if (filename.endsWith('.stats')) "samtools_stats/$filename" + else if (filename.endsWith('.metrics.txt')) "picard_metrics/$filename" else filename } @@ -1474,12 +1474,12 @@ process MERGED_REP_BAM { output: tuple val(name), path("*${prefix}.sorted.{bam,bam.bai}") into ch_mrep_bam_bigwig, - ch_mrep_bam_macs - tuple val(name), path("*.flagstat") into ch_mrep_bam_flagstat_bigwig, - ch_mrep_bam_flagstat_macs, - ch_mrep_bam_flagstat_mqc - file "*.{idxstats,stats}" into ch_mrep_bam_stats_mqc - file "*.txt" into ch_mrep_bam_metrics_mqc + ch_mrep_bam_macs + tuple val(name), path('*.flagstat') into ch_mrep_bam_flagstat_bigwig, + ch_mrep_bam_flagstat_macs, + ch_mrep_bam_flagstat_mqc + path '*.{idxstats,stats}' into ch_mrep_bam_stats_mqc + path '*.txt' into ch_mrep_bam_metrics_mqc when: !params.skip_merge_replicates && replicatesExist @@ -1489,7 +1489,7 @@ process MERGED_REP_BAM { bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() def avail_mem = 3 if (!task.memory) { - log.info "[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this." + log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { avail_mem = task.memory.toGiga() } @@ -1545,8 +1545,8 @@ process MERGED_REP_BIGWIG { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/bigwig", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith("scale_factor.txt")) "scale/$filename" - else if (filename.endsWith(".bigWig")) "$filename" + if (filename.endsWith('scale_factor.txt')) "scale/$filename" + else if (filename.endsWith('.bigWig')) filename else null } @@ -1555,16 +1555,16 @@ process MERGED_REP_BIGWIG { input: tuple val(name), path(bam), path(flagstat) from ch_mrep_bam_bigwig.join(ch_mrep_bam_flagstat_bigwig, by: [0]) - file sizes from ch_genome_sizes_mrep_bigwig.collect() + path sizes from ch_genome_sizes_mrep_bigwig.collect() output: - tuple val(name), path("*.bigWig") into ch_mrep_bigwig - file "*igv.txt" into ch_mrep_bigwig_igv - file "*scale_factor.txt" + tuple val(name), path('*.bigWig') into ch_mrep_bigwig + path '*igv.txt' into ch_mrep_bigwig_igv + path '*scale_factor.txt' script: prefix = "${name}.mRp.clN" - pe_fragment = params.single_end ? "" : "-pc" + pe_fragment = params.single_end ? '' : '-pc' extend = (params.single_end && params.fragment_size > 0) ? "-fs ${params.fragment_size}" : '' """ SCALE_FACTOR=\$(grep 'mapped (' $flagstat | awk '{print 1000000/\$1}') @@ -1585,8 +1585,8 @@ process MERGED_REP_MACS2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".tsv")) "qc/$filename" - else if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.tsv')) "qc/$filename" + else if (filename.endsWith('.igv.txt')) null else filename } @@ -1595,22 +1595,22 @@ process MERGED_REP_MACS2 { input: tuple val(name), path(bam), path(flagstat) from ch_mrep_bam_macs.join(ch_mrep_bam_flagstat_macs, by: [0]) - file mrep_peak_count_header from ch_mrep_peak_count_header - file mrep_frip_score_header from ch_mrep_frip_score_header + path mrep_peak_count_header from ch_mrep_peak_count_header + path mrep_frip_score_header from ch_mrep_frip_score_header output: tuple val(name), path("*$PEAK_TYPE") into ch_mrep_macs_homer, - ch_mrep_macs_qc, - ch_mrep_macs_consensus - file "*igv.txt" into ch_mrep_macs_igv - file "*_mqc.tsv" into ch_mrep_macs_mqc - path "*.{bed,xls,gappedPeak,bdg}" + ch_mrep_macs_qc, + ch_mrep_macs_consensus + path '*igv.txt' into ch_mrep_macs_igv + path '*_mqc.tsv' into ch_mrep_macs_mqc + path '*.{bed,xls,gappedPeak,bdg}' script: prefix = "${name}.mRp.clN" broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" - format = params.single_end ? "BAM" : "BAMPE" - pileup = params.save_macs_pileup ? "-B --SPMR" : "" + format = params.single_end ? 'BAM' : 'BAMPE' + pileup = params.save_macs_pileup ? '-B --SPMR' : '' """ macs2 callpeak \\ -t ${bam[0]} \\ @@ -1636,7 +1636,7 @@ process MERGED_REP_MACS2 { */ process MERGED_REP_MACS2_ANNOTATE { tag "$name" - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: @@ -1644,11 +1644,11 @@ process MERGED_REP_MACS2_ANNOTATE { input: tuple val(name), path(peak) from ch_mrep_macs_homer - file fasta from ch_fasta - file gtf from ch_gtf + path fasta from ch_fasta + path gtf from ch_gtf output: - file "*.txt" into ch_mrep_macs_annotate + path '*.txt' into ch_mrep_macs_annotate script: prefix = "${name}.mRp.clN" @@ -1667,20 +1667,20 @@ process MERGED_REP_MACS2_ANNOTATE { * STEP 8.4: Aggregated QC plots for peaks, FRiP and peak-to-gene annotation */ process MERGED_REP_MACS2_QC { - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize && !params.skip_peak_qc input: - file peaks from ch_mrep_macs_qc.collect{ it[1] } - file annos from ch_mrep_macs_annotate.collect() - file mrep_peak_annotation_header from ch_mrep_peak_annotation_header + path peaks from ch_mrep_macs_qc.collect{ it[1] } + path annos from ch_mrep_macs_annotate.collect() + path mrep_peak_annotation_header from ch_mrep_peak_annotation_header output: - file "*.tsv" into ch_mrep_peak_qc_mqc - file "*.{txt,pdf}" + path '*.tsv' into ch_mrep_peak_qc_mqc + path '*.{txt,pdf}' script: // This script is bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mRp.clN' @@ -1708,7 +1708,7 @@ process MERGED_REP_CONSENSUS { label 'process_long' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.igv.txt')) null else filename } @@ -1716,21 +1716,21 @@ process MERGED_REP_CONSENSUS { !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: - file peaks from ch_mrep_macs_consensus.collect{ it[1] } + path peaks from ch_mrep_macs_consensus.collect{ it[1] } output: - file "*.bed" into ch_mrep_macs_consensus_bed - file "*.saf" into ch_mrep_macs_consensus_saf - file "*.boolean.txt" into ch_mrep_macs_consensus_bool - file "*igv.txt" into ch_mrep_macs_consensus_igv - file "*.intersect.{txt,plot.pdf}" + path '*.bed' into ch_mrep_macs_consensus_bed + path '*.saf' into ch_mrep_macs_consensus_saf + path '*.boolean.txt' into ch_mrep_macs_consensus_bool + path '*igv.txt' into ch_mrep_macs_consensus_igv + path '*.intersect.{txt,plot.pdf}' script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ suffix = 'mRp.clN' prefix = "consensus_peaks.${suffix}" mergecols = params.narrow_peak ? (2..10).join(',') : (2..9).join(',') - collapsecols = params.narrow_peak ? (["collapse"]*9).join(',') : (["collapse"]*8).join(',') - expandparam = params.narrow_peak ? "--is_narrow_peak" : "" + collapsecols = params.narrow_peak ? (['collapse']*9).join(',') : (['collapse']*8).join(',') + expandparam = params.narrow_peak ? '--is_narrow_peak' : '' """ sort -T '.' -k1,1 -k2,2n ${peaks.collect{it.toString()}.sort().join(' ')} \\ | mergeBed -c $mergecols -o $collapsecols > ${prefix}.txt @@ -1757,23 +1757,23 @@ process MERGED_REP_CONSENSUS { * STEP 8.6: Annotate consensus peaks with HOMER, and add annotation to boolean output file */ process MERGED_REP_CONSENSUS_ANNOTATE { - label "process_medium" + label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: - file bed from ch_mrep_macs_consensus_bed - file bool from ch_mrep_macs_consensus_bool - file fasta from ch_fasta - file gtf from ch_gtf + path bed from ch_mrep_macs_consensus_bed + path bool from ch_mrep_macs_consensus_bool + path fasta from ch_fasta + path gtf from ch_gtf output: - file "*.annotatePeaks.txt" + path '*.annotatePeaks.txt' script: - prefix = "consensus_peaks.mRp.clN" + prefix = 'consensus_peaks.mRp.clN' """ annotatePeaks.pl \\ $bed \\ @@ -1799,17 +1799,17 @@ process MERGED_REP_CONSENSUS_COUNTS { !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks input: - file bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } - file saf from ch_mrep_macs_consensus_saf.collect() + path bams from ch_mlib_name_bam_mrep_counts.collect{ it[1] } + path saf from ch_mrep_macs_consensus_saf.collect() output: - file "*featureCounts.txt" into ch_mrep_macs_consensus_counts - file "*featureCounts.txt.summary" into ch_mrep_macs_consensus_counts_mqc + path '*featureCounts.txt' into ch_mrep_macs_consensus_counts + path '*featureCounts.txt.summary' into ch_mrep_macs_consensus_counts_mqc script: - prefix = "consensus_peaks.mRp.clN" + prefix = 'consensus_peaks.mRp.clN' bam_files = bams.findAll { it.toString().endsWith('.bam') }.sort() - pe_params = params.single_end ? '' : "-p --donotsort" + pe_params = params.single_end ? '' : '-p --donotsort' """ featureCounts \\ -F SAF \\ @@ -1830,7 +1830,7 @@ process MERGED_REP_CONSENSUS_DESEQ2 { label 'process_medium' publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus/deseq2", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.endsWith(".igv.txt")) null + if (filename.endsWith('.igv.txt')) null else filename } @@ -1838,22 +1838,22 @@ process MERGED_REP_CONSENSUS_DESEQ2 { !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_diff_analysis input: - file counts from ch_mrep_macs_consensus_counts - file mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header - file mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header + path counts from ch_mrep_macs_consensus_counts + path mrep_deseq2_pca_header from ch_mrep_deseq2_pca_header + path mrep_deseq2_clustering_header from ch_mrep_deseq2_clustering_header output: - file "*.tsv" into ch_mrep_macs_consensus_deseq_mqc - file "*igv.txt" into ch_mrep_macs_consensus_deseq_comp_igv - file "*.{RData,results.txt,pdf,log}" - file "sizeFactors" - file "*vs*/*.{pdf,txt}" - file "*vs*/*.bed" + path '*.tsv' into ch_mrep_macs_consensus_deseq_mqc + path '*igv.txt' into ch_mrep_macs_consensus_deseq_comp_igv + path '*.{RData,results.txt,pdf,log}' + path 'sizeFactors' + path '*vs*/*.{pdf,txt}' + path '*vs*/*.bed' script: - prefix = "consensus_peaks.mRp.clN" - bam_ext = params.single_end ? ".mLb.clN.sorted.bam" : ".mLb.clN.bam" - vst = params.deseq2_vst ? "--vst TRUE" : "" + prefix = 'consensus_peaks.mRp.clN' + bam_ext = params.single_end ? '.mLb.clN.sorted.bam' : '.mLb.clN.bam' + vst = params.deseq2_vst ? '--vst TRUE' : '' """ featurecounts_deseq2.r \\ --featurecount_file $counts \\ @@ -1889,20 +1889,20 @@ process IGV { !params.skip_igv input: - file fasta from ch_fasta + path fasta from ch_fasta - file bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) - file peaks from ch_mlib_macs_igv.collect().ifEmpty([]) - file consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) - file differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + path bigwigs from ch_mlib_bigwig_igv.collect().ifEmpty([]) + path peaks from ch_mlib_macs_igv.collect().ifEmpty([]) + path consensus_peaks from ch_mlib_macs_consensus_igv.collect().ifEmpty([]) + path differential_peaks from ch_mlib_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) - file rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) - file rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) - file rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) - file rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) + path rbigwigs from ch_mrep_bigwig_igv.collect().ifEmpty([]) + path rpeaks from ch_mrep_macs_igv.collect().ifEmpty([]) + path rconsensus_peaks from ch_mrep_macs_consensus_igv.collect().ifEmpty([]) + path rdifferential_peaks from ch_mrep_macs_consensus_deseq_comp_igv.collect().ifEmpty([]) output: - file "*.{txt,xml}" + path '*.{txt,xml}' script: // scripts are bundled with the pipeline, in nf-core/atacseq/bin/ """ @@ -1925,13 +1925,13 @@ process IGV { process get_software_versions { publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode, saveAs: { filename -> - if (filename.indexOf(".csv") > 0) filename + if (filename.indexOf('.csv') > 0) filename else null } output: - file 'software_versions_mqc.yaml' into ch_software_versions_mqc - file "software_versions.csv" + path 'software_versions_mqc.yaml' into ch_software_versions_mqc + path 'software_versions.csv' script: """ @@ -1983,42 +1983,42 @@ process MULTIQC { !params.skip_multiqc input: - file (multiqc_config) from ch_multiqc_config - file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) - - file ('software_versions/*') from ch_software_versions_mqc.collect() - file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") - - file ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) - file ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) - file ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) - - file ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() - - file ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} - file ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() - file ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() - file ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) - file ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) - file ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) - - file ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) - file ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) - file ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) + path (multiqc_config) from ch_multiqc_config + path (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) + + path ('software_versions/*') from ch_software_versions_mqc.collect() + path workflow_summary from ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml') + + path ('fastqc/*') from ch_fastqc_reports_mqc.collect().ifEmpty([]) + path ('trimgalore/*') from ch_trimgalore_results_mqc.collect().ifEmpty([]) + path ('trimgalore/fastqc/*') from ch_trimgalore_fastqc_reports_mqc.collect().ifEmpty([]) + + path ('alignment/library/*') from ch_sort_bam_flagstat_mqc.collect() + + path ('alignment/mergedLibrary/*') from ch_mlib_bam_stats_mqc.collect() + path ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_flagstat_mqc.collect{it[1]} + path ('alignment/mergedLibrary/*') from ch_mlib_rm_orphan_stats_mqc.collect() + path ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_bam_metrics_mqc.collect() + path ('alignment/mergedLibrary/picard_metrics/*') from ch_mlib_collectmetrics_mqc.collect() + path ('macs/mergedLibrary/*') from ch_mlib_macs_mqc.collect().ifEmpty([]) + path ('macs/mergedLibrary/*') from ch_mlib_peak_qc_mqc.collect().ifEmpty([]) + path ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_counts_mqc.collect().ifEmpty([]) + path ('macs/mergedLibrary/consensus/*') from ch_mlib_macs_consensus_deseq_mqc.collect().ifEmpty([]) + path ('preseq/*') from ch_mlib_preseq_mqc.collect().ifEmpty([]) + path ('deeptools/*') from ch_mlib_plotprofile_mqc.collect().ifEmpty([]) + path ('deeptools/*') from ch_mlib_plotfingerprint_mqc.collect().ifEmpty([]) + + path ('alignment/mergedReplicate/*') from ch_mrep_bam_flagstat_mqc.collect{it[1]}.ifEmpty([]) + path ('alignment/mergedReplicate/*') from ch_mrep_bam_stats_mqc.collect().ifEmpty([]) + path ('alignment/mergedReplicate/*') from ch_mrep_bam_metrics_mqc.collect().ifEmpty([]) + path ('macs/mergedReplicate/*') from ch_mrep_macs_mqc.collect().ifEmpty([]) + path ('macs/mergedReplicate/*') from ch_mrep_peak_qc_mqc.collect().ifEmpty([]) + path ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_counts_mqc.collect().ifEmpty([]) + path ('macs/mergedReplicate/consensus/*') from ch_mrep_macs_consensus_deseq_mqc.collect().ifEmpty([]) output: - file "*multiqc_report.html" into ch_multiqc_report - file "*_data" + path '*multiqc_report.html' into ch_multiqc_report + path '*_data' script: rtitle = custom_runName ? "--title \"$custom_runName\"" : '' @@ -2044,11 +2044,11 @@ process output_documentation { publishDir "${params.outdir}/Documentation", mode: params.publish_dir_mode input: - file output_docs from ch_output_docs - file images from ch_output_docs_images + path output_docs from ch_output_docs + path images from ch_output_docs_images output: - file "results_description.html" + path 'results_description.html' script: """ From 3a73c81f9c040fb44a840ab67069792536efee0c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 11:23:34 +0100 Subject: [PATCH 182/226] Update AWS tests --- .github/workflows/awstest.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 8ccdb4cf..af704a87 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -11,6 +11,7 @@ on: jobs: run-awstest: + if: github.repository == 'nf-core/atacseq' name: Run AWS test runs-on: ubuntu-latest steps: @@ -26,5 +27,10 @@ jobs: AWS_ACCESS_KEY_ID: ${{secrets.AWS_KEY_ID}} AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_KEY_SECRET}} TOWER_ACCESS_TOKEN: ${{secrets.TOWER_ACCESS_TOKEN}} - run: | - aws batch submit-job --region eu-west-1 --job-name nf-core-atacseq --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' --job-definition nextflow --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' + run: | # Submits job to AWS batch using a 'nextflow-4GiB' instance. Setting JVM options to "-XX:+UseG1GC" for more efficient garbage collection when staging remote files. + aws batch submit-job \ + --region eu-west-1 \ + --job-name nf-core-atacseq \ + --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' \ + --job-definition nextflow-4GiB \ + --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' From b4600599f9ec3911becf01f5a2d38138449ea0fe Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 13:48:27 +0100 Subject: [PATCH 183/226] Fix chipseq #154 --- CHANGELOG.md | 1 + docs/output.md | 2 +- main.nf | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c147c815..b905a7ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#102](https://github.com/nf-core/atacseq/issues/102) - Incorrect Group ID assigned by featurecounts_deseq2.r * [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system +* [nf-core/chipseq#154](https://github.com/nf-core/chipseq/issues/154) - computeMatrix.val.mat.gz files not zipped * Make executables in `bin/` compatible with Python 3 ### `Dependencies` diff --git a/docs/output.md b/docs/output.md index b1a4a71c..a2f40add 100755 --- a/docs/output.md +++ b/docs/output.md @@ -140,7 +140,7 @@ The library-level alignments associated with the same sample are merged and subs * `bwa/mergedLibrary/deepTools/plotFingerprint/` * Output files: `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt` * `bwa/mergedLibrary/deepTools/plotProfile/` - * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.gz`, `*.plotProfile.pdf`, `*.plotProfile.tab`. + * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`. 4. **Call peaks** diff --git a/main.nf b/main.nf index 82fb4ee4..54f006cc 100644 --- a/main.nf +++ b/main.nf @@ -1014,7 +1014,7 @@ process MERGED_LIB_PLOTPROFILE { output: path '*.plotProfile.tab' into ch_mlib_plotprofile_mqc - path '*.{gz,pdf}' + path '*.{gz,pdf,mat.tab}' script: prefix = "${name}.mLb.clN" @@ -1023,7 +1023,7 @@ process MERGED_LIB_PLOTPROFILE { --regionsFileName $bed \\ --scoreFileName $bigwig \\ --outFileName ${prefix}.computeMatrix.mat.gz \\ - --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.gz \\ + --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.tab \\ --regionBodyLength 1000 \\ --beforeRegionStartLength 3000 \\ --afterRegionStartLength 3000 \\ From b12507c242a428687ee7ab755ebabac51b5929bb Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 16:14:43 +0100 Subject: [PATCH 184/226] Add --skip_peak_annotation parameter --- CHANGELOG.md | 1 + docs/usage.md | 5 +++++ main.nf | 14 ++++++++------ nextflow.config | 1 + 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b905a7ce..d563c140 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Capitalise process names * Parameters: * `--skip_peak_qc` to skip MACS2 peak QC plot generation + * `--skip_peak_annotation` to skip annotation of MACS2 and consensus peaks with HOMER * `--skip_consensus_peaks` to skip consensus peak generation * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 * `--publish_dir_mode` to customise method of publishing results to output directory [nf-core/tools#585](https://github.com/nf-core/tools/issues/585) diff --git a/docs/usage.md b/docs/usage.md index ec64225c..b8252113 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -42,6 +42,7 @@ * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) * [`--skip_peak_qc`](#--skip_peak_qc) + * [`--skip_peak_annotation`](#--skip_peak_annotation) * [`--skip_consensus_peaks`](#--skip_consensus_peaks) * [Differential analysis](#differential_analysis) * [`--deseq2_vst`](#--deseq2_vst) @@ -403,6 +404,10 @@ Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. Skip MACS2 peak QC plot generation. +### `--skip_peak_annotation` + +Skip annotation of MACS2 and consensus peaks with HOMER. + ### `--skip_consensus_peaks` Skip consensus peak generation, annotation and counting. diff --git a/main.nf b/main.nf index 54f006cc..5f57775c 100644 --- a/main.nf +++ b/main.nf @@ -63,6 +63,7 @@ def helpMessage() { --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads --skip_peak_qc [bool] Skip MACS2 peak QC plot generation + --skip_peak_annotation [bool] Skip annotation of MACS2 and consensus peaks with HOMER --skip_consensus_peaks [bool] Skip consensus peak generation Differential analysis @@ -261,6 +262,7 @@ if (params.save_align_intermeds) summary['Save Intermeds'] = 'Yes' if (params.save_macs_pileup) summary['Save MACS2 Pileup'] = 'Yes' if (params.skip_merge_replicates) summary['Skip Merge Replicates'] = 'Yes' if (params.skip_peak_qc) summary['Skip MACS2 Peak QC'] = 'Yes' +if (params.skip_peak_annotation) summary['Skip Peak Annotation'] = 'Yes' if (params.skip_consensus_peaks) summary['Skip Consensus Peaks'] = 'Yes' if (params.deseq2_vst) summary['Use DESeq2 vst Transform'] = 'Yes' if (params.skip_diff_analysis) summary['Skip Differential Analysis'] = 'Yes' @@ -1144,7 +1146,7 @@ process MERGED_LIB_MACS2_ANNOTATE { publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: - params.macs_gsize + params.macs_gsize && !params.skip_peak_annotation input: tuple val(name), path(peak) from ch_mlib_macs_homer @@ -1175,7 +1177,7 @@ process MERGED_LIB_MACS2_QC { publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: - params.macs_gsize && !params.skip_peak_qc + params.macs_gsize && !params.skip_peak_annotation && !params.skip_peak_qc input: path peaks from ch_mlib_macs_qc.collect{ it[1] } @@ -1266,7 +1268,7 @@ process MERGED_LIB_CONSENSUS_ANNOTATE { publishDir "${params.outdir}/bwa/mergedLibrary/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: - params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks + params.macs_gsize && (replicatesExist || multipleGroups) && !params.skip_consensus_peaks && !params.skip_peak_annotation input: path bed from ch_mlib_macs_consensus_bed @@ -1640,7 +1642,7 @@ process MERGED_REP_MACS2_ANNOTATE { publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}", mode: params.publish_dir_mode when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && !params.skip_peak_annotation input: tuple val(name), path(peak) from ch_mrep_macs_homer @@ -1671,7 +1673,7 @@ process MERGED_REP_MACS2_QC { publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/qc", mode: params.publish_dir_mode when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && !params.skip_peak_qc + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && !params.skip_peak_qc && !params.skip_peak_annotation input: path peaks from ch_mrep_macs_qc.collect{ it[1] } @@ -1761,7 +1763,7 @@ process MERGED_REP_CONSENSUS_ANNOTATE { publishDir "${params.outdir}/bwa/mergedReplicate/macs/${PEAK_TYPE}/consensus", mode: params.publish_dir_mode when: - !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks + !params.skip_merge_replicates && replicatesExist && params.macs_gsize && multipleGroups && !params.skip_consensus_peaks && !params.skip_peak_annotation input: path bed from ch_mrep_macs_consensus_bed diff --git a/nextflow.config b/nextflow.config index e0adef1b..aafd8841 100644 --- a/nextflow.config +++ b/nextflow.config @@ -42,6 +42,7 @@ params { min_reps_consensus = 1 save_macs_pileup = false skip_peak_qc = false + skip_peak_annotation = false skip_consensus_peaks = false // Options: Differential analysis From 4af0fbb5a1b1fcb4d35093e9615c97cc70d2424d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 16:25:57 +0100 Subject: [PATCH 185/226] Add default values --- main.nf | 80 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/main.nf b/main.nf index 5f57775c..624921a8 100644 --- a/main.nf +++ b/main.nf @@ -19,27 +19,27 @@ def helpMessage() { nextflow run nf-core/atacseq --input design.csv --genome GRCh37 -profile docker Mandatory arguments: - --input [file] Comma-separated file containing information about the samples in the experiment (see docs/usage.md) - --fasta [file] Path to Fasta reference. Not mandatory when using reference in iGenomes config via --genome - --gtf [file] Path to GTF file. Not mandatory when using reference in iGenomes config via --genome + --input [file] Comma-separated file containing information about the samples in the experiment (see docs/usage.md) (Default: './design.csv') + --fasta [file] Path to Fasta reference. Not mandatory when using reference in iGenomes config via --genome (Default: false) + --gtf [file] Path to GTF file. Not mandatory when using reference in iGenomes config via --genome (Default: false) -profile [str] Configuration profile to use. Can use multiple (comma separated) Available: conda, docker, singularity, awsbatch, test Generic - --single_end [bool] Specifies that the input is single-end reads - --seq_center [str] Sequencing center information to be added to read group of BAM files + --single_end [bool] Specifies that the input is single-end reads (Default: false) + --seq_center [str] Sequencing center information to be added to read group of BAM files (Default: false) --fragment_size [int] Estimated fragment size used to extend single-end reads (Default: 0) --fingerprint_bins [int] Number of genomic bins to use when calculating fingerprint plot (Default: 500000) References If not specified in the configuration file or you wish to overwrite any of the references - --genome [str] Name of iGenomes reference - --bwa_index [file] Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa - --gene_bed [file] Path to BED file containing gene intervals - --tss_bed [file] Path to BED file containing transcription start sites - --macs_gsize [str] Effective genome size parameter required by MACS2. If using iGenomes config, values have only been provided when --genome is set as GRCh37, GRCm38, hg19, mm10, BDGP6 and WBcel235 - --blacklist [file] Path to blacklist regions (.BED format), used for filtering alignments - --mito_name [str] Name of Mitochondrial chomosome in genome fasta (e.g. chrM). Reads aligning to this contig are filtered out - --save_reference [bool] If generated by the pipeline save the BWA index in the results directory + --genome [str] Name of iGenomes reference (Default: false) + --bwa_index [file] Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa (Default: false) + --gene_bed [file] Path to BED file containing gene intervals (Default: false) + --tss_bed [file] Path to BED file containing transcription start sites (Default: false) + --macs_gsize [str] Effective genome size parameter required by MACS2. If using iGenomes config, values have only been provided when --genome is set as GRCh37, GRCm38, hg19, mm10, BDGP6 and WBcel235 (Default: false) + --blacklist [file] Path to blacklist regions (.BED format), used for filtering alignments (Default: false) + --mito_name [str] Name of Mitochondrial chomosome in genome fasta (e.g. chrM). Reads aligning to this contig are filtered out (Default: false) + --save_reference [bool] If generated by the pipeline save the BWA index in the results directory (Default: false) Trimming --clip_r1 [int] Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads) (Default: 0) @@ -47,46 +47,46 @@ def helpMessage() { --three_prime_clip_r1 [int] Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed (Default: 0) --three_prime_clip_r2 [int] Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed (Default: 0) --trim_nextseq [int] Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails (Default: 0) - --skip_trimming [bool] Skip the adapter trimming step - --save_trimmed [bool] Save the trimmed FastQ files in the results directory + --skip_trimming [bool] Skip the adapter trimming step (Default: false) + --save_trimmed [bool] Save the trimmed FastQ files in the results directory (Default: false) Alignments - --keep_mito [bool] Reads mapping to mitochondrial contig are not filtered from alignments - --keep_dups [bool] Duplicate reads are not filtered from alignments - --keep_multi_map [bool] Reads mapping to multiple locations are not filtered from alignments - --skip_merge_replicates [bool] Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries - --save_align_intermeds [bool] Save the intermediate BAM files from the alignment step - not done by default + --keep_mito [bool] Reads mapping to mitochondrial contig are not filtered from alignments (Default: false) + --keep_dups [bool] Duplicate reads are not filtered from alignments (Default: false) + --keep_multi_map [bool] Reads mapping to multiple locations are not filtered from alignments (Default: false) + --skip_merge_replicates [bool] Do not perform alignment merging and downstream analysis by merging replicates i.e. only do this by merging resequenced libraries (Default: false) + --save_align_intermeds [bool] Save the intermediate BAM files from the alignment step - not done by default (Default: false) Peaks - --narrow_peak [bool] Run MACS2 in narrowPeak mode + --narrow_peak [bool] Run MACS2 in narrowPeak mode (Default: false) --broad_cutoff [float] Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified (Default: 0.1) --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) - --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads - --skip_peak_qc [bool] Skip MACS2 peak QC plot generation - --skip_peak_annotation [bool] Skip annotation of MACS2 and consensus peaks with HOMER - --skip_consensus_peaks [bool] Skip consensus peak generation + --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads (Default: false) + --skip_peak_qc [bool] Skip MACS2 peak QC plot generation (Default: false) + --skip_peak_annotation [bool] Skip annotation of MACS2 and consensus peaks with HOMER (Default: false) + --skip_consensus_peaks [bool] Skip consensus peak generation (Default: false) Differential analysis - --deseq2_vst [bool] Use vst transformation instead of rlog with DESeq2 - --skip_diff_analysis [bool] Skip differential accessibility analysis + --deseq2_vst [bool] Use vst transformation instead of rlog with DESeq2 (Default: false) + --skip_diff_analysis [bool] Skip differential accessibility analysis (Default: false) QC - --skip_fastqc [bool] Skip FastQC - --skip_picard_metrics [bool] Skip Picard CollectMultipleMetrics - --skip_preseq [bool] Skip Preseq - --skip_plot_profile [bool] Skip deepTools plotProfile - --skip_plot_fingerprint [bool] Skip deepTools plotFingerprint - --skip_ataqv [bool] Skip Ataqv - --skip_igv [bool] Skip IGV - --skip_multiqc [bool] Skip MultiQC + --skip_fastqc [bool] Skip FastQC (Default: false) + --skip_picard_metrics [bool] Skip Picard CollectMultipleMetrics (Default: false) + --skip_preseq [bool] Skip Preseq (Default: false) + --skip_plot_profile [bool] Skip deepTools plotProfile (Default: false) + --skip_plot_fingerprint [bool] Skip deepTools plotFingerprint (Default: false) + --skip_ataqv [bool] Skip Ataqv (Default: false) + --skip_igv [bool] Skip IGV (Default: false) + --skip_multiqc [bool] Skip MultiQC (Default: false) Other - --outdir [file] The output directory where the results will be saved + --outdir [file] The output directory where the results will be saved (Default: './results') --publish_dir_mode [str] Mode for publishing results in the output directory. Available: symlink, rellink, link, copy, copyNoFollow, move (Default: copy) - --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits - --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful - --max_multiqc_email_size [str] Theshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) - -name [str] Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic + --email [email] Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits (Default: false) + --email_on_fail [email] Same as --email, except only send mail if the workflow is not successful (Default: false) + --max_multiqc_email_size [str] Threshold size for MultiQC report to be attached in notification email. If file generated by pipeline exceeds the threshold, it will not be attached (Default: 25MB) + -name [str] Name for the pipeline run. If not specified, Nextflow will automatically generate a random mnemonic (Default: false) AWSBatch --awsqueue [str] The AWSBatch JobQueue that needs to be set when running on AWSBatch From 892994c669c7a2bd8e6208f0bcf976118a426926 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 17:01:57 +0100 Subject: [PATCH 186/226] Add plotHeatmap --- docs/output.md | 2 +- main.nf | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index a2f40add..417be661 100755 --- a/docs/output.md +++ b/docs/output.md @@ -140,7 +140,7 @@ The library-level alignments associated with the same sample are merged and subs * `bwa/mergedLibrary/deepTools/plotFingerprint/` * Output files: `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt` * `bwa/mergedLibrary/deepTools/plotProfile/` - * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`. + * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`, `*.plotHeatmap.pdf`, `*.plotHeatmap.mat.tab`. 4. **Call peaks** diff --git a/main.nf b/main.nf index 624921a8..1f040e2a 100644 --- a/main.nf +++ b/main.nf @@ -1000,7 +1000,7 @@ process MERGED_LIB_BIGWIG { } /* - * STEP 5.4: Generate gene body coverage plot with deepTools plotProfile + * STEP 5.4: Generate gene body coverage plot with deepTools plotProfile and plotHeatmap */ process MERGED_LIB_PLOTPROFILE { tag "$name" @@ -1036,6 +1036,10 @@ process MERGED_LIB_PLOTPROFILE { plotProfile --matrixFile ${prefix}.computeMatrix.mat.gz \\ --outFileName ${prefix}.plotProfile.pdf \\ --outFileNameData ${prefix}.plotProfile.tab + + plotHeatmap --matrixFile ${prefix}.computeMatrix.mat.gz \\ + --outFileName ${prefix}.plotHeatmap.pdf \\ + --outFileNameMatrix ${prefix}.plotHeatmap.mat.tab """ } From 77444f5aaa1ab6bc36ff713d94dacdb0f27395cc Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 2 Jun 2020 17:09:31 +0100 Subject: [PATCH 187/226] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d563c140..7d4aba66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? +* [nf-core/chipseq#153](https://github.com/nf-core/chipseq/issues/153) - Add plotHeatmap * Update template to tools `1.9` +* Replace `set` with `tuple` and `file()` with `path()` in all processes * Capitalise process names * Parameters: * `--skip_peak_qc` to skip MACS2 peak QC plot generation From bab37700defd89c4897f0f982f03250b887642f2 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 3 Jun 2020 09:46:27 +0100 Subject: [PATCH 188/226] Update AWS tests --- .github/workflows/awstest.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index af704a87..c315d213 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -6,6 +6,7 @@ on: push: branches: - master + - dev release: types: [published] From 475ffb1128f857b308252cd903b27222b9088dc8 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 3 Jun 2020 10:22:09 +0100 Subject: [PATCH 189/226] Remove dev test --- .github/workflows/awstest.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index c315d213..af704a87 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -6,7 +6,6 @@ on: push: branches: - master - - dev release: types: [published] From 0835128f4c28d6494fbdbb58df304a5528cd0b8e Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 3 Jun 2020 10:22:40 +0100 Subject: [PATCH 190/226] Use hg38 --- conf/test_full.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 94cd8e5e..e380e9c9 100755 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -13,7 +13,7 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design_full.csv' - + // Genome references - genome = 'hg19' + genome = 'hg38' } From a3c459be79b712d2541fd853cc7607261f82a265 Mon Sep 17 00:00:00 2001 From: ggabernet Date: Tue, 16 Jun 2020 11:56:49 +0200 Subject: [PATCH 191/226] update awstest workflows --- .github/workflows/awsfulltest.yml | 36 +++++++++++++++ .github/workflows/awstest.yml | 75 ++++++++++++++++--------------- 2 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 .github/workflows/awsfulltest.yml diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml new file mode 100644 index 00000000..82098edf --- /dev/null +++ b/.github/workflows/awsfulltest.yml @@ -0,0 +1,36 @@ +name: nf-core AWS full size tests +# This workflow is triggered on releases. +# It runs the -profile 'test_full' on AWS batch + +on: + release: + types: [published] + +jobs: + run-awstest: + if: github.repository == 'nf-core/atacseq' + name: Run AWS test + runs-on: ubuntu-latest + steps: + - name: Setup Miniconda + uses: goanpeca/setup-miniconda@v1.0.2 + with: + auto-update-conda: true + python-version: 3.7 + - name: Install awscli + run: conda install -c conda-forge awscli + - name: Start AWS batch job + env: + AWS_ACCESS_KEY_ID: ${{secrets.AWSTEST_KEY_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.AWSTEST_KEY_SECRET}} + TOWER_ACCESS_TOKEN: ${{secrets.AWSTEST_TOWER_TOKEN}} + #AWS_JOB_DEFINITION: ${{secrets.AWS_JOB_DEFINITION}} + AWS_JOB_QUEUE: ${{secrets.AWS_JOB_QUEUE}} + AWS_S3_BUCKET: ${{secrets.AWS_S3_BUCKET}} + run: | # Submits job to AWS batch using a 'nextflow-4GiB' job definition. Setting JVM options to "-XX:+UseG1GC" for more efficient garbage collection when staging remote files. + aws batch submit-job \ + --region eu-west-1 \ + --job-name nf-core-atacseq \ + --job-queue $AWS_JOB_QUEUE \ + --job-definition nextflow-4GiB \ + --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index c315d213..c6923404 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -1,37 +1,38 @@ -name: nf-core AWS test -# This workflow is triggered on PRs to the master branch. -# It runs the -profile 'test_full' on AWS batch - -on: - push: - branches: - - master - - dev - release: - types: [published] - -jobs: - run-awstest: - if: github.repository == 'nf-core/atacseq' - name: Run AWS test - runs-on: ubuntu-latest - steps: - - name: Setup Miniconda - uses: goanpeca/setup-miniconda@v1.0.2 - with: - auto-update-conda: true - python-version: 3.7 - - name: Install awscli - run: conda install -c conda-forge awscli - - name: Start AWS batch job - env: - AWS_ACCESS_KEY_ID: ${{secrets.AWS_KEY_ID}} - AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_KEY_SECRET}} - TOWER_ACCESS_TOKEN: ${{secrets.TOWER_ACCESS_TOKEN}} - run: | # Submits job to AWS batch using a 'nextflow-4GiB' instance. Setting JVM options to "-XX:+UseG1GC" for more efficient garbage collection when staging remote files. - aws batch submit-job \ - --region eu-west-1 \ - --job-name nf-core-atacseq \ - --job-queue 'default-8b3836e0-5eda-11ea-96e5-0a2c3f6a2a32' \ - --job-definition nextflow-4GiB \ - --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' +name: nf-core AWS test +# This workflow is triggered on push to master branch. +# It runs the -profile 'test' on AWS batch + +on: + push: + branches: + - master + - dev # just for testing purposes, to be removed + +jobs: + run-awstest: + if: github.repository == 'nf-core/atacseq' + name: Run AWS test + runs-on: ubuntu-latest + steps: + - name: Setup Miniconda + uses: goanpeca/setup-miniconda@v1.0.2 + with: + auto-update-conda: true + python-version: 3.7 + - name: Install awscli + run: conda install -c conda-forge awscli + - name: Start AWS batch job + env: + AWS_ACCESS_KEY_ID: ${{secrets.AWSTEST_KEY_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.AWSTEST_KEY_SECRET}} + TOWER_ACCESS_TOKEN: ${{secrets.AWSTEST_TOWER_TOKEN}} + #AWS_JOB_DEFINITION: ${{secrets.AWS_JOB_DEFINITION}} + AWS_JOB_QUEUE: ${{secrets.AWS_JOB_QUEUE}} + AWS_S3_BUCKET: ${{secrets.AWS_S3_BUCKET}} + run: | # Submits job to AWS batch using a 'nextflow-4GiB' job definition. Setting JVM options to "-XX:+UseG1GC" for more efficient garbage collection when staging remote files. + aws batch submit-job \ + --region eu-west-1 \ + --job-name nf-core-atacseq \ + --job-queue $AWS_JOB_QUEUE \ + --job-definition nextflow-4GiB \ + --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' From 6c8cef753a1cbb004507003497460cdd2b112daf Mon Sep 17 00:00:00 2001 From: ggabernet Date: Tue, 16 Jun 2020 17:16:58 +0200 Subject: [PATCH 192/226] update awstest --- .github/workflows/awstest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index c6923404..56488beb 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -1,5 +1,5 @@ name: nf-core AWS test -# This workflow is triggered on push to master branch. +# This workflow is triggered on push to the master branch. # It runs the -profile 'test' on AWS batch on: From a21890e3a75ca4d9dd38ee492de610c35dab8071 Mon Sep 17 00:00:00 2001 From: ggabernet Date: Tue, 16 Jun 2020 17:22:18 +0200 Subject: [PATCH 193/226] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d4aba66..1a13e46e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [nf-core/chipseq#154](https://github.com/nf-core/chipseq/issues/154) - computeMatrix.val.mat.gz files not zipped * Make executables in `bin/` compatible with Python 3 +* [#110](https://github.com/nf-core/atacseq/pull/110) - updated AWS test GitHub actions ### `Dependencies` From 229537f76403d91597ea86234703fb7262145dc6 Mon Sep 17 00:00:00 2001 From: ggabernet Date: Tue, 16 Jun 2020 19:49:59 +0200 Subject: [PATCH 194/226] awstest s3 bucket var --- .github/workflows/awstest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 56488beb..0bf1ae3c 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -35,4 +35,4 @@ jobs: --job-name nf-core-atacseq \ --job-queue $AWS_JOB_QUEUE \ --job-definition nextflow-4GiB \ - --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' + --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://'"${AWS_S3_BUCKET}"'/atacseq/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' From 074bb151321d6a5631400dda25488209974912ee Mon Sep 17 00:00:00 2001 From: ggabernet Date: Wed, 17 Jun 2020 23:01:14 +0200 Subject: [PATCH 195/226] aws test update secrets names --- .github/workflows/awsfulltest.yml | 8 ++++---- .github/workflows/awstest.yml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 82098edf..15f940dd 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -21,9 +21,9 @@ jobs: run: conda install -c conda-forge awscli - name: Start AWS batch job env: - AWS_ACCESS_KEY_ID: ${{secrets.AWSTEST_KEY_ID}} - AWS_SECRET_ACCESS_KEY: ${{secrets.AWSTEST_KEY_SECRET}} - TOWER_ACCESS_TOKEN: ${{secrets.AWSTEST_TOWER_TOKEN}} + AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}} + TOWER_ACCESS_TOKEN: ${{secrets.AWS_TOWER_TOKEN}} #AWS_JOB_DEFINITION: ${{secrets.AWS_JOB_DEFINITION}} AWS_JOB_QUEUE: ${{secrets.AWS_JOB_QUEUE}} AWS_S3_BUCKET: ${{secrets.AWS_S3_BUCKET}} @@ -33,4 +33,4 @@ jobs: --job-name nf-core-atacseq \ --job-queue $AWS_JOB_QUEUE \ --job-definition nextflow-4GiB \ - --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://nf-core-awsmegatests/atacseq/results-'"${GITHUB_SHA}"' -w s3://nf-core-awsmegatests/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' + --container-overrides '{"command": ["nf-core/atacseq", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://'"${AWS_S3_BUCKET}"'/atacseq/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/atacseq/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}, {"name": "NXF_OPTS", "value": "-XX:+UseG1GC"}]}' diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 0bf1ae3c..fae13576 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -23,9 +23,9 @@ jobs: run: conda install -c conda-forge awscli - name: Start AWS batch job env: - AWS_ACCESS_KEY_ID: ${{secrets.AWSTEST_KEY_ID}} - AWS_SECRET_ACCESS_KEY: ${{secrets.AWSTEST_KEY_SECRET}} - TOWER_ACCESS_TOKEN: ${{secrets.AWSTEST_TOWER_TOKEN}} + AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}} + TOWER_ACCESS_TOKEN: ${{secrets.AWS_TOWER_TOKEN}} #AWS_JOB_DEFINITION: ${{secrets.AWS_JOB_DEFINITION}} AWS_JOB_QUEUE: ${{secrets.AWS_JOB_QUEUE}} AWS_S3_BUCKET: ${{secrets.AWS_S3_BUCKET}} From 04c3dd53ba4000c682c1b2ef77676ac6dc5f357d Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Wed, 24 Jun 2020 08:24:18 +0200 Subject: [PATCH 196/226] Remove required group --- nextflow_schema.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 83c5b73e..c9174afd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -535,6 +535,5 @@ }, "fa_icon": "fas fa-file-import" } - }, - "required": ["Input/output options"] + } } From 27fd7b1b2287247ad30d868cabf4919a582decda Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Thu, 25 Jun 2020 11:03:05 +0200 Subject: [PATCH 197/226] Remove default value from schema for required input --- nextflow_schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index c9174afd..b8f88985 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,6 @@ "properties": { "input": { "type": "string", - "default": "./design.csv", "description": "Comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input).", "fa_icon": "fas fa-file-csv" From 379e4841d5650ed1d3789dd35a371df3d4883a6c Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Sat, 27 Jun 2020 01:05:12 +0200 Subject: [PATCH 198/226] Added additional parameters to the JSON schema --- nextflow_schema.json | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index b8f88985..5d739279 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,7 @@ "properties": { "input": { "type": "string", - "description": "Comma-separated file containing information about the samples in the experiment.", + "description": "Path to comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row. See [usage docs](https://nf-co.re/atacseq/docs/usage#--input).", "fa_icon": "fas fa-file-csv" }, @@ -35,7 +35,7 @@ }, "outdir": { "type": "string", - "description": "The output directory where the results will be saved.", + "description": "Path to the output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open", "help_text": "" @@ -76,7 +76,7 @@ }, "bwa_index": { "type": "string", - "description": "Full path to directory containing BWA index including base name i.e. /path/to/index/genome.fa.", + "description": "Full path to directory containing BWA index including base name. i.e. `/path/to/index/genome.fa.`", "fa_icon": "fas fa-bezier-curve", "help_text": "" }, @@ -279,6 +279,13 @@ "description": "Skip consensus peak generation, annotation and counting.", "fa_icon": "fas fa-forward", "help_text": "" + }, + "anno_readme": { + "type": "string", + "description": "Path to annotation readme file from AWS iGenomes", + "hidden": true, + "help_text": "This parameter is typically set within institutional iGenomes config files.", + "fa_icon": "fas fa-file-alt" } }, "fa_icon": "fas fa-chart-area" @@ -348,6 +355,14 @@ "description": "Skip IGV.", "fa_icon": "fas fa-forward" }, + "skip_peak_qc": { + "type": "string", + "fa_icon": "fas fa-forward" + }, + "skip_peak_annotation": { + "type": "string", + "fa_icon": "fas fa-forward" + }, "skip_multiqc": { "type": "boolean", "default": false, @@ -535,4 +550,4 @@ "fa_icon": "fas fa-file-import" } } -} +} \ No newline at end of file From fb4f4d973d1abf2769d09cb2d9ba9751254ebe55 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 11:23:00 +0100 Subject: [PATCH 199/226] Schema edits --- nextflow_schema.json | 79 +++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 5d739279..0a570a76 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -25,7 +25,7 @@ "type": "integer", "default": 0, "description": "Estimated fragment size used to extend single-end reads.", - "fa_icon": "fas fa-align-justify", + "fa_icon": "fas fa-chart-area", "help_text": "" }, "seq_center": { @@ -76,7 +76,7 @@ }, "bwa_index": { "type": "string", - "description": "Full path to directory containing BWA index including base name. i.e. `/path/to/index/genome.fa.`", + "description": "Full path to directory containing BWA index including base name. i.e. `/path/to/index/genome.fa`.", "fa_icon": "fas fa-bezier-curve", "help_text": "" }, @@ -102,7 +102,7 @@ "type": "string", "description": "Path to blacklist regions in BED format, used for filtering alignments.", "help_text": "If provided, alignments that overlap with the regions in this file will be filtered out (see [ENCODE blacklists](https://sites.google.com/site/anshulkundaje/projects/blacklists)). The file should be in BED format. Blacklisted regions for *GRCh37*, *GRCh38*, *GRCm38*, *hg19*, *hg38*, *mm10* are bundled with the pipeline in the [`blacklists`](../assets/blacklists/) directory, and as such will be automatically used if any of those genomes are specified with the `--genome` parameter.", - "fa_icon": "fas fa-clipboard-list" + "fa_icon": "fas fa-book-dead" }, "mito_name": { "type": "string", @@ -273,19 +273,24 @@ "fa_icon": "fas fa-save", "help_text": "" }, + "skip_peak_qc": { + "type": "boolean", + "fa_icon": "fas fa-forward", + "description": "Skip MACS2 peak QC plot generation.", + "default": false + }, + "skip_peak_annotation": { + "type": "boolean", + "fa_icon": "fas fa-forward", + "description": "Skip annotation of MACS2 and consensus peaks with HOMER.", + "default": false + }, "skip_consensus_peaks": { "type": "boolean", "default": false, "description": "Skip consensus peak generation, annotation and counting.", "fa_icon": "fas fa-forward", "help_text": "" - }, - "anno_readme": { - "type": "string", - "description": "Path to annotation readme file from AWS iGenomes", - "hidden": true, - "help_text": "This parameter is typically set within institutional iGenomes config files.", - "fa_icon": "fas fa-file-alt" } }, "fa_icon": "fas fa-chart-area" @@ -355,14 +360,6 @@ "description": "Skip IGV.", "fa_icon": "fas fa-forward" }, - "skip_peak_qc": { - "type": "string", - "fa_icon": "fas fa-forward" - }, - "skip_peak_annotation": { - "type": "string", - "fa_icon": "fas fa-forward" - }, "skip_multiqc": { "type": "boolean", "default": false, @@ -458,21 +455,20 @@ "help": { "type": "boolean", "description": "Display help text.", - "hidden": true, "fa_icon": "fas fa-question-circle", - "default": false + "default": false, + "hidden": true }, "fingerprint_bins": { "type": "integer", "default": 500000, - "hidden": true, "description": "Number of genomic bins to use when calculating deepTools fingerprint plot.", - "fa_icon": "fas fa-dumpster" + "fa_icon": "fas fa-dumpster", + "hidden": true }, "publish_dir_mode": { "type": "string", "default": "copy", - "hidden": true, "description": "Method used to save pipeline results to output directory.", "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", "fa_icon": "fas fa-copy", @@ -483,68 +479,69 @@ "copy", "copyNoFollow", "mov" - ] + ], + "hidden": true }, "name": { "type": "string", "description": "Workflow name.", - "fa_icon": "fas fa-fingerprint", - "hidden": true, - "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles." + "fa_icon": "fas fa-address-card", + "help_text": "A custom name for the pipeline run. Unlike the core nextflow `-name` option with one hyphen this parameter can be reused multiple times, for example if using `-resume`. Passed through to steps such as MultiQC and used for things like report filenames and titles.", + "hidden": true }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "hidden": true, - "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully." + "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", + "hidden": true }, "plaintext_email": { "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", - "hidden": true, "default": false, - "help_text": "" + "help_text": "", + "hidden": true }, "max_multiqc_email_size": { "type": "string", "description": "File size limit when attaching MultiQC reports to summary emails.", "default": "25.MB", "fa_icon": "fas fa-file-upload", - "hidden": true, - "help_text": "" + "help_text": "", + "hidden": true }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", - "hidden": true, "default": false, - "help_text": "" + "help_text": "", + "hidden": true }, "multiqc_config": { "type": "string", "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", - "hidden": true, - "help_text": "" + "help_text": "", + "hidden": true }, "tracedir": { "type": "string", "description": "Directory to keep pipeline Nextflow logs and reports.", "default": "${params.outdir}/pipeline_info", "fa_icon": "fas fa-cogs", - "hidden": true, - "help_text": "" + "help_text": "", + "hidden": true }, "clusterOptions": { "type": "string", "description": "Arguments passed to Nextflow clusterOptions.", - "hidden": true, "fa_icon": "fas fa-network-wired", - "help_text": "" + "help_text": "", + "hidden": true } }, "fa_icon": "fas fa-file-import" From 379786646dea72d2e09119a9b0cecf6992cdc6c9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 13:08:21 +0100 Subject: [PATCH 200/226] Update to latest on tools:dev --- .github/workflows/ci.yml | 105 +++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 15 deletions(-) mode change 100644 => 100755 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml old mode 100644 new mode 100755 index 86b5670e..675965f5 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,50 +1,125 @@ name: nf-core CI -# This workflow is triggered on pushes and PRs to the repository. +# This workflow is triggered on releases and pull-requests. # It runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: [push, pull_request] +on: + push: + branches: + - dev + pull_request: + release: + types: [published] jobs: test: + name: Run workflow tests + # Only run on push if this is the nf-core dev branch (merged PRs) + if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/atacseq') }} + runs-on: ubuntu-latest env: NXF_VER: ${{ matrix.nxf_ver }} NXF_ANSI_LOG: false - runs-on: ubuntu-latest strategy: matrix: # Nextflow versions: check pipeline minimum and current latest nxf_ver: ['19.10.0', ''] steps: - - uses: actions/checkout@v2 - - name: Install Nextflow - run: | - wget -qO- get.nextflow.io | bash - sudo mv nextflow /usr/local/bin/ + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Check if Dockerfile or Conda environment changed + uses: technote-space/get-diff-action@v1 + with: + PREFIX_FILTER: | + Dockerfile + environment.yml + + - name: Build new docker image + if: env.GIT_DIFF + run: docker build --no-cache . -t nfcore/atacseq:dev + - name: Pull docker image + if: ${{ !env.GIT_DIFF }} run: | docker pull nfcore/atacseq:dev docker tag nfcore/atacseq:dev nfcore/atacseq:dev + + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker parameters: + name: Test workflow parameters + if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/atacseq') }} + runs-on: ubuntu-latest env: NXF_VER: '19.10.0' NXF_ANSI_LOG: false - runs-on: ubuntu-latest strategy: matrix: parameters: [--single_end, --skip_trimming, --skip_merge_replicates, --skip_consensus_peaks] steps: - - uses: actions/checkout@v2 - - name: Install Nextflow - run: | - wget -qO- get.nextflow.io | bash - sudo mv nextflow /usr/local/bin/ + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Check if Dockerfile or Conda environment changed + uses: technote-space/get-diff-action@v1 + with: + PREFIX_FILTER: | + Dockerfile + environment.yml + + - name: Build new docker image + if: env.GIT_DIFF + run: docker build --no-cache . -t nfcore/atacseq:dev + - name: Pull docker image + if: ${{ !env.GIT_DIFF }} run: | docker pull nfcore/atacseq:dev docker tag nfcore/atacseq:dev nfcore/atacseq:dev - - name: Run pipeline with various options + + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + + - name: Run pipeline with various parameters run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker ${{ matrix.parameters }} + + push_dockerhub: + name: Push new Docker image to Docker Hub + runs-on: ubuntu-latest + # Only run if the tests passed + needs: test + # Only run for the nf-core repo, for releases and merged PRs + if: ${{ github.repository == 'nf-core/atacseq' && (github.event_name == 'release' || github.event_name == 'push') }} + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_PASS: ${{ secrets.DOCKERHUB_PASS }} + steps: + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Build new docker image + run: docker build --no-cache . -t nfcore/atacseq:latest + + - name: Push Docker image to DockerHub (dev) + if: ${{ github.event_name == 'push' }} + run: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker tag nfcore/atacseq:latest nfcore/atacseq:dev + docker push nfcore/atacseq:dev + + - name: Push Docker image to DockerHub (release) + if: ${{ github.event_name == 'release' }} + run: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push nfcore/atacseq:latest + docker tag nfcore/atacseq:latest nfcore/atacseq:${{ github.event.release.tag_name }} + docker push nfcore/atacseq:${{ github.event.release.tag_name }} From aacb29ebf8dbf436aab869f67f3c9dae61413dea Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 13:08:29 +0100 Subject: [PATCH 201/226] Update to latest on tools:dev --- .github/workflows/linting.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) mode change 100644 => 100755 .github/workflows/linting.yml diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml old mode 100644 new mode 100755 index 1e0827a8..eb66c144 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -33,18 +33,29 @@ jobs: nf-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + + - name: Check out pipeline code + uses: actions/checkout@v2 + - name: Install Nextflow run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + - uses: actions/setup-python@v1 with: python-version: '3.6' architecture: 'x64' + - name: Install dependencies run: | python -m pip install --upgrade pip pip install nf-core + - name: Run nf-core lint + env: + GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} run: nf-core lint ${GITHUB_WORKSPACE} + From 06cc09236696251a0d87245ea79b6b0c5c402777 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 13:23:36 +0100 Subject: [PATCH 202/226] Add Slack badge --- README.md | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index d9ae7a95..28121d11 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@ [![GitHub Actions CI Status](https://github.com/nf-core/atacseq/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/atacseq/actions) [![GitHub Actions Linting Status](https://github.com/nf-core/atacseq/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/atacseq/actions) [![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A519.10.0-brightgreen.svg)](https://www.nextflow.io/) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2634132.svg)](https://doi.org/10.5281/zenodo.2634132) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](http://bioconda.github.io/) [![Docker](https://img.shields.io/docker/automated/nfcore/atacseq.svg)](https://hub.docker.com/r/nfcore/atacseq) -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2634132.svg)](https://doi.org/10.5281/zenodo.2634132) +![[Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23atacseq-4A154B?logo=slack)](https://nfcore.slack.com/channels/atacseq) ## Introduction @@ -59,23 +60,23 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool ## Quick Start -i. Install [`nextflow`](https://nf-co.re/usage/installation) +1. Install [`nextflow`](https://nf-co.re/usage/installation) -ii. Install either [`Docker`](https://docs.docker.com/engine/installation/) or [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) for full pipeline reproducibility (please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles)) +2. Install either [`Docker`](https://docs.docker.com/engine/installation/) or [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ -iii. Download the pipeline and test it on a minimal dataset with a single command +3. Download the pipeline and test it on a minimal dataset with a single command: -```bash -nextflow run nf-core/atacseq -profile test, -``` + ```bash + nextflow run nf-core/atacseq -profile test, + ``` -> Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. + > Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. -iv. Start running your own analysis! +4. Start running your own analysis! -```bash -nextflow run nf-core/atacseq -profile --input design.csv --genome GRCh37 -``` + ```bash + nextflow run nf-core/atacseq -profile --input design.csv --genome GRCh37 + ``` See [usage docs](docs/usage.md) for all of the available options when running the pipeline. @@ -98,20 +99,20 @@ The pipeline was originally written by [The Bioinformatics & Biostatistics Group The pipeline was developed by [Harshil Patel](mailto:harshil.patel@crick.ac.uk). -The [nf-core/rnaseq](https://github.com/nf-core/rnaseq) and [nf-core/chipseq](https://github.com/nf-core/chipseq) pipelines developed by Phil Ewels were initially used as a template for this pipeline. Many thanks to Phil for all of his help and advice, and the team at SciLifeLab. - -Many thanks to others who have helped out and contributed along the way too, including (but not limited to): [@apeltzer](https://github.com/apeltzer), [@crickbabs](https://github.com/crickbabs), [drewjbeh](https://github.com/drewjbeh), [@houghtos](https://github.com/houghtos), [@jinmingda](https://github.com/jinmingda), [@ktrns](https://github.com/ktrns), [@MaxUlysse](https://github.com/MaxUlysse), [@mashehu](https://github.com/mashehu), [@micans](https://github.com/micans), [@pditommaso](https://github.com/pditommaso) and [@sven1103](https://github.com/sven1103). +Many thanks to others who have helped out and contributed along the way too, including (but not limited to): [@ewels](https://github.com/ewels), [@apeltzer](https://github.com/apeltzer), [@crickbabs](https://github.com/crickbabs), [drewjbeh](https://github.com/drewjbeh), [@houghtos](https://github.com/houghtos), [@jinmingda](https://github.com/jinmingda), [@ktrns](https://github.com/ktrns), [@MaxUlysse](https://github.com/MaxUlysse), [@mashehu](https://github.com/mashehu), [@micans](https://github.com/micans), [@pditommaso](https://github.com/pditommaso) and [@sven1103](https://github.com/sven1103). ## Contributions and Support If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). -For further information or help, don't hesitate to get in touch on [Slack](https://nfcore.slack.com/channels/atacseq) (you can join with [this invite](https://nf-co.re/join/slack)). +For further information or help, don't hesitate to get in touch on the [Slack `#atacseq` channel](https://nfcore.slack.com/channels/atacseq) (you can join with [this invite](https://nf-co.re/join/slack)). ## Citation If you use nf-core/atacseq for your analysis, please cite it using the following doi: [10.5281/zenodo.2634132](https://doi.org/10.5281/zenodo.2634132) +An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. + You can cite the `nf-core` publication as follows: > **The nf-core framework for community-curated bioinformatics pipelines.** @@ -120,5 +121,3 @@ You can cite the `nf-core` publication as follows: > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). > ReadCube: [Full Access Link](https://rdcu.be/b1GjZ) - -An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. From b326f5be69b201962ef3c3cd0df63cc738dadc9e Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 14:42:10 +0100 Subject: [PATCH 203/226] Relax linting --- .github/markdownlint.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index 96b12a70..9aae63a0 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -1,5 +1,9 @@ -# Markdownlint configuration file -default: true, -line-length: false -no-duplicate-header: - siblings_only: true +# Markdownlint configuration file +default: true, +line-length: false +no-duplicate-header: + siblings_only: true +MD033: + allowed_elements: [details, summary] +MD007: + indent: 4 From 647a093440db5d5074052ededd1efa048c15b57c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 14:42:19 +0100 Subject: [PATCH 204/226] Reorganise docs --- docs/output.md | 418 ++++++++++++++++++++++++------------------------- 1 file changed, 206 insertions(+), 212 deletions(-) diff --git a/docs/output.md b/docs/output.md index 417be661..db87dab3 100755 --- a/docs/output.md +++ b/docs/output.md @@ -1,4 +1,4 @@ -# nf-core/atacseq: Output +# ![nf-core/atacseq](images/nf-core-atacseq_logo.png) This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. @@ -14,326 +14,320 @@ The directories listed below will be created in the output directory after the p The initial QC and alignments are performed at the library-level e.g. if the same library has been sequenced more than once to increase sequencing depth. This has the advantage of being able to assess each library individually, and the ability to process multiple libraries from the same sample in parallel. -1. **Raw read QC** +### Raw read QC - *Documentation*: - [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/) +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). You get information about adapter contamination and other overrepresented sequences. - *Description*: - FastQC gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). You get information about adapter contamination and other overrepresented sequences. +
+ Output files - *Output directories*: - * `fastqc/` - FastQC `*.html` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. - * `fastqc/zips/` - FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. +* `fastqc/` +FastQC `*.html` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. +* `fastqc/zips/` +FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. -2. **Adapter trimming** +
- *Documentation*: - [Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) +### Adapter trimming - *Description*: - Trim Galore! is a wrapper tool around Cutadapt and FastQC to consistently apply quality and adapter trimming to FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. For most ATAC-seq datasets this will be the Nextera adapter sequence 'CTGTCTCTTATA'. See [`usage.md`](usage.md) for more details about the trimming options. +[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to consistently apply quality and adapter trimming to FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. For most ATAC-seq datasets this will be the Nextera adapter sequence 'CTGTCTCTTATA'. See [`usage.md`](usage.md) for more details about the trimming options. - ![MultiQC - Cutadapt trimmed sequence plot](images/mqc_cutadapt_plot.png) +
+ Output files - *Output directories*: - * `trim_galore/` - If `--save_trimmed` is specified FastQ files **after** adapter trimming will be placed in this directory. - * `trim_galore/logs/` - `*.log` files generated by Trim Galore!. - * `trim_galore/fastqc/` - FastQC `*.html` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. - * `trim_galore/fastqc/zips/` - FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. +* `trim_galore/` + If `--save_trimmed` is specified FastQ files **after** adapter trimming will be placed in this directory. +* `trim_galore/logs/` + `*.log` files generated by Trim Galore!. +* `trim_galore/fastqc/` + FastQC `*.html` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. +* `trim_galore/fastqc/zips/` + FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. -3. **Alignment** +
- *Documentation*: - [BWA](http://bio-bwa.sourceforge.net/bwa.shtml), [SAMtools](http://samtools.sourceforge.net/) +![MultiQC - Cutadapt trimmed sequence plot](images/mqc_cutadapt_plot.png) - *Description*: - Adapter-trimmed reads are mapped to the reference assembly using BWA. A genome index is required to run BWA so if this is not provided explicitly using the `--bwa_index` parameter then it will be created automatically from the genome fasta input. The index creation process can take a while for larger genomes so it is possible to use the `--save_reference` parameter to save the indices for future pipeline runs, reducing processing times. +### Alignment - ![MultiQC - SAMtools stats plot](images/mqc_samtools_stats_plot.png) +Adapter-trimmed reads are mapped to the reference assembly using [BWA](http://bio-bwa.sourceforge.net/bwa.shtml). A genome index is required to run BWA so if this is not provided explicitly using the `--bwa_index` parameter then it will be created automatically from the genome fasta input. The index creation process can take a while for larger genomes so it is possible to use the `--save_reference` parameter to save the indices for future pipeline runs, reducing processing times. - ![MultiQC - SAMtools idxstats plot](images/mqc_samtools_idxstats_plot.png) +
+ Output files - File names in the resulting directory (i.e. `bwa/library/`) will have the '`.Lb.`' (**L**i**b**rary) suffix. +* `bwa/library/` + The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--save_align_intermeds` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. +* `bwa/library/samtools_stats/` + SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. - *Output directories*: - * `bwa/library/` - The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--save_align_intermeds` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. - * `bwa/library/samtools_stats/` - SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. +> **NB:** File names in the resulting directory (i.e. `bwa/library/`) will have the '`.Lb.`' suffix. + +
+ +![MultiQC - SAMtools stats plot](images/mqc_samtools_stats_plot.png) + +![MultiQC - SAMtools idxstats plot](images/mqc_samtools_idxstats_plot.png) ## Merged library-level analysis The library-level alignments associated with the same sample are merged and subsequently used for the downstream analyses. -1. **Alignment merging, duplicate marking, filtering and QC** +### Alignment merging, duplicate marking, filtering and QC + +[Picard MergeSamFiles and MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html) are used in combination to merge the alignments, and for the marking of duplicates, respectively. If you only have one library for any given replicate then the merging step isnt carried out because the library-level and merged library-level BAM files will be exactly the same. + +Read duplicate marking is carried out using the Picard MarkDuplicates command. Duplicate reads are generally removed from the aligned reads to mitigate for fragments in the library that may have been sequenced more than once due to PCR biases. There is an option to keep duplicate reads with the `--keep_dups` parameter but its generally recommended to remove them to avoid the wrong interpretation of the results. A similar option has been provided to keep reads that are multi-mapped - `--keep_multi_map`. Other steps have been incorporated into the pipeline to filter the resulting alignments - see [`main README.md`](../README.md) for a more comprehensive listing, and the tools used at each step. A selection of alignment-based QC metrics generated by Picard CollectMultipleMetrics and MarkDuplicates will be included in the MultiQC report. + +Certain cell types and tissues yield an enormous fraction (typically 20–80%) of unusable sequences of mitochondrial origin. This is a known problem that is specific to ATAC-seq library preps - see [Montefiori et al. 2017](https://www.nature.com/articles/s41598-017-02547-w). There is an option to keep these reads using the `--keep_mito` parameter but its generally recommended to remove these in order to get a more reliable assessment of the duplication rate from the rest of the genome, and to avoid any biases in the downstream analyses. - *Documentation*: - [picard](https://broadinstitute.github.io/picard/command-line-overview.html), [SAMtools](http://samtools.sourceforge.net/), [BEDTools](https://bedtools.readthedocs.io/en/latest/), [BAMTools](https://github.com/pezmaster31/bamtools/wiki/Tutorial_Toolkit_BamTools-1.0.pdf), [Pysam](https://pysam.readthedocs.io/en/latest/api.html), [Preseq](http://smithlabresearch.org/software/preseq/) +The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at predicting and estimating the complexity of a genomic sequencing library, equivalent to predicting and estimating the number of redundant reads from a given sequencing depth and how many will be expected from additional sequencing using an initial sequencing experiment. The estimates can then be used to examine the utility of further sequencing, optimize the sequencing depth, or to screen multiple libraries to avoid low complexity samples. The dashed line shows a perfectly complex library where total reads = unique reads. Note that these are predictive numbers only, not absolute. The MultiQC plot can sometimes give extreme sequencing depth on the X axis - click and drag from the left side of the plot to zoom in on more realistic numbers. - *Description*: - Picard MergeSamFiles and MarkDuplicates are used in combination to merge the alignments, and for the marking of duplicates, respectively. If you only have one library for any given replicate then the merging step isnt carried out because the library-level and merged library-level BAM files will be exactly the same. +
+ Output files - Read duplicate marking is carried out using the Picard MarkDuplicates command. Duplicate reads are generally removed from the aligned reads to mitigate for fragments in the library that may have been sequenced more than once due to PCR biases. There is an option to keep duplicate reads with the `--keep_dups` parameter but its generally recommended to remove them to avoid the wrong interpretation of the results. A similar option has been provided to keep reads that are multi-mapped - `--keep_multi_map`. Other steps have been incorporated into the pipeline to filter the resulting alignments - see [`main README.md`](../README.md) for a more comprehensive listing, and the tools used at each step. +* `bwa/mergedLibrary/` + Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--save_align_intermeds` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). +* `bwa/mergedLibrary/samtools_stats/` + SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. +* `bwa/mergedLibrary/picard_metrics/` + Alignment QC files from picard CollectMultipleMetrics and the metrics file from MarkDuplicates: `*_metrics` and `*.metrics.txt`, respectively. +* `bwa/mergedLibrary/picard_metrics/pdf/` + Alignment QC plot files in `*.pdf` format from picard CollectMultipleMetrics. +* `bwa/mergedLibrary/preseq/` + Preseq expected future yield file (`*.ccurve.txt`). - Certain cell types and tissues yield an enormous fraction (typically 20–80%) of unusable sequences of mitochondrial origin. This is a known problem that is specific to ATAC-seq library preps - see [Montefiori et al. 2017](https://www.nature.com/articles/s41598-017-02547-w). There is an option to keep these reads using the `--keep_mito` parameter but its generally recommended to remove these in order to get a more reliable assessment of the duplication rate from the rest of the genome, and to avoid any biases in the downstream analyses. +> **NB:** File names in the resulting directory (i.e. `bwa/mergedLibrary/`) will have the '`.mLb.`' suffix. - A selection of alignment-based QC metrics generated by Picard CollectMultipleMetrics and MarkDuplicates will be included in the MultiQC report. +
- ![MultiQC - Picard deduplication stats plot](images/mqc_picard_deduplication_plot.png) +![MultiQC - Picard deduplication stats plot](images/mqc_picard_deduplication_plot.png) - ![MultiQC - Picard insert size plot](images/mqc_picard_insert_size_plot.png) +![MultiQC - Picard insert size plot](images/mqc_picard_insert_size_plot.png) - The Preseq package is aimed at predicting and estimating the complexity of a genomic sequencing library, equivalent to predicting and estimating the number of redundant reads from a given sequencing depth and how many will be expected from additional sequencing using an initial sequencing experiment. The estimates can then be used to examine the utility of further sequencing, optimize the sequencing depth, or to screen multiple libraries to avoid low complexity samples. The dashed line shows a perfectly complex library where total reads = unique reads. +![MultiQC - Preseq library complexity plot](images/mqc_preseq_plot.png) - Note that these are predictive numbers only, not absolute. The MultiQC plot can sometimes give extreme sequencing depth on the X axis - click and drag from the left side of the plot to zoom in on more realistic numbers. +### Normalised bigWig files - ![MultiQC - Preseq library complexity plot](images/mqc_preseq_plot.png) +The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The coverage values represented in the bigWig file can also be normalised in order to be able to compare the coverage across multiple samples - this is not possible with BAM files. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. - File names in the resulting directory (i.e. `bwa/mergedLibrary/`) will have the '`.mLb.`' suffix to denote **m**erged **L**i**b**raries. +
+ Output files - *Output directories*: - * `bwa/mergedLibrary/` - Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--save_align_intermeds` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). - * `bwa/mergedLibrary/samtools_stats/` - SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. - * `bwa/mergedLibrary/picard_metrics/` - Alignment QC files from picard CollectMultipleMetrics and the metrics file from MarkDuplicates: `*_metrics` and `*.metrics.txt`, respectively. - * `bwa/mergedLibrary/picard_metrics/pdf/` - Alignment QC plot files in `*.pdf` format from picard CollectMultipleMetrics. - * `bwa/mergedLibrary/preseq/` - Preseq expected future yield file (`*.ccurve.txt`). +* `bwa/mergedLibrary/bigwig/` + Normalised `*.bigWig` files scaled to 1 million mapped reads. -2. **Normalised bigWig files** +
- *Documentation*: - [BEDTools](https://bedtools.readthedocs.io/en/latest/), [bedGraphToBigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html#Ex3) +### Coverage QC - *Description*: - The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The coverage values represented in the bigWig file can also be normalised in order to be able to compare the coverage across multiple samples - this is not possible with BAM files. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. +[deepTools](https://deeptools.readthedocs.io/en/develop/content/list_of_tools.html) plotFingerprint is a useful QC for ATAC-seq data in order to see the relative enrichment of the samples in the experiment on a genome-wide basis (see [plotFingerprint docs](https://deeptools.readthedocs.io/en/develop/content/tools/plotFingerprint.html)). - *Output directories*: - * `bwa/mergedLibrary/bigwig/` - Normalised `*.bigWig` files scaled to 1 million mapped reads. +The results from deepTools plotProfile gives you a quick visualisation for the genome-wide enrichment of your samples at the TSS, and across the gene body. During the downstream analysis, you may want to refine the features/genes used to generate these plots in order to see a more specific condition-related effect. -3. **Coverage QC** +
+ Output files - *Documentation*: - [deepTools](https://deeptools.readthedocs.io/en/develop/content/list_of_tools.html) +* `bwa/mergedLibrary/deepTools/plotFingerprint/` + * Output files: `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt` +* `bwa/mergedLibrary/deepTools/plotProfile/` + * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`, `*.plotHeatmap.pdf`, `*.plotHeatmap.mat.tab`. - *Description*: - deepTools plotFingerprint is a useful QC for ATAC-seq data in order to see the relative enrichment of the samples in the experiment on a genome-wide basis (see [plotFingerprint docs](https://deeptools.readthedocs.io/en/develop/content/tools/plotFingerprint.html)). +
- ![MultiQC - deepTools plotFingerprint plot](images/mqc_deeptools_plotFingerprint_plot.png) +![MultiQC - deepTools plotFingerprint plot](images/mqc_deeptools_plotFingerprint_plot.png) - The results from deepTools plotProfile gives you a quick visualisation for the genome-wide enrichment of your samples at the TSS, and across the gene body. During the downstream analysis, you may want to refine the features/genes used to generate these plots in order to see a more specific condition-related effect. +![MultiQC - deepTools plotProfile plot](images/mqc_deeptools_plotProfile_plot.png) - ![MultiQC - deepTools plotProfile plot](images/mqc_deeptools_plotProfile_plot.png) +### Call peaks - *Output directories*: - * `bwa/mergedLibrary/deepTools/plotFingerprint/` - * Output files: `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt` - * `bwa/mergedLibrary/deepTools/plotProfile/` - * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`, `*.plotHeatmap.pdf`, `*.plotHeatmap.mat.tab`. +[MACS2](https://github.com/taoliu/MACS) is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. -4. **Call peaks** +[HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. - *Documentation*: - [MACS2](https://github.com/taoliu/MACS), [HOMER](http://homer.ucsd.edu/homer/ngs/annotation.html) +Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report. - *Description*: - MACS2 is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. +
+ Output files - ![MultiQC - MACS2 total peak count plot](images/mqc_macs2_peak_count_plot.png) +* `bwa/mergedLibrary/macs//` + * MACS2 output files: `*.xls`, `*.broadPeak` or `*.narrowPeak`, `*.gappedPeak` and `*summits.bed`. + The files generated will depend on whether MACS2 has been run in *narrowPeak* or *broadPeak* mode. + * HOMER peak-to-gene annotation file: `*.annotatePeaks.txt`. +* `bwa/mergedLibrary/macs//qc/` + * QC plots for MACS2 peaks: `macs_peak.plots.pdf` + * QC plots for peak-to-gene feature annotation: `macs_annotatePeaks.plots.pdf` + * MultiQC custom-content files for FRiP score, peak count and peak-to-gene ratios: `*.FRiP_mqc.tsv`, `*.count_mqc.tsv` and `macs_annotatePeaks.summary_mqc.tsv` respectively. - [HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. +> **NB:** `` in the directory structure above corresponds to the type of peak that you have specified to call with MACS2 i.e. `broadPeak` or `narrowPeak`. If you so wish, you can call both narrow and broad peaks without redoing the preceding steps in the pipeline such as the alignment and filtering. For example, if you already have broad peaks then just add `--narrow_peak -resume` to the command you used to run the pipeline, and these will be called too! However, resuming the pipeline will only be possible if you have not deleted the `work/` directory generated by the pipeline. - ![MultiQC - HOMER annotatePeaks peak-to-gene feature ratio plot](images/mqc_annotatePeaks_feature_percentage_plot.png) +
- Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report. +![MultiQC - MACS2 total peak count plot](images/mqc_macs2_peak_count_plot.png) - ![MultiQC - MACS2 peaks FRiP score plot](images/mqc_frip_score_plot.png) +![MultiQC - HOMER annotatePeaks peak-to-gene feature ratio plot](images/mqc_annotatePeaks_feature_percentage_plot.png) - `` in the directory structure below corresponds to the type of peak that you have specified to call with MACS2 i.e. `broadPeak` or `narrowPeak`. If you so wish, you can call both narrow and broad peaks without redoing the preceding steps in the pipeline such as the alignment and filtering. For example, if you already have broad peaks then just add `--narrow_peak -resume` to the command you used to run the pipeline, and these will be called too! However, resuming the pipeline will only be possible if you have not deleted the `work/` directory generated by the pipeline. +![MultiQC - MACS2 peaks FRiP score plot](images/mqc_frip_score_plot.png) - *Output directories*: - * `bwa/mergedLibrary/macs//` - * MACS2 output files: `*.xls`, `*.broadPeak` or `*.narrowPeak`, `*.gappedPeak` and `*summits.bed`. - The files generated will depend on whether MACS2 has been run in *narrowPeak* or *broadPeak* mode. - * HOMER peak-to-gene annotation file: `*.annotatePeaks.txt`. - * `bwa/mergedLibrary/macs//qc/` - * QC plots for MACS2 peaks: `macs_peak.plots.pdf` - * QC plots for peak-to-gene feature annotation: `macs_annotatePeaks.plots.pdf` - * MultiQC custom-content files for FRiP score, peak count and peak-to-gene ratios: `*.FRiP_mqc.tsv`, `*.count_mqc.tsv` and `macs_annotatePeaks.summary_mqc.tsv` respectively. +### Create and quantify consensus set of peaks -5. **Create and quantify consensus set of peaks** +In order to perform the differential binding analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. - *Documentation*: - [BEDTools](https://bedtools.readthedocs.io/en/latest/), [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) +Using the consensus peaks it is possible to assess the degree of overlap between the peaks from a set of samples e.g. *Which consensus peaks contain peaks that are common/unique to a given set of samples?*. This may be useful for downstream filtering of peaks based on whether they are called in multiple replicates/conditions. Please note that it is possible for a consensus peak to contain multiple peaks from the same sample. Unfortunately, this is sample-dependent but the files generated by the pipeline do have columns that report such instances and allow you to factor them into any further analysis. - *Description*: - In order to perform the differential binding analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. +By default, the peak-sets are not filtered, therefore, the consensus peaks will be generated across the union set of peaks from all samples. However, you can increment the `--min_reps_consensus` parameter appropriately if you are confident you have good reproducibility amongst your replicates to create a "reproducible" set of consensus of peaks. In future iterations of the pipeline more formal analyses such as [IDR](https://projecteuclid.org/euclid.aoas/1318514284) may be implemented to obtain reproducible and high confidence peak-sets with which to perform this sort of analysis. - Using the consensus peaks it is possible to assess the degree of overlap between the peaks from a set of samples e.g. *Which consensus peaks contain peaks that are common/unique to a given set of samples?*. This may be useful for downstream filtering of peaks based on whether they are called in multiple replicates/conditions. Please note that it is possible for a consensus peak to contain multiple peaks from the same sample. Unfortunately, this is sample-dependent but the files generated by the pipeline do have columns that report such instances and allow you to factor them into any further analysis. +The [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. - By default, the peak-sets are not filtered, therefore, the consensus peaks will be generated across the union set of peaks from all samples. However, you can increment the `--min_reps_consensus` parameter appropriately if you are confident you have good reproducibility amongst your replicates to create a "reproducible" set of consensus of peaks. In future iterations of the pipeline more formal analyses such as [IDR](https://projecteuclid.org/euclid.aoas/1318514284) may be implemented to obtain reproducible and high confidence peak-sets with which to perform this sort of analysis. +
+ Output files - ![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) +* `bwa/mergedLibrary/macs//consensus/` + * Consensus peak-set across all samples in `*.bed` format. + * Consensus peak-set across all samples in `*.saf` format. Required by featureCounts for read quantification. + * `.featureCounts.txt` file for read counts across all samples relative to consensus peak-set. + * HOMER `*.annotatePeaks.txt` peak-to-gene annotation file for consensus peaks. + * Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns: `*.boolean.annotatePeaks.txt`. + The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. + * Spreadsheet representation of consensus peak-set across samples **without** gene annotation columns: `*.boolean.txt`. + Same as file above but without annotation columns. + * [UpSetR](https://cran.r-project.org/web/packages/UpSetR/README.html) files to illustrate peak intersection: `*.boolean.intersect.plot.pdf` and `*.boolean.intersect.txt`. - The featureCounts tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. +
- ![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) +![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) - *Output directories*: - * `bwa/mergedLibrary/macs//consensus/` - * Consensus peak-set across all samples in `*.bed` format. - * Consensus peak-set across all samples in `*.saf` format. Required by featureCounts for read quantification. - * `.featureCounts.txt` file for read counts across all samples relative to consensus peak-set. - * HOMER `*.annotatePeaks.txt` peak-to-gene annotation file for consensus peaks. - * Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns: `*.boolean.annotatePeaks.txt`. - The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. - * Spreadsheet representation of consensus peak-set across samples **without** gene annotation columns: `*.boolean.txt`. - Same as file above but without annotation columns. - * [UpSetR](https://cran.r-project.org/web/packages/UpSetR/README.html) files to illustrate peak intersection: `*.boolean.intersect.plot.pdf` and `*.boolean.intersect.txt`. +![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) -6. **Read counting and differential binding analysis** +### Read counting and differential binding analysis - *Documentation*: - [DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html), [R](https://www.r-project.org/) +[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. - *Description*: - DESeq2 is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. +This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. - This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. +By default, all possible pairwise comparisons across the groups from a particular antibody (as defined in [`design.csv`](usage.md#--design)) are performed. The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. - ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) +
+ Output files - ![MultiQC - DESeq2 sample similarity plot](images/mqc_deseq2_sample_similarity_plot.png) +* `bwa/mergedLibrary/macs//consensus//deseq2/` + * Differential binding `*.results.txt` spreadsheet containing results across all consensus peaks and all comparisons. + * `*.plots.pdf` file for PCA and hierarchical clustering. + * `*.log` file with information for number of differentially bound intervals at different FDR and fold-change thresholds for each comparison. + * `*.dds.rld.RData` file containing R `dds` and `rld` objects generated by DESeq2. + * `R_sessionInfo.log` file containing information about R, the OS and attached or loaded packages. +* `bwa/mergedLibrary/macs//consensus///` + * `*.results.txt` spreadsheet containing comparison-specific DESeq2 output for differential binding results across all peaks. + * Subset of above file for peaks that pass FDR <= 0.01 (`*FDR0.01.results.txt`) and FDR <= 0.05 (`*FDR0.05.results.txt`). + * BED files for peaks that pass FDR <= 0.01 (`*FDR0.01.results.bed`) and FDR <= 0.05 (`*FDR0.05.results.bed`). + * MA, Volcano, clustering and scatterplots at FDR <= 0.01 and FDR <= 0.05: `*deseq2.plots.pdf`. +* `bwa/mergedLibrary/macs//consensus//sizeFactors/` + Files containing DESeq2 sizeFactors per sample: `*.txt` and `*.RData`. - By default, all possible pairwise comparisons across the groups from a particular antibody (as defined in [`design.csv`](usage.md#--design)) are performed. The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. +
- ![R - DESeq2 MA plot](images/r_deseq2_ma_plot.png) +![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) - ![R - DESeq2 Volcano plot](images/r_deseq2_volcano_plot.png) +![MultiQC - DESeq2 sample similarity plot](images/mqc_deseq2_sample_similarity_plot.png) - *Output directories*: - * `bwa/mergedLibrary/macs//consensus//deseq2/` - * Differential binding `*.results.txt` spreadsheet containing results across all consensus peaks and all comparisons. - * `*.plots.pdf` file for PCA and hierarchical clustering. - * `*.log` file with information for number of differentially bound intervals at different FDR and fold-change thresholds for each comparison. - * `*.dds.rld.RData` file containing R `dds` and `rld` objects generated by DESeq2. - * `R_sessionInfo.log` file containing information about R, the OS and attached or loaded packages. - * `bwa/mergedLibrary/macs//consensus///` - * `*.results.txt` spreadsheet containing comparison-specific DESeq2 output for differential binding results across all peaks. - * Subset of above file for peaks that pass FDR <= 0.01 (`*FDR0.01.results.txt`) and FDR <= 0.05 (`*FDR0.05.results.txt`). - * BED files for peaks that pass FDR <= 0.01 (`*FDR0.01.results.bed`) and FDR <= 0.05 (`*FDR0.05.results.bed`). - * MA, Volcano, clustering and scatterplots at FDR <= 0.01 and FDR <= 0.05: `*deseq2.plots.pdf`. - * `bwa/mergedLibrary/macs//consensus//sizeFactors/` - Files containing DESeq2 sizeFactors per sample: `*.txt` and `*.RData`. +![R - DESeq2 MA plot](images/r_deseq2_ma_plot.png) -7. **ataqv** +![R - DESeq2 Volcano plot](images/r_deseq2_volcano_plot.png) - *Software*: - [ataqv](https://parkerlab.github.io/ataqv/) +### ataqv - *Description*: - ataqv is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing. +[ataqv](https://parkerlab.github.io/ataqv/) is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing. Please see [ataqv homepage](https://parkerlab.github.io/ataqv/) for documentation and an example report. - Please see [ataqv homepage](https://parkerlab.github.io/ataqv/) for documentation and an example report. +
+ Output files - *Output directories*: - * `bwa/mergedLibrary/ataqv//` - `.json` files containing ATAC-seq specific metrics for each sample. - * `bwa/mergedLibrary/ataqv//html/` - Folder containing ataqv results aggregated across all samples for visualisation via an internet browser. +* `bwa/mergedLibrary/ataqv//` + `.json` files containing ATAC-seq specific metrics for each sample. +* `bwa/mergedLibrary/ataqv//html/` + Folder containing ataqv results aggregated across all samples for visualisation via an internet browser. + +
## Merged replicate-level analysis The alignments associated with all of the replicates from the same experimental condition can also be merged. This can be useful to increase the coverage for peak-calling and for other analyses that require high sequencing depth such as [motif footprinting](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3959825/). The analysis steps and directory structure for `bwa/mergedLibrary/` and `bwa/mergedReplicate/` are almost identical. -File names in the resulting directory (i.e. `bwa/mergedReplicate/`) will have the '`.mRp.`' suffix to denote **m**erged **R**e**p**licates. +File names in the resulting directory (i.e. `bwa/mergedReplicate/`) will have the '`.mRp.`' suffix. You can skip this portion of the analysis by specifying the `--skip_merge_replicates` parameter. ->NB: Merged library-level alignments will be used for read counting relative to the consensus merged replicate-level peakset. This is the only way in which differential analysis can be performed at the merged replicate-level. +> **NB:** Merged library-level alignments will be used for read counting relative to the consensus merged replicate-level peakset. This is the only way in which differential analysis can be performed at the merged replicate-level. ## Aggregate analysis -1. **Present QC for the raw read, alignment, peak and differential accessibility results** +### Present QC for the raw read, alignment, peak and differential accessibility results + +[MultiQC](https://multiqc.info/docs/) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. + +Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. - *Documentation*: - [MultiQC](https://multiqc.info/docs/) +The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . - *Description*: - MultiQC is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. +
+ Output files - Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. +* `multiqc//` + * `multiqc_report.html` - a standalone HTML file that can be viewed in your web browser. + * `multiqc_data/` - directory containing parsed statistics from the different tools used in the pipeline. + * `multiqc_plots/` - directory containing static images from the report in various formats. - The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +
- *Output directories*: - * `multiqc//` - * `multiqc_report.html` - a standalone HTML file that can be viewed in your web browser. - * `multiqc_data/` - directory containing parsed statistics from the different tools used in the pipeline. - * `multiqc_plots/` - directory containing static images from the report in various formats. +### Create IGV session file -2. **Create IGV session file** +An [IGV](https://software.broadinstitute.org/software/igv/UserGuide) session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, consensus peaks and differential sites. This avoids having to load all of the data individually into IGV for visualisation. - *Documentation*: - [IGV](https://software.broadinstitute.org/software/igv/UserGuide) +The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. - *Description*: - An IGV session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, consensus peaks and differential sites. This avoids having to load all of the data individually into IGV for visualisation. +The file paths in the IGV session file will only work if the results are kept in the same place on your storage. If the results are moved or for example, if you prefer to load the data over the web then just replace the file paths with others that are more appropriate. - The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. +Once installed, open IGV, go to `File > Open Session` and select the `igv_session.xml` file for loading. - The file paths in the IGV session file will only work if the results are kept in the same place on your storage. If the results are moved or for example, if you prefer to load the data over the web then just replace the file paths with others that are more appropriate. +> **NB:** If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. - Once installed, open IGV, go to `File > Open Session` and select the `igv_session.xml` file for loading. +
+ Output files - >NB: If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. +* `igv//` + * `igv_session.xml` file. + * `igv_files.txt` file containing a listing of the files used to create the IGV session, and their allocated colours. - ![IGV screenshot](images/igv_screenshot.png) +
- *Output directories*: - * `igv//` - * `igv_session.xml` file. - * `igv_files.txt` file containing a listing of the files used to create the IGV session, and their allocated colours. +![IGV screenshot](images/igv_screenshot.png) ## Other results -1. **Reference genome files** +### Reference genome files + +Reference genome-specific files can be useful to keep for the downstream processing of the results. + +
+ Output files - *Documentation*: - [BWA](https://sourceforge.net/projects/bio-bwa/files/), [BEDTools](https://bedtools.readthedocs.io/en/latest/), [SAMtools](http://samtools.sourceforge.net/) +* `genome/` + A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. +* `genome/BWAIndex/` + If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes. - *Description*: - Reference genome-specific files can be useful to keep for the downstream processing of the results. +
- *Output directories*: - * `genome/` - A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. - * `genome/BWAIndex/` - If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes. +### Pipeline information -2. **Pipeline information** +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to trouble-shoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. - *Documentation*: - [Nextflow!](https://www.nextflow.io/docs/latest/tracing.html) +
+ Output files - *Description*: - Nextflow provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to trouble-shoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +* `pipeline_info/` + * Reports generated by the pipeline - `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + * Reports generated by Nextflow - `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.svg`. + * Reformatted design files used as input to the pipeline - `design_reads.csv` and `design_controls.csv`. +* `Documentation/` + Documentation for interpretation of results in HTML format - `results_description.html`. - *Output directories*: - * `pipeline_info/` - * Reports generated by the pipeline - `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reports generated by Nextflow - `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.svg`. - * Reformatted design files used as input to the pipeline - `design_reads.csv` and `design_controls.csv`. - * `Documentation/` - Documentation for interpretation of results in HTML format - `results_description.html`. +
From 65fba3a1746047be8cc8bbccb8fd1eaf5820d78a Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 14:51:58 +0100 Subject: [PATCH 205/226] Fix markdownlint --- CHANGELOG.md | 26 ++++----- docs/usage.md | 148 +++++++++++++++++++++++++------------------------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a13e46e..7a79a3c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,11 +19,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Replace `set` with `tuple` and `file()` with `path()` in all processes * Capitalise process names * Parameters: - * `--skip_peak_qc` to skip MACS2 peak QC plot generation - * `--skip_peak_annotation` to skip annotation of MACS2 and consensus peaks with HOMER - * `--skip_consensus_peaks` to skip consensus peak generation - * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 - * `--publish_dir_mode` to customise method of publishing results to output directory [nf-core/tools#585](https://github.com/nf-core/tools/issues/585) + * `--skip_peak_qc` to skip MACS2 peak QC plot generation + * `--skip_peak_annotation` to skip annotation of MACS2 and consensus peaks with HOMER + * `--skip_consensus_peaks` to skip consensus peak generation + * `--deseq2_vst` to use variance stabilizing transformation (VST) instead of regularized log transformation (rlog) with DESeq2 + * `--publish_dir_mode` to customise method of publishing results to output directory [nf-core/tools#585](https://github.com/nf-core/tools/issues/585) ### `Fixed` @@ -83,14 +83,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Add `CITATIONS.md` file * Capitalised process names * Add parameters: - * `--seq_center` - * `--trim_nextseq` - * `--fingerprint_bins` - * `--broad_cutoff` - * `--min_reps_consensus` - * `--save_macs_pileup` - * `--skip_diff_analysis` - * `--skip_*` for skipping QC steps + * `--seq_center` + * `--trim_nextseq` + * `--fingerprint_bins` + * `--broad_cutoff` + * `--min_reps_consensus` + * `--save_macs_pileup` + * `--skip_diff_analysis` + * `--skip_*` for skipping QC steps ### `Fixed` diff --git a/docs/usage.md b/docs/usage.md index b8252113..41eff287 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -5,73 +5,73 @@ * [Table of contents](#table-of-contents) * [Introduction](#introduction) * [Running the pipeline](#running-the-pipeline) - * [Updating the pipeline](#updating-the-pipeline) - * [Reproducibility](#reproducibility) + * [Updating the pipeline](#updating-the-pipeline) + * [Reproducibility](#reproducibility) * [Main arguments](#main-arguments) - * [`-profile`](#-profile) - * [`--input`](#--input) + * [`-profile`](#-profile) + * [`--input`](#--input) * [Generic arguments](#generic-arguments) - * [`--single_end`](#--single_end) - * [`--seq_center`](#--seq_center) - * [`--fragment_size`](#--fragment_size) - * [`--fingerprint_bins`](#--fingerprint_bins) + * [`--single_end`](#--single_end) + * [`--seq_center`](#--seq_center) + * [`--fragment_size`](#--fragment_size) + * [`--fingerprint_bins`](#--fingerprint_bins) * [Reference genomes](#reference-genomes) - * [`--genome` (using iGenomes)](#--genome-using-igenomes) - * [`--fasta`](#--fasta) - * [`--gtf`](#--gtf) - * [`--bwa_index`](#--bwa_index) - * [`--gene_bed`](#--gene_bed) - * [`--tss_bed`](#--tss_bed) - * [`--macs_gsize`](#--macs_gsize) - * [`--blacklist`](#--blacklist) - * [`--mito_name`](#--mito_name) - * [`--save_reference`](#--save_reference) - * [`--igenomes_ignore`](#--igenomes_ignore) + * [`--genome` (using iGenomes)](#--genome-using-igenomes) + * [`--fasta`](#--fasta) + * [`--gtf`](#--gtf) + * [`--bwa_index`](#--bwa_index) + * [`--gene_bed`](#--gene_bed) + * [`--tss_bed`](#--tss_bed) + * [`--macs_gsize`](#--macs_gsize) + * [`--blacklist`](#--blacklist) + * [`--mito_name`](#--mito_name) + * [`--save_reference`](#--save_reference) + * [`--igenomes_ignore`](#--igenomes_ignore) * [Adapter trimming](#adapter-trimming) - * [`--skip_trimming`](#--skip_trimming) - * [`--save_trimmed`](#--save_trimmed) + * [`--skip_trimming`](#--skip_trimming) + * [`--save_trimmed`](#--save_trimmed) * [Alignments](#alignments) - * [`--keep_mito`](#--keep_mito) - * [`--keep_dups`](#--keep_dups) - * [`--keep_multi_map`](#--keep_multi_map) - * [`--skip_merge_replicates`](#--skip_merge_replicates) - * [`--save_align_intermeds`](#--save_align_intermeds) + * [`--keep_mito`](#--keep_mito) + * [`--keep_dups`](#--keep_dups) + * [`--keep_multi_map`](#--keep_multi_map) + * [`--skip_merge_replicates`](#--skip_merge_replicates) + * [`--save_align_intermeds`](#--save_align_intermeds) * [Peaks](#peaks) - * [`--narrow_peak`](#--narrow_peak) - * [`--broad_cutoff`](#--broad_cutoff) - * [`--min_reps_consensus`](#--min_reps_consensus) - * [`--save_macs_pileup`](#--save_macs_pileup) - * [`--skip_peak_qc`](#--skip_peak_qc) - * [`--skip_peak_annotation`](#--skip_peak_annotation) - * [`--skip_consensus_peaks`](#--skip_consensus_peaks) + * [`--narrow_peak`](#--narrow_peak) + * [`--broad_cutoff`](#--broad_cutoff) + * [`--min_reps_consensus`](#--min_reps_consensus) + * [`--save_macs_pileup`](#--save_macs_pileup) + * [`--skip_peak_qc`](#--skip_peak_qc) + * [`--skip_peak_annotation`](#--skip_peak_annotation) + * [`--skip_consensus_peaks`](#--skip_consensus_peaks) * [Differential analysis](#differential_analysis) - * [`--deseq2_vst`](#--deseq2_vst) - * [`--skip_diff_analysis`](#--skip_diff_analysis) + * [`--deseq2_vst`](#--deseq2_vst) + * [`--skip_diff_analysis`](#--skip_diff_analysis) * [Skipping QC steps](#skipping-qc-steps) * [Job resources](#job-resources) - * [Automatic resubmission](#automatic-resubmission) - * [Custom resource requests](#custom-resource-requests) + * [Automatic resubmission](#automatic-resubmission) + * [Custom resource requests](#custom-resource-requests) * [AWS Batch specific parameters](#aws-batch-specific-parameters) - * [`--awsqueue`](#--awsqueue) - * [`--awsregion`](#--awsregion) - * [`--awscli`](#--awscli) + * [`--awsqueue`](#--awsqueue) + * [`--awsregion`](#--awsregion) + * [`--awscli`](#--awscli) * [Other command line parameters](#other-command-line-parameters) - * [`--outdir`](#--outdir) - * [`--publish_dir_mode`](#--publish_dir_mode) - * [`--email`](#--email) - * [`--email_on_fail`](#--email_on_fail) - * [`--max_multiqc_email_size`](#--max_multiqc_email_size) - * [`-name`](#-name) - * [`-resume`](#-resume) - * [`-c`](#-c) - * [`--custom_config_version`](#--custom_config_version) - * [`--custom_config_base`](#--custom_config_base) - * [`--max_memory`](#--max_memory) - * [`--max_time`](#--max_time) - * [`--max_cpus`](#--max_cpus) - * [`--plaintext_email`](#--plaintext_email) - * [`--monochrome_logs`](#--monochrome_logs) - * [`--multiqc_config`](#--multiqc_config) + * [`--outdir`](#--outdir) + * [`--publish_dir_mode`](#--publish_dir_mode) + * [`--email`](#--email) + * [`--email_on_fail`](#--email_on_fail) + * [`--max_multiqc_email_size`](#--max_multiqc_email_size) + * [`-name`](#-name) + * [`-resume`](#-resume) + * [`-c`](#-c) + * [`--custom_config_version`](#--custom_config_version) + * [`--custom_config_base`](#--custom_config_base) + * [`--max_memory`](#--max_memory) + * [`--max_time`](#--max_time) + * [`--max_cpus`](#--max_cpus) + * [`--plaintext_email`](#--plaintext_email) + * [`--monochrome_logs`](#--monochrome_logs) + * [`--multiqc_config`](#--multiqc_config) ## Introduction @@ -136,18 +136,18 @@ They are loaded in sequence, so later profiles can overwrite earlier profiles. If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended. * `docker` - * A generic configuration profile to be used with [Docker](http://docker.com/) - * Pulls software from dockerhub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) + * A generic configuration profile to be used with [Docker](http://docker.com/) + * Pulls software from dockerhub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) * `singularity` - * A generic configuration profile to be used with [Singularity](http://singularity.lbl.gov/) - * Pulls software from DockerHub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) + * A generic configuration profile to be used with [Singularity](http://singularity.lbl.gov/) + * Pulls software from DockerHub: [`nfcore/atacseq`](http://hub.docker.com/r/nfcore/atacseq/) * `conda` - * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker or Singularity. - * A generic configuration profile to be used with [Conda](https://conda.io/docs/) - * Pulls most software from [Bioconda](https://bioconda.github.io/) + * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker or Singularity. + * A generic configuration profile to be used with [Conda](https://conda.io/docs/) + * Pulls most software from [Bioconda](https://bioconda.github.io/) * `test` - * A profile with a complete configuration for automated testing - * Includes links to test data so needs no other parameters + * A profile with a complete configuration for automated testing + * Includes links to test data so needs no other parameters ### `--input` @@ -235,13 +235,13 @@ There are 31 different species supported in the iGenomes references. To run the You can find the keys to specify the genomes in the [iGenomes config file](../conf/igenomes.config). Common genomes that are supported are: * Human - * `--genome GRCh37` + * `--genome GRCh37` * Mouse - * `--genome GRCm38` + * `--genome GRCm38` * _Drosophila_ - * `--genome BDGP6` + * `--genome BDGP6` * _S. cerevisiae_ - * `--genome 'R64-1-1'` + * `--genome 'R64-1-1'` > There are numerous others - check the config file for more. @@ -338,15 +338,15 @@ The pipeline accepts a number of parameters to change how the trimming is done, You can specify custom trimming parameters as follows: * `--clip_r1 [int]` - * Instructs Trim Galore to remove [int] bp from the 5' end of read 1 (for single-end reads). + * Instructs Trim Galore to remove [int] bp from the 5' end of read 1 (for single-end reads). * `--clip_r2 [int]` - * Instructs Trim Galore to remove [int] bp from the 5' end of read 2 (paired-end reads only). + * Instructs Trim Galore to remove [int] bp from the 5' end of read 2 (paired-end reads only). * `--three_prime_clip_r1 [int]` - * Instructs Trim Galore to remove [int] bp from the 3' end of read 1 _AFTER_ adapter/quality trimming has been + * Instructs Trim Galore to remove [int] bp from the 3' end of read 1 _AFTER_ adapter/quality trimming has been * `--three_prime_clip_r2 [int]` - * Instructs Trim Galore to remove [int] bp from the 3' end of read 2 _AFTER_ adapter/quality trimming has been performed. + * Instructs Trim Galore to remove [int] bp from the 3' end of read 2 _AFTER_ adapter/quality trimming has been performed. * `--trim_nextseq [int]` - * This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases. + * This enables the option Cutadapt `--nextseq-trim=3'CUTOFF` option via Trim Galore, which will set a quality cutoff (that is normally given with -q instead), but qualities of G bases are ignored. This trimming is in common for the NextSeq- and NovaSeq-platforms, where basecalls without any signal are called as high-quality G bases. ### `--skip_trimming` From 52909121ea38d42a1ba9d0a59879d20949fe03fa Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 16:14:32 +0100 Subject: [PATCH 206/226] Remove trailing spaces --- docs/output.md | 195 ++++++++++++++++++++++++------------------------- 1 file changed, 96 insertions(+), 99 deletions(-) diff --git a/docs/output.md b/docs/output.md index db87dab3..058ab454 100755 --- a/docs/output.md +++ b/docs/output.md @@ -16,15 +16,15 @@ The initial QC and alignments are performed at the library-level e.g. if the sam ### Raw read QC -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). You get information about adapter contamination and other overrepresented sequences. +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). You get information about adapter contamination and other overrepresented sequences.
Output files -* `fastqc/` -FastQC `*.html` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. -* `fastqc/zips/` -FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **before** adapter trimming. +* `fastqc/` + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **before** adapter trimming. +* `fastqc/zips/` + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images.
@@ -35,14 +35,14 @@ FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **before** adapter t
Output files -* `trim_galore/` - If `--save_trimmed` is specified FastQ files **after** adapter trimming will be placed in this directory. -* `trim_galore/logs/` - `*.log` files generated by Trim Galore!. -* `trim_galore/fastqc/` - FastQC `*.html` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. -* `trim_galore/fastqc/zips/` - FastQC `*.zip` files for read 1 (*and read2 if paired-end*) **after** adapter trimming. +* `trim_galore/` + * `*fastq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. +* `trim_galore/logs/` + * `*.log`: Log file generated by Trim Galore!. +* `trim_galore/fastqc/` + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. +* `trim_galore/fastqc/zips/` + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images.
@@ -56,9 +56,9 @@ Adapter-trimmed reads are mapped to the reference assembly using [BWA](http://bi Output files * `bwa/library/` - The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--save_align_intermeds` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. -* `bwa/library/samtools_stats/` - SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. + * `*.bam`: The files resulting from the alignment of individual libraries are not saved by default so this directory will not be present in your results. You can override this behaviour with the use of the `--save_align_intermeds` flag in which case it will contain the coordinate sorted alignment files in [`*.bam`](https://samtools.github.io/hts-specs/SAMv1.pdf) format. +* `bwa/library/samtools_stats/` + * SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. > **NB:** File names in the resulting directory (i.e. `bwa/library/`) will have the '`.Lb.`' suffix. @@ -85,16 +85,17 @@ The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at p
Output files -* `bwa/mergedLibrary/` - Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--save_align_intermeds` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). -* `bwa/mergedLibrary/samtools_stats/` - SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. -* `bwa/mergedLibrary/picard_metrics/` - Alignment QC files from picard CollectMultipleMetrics and the metrics file from MarkDuplicates: `*_metrics` and `*.metrics.txt`, respectively. -* `bwa/mergedLibrary/picard_metrics/pdf/` - Alignment QC plot files in `*.pdf` format from picard CollectMultipleMetrics. -* `bwa/mergedLibrary/preseq/` - Preseq expected future yield file (`*.ccurve.txt`). +* `bwa/mergedLibrary/` + * `*.bam`: Merged library-level, coordinate sorted `*.bam` files after the marking of duplicates, and filtering based on various criteria. The file suffix for the final filtered files will be `*.mLb.clN.*`. If you specify the `--save_align_intermeds` parameter then two additional sets of files will be present. These represent the unfiltered alignments with duplicates marked (`*.mLb.mkD.*`), and in the case of paired-end datasets the filtered alignments before the removal of orphan read pairs (`*.mLb.flT.*`). +* `bwa/mergedLibrary/samtools_stats/` + * SAMtools `*.flagstat`, `*.idxstats` and `*.stats` files generated from the alignment files. +* `bwa/mergedLibrary/picard_metrics/` + * `*_metrics`: Alignment QC files from picard CollectMultipleMetrics. + * `*.metrics.txt`: Metrics file from MarkDuplicates. +* `bwa/mergedLibrary/picard_metrics/pdf/` + * `*.pdf`: Alignment QC plot files from picard CollectMultipleMetrics. +* `bwa/mergedLibrary/preseq/` + * `*.ccurve.txt`: Preseq expected future yield file. > **NB:** File names in the resulting directory (i.e. `bwa/mergedLibrary/`) will have the '`.mLb.`' suffix. @@ -102,9 +103,9 @@ The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at p ![MultiQC - Picard deduplication stats plot](images/mqc_picard_deduplication_plot.png) -![MultiQC - Picard insert size plot](images/mqc_picard_insert_size_plot.png) +![MultiQC - Picard insert size plot](images/mqc_picard_insert_size_plot.png) -![MultiQC - Preseq library complexity plot](images/mqc_preseq_plot.png) +![MultiQC - Preseq library complexity plot](images/mqc_preseq_plot.png) ### Normalised bigWig files @@ -113,8 +114,8 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in a
Output files -* `bwa/mergedLibrary/bigwig/` - Normalised `*.bigWig` files scaled to 1 million mapped reads. +* `bwa/mergedLibrary/bigwig/` + * `*.bigWig`: Normalised bigWig files scaled to 1 million mapped reads.
@@ -127,10 +128,10 @@ The results from deepTools plotProfile gives you a quick visualisation for the g
Output files -* `bwa/mergedLibrary/deepTools/plotFingerprint/` - * Output files: `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt` -* `bwa/mergedLibrary/deepTools/plotProfile/` - * Output files: `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`, `*.plotHeatmap.pdf`, `*.plotHeatmap.mat.tab`. +* `bwa/mergedLibrary/deepTools/plotFingerprint/` + * `*.plotFingerprint.pdf`, `*.plotFingerprint.qcmetrics.txt`, `*.plotFingerprint.raw.txt`: plotFingerprint output files. +* `bwa/mergedLibrary/deepTools/plotProfile/` + * `*.computeMatrix.mat.gz`, `*.computeMatrix.vals.mat.tab`, `*.plotProfile.pdf`, `*.plotProfile.tab`, `*.plotHeatmap.pdf`, `*.plotHeatmap.mat.tab`: plotProfile output files.
@@ -140,23 +141,22 @@ The results from deepTools plotProfile gives you a quick visualisation for the g ### Call peaks -[MACS2](https://github.com/taoliu/MACS) is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. +[MACS2](https://github.com/taoliu/MACS) is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. -[HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. +[HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. -Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report. +Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report.
Output files -* `bwa/mergedLibrary/macs//` - * MACS2 output files: `*.xls`, `*.broadPeak` or `*.narrowPeak`, `*.gappedPeak` and `*summits.bed`. - The files generated will depend on whether MACS2 has been run in *narrowPeak* or *broadPeak* mode. - * HOMER peak-to-gene annotation file: `*.annotatePeaks.txt`. -* `bwa/mergedLibrary/macs//qc/` - * QC plots for MACS2 peaks: `macs_peak.plots.pdf` - * QC plots for peak-to-gene feature annotation: `macs_annotatePeaks.plots.pdf` - * MultiQC custom-content files for FRiP score, peak count and peak-to-gene ratios: `*.FRiP_mqc.tsv`, `*.count_mqc.tsv` and `macs_annotatePeaks.summary_mqc.tsv` respectively. +* `bwa/mergedLibrary/macs//` + * `*.xls`, `*.broadPeak` or `*.narrowPeak`, `*.gappedPeak`, `*summits.bed`: MACS2 output files - the files generated will depend on whether MACS2 has been run in *narrowPeak* or *broadPeak* mode. + * `*.annotatePeaks.txt`: HOMER peak-to-gene annotation file. +* `bwa/mergedLibrary/macs//qc/` + * `macs_peak.plots.pdf`: QC plots for MACS2 peaks. + * `macs_annotatePeaks.plots.pdf`: QC plots for peak-to-gene feature annotation. + * `*.FRiP_mqc.tsv`, `*.count_mqc.tsv`, `macs_annotatePeaks.summary_mqc.tsv`: MultiQC custom-content files for FRiP score, peak count and peak-to-gene ratios. > **NB:** `` in the directory structure above corresponds to the type of peak that you have specified to call with MACS2 i.e. `broadPeak` or `narrowPeak`. If you so wish, you can call both narrow and broad peaks without redoing the preceding steps in the pipeline such as the alignment and filtering. For example, if you already have broad peaks then just add `--narrow_peak -resume` to the command you used to run the pipeline, and these will be called too! However, resuming the pipeline will only be possible if you have not deleted the `work/` directory generated by the pipeline. @@ -170,7 +170,7 @@ Various QC plots per sample including number of peaks, fold-change distribution, ### Create and quantify consensus set of peaks -In order to perform the differential binding analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. +In order to perform the differential accessibility analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. Using the consensus peaks it is possible to assess the degree of overlap between the peaks from a set of samples e.g. *Which consensus peaks contain peaks that are common/unique to a given set of samples?*. This may be useful for downstream filtering of peaks based on whether they are called in multiple replicates/conditions. Please note that it is possible for a consensus peak to contain multiple peaks from the same sample. Unfortunately, this is sample-dependent but the files generated by the pipeline do have columns that report such instances and allow you to factor them into any further analysis. @@ -181,47 +181,45 @@ The [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) tool is used to co
Output files -* `bwa/mergedLibrary/macs//consensus/` - * Consensus peak-set across all samples in `*.bed` format. - * Consensus peak-set across all samples in `*.saf` format. Required by featureCounts for read quantification. - * `.featureCounts.txt` file for read counts across all samples relative to consensus peak-set. - * HOMER `*.annotatePeaks.txt` peak-to-gene annotation file for consensus peaks. - * Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns: `*.boolean.annotatePeaks.txt`. - The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. - * Spreadsheet representation of consensus peak-set across samples **without** gene annotation columns: `*.boolean.txt`. - Same as file above but without annotation columns. - * [UpSetR](https://cran.r-project.org/web/packages/UpSetR/README.html) files to illustrate peak intersection: `*.boolean.intersect.plot.pdf` and `*.boolean.intersect.txt`. +* `bwa/mergedLibrary/macs//consensus/` + * `*.bed`: Consensus peak-set across all samples in BED format. + * `*.saf`: Consensus peak-set across all samples in SAF format. Required by featureCounts for read quantification. + * `*.featureCounts.txt`: Read counts across all samples relative to consensus peak-set. + * `*.annotatePeaks.txt`: HOMER peak-to-gene annotation file for consensus peaks. + * `*.boolean.annotatePeaks.txt`: Spreadsheet representation of consensus peak-set across samples **with** gene annotation columns. The columns from individual peak files are included in this file along with the ability to filter peaks based on their presence or absence in multiple replicates/conditions. + * `*.boolean.txt`: Spreadsheet representation of consensus peak-set across samples **without** gene annotation columns. Same as file above but without annotation columns. + * `*.boolean.intersect.plot.pdf`, `*.boolean.intersect.txt`: [UpSetR](https://cran.r-project.org/web/packages/UpSetR/README.html) files to illustrate peak intersection.
![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) -![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) +![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) -### Read counting and differential binding analysis +### Read counting and differential accessibility analysis -[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. +[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. -This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential binding. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. +This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential accessibility. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. -By default, all possible pairwise comparisons across the groups from a particular antibody (as defined in [`design.csv`](usage.md#--design)) are performed. The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. +By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2.
Output files -* `bwa/mergedLibrary/macs//consensus//deseq2/` - * Differential binding `*.results.txt` spreadsheet containing results across all consensus peaks and all comparisons. - * `*.plots.pdf` file for PCA and hierarchical clustering. - * `*.log` file with information for number of differentially bound intervals at different FDR and fold-change thresholds for each comparison. - * `*.dds.rld.RData` file containing R `dds` and `rld` objects generated by DESeq2. - * `R_sessionInfo.log` file containing information about R, the OS and attached or loaded packages. -* `bwa/mergedLibrary/macs//consensus///` - * `*.results.txt` spreadsheet containing comparison-specific DESeq2 output for differential binding results across all peaks. - * Subset of above file for peaks that pass FDR <= 0.01 (`*FDR0.01.results.txt`) and FDR <= 0.05 (`*FDR0.05.results.txt`). - * BED files for peaks that pass FDR <= 0.01 (`*FDR0.01.results.bed`) and FDR <= 0.05 (`*FDR0.05.results.bed`). - * MA, Volcano, clustering and scatterplots at FDR <= 0.01 and FDR <= 0.05: `*deseq2.plots.pdf`. -* `bwa/mergedLibrary/macs//consensus//sizeFactors/` - Files containing DESeq2 sizeFactors per sample: `*.txt` and `*.RData`. +* `bwa/mergedLibrary/macs//consensus/deseq2/` + * `*.results.txt`: Spreadsheet containing differential accessibility results across all consensus peaks and all comparisons. + * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. + * `*.log`: Log file with information for number of differentially accessible intervals at different FDR and fold-change thresholds for each comparison. + * `*.dds.rld.RData`: File containing R `dds` and `rld` objects generated by DESeq2. + * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. +* `bwa/mergedLibrary/macs//consensus//` + * `*.results.txt`: Spreadsheet containing comparison-specific DESeq2 output for differential accessibility results across all peaks. + * `*FDR0.01.results.txt`, `*FDR0.05.results.txt`: Subset of above file for peaks that pass FDR <= 0.01 and FDR <= 0.05. + * `*FDR0.01.results.bed`, `*FDR0.05.results.bed`: BED files for peaks that pass FDR <= 0.01 and FDR <= 0.05. + * `*deseq2.plots.pdf`: MA, Volcano, clustering and scatterplots at FDR <= 0.01 and FDR <= 0.05. +* `bwa/mergedLibrary/macs//consensus/sizeFactors/` + * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample.
@@ -240,20 +238,20 @@ By default, all possible pairwise comparisons across the groups from a particula
Output files -* `bwa/mergedLibrary/ataqv//` - `.json` files containing ATAC-seq specific metrics for each sample. -* `bwa/mergedLibrary/ataqv//html/` - Folder containing ataqv results aggregated across all samples for visualisation via an internet browser. +* `bwa/mergedLibrary/ataqv//` + * `.json`: JSON files containing ATAC-seq specific metrics for each sample. +* `bwa/mergedLibrary/ataqv//html/` + * Folder containing ataqv results aggregated across all samples for visualisation via an internet browser.
## Merged replicate-level analysis -The alignments associated with all of the replicates from the same experimental condition can also be merged. This can be useful to increase the coverage for peak-calling and for other analyses that require high sequencing depth such as [motif footprinting](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3959825/). The analysis steps and directory structure for `bwa/mergedLibrary/` and `bwa/mergedReplicate/` are almost identical. +The alignments associated with all of the replicates from the same experimental condition can also be merged. This can be useful to increase the coverage for peak-calling and for other analyses that require high sequencing depth such as [motif footprinting](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3959825/). The analysis steps and directory structure for `bwa/mergedLibrary/` and `bwa/mergedReplicate/` are almost identical. File names in the resulting directory (i.e. `bwa/mergedReplicate/`) will have the '`.mRp.`' suffix. -You can skip this portion of the analysis by specifying the `--skip_merge_replicates` parameter. +You can skip this portion of the analysis by specifying the `--skip_merge_replicates` parameter. > **NB:** Merged library-level alignments will be used for read counting relative to the consensus merged replicate-level peakset. This is the only way in which differential analysis can be performed at the merged replicate-level. @@ -261,19 +259,19 @@ You can skip this portion of the analysis by specifying the `--skip_merge_replic ### Present QC for the raw read, alignment, peak and differential accessibility results -[MultiQC](https://multiqc.info/docs/) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. +[MultiQC](https://multiqc.info/docs/) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. -Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. +Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see .
Output files -* `multiqc//` - * `multiqc_report.html` - a standalone HTML file that can be viewed in your web browser. - * `multiqc_data/` - directory containing parsed statistics from the different tools used in the pipeline. - * `multiqc_plots/` - directory containing static images from the report in various formats. +* `multiqc//` + * `multiqc_report.html`: A standalone HTML file that can be viewed in your web browser. + * `multiqc_data/`: Directory containing parsed statistics from the different tools used in the pipeline. + * `multiqc_plots/`: Directory containing static images from the report in various formats.
@@ -292,9 +290,9 @@ Once installed, open IGV, go to `File > Open Session` and select the `igv_sessio
Output files -* `igv//` - * `igv_session.xml` file. - * `igv_files.txt` file containing a listing of the files used to create the IGV session, and their allocated colours. +* `igv//` + * `igv_session.xml`: Session file that can be directly loaded into IGV. + * `igv_files.txt`: File containing a listing of the files used to create the IGV session.
@@ -309,10 +307,10 @@ Reference genome-specific files can be useful to keep for the downstream process
Output files -* `genome/` - A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. -* `genome/BWAIndex/` - If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes. +* `genome/` + * A number of genome-specific files are generated by the pipeline in order to aid in the filtering of the data, and because they are required by standard tools such as BEDTools. These can be found in this directory along with the genome fasta file which is required by IGV. If using a genome from AWS iGenomes and if it exists a `README.txt` file containing information about the annotation version will also be saved in this directory. +* `genome/BWAIndex/` + * If the `--save_reference` parameter is provided then the alignment indices generated by the pipeline will be saved in this directory. This can be quite a time-consuming process so it permits their reuse for future runs of the pipeline or for other purposes.
@@ -323,11 +321,10 @@ Reference genome-specific files can be useful to keep for the downstream process
Output files -* `pipeline_info/` - * Reports generated by the pipeline - `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reports generated by Nextflow - `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.svg`. - * Reformatted design files used as input to the pipeline - `design_reads.csv` and `design_controls.csv`. -* `Documentation/` - Documentation for interpretation of results in HTML format - `results_description.html`. +* `pipeline_info/` + * `pipeline_report.html`, `pipeline_report.txt`, `software_versions.csv`: Reports generated by the pipeline. + * `execution_report.html`, `execution_timeline.html`, `execution_trace.txt`, `pipeline_dag.svg`: Reports generated by Nextflow. + * `design_reads.csv`: Reformatted design files used as input to the pipeline. + * `results_description.html`: Documentation for interpretation of results in HTML format.
From 9262aa0544b67a5443cdc21adb44718d31103232 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 16:15:22 +0100 Subject: [PATCH 207/226] Change output dir --- main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 1f040e2a..291de879 100644 --- a/main.nf +++ b/main.nf @@ -2047,7 +2047,7 @@ process MULTIQC { * STEP 11: Output description HTML */ process output_documentation { - publishDir "${params.outdir}/Documentation", mode: params.publish_dir_mode + publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode input: path output_docs from ch_output_docs From 7c9d1f7971a7beae56735342f555f1ef4e56a5e4 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 17:54:51 +0100 Subject: [PATCH 208/226] Update packages in environment --- .github/markdownlint.yml | 2 +- CHANGELOG.md | 10 +++++----- environment.yml | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index 9aae63a0..5056c7fa 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -4,6 +4,6 @@ line-length: false no-duplicate-header: siblings_only: true MD033: - allowed_elements: [details, summary] + allowed_elements: [details, summary, p, img] MD007: indent: 4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a79a3c8..21f5a30d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,11 +30,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * [#86](https://github.com/nf-core/atacseq/issues/86) - bug in the plot_homer_annotatepeaks.r script * [#102](https://github.com/nf-core/atacseq/issues/102) - Incorrect Group ID assigned by featurecounts_deseq2.r +* [#110](https://github.com/nf-core/atacseq/pull/110) - updated AWS test GitHub actions * [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [nf-core/chipseq#154](https://github.com/nf-core/chipseq/issues/154) - computeMatrix.val.mat.gz files not zipped * Make executables in `bin/` compatible with Python 3 -* [#110](https://github.com/nf-core/atacseq/pull/110) - updated AWS test GitHub actions ### `Dependencies` @@ -49,16 +49,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update gawk `4.2.1` -> `5.1.0` * Update r-base `3.4.1` -> `3.6.2` * Update r-optparse `1.6.0` -> `1.6.6` -* Update r-ggplot2 `3.1.0` -> `3.3.0` +* Update r-ggplot2 `3.1.0` -> `3.3.2` * Update r-pheatmap `1.0.10` -> `1.0.12` * Update r-lattice `0.20_35` -> `0.20_41` * Update r-upsetr `1.3.3` -> `1.4.0` * Update r-scales `1.0.0` -> `1.1.1` -* Update r-xfun `0.3` -> `0.14` +* Update r-xfun `0.3` -> `0.15` * Update fastqc `0.11.8` -> `0.11.9` * Update trim-galore `0.5.0` -> `0.6.5` * Update samtools `1.9` -> `1.10` -* Update picard `2.19.0` -> `2.22.8` +* Update picard `2.19.0` -> `2.23.1` * Update pysam `0.15.2` -> `0.15.3` * Update bedtools `2.27.1` -> `2.29.2` * Update ucsc-bedgraphtobigwig `377` -> `357` @@ -66,7 +66,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Update macs2 `2.1.2` -> `2.2.7.1` * Update homer `4.9.1` -> `4.11` * Update ataqv `1.0.0` -> `1.1.1` -* Update subread `1.6.4` -> `2.0.0` +* Update subread `1.6.4` -> `2.0.1` * Update multiqc `1.7` -> `1.8` * Update bioconductor-deseq2 `1.20.0` -> `1.26.0` * Update bioconductor-vsn `3.46.0` -> `3.54.0` diff --git a/environment.yml b/environment.yml index 66ce39c7..cadc2140 100755 --- a/environment.yml +++ b/environment.yml @@ -15,13 +15,13 @@ dependencies: - conda-forge::r-optparse=1.6.6 - conda-forge::r-rcolorbrewer=1.1_2 - conda-forge::r-reshape2=1.4.4 - - conda-forge::r-ggplot2=3.3.0 + - conda-forge::r-ggplot2=3.3.2 - conda-forge::r-tidyr=1.1.0 - conda-forge::r-scales=1.1.1 - conda-forge::r-pheatmap=1.0.12 - conda-forge::r-lattice=0.20_41 - conda-forge::r-upsetr=1.4.0 - - conda-forge::r-xfun=0.14 + - conda-forge::r-xfun=0.15 - conda-forge::gawk=5.1.0 - conda-forge::pigz=2.3.4 ## Required for TrimGalore multi-threading @@ -30,7 +30,7 @@ dependencies: - bioconda::trim-galore=0.6.5 - bioconda::bwa=0.7.17 - bioconda::samtools=1.10 - - bioconda::picard=2.22.8 + - bioconda::picard=2.23.1 - bioconda::bamtools=2.5.1 - bioconda::pysam=0.15.3 - bioconda::bedtools=2.29.2 @@ -39,7 +39,7 @@ dependencies: - bioconda::macs2=2.2.7.1 - bioconda::homer=4.11 - bioconda::ataqv=1.1.1 - - bioconda::subread=2.0.0 + - bioconda::subread=2.0.1 - bioconda::preseq=2.0.3 - bioconda::multiqc=1.9 - bioconda::bioconductor-biocparallel=1.20.0 From 5ea601efe28c01bde203fda78b145e4bff528643 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:09:28 +0100 Subject: [PATCH 209/226] Update docs --- docs/images/mqc_cutadapt_plot.png | Bin 104682 -> 35497 bytes docs/images/r_deseq2_ma_plot.png | Bin 211428 -> 160987 bytes docs/images/r_deseq2_volcano_plot.png | Bin 52689 -> 40521 bytes docs/output.md | 128 +++++++++++++------------- 4 files changed, 66 insertions(+), 62 deletions(-) diff --git a/docs/images/mqc_cutadapt_plot.png b/docs/images/mqc_cutadapt_plot.png index 0b22e878cb1ad7cc8330d8954aa9dc1ac12da52c..7fcc4348699e76fab9c796d1596240580d0194ab 100755 GIT binary patch literal 35497 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 ^+B`MvRarnm8Dk*%{OCZZkUZ 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 tnmFLV9w@`v~f&l~( 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 SjJmCWpT$mVvoaInss8`~9Vn~- diff --git a/docs/images/r_deseq2_ma_plot.png b/docs/images/r_deseq2_ma_plot.png index a284eb2bf731f3893989a44b10206528e474b42b..67c598fc74408eb74cbb6fdd61b0e78d9245c256 100755 GIT binary patch literal 160987 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

fMe{n%= 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%0AsipfxjS9@&N^E9gqLCbLyVIy)> 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

jY(qr zn}1nfapY@d!^x5|vhDXbuJ&g* z6Dz_Y(x9lc)Nx6M0vX3E0Oc(&7OHekF9$i!t)3s)!%ZnY>m&P4^>jYP9_V$u3&3xz_(aID6Ia0Xv;BL{WbtwB z#hv&c!AJF|cj=1l3Og4c1d$+DBSs%F3bl(2swc9r&u1v>HI3GfSb;?NP)#p%3SJ1G zFguYvb4Rk|d)5FY9G_YlkL|dZ<_J7Zm_=i+x>% zLtUj^3nNtsHeCZ>`XlwWv=7TDg#ZP8QaZi}mVuysdjf!s3};biCI(`%!L{d@s3G&S zyFFygK~yBxn~sPQWX)kRKXc}jo{?@_)3O51_H|i;@_!xU58?>Xk#&aRE2!H1K!gR( zR>fC$1~2P{4u2=%Xna`V@o{w%$6`< ztfwweSG{e_J$5xVW*2Laif7qifB#JgP}InuQ4e{U!e^*TI=81g5=2bZ8@eg86eLy&5q?`+u=Rl~ zr+Z+0^ljf*fKscE&r!{$DJ)#2$9cz z&P4wR#lLC;TpCC(offorq@7{iwz|9))(svky7qy6LfRFn1zV_~8%|4#JdTC%E;ooy zsJpqp;EH$w=2WLAkG~1A`lE2kS}RZY|73w*mVDVdbEKFq6@F(FOq+G0Qny|eD*s&}(oM>Bmql)XC6^NCE_kR&>S)au&%rtP$#t0~~JcxyTi`HJqKvKj+ z#mH(Pym6_n%Ln=Yqv;%&Gwa%J+p*QLZQHhOb&QT}+qP{xxnr|q+qQM`ymh|6uxr)A zo?~7^{Kl0b#d~CdBvZlQ{O$tqxZ1_;%lw)UAK!{_bbzJ5tgBGCC?1DH=vc7fFT6y! zXNd`f52MM5Xl6%L3FhTf0GuCKYvv|#{z(V1GW(Pw?}*WBWU!pzx)Kb$ zhEvk*Mje>&RR4D4lLF8gp1mr@X_dg3In!h?qFChYq=@m1(~Nw7J>f>+4WI$m<8IgQ z8ay4hBvR4CB4sF(f$jW8vf+FBiOkH zF`EsrSULzQ>-uZZ=)BczIGz@x8`Z5Rr=Qz~pCi#k*G*$(NNrWpUSl7~8Oh zb%2A({`43^N-Z&~;MMz|+Uz|~4!YHs7E|nZ5sBycPL7pQ&v;$8`tDrl>hHx*twg6t zFTwoxoA%{8>f29L6xF+QY9~i8{NpYWfWu*zx7nlH};!0T4f z&oB&o($slnQjC~lwN$%09lL;dxqX-}$$r0c5$wfdMrD!T zO;sh0IavGUg$-hqiLb+DXecy$%KBXqfAaeRCIB%lR8NZokWJPuWyb1OoV_p4tS({E z2^WjtP0U#o^R?nrhp=OzFzW^8Or{#Dqkm`t_AVrW5B_BS$r-2f`vl_l7*o0Jxeo$! zd+Ir7V`)=)K#8%?VpBWD9>oF&k{r!xO&HREZUA>t{}`2qmqg>~{Y0&CWn;JdP=e>EP$b?GuL-JI!9E z5i5rXGMzN9Tx;rR5$NPFhL}wH&_^hQ0raR!SF!erTkm2*kSJVRgmGhh+AhCIQswV^ zRpOH?=l#bO%B`HSaxzr0Y;YqLU`hj%i%pk+HE@{K^W{1KM?ClUi{}-f20=_0C7%j$ z(UL{1u(o24Z)mvHtnth)`FiPAgX1!qXcA+-G7xllhfpVo`|~4GC$H3|yZ( z0;3#hqDGWvb$L=g;-MPyr8OU2RNo;RC$|07p|bzvy7l>?dI2!qMQ(GOZRSDq3S-)M zGXMN~Pa4Ntdg%@{!hFJ@ep6$Ru(s* zOe~iXMU;Lof}!DX(TqcdusPr+qw&F=r7)4I9d0?}RmH0dqILOMV@|FOM7RlwaU&?r zjn;tv$}DVRDy|_}toM`JZCP(Q6?@{ne)&l;`^BvYY_Y7_S93vOb4aDP-uJmJ$5(^We_X_D854<}Cg9~gXI zC*?74)p|>2dQ5t%ar>`n&UnqiZYciDeENxMLJ!Y>4-};_EG+8%zIvnf1<)cTe|nH@ zYj+i!&WCk-bs8 zM;x#j(ZIh^vTL>0Z>CJk9-s$}TH)==FZc=XvtLeCZ5~JOh?a|J6Q5`*yo(NZB^s%z5FVJgw zKv${-@nc6m#*LlN6g*04)Y7^L5SUeZeU9k$bDuL%htv=2%8ak?Jz+IBo?C2jX~v@R zDC~O#Le-#MPAT-}EfTXLBD;vuvAH4n)2|D*-}|F75=(&l7O=O@Tb4l0dT1VI^MqCVAj779fccEKvy&PI3F1_ z27TrEZ&^ZnS9=sNcjpLw2Xo%}j@J4~#CC2SWp;9T&Ww6bNT*k^>D?`1{geXTxLU<; zJpkWiJ5RZ|hM_f?-=iCp#+x7V+M+?;O*pSU{7-tb=F*jMQItg^e+8+GFSA--J62qI zMN}bgF-_$zs!BXPXx8SSNsMr|a67&E4t|*{x^G-g+R~x->VGtLNPyI6jr4qWloh=F zTlP#*e$+h#0jAQW2$&B+$6t9)w5M}Mz<7X$FWoq$pu!!lOi}h%dn;jRY6)R0FkAJt zFFGqUuHltBddseYsT@?QB>-;%Q%DDAvezKyzi9q4 z0+M{JQ#6=kyx9%j)%&_Je?Xr5XJpNG)vl_=dBn3HN_~R`4Ockr3n&-9hSY4Ct7ZLj znz5u$hnp&-`4~n4w(xb|Q=XxUO<}M?sKIInAP=up>1QspTT+^PytHK_<b| zUMWUpi7=e1Y4;R%^5p8AESt&iN_AvS4@;He6I}k!n!N8&;D2v<+=7`ww+jC3G0s>K zMMWq*MkqLfj5qsD`YWQ1jL8!{-1iKs<{=cdAM48T*q0Mq3Kf`YNih3X7ry&|*LL7| zuA9Y^jOo>+W*4tLe<%F0V@C`5u*~;>406CueIbVYyqzOh74gEZe+&uGztwWvV!o5KjjJL|GRXVEL9gmqaD91jNY8cqg&~Q_#zu*rC&}qg4@JK;wqFdH z-F;k)zZYfck-kF>D9B@X7$1d9910T=6gtg#6wwdoUHcPzKB)jD;qjh8rp6|k&Y>uz9+}`_0P7%GbH(;b1FqDt2lwi zIh}`&(xaxFvvYHkrEx3zn8jc9$`dN0m)FTsNnS^s%=#3#>*`{Kcsq_EHpu`AXvlzo zg|QG&08sNm|9-q6uK%=JXyb&A$PMYT16Yd3_KfTWtultk$KMwAk{|rx{GaN=KjqcI zWzPwP;?42X=&(_eVY!W&nt^B%9D#lxK~;CP%P@QK2eloXz1k!iw?wW9gEv52gkQ!Dzt4>P*N*6K zlMv5E^QN6oOM;Gn`) zJ1;Gq5A@ln3Y@m!lVMCve%fM1=FdpmE*#heLb+}ejS;!AQb+Ne8({xgAJpEnt z9ttmqGDl`=MzHbbi1QMW%R~{tino$Ml~U!YA}l{S!Lt9s5 zb(=(zQ6M^jkTSa@4{W;H9y5Of#OIANB1dPoCkotY!|h|1BShm&WJRzD@&3r1SznL9 z@Y1j84cX#0V@xo5RrlzPyEP#)bn8D`ldIjTc}L2YEQr-OL*-nz{FMW&3& z%P1URyAb0yvJ^#CGjhUw z_O~T?WUxMbdhL6y2XbrnFwaYI##L2gN~Ue>&y+01 z^I{d}RnCemrX3e#^;fmp)hiW&sH$rVuEw|{CXRxP#O?6hGRNhB9Q+(*^O}zi=rL{% z=@lcHq&%r7q#v8mMT6LqUsfOJy-`P~)g8}jIr#|fROko8g%xru``xBMc~~DM3P+6W zjurWRabq@SD73wr_Nj)FU(TMf!Y#~cuFe!6UY^dW3)gj+rYL@>!{Nip%I_nTSAN8s zpK1P56y?rfw%xwUO_wX>XBs9};H3UtI}KhJl2fv-UVdNyK^j~JhI=4<0*2IM2Fo4Q zE18{-;3Nn=_}nQEiJkS&*@H03wPb4hAhXS+#VaIWQJApTEnDQuJc6bw5hRhBr`{A>>+P`K$X&@CH^8IjML=T_!;)Wm4#)>P4Y zt&38(0Rg-ca^_~=^oZ-F>M3Cgi?4MF_jzekrI^xO}^JYa64J(V1PmTM_8fHoSRc>f)(J3VSs1A|% zeBQ9I)GiD)w>WvY*dbDB3B^0J2U<o_mTf~KB3o4hI zzge-qf)#v%ILFX?xp6M z9=cvTmWW+9p0Nxu{xRn&ZU#Bso|kd(q}Ej&oHez1-)PiIsdtXY&`t;vi4q#AY5ehp z64@3%_w(J;77~PhDvKm8vA;5 zz18p%Yhns*1JWDb%##|onSA@yFIqv&j_!1<8QF`)678qlJboBYrMFpa3PEk9K<>JV z%DLaGys*;317PmwwCBIJxW=(F^{tBvj_@%m<=TXX%j`B5A91KP0-C*%t>SQQD~ZL$|#(ZmVku_#o=9B_I7s%*JjGg{ zO6KN%WEZof{Y9gI(Tin>nDFj%T+uGkx&LEGN`l0In7_fGM`G| z_|o2LXvC)rH!Ju5VL`6Gi+0ab_sM)EM~%9K4H zyO0oM)C0Ys8c9`XoDR5v5}ei*p2``WxNjM zNo0pTpO!4c;SI}T1@XR0Wm$kFv(j*!yQlD0=W=T= zccqyy{!e;-?H`p#H+Q7gaz|)K6)MdHu)R0g^0pfYyL?A>#ki4iP3_f6>ypv#&S}j* z@4us|i_sOVu<=wl&AI}%#h7(cw3#*)HQx~6`cJmv?O`WNa(z&qW)L9edD%snqE`w^f#7D=H?VK>p^z zT$mDsraEpT5awN+u^2j)dKU|BsxL`ZOO0v~&!)FE1O25y<<2w57fd2{s zVbWP*Tf#{!uA{nu(BZGcmHVP!9tyo?p3x*M#J@*4G2h8^^L{NMlQU##L=XHO{xX?0 z;d*QWJ2~2AWifVn812bw`<*So@P9}Zos!#GRi%wtK9S7_=o`-TV2TI(%w$_SUa|h| z1#<4IIoCY;&B30D8zAqA-yl>rdkBJfYwwxijvLO zJz~l~v{aE8BBc-vm5PL<7*%F4rX9=Rn{FJ$&Q>A}y7Tg`olCA5VzY^~+f+8;w}LP_ zq6m<88kYEH?8RE;G7-mSDg_T4l2L=vy+m7=rN~%#Yb3qY@zU)o5~i#ZJ1h~0D2Qb( z2twY%mC51o?#EFH1$@^Xige5y3&f!_*_$|Pf-8l9RMm3eyu23z^R8vth$=pXhl`S? zWaolF@1Lc;rVfR;cv!+9G0{TW>WAkRD&ynS>$?Gj&^8ml2qkeWVZ#Pajnlr%CqpSb zp)9R}>pVA^Vzauj9ikM(T^<*(vKhleDS=|qLO9}PUmmUYc&tqR$63sOZMbeIH%XUf zkME(JOg>Ee!_LPaEe<@Ev_slx_r>>IHW;g^Kv0AznmUmAP$ZSKSrxa25%Ap!L#dy2Pa`M=LY^#=?t+)^Du!mo%mNpoTufOH6NmfIn;OF+O@vU-9r< zeS0E`I5eG#-VWtAf~xKA9J&@m(%{7lUNC%ZgSmcRCgxaEO|B;YcZ9+`d)h~2CEz+E zCskyJg-%D}B*8Mxj2AZmWj+7roQZ02t5D_h^qNJBhk*rkR{VM3tz2wYfWCypCO7p}e=T}&nE?NV-iQ$)Dyih8KQ4cpEMiN7M0e|Vtpz4H)DqmRs|_*^wX<~`jnFi|zTh3^$DWK^*Y&=z3i zX5a>Gi*|T_Y4nUi`wf<|sOt39BsV~}s|W}H!t4)E=D?}g5dRAB@Qq#8w8w@jt6S5U z4zmS`?B7(!UieW|V_J`RW&#~aH;Ys;F0R5IOfW<$XsGc7EM$&y`e*mGp+jN-Z&B#j{+Uv$qm zX+VW6YLHdd*mG=cLHE))$G%0vM@npt6MHkl2UO{@#O0FaAmB?|$TML7(jsYU+Case zYd_;oE6Y@-&_`|(Kuodjf}uU90S+G~RClEKy-J1Sf@oCpSPi`K`CAr`Hu>IH@Hv)` z$Rn+Lljl0v-im*)OR1@_#6SrkYCVN98Au0m5}_#KzLRd7l2 zcz@jDxK>Xnxoh4pWYAwpQtOt42!Q1AI>dQ5_0wZT0k}g<3qg!`FS4wB+3mu2=yCvo zaentfiZOgi1NBJMuIKELs!QFReQb}yB5HF0_S<^kenDw`LG+HckC@uaCZs5rZcym) zf&+jWYjPa^a?gdgLm(|N<*p#XZN3jFxcB#8k)F5RmM_2VkC(b1tDqOC7Q<_+kE~O! zJmXe6#TN~@Fm>*`fc@;Mc%_dccNeMVmgIZZVDJA@N>Rppb39+IWSy}E@N8TZy(l^d zQgBI|tA8rgeB7zWu6edBI)f|{Coago7p(gyGOdn|cZN&oY6{gB;MFSo`Y;)vCnJoj(>nwA%?;4pwLna4bQry z0dmXJ8@T-cEj+%6vk>e-04&?%^n&Jx4#}}Fy58xK4 z`?GJJpiLGUhpuaiG2Ozq+dqS8f{?x{AwK_XKjU;L*=<7q6I^>ixw63D#l4@8bozJs z@uKx3hiqQ((hs~{+I3@Q?zA#Q`|l!(@m>1M_aLmZjor=qYoLG{;p>-z?I@A$+@lVE z{i^QZ_9RhN5L2z6I&N@lR|Zh4uIzLF=1Rd_n%g;s#y8&IYHPgoKeUB%3whBvleIZ- zFvw@AcOO|y5xU2#4{O_;xxYgMXrYNLlhLA2hEL!L!ka_IoK?1O7Ij3=+RTnVq18sF)1RW7kv1&&PB!d^DLcbIG#(%oWBV4D9xaCU6RLH%H)`Zu>5A3B{`qt9fS{cbVBHK?EH6fspCW_><8n7k4JN`x%eU*GMvD}g zYn-()3rGF0^*iX&6&7XVQpcMv4lxX%)zSEb!<1FjuVY2oLt+%x!5SXh6}+XnYJT07 zY!Yp85!bl-YL5nE$|K(oVb8JvN51FpDp{93_%_5-VVxLmKHoNcJZ%)l7d}BO^a8p~ z)w>`FSs1Eh|1a2Mp*fq!Z>{4E12z@DE4k3Nbrz|YiU%-$>KGdi4_BGd_iQp}Qq;xD zx8r?%SqAUr4&;$=-L`0iU-a%+?-sfpuIIgbtXDd+oRufrp4otdu(wBY&=pXVnFjVB zCq4X)`|}F_9yCAi`zGW6`x2o_E~CS3!gT7*EWwhhbj3N;QcOO^wS7THL?l+~c!>)* z%~lyRtMwZCGO69i`sw`52mS!<%`h?ZmFg6heIco)Hn9O^v%fhHd~(w5X)88ptr~TQ z2A;Ez4`X9@ZZlI+4A_;z~_D6|!Kmuz=m&gF!$n%w3hMxnG%wh5~H$sW1zSn^GY61 z#3_dramUM&)l#`#X2_pGVq3OUJgbPKFj~LMhP`t=zFSgJNCV`|`~0f1Uzk6jkFD^~ z9kMR;D6G*L$dZ3nro!YbbPr^Nnl+zRCxr4K(lJ|gq{=yn5|JT29CcF^cc+}N6~I6| zg?RTT@Whz^U?EsdnK-8J83K=lA+!<*E%`H#-nBGdDKAG{T$SLBst0SIk76@EsN56( zybS6z#%gT;vDE!=f-B~(jI&jJuc5NBv{>rgeKt1UnRt$z1QR_*No*r%v50LZ`Z>$vBlXEgHPLxh@vDR^X#bK({6GQTc z=aj;Nde;hf>_l2TvmseiUOB6+SILdLp_a$(gTi*GM1_TdEIm^EoYg>}d|s|QvpQhv z{sdau_H&tVkTng1=Nq<%XwVI zhqc$YmpZ9eH*3_ci9RwyKmF$^bh-Y!@z|YwePnZF1pMDk<#`$#L0AJ7TyzV?Z<*wU z_C88Vl_YHi7I4tiWdwa#lNVKXyPPqB^ZLaf7zHypA*Sq4X)KO7!P72#yUQxR8=y#e zi2hyibySI()bwzh-CYVqyXW~Cd3%#%^lz^F(=LWhHZ)F-yB+spRM#PvSat-N)hBc} zwd+1j4KWX6Pz4sI4w2#*V^a=Ip0|-GRck&7&Mz(27nVn*W;~Na58HO@)G$dBhXoCx zd&e@DY~%G~@>id8xf%>=gZmsZF;gO+d(4r*eFn^IW7yo$;A;0OW^{j#U&uA-{iA|? z1Qk%&oXIMeBUyLgM7xDH$4^k<53#vYO4F8;+3UzbIljCDcRfd)Wb9xQIR~c=gd)ZI zBZcT8jl1owtMgR_`a$U*UbbHQe4`tj;^j%O7o0qB^W|2SBmxWhjJ8JZ_0KSjD`B%7 zL6cwAN!3*Y#T0ofl-u8M*SM9(`3T2#H+1O5`aFF`6Hh-SR?EG$YV%K)5@b%{15V2^o4ow3_8)(0z{c{#nIE5Wu7^6;(w{fm2IENLjD z)Or5W2+(6Bs*$K7s%sQkc|M^;#3jjb(eIXwyW1MUP+z&NcIMwK-dt1#WRo$2{SF^M_pZA z?f<>y^deFoZ@IO$Cnk00kMsE!r;&My>iO{IZT1TTB%X}JkGIegwF*9gLWlPyB{wTB zuc>xkt-P_p$UXHDiobG>cE?w(fA26-hu9gSANa9mZCikMEB{Tk8&2(`k6D26P`m zD%B!_u)*pmN25Jgn#940+CKt+D#$1rPozjCR0XrT(iF+C&t{qJB!uPp*AiB+L2ZU*KZa5LR zCuw}W$R@f98&mOyP_0C2d&8}_3(5k2Dx(F{nd3Wamsa$RyDpVsJvWl3+vx(T)0TYd z0SZQ^cCm99xGHE#iiR_Uorp3XxQ1$`p)UIWLVu&yl*&k%*~Qwl6G@#)>18$sFlo-j zLmWR_?O&~9{OvcN>-t;jYX>v3rZf78^zpQrj?rz2P?h+v^0Up76~Fi}@li%1H^RUU z#IxnP$nZe}KBsIyKvEcS$Sn$)NddQ702_ak+WsN+^U6m?u>i5!rKn4Eq1p>vIacNw zGt1pevPs`8xACh)NMWP^eh!EYu?aFa?U%BP(G#*F>VyIS)0lCEQ5mPYA-A z4GftN8`T)EKc^?OCZ-$cR|ZW+>C7_^aa3PZR>r&!D*?ISDZSxX53ox{D(1u19(w&yv^j- zH>Q0(!;h8U659o2s`}gAC)sVr?<%*2j~0;@!`yx3|rCItd@$ya~vW5+70zZ zo4vf~%k?+e(Hcr*2_~yU(+O%iS87sHR8To=Q7Fn_$#h_)h*D8C!It6}p95=U4yE?z z#IApQt_ayQecsC6#GZi87*n13ON3(sTe`O9br_utgbysBYzv&h6xF z)#Sy_5NT5Em90v;U54^-A9J65+C)*{G6pg1VBxh9AvG7r7*OV`u!0*jsVLEdF%z(b z#4~=r7&<~FRPYA|%Ef=4Lb>3eyK_0iO~kr4zpdGCc!fnOx>aCIb&nRpKsW8l&Eh8!t+0K-oy8{PaXa5 zW(ErB`|F$W<`_4o?8)cE@J0qaBekJm34v7IBL;a$R9F;JxfUbR&Kw3#6rLzCuzdU(l*2kX zltTjuB2rf+o4q7_AXqPsm$V?dzEU_K#36 zXsC>vCq^pXxAXIo?j7l>d27$b9}F<^y|7>1I5;L2$aO*rf~jS5JBUV+0a zch_vnsOYl(E}$j*?h|`8!Jcthp3(j#ku=K=s39sUzMdKHAVLI}WO}E#75skhvyt;3 zcpec`QJQY$7ICfIOlYhO35gLG`zE58qZd)~HjSxKVM>vGDg*8OvX-Nue5TBdp~1g8 z6d|gLxHyKAA%zAX<`FW_ELUSskZLBs%r`Npu@CE54 zg}+u2el{uKAb!7ZwlKh}A4oIz*74(^=%Ahh^*%*j6C8^HRFI05(K#h~O$FAP4%3e_ z`470mlfd&he{p*n?tQK)I}?A%^*QqVY*NIDF_sz z^SCBeaUdyH213Rz{IO07i*Qj+^#Vco;LHG_rHsOM^FueS$*YMlN}?FnWu||GFXTzeKk8mYq8OqsPI-*Sr25yf+HzKxou|` zT2sXwE+8k*r_~+EY)n-;Xr7$J$rifV0m zF21QDRDvM1rWnM0LBSeZ9m*gN-u<0}3_8;lkbp2%rb}M0+6HwRFMD0tT#_qr;Pe~c z84bxbd#3zCB1JqsUjGGhpffdY&Bh>|5m7a5PI`H}QFF;`1?a!y?0+|J;F~z_zn+YH zgOtYL*GI{%>rdq1W*x7!e0C|IOu!`aNy1+Om@_xJM=0PYKh zTL2o)XMWw`3$Nv0A3WMK&AN<+O{%Hkxx9`YRufO8OhL4!9;L;z?f@e* z78HcS8dOl`Yd2vEQ)qa0)N@D+=WB}mtvS(MDQ;wuy4ETkKj>o&Z$2|3m8Ra+e}QT; zdgkoqJ8L{F-xV~*$M=BOu3^Td!BlH-MJ-L4v;c|;3knAa){NB=S_u(cr)_O zn~-yq#)0z+rh$U^pmlK3n$}naAXL4M;lqQc16ITZ>%5%i&e?gDExFnh)ccamD2X~- z$sg5ck4;5qXO=BC+&NhHT<(rU!zrcC3!b)e@d49{4!V8xe!$ru43 z{+NdC!Vq1NhN-j06kUucrC2D+Wz4+NN7!c8;4B;zk0NlIwi&+EmwDpO9-v8`(szoX6tS)t!RZz=H9gFuK8%22!w)q?hR1&5LLv|(HS zxi1=IJGbzEEP#vFdhTxzx8LnBucqEi!u>2L>}?AF5ZTXoSVkNu>|er>lBSQHRgw$l zf6>+9ex;4z)fQE#_BGDWmQyKZ_U9KPwaWLJ@OQ*aVPNplr4V;&cNxJNy{HaQXxC@Q zeEO-OLkS0tQUATQDhMNl#Y^yes9E=nTk*3U3C-)JCPS^3o(=?*~fQJ-u~J3w4_(h zB?vj&vVV2kln%LS|(vzAkqQSc)?mK<9HBZce7R;?VziSr7wg*Ip z$eCO}0dT_Y8$bP`AI@tHM0%`wn?8LGZMx5o&d}3+Q~w25NgXwB36wBPC`{%udiHrN zjI=O)Y9Nyu0Nw$)^?ogZBG<+W|1@Iw@1aRoNwb%c7tKE;{RcqOXj z0^NLn=h|rcDx*s)6U0UT?{xX^wf^=C|J!TZl#l=HkzBj2$^!}l3kA_hL^P;CiQI0P zd!lXXRAj*t$pmwCf}y${|9)~kv#v;Y!1#EXhSyjW*B38!vLkVu%EtKg7yZUNlRG?t z4^=8Ad|mOR+-*!P#gYgz)jD_e9vCY)5{;SDRZ>}5-B*_*)iWKJ5{^sM>1`Rbv=<~G zyV}<`cIT-+EMDiUzflD6t&WEJ4hmlJXYcIkMmP{gls~JoWZ-%Gs(22YNW|=^a94vf zfi3F~4F?!lD-4RJP(7>j1vKOpbcIfKpI=l+)vh28?@CZ-ae5sCoUCj%P#kbxIN=tG zOuJw#3Z96gC~teEi)*n}y)XvP_;??Fi{e@d+3lL|O{>0m;_@4aV70m-U zO7`&N*q!OlM@Xxd#0)mp*A6|S;`2fyQC6_9RWijM7{TWTF)=`dpgk04LCkJNzo2okOAPER$ zSMxLoZ&f<7f`1;bJ12yF%TzmXCg?2dz!<+oZ^`ki*vMj|A^7OTn1WLfU`%ozQ|h+Y z<<0ZDVkt#RypQJ={Z~8ne*BzJ2JkL=v|a3^A*VHGbLff;t1Xy2dqk~A(Gm*;?LE{NEceQ*6$Fq!l7kB z@<`*tmB=D70z(BZ`wl}YUEmU$ZyWBMw58+6j2`Ac$*p}lN9GAa(M=_02}ReIitEA9 z+MSD}1O{I&nB3>60^&NBGtS5K5{SYhcd1QWG2U7*`RqvFW4Vkk?`p321y8l~b6RIY z&hxk;@O)xZZBH_tF$;vX?h;M6$~2AJWV^1}BHDZ%5gDiu@w53@3bLEFdiU!FE%KPo z+dBe$LWgbLFWc`+SP#v0t(fcDt;#nyt!+hh^G*Z2xYKj26#v~w2n1e0USb1IO4H?I zi3a8YTjxF7{Na+y%;5@vLFwJ^1KV7@A%iAGy%j$ek|d^WE6ev8CuP=^q$Ivz#cA)0ztN_t)p0 ze@E~V#oS)YW1?97I(Pn}9d7iJE|=Wh-UZ+-LdT3>yIuMdDK%#kO1}(3xLr^&$NDs` z7v`fIi>#UO0~h4&)G*Gc`2ZP358-f}5|HWTv-DuH>^O7)?(>Ezq%?rW%KK0XgmUeX z+4X$E5Vm)QqXX}nYww$WEXS%;2TM|CND9FSCWC2_VKHF^?mHyI8276=e+iwHerw4p zo2hAis+xr!-Lcu^W(W-rPPDzLkGwY6q2o{TidDPrbP(VcAWFMgQNUsK?hem=>mBiP z#1(QcB_ukq(ogrm08zI`=9*lQ!JKM_pAbdCO2d~FutnXQ@$`Yr8z~ARh*PY}w`^#2 z`CJ3pfO5TCG5JL5K>naJH<;;^ zXEt+1j`)Jic=a_(5F{Y7=Ag`H)tIX}E@>O6TD5v?TSo|(AVC2A-w{3JE z&hn!G<}W!_+rFSr7Pd9?IndTg@I&O?73VvTJxRj;i8DZNq^Az4A__j(;oLr6ZqsDQ zmTL9!-JWNF6WlRl`H#lT<=o2t#v5NBTS}&TVXGrp7=DgWbI#f@8)fwhj2fuQ6uc|D$K4(3dYe3kDZ^u4&kAH|_YyoRHqm+N*B(Y01X<8FtK(e>Y znqQh|o<*5&!e=FbhV;pFk|l;TQ;+^V^)bX4AP+IxQV*Ok7%IWQ{9YD^`uxCLT5QTS zBA7cV>LYvQ$?>SfSkYTh@NdZ+G1~$ax2Yld;jtKwXF@J9tCu`u&D?85+I+ zJ(^p-g%J5?VFU5C!n!U-vN|)&K;wF01-;1-_$o z^`iC(jA`k)JK{zUTI-;2T+t5U3VyG{>pez+AlvOzZNn?xVtU z`;Sh%?tE?|9-34%&^(t5s4)3X2O{_ig89V_>PG4n?z1&SRX#}PoLE;su3(;c>FR%M zqqbLG3_pKMZDNhrw8e&W*bi2}C8XtB#$lW1I8zQ?X9FvWv3`On^>pC_R@9HPnG4^U zvtcM>=IT=JCa#LRZD>Bb_2e#Ya^u#|_BX))%fYgs63OL{+K+RL?heMj&!6FqUqDW< z&7wI1;qnj&SAFx~m8+0sqq7Sx@tIvc$zzd4SPeAG%^mpnF z=sa_lduaRA^yL6HD6M2i_wN3%S6npq1L2kYBE`yrY6!c_sq31}4TzG~0=-wH)udjJ z3;LQ{e+1vcjZ*q;cc#q596#=Zy&7n9)qcdF_R!BV%=fz^U}o?H3t~<-*zi3Yo9ALE zIC7IaeXzCb!^`b?6fRiu>T)}EyCT7Qg<@)Qbtb3wPM<`KD;f4}>l2n>0pO+yOczpL z90S8^sXSAa;D7HmwC72yhzP;YBE4hV%U<7DbF@7Xx$EflcOKE1F*B?R7OeUX)p~WO zYO*b5EY0l$=eiPKGY!Mx*z#cU#5@#O`IEFIWn=^*TUVT>m7q=F%GrDVA5rhXm{}Wa ziFT}xZQHhOn;qNe*tTukR>!t&+fMHLojEi2H#~b+)k4(*q$X->+^thr0S;j5?#v_p z3LeC)PiplL%VR7+ei~F3yhs~)+pS?>DHxnv!QwGWx>&nE?=;?GKu{uMBHfx-WG{e! z@u_Z?kMACtMn&(hKu52u6!YI->vA0H{mZoNGy?~?OH7O{Yre$RjeUcr~*4a4{`_PH^T9Zt?1%d(y9hzPk3T&E#YGLo$ke! zoHL&@T<2ERxCf2N*2mqX-btYCHdzkDd1ok{4f5H0MYhj*Sn+JBFq>RWSn&j7qJbM* zj3s&BAam$9hDVru0NxAX zRQGhB%qOD1Nf=c`{}e_BsOH|*&J(HOTZkz_{F%j&z>AMigf7TEN6Dntwoo2nJib38 zX}#Q?prv-V+d(|n_w?7^SN)yl#aD9Ex&Vw3Aa}nVfIB+OGhP!>h=UB?EivqVhhoDo z0vN{%!7cl=e)n;eS%A3kD?#^~EZx}-by%U-ecBT@fr8Fty8-;8_58i>D;XITEU_&ak>qr9ie_a^$AuXXfOE2yQUDoZe8k`D)(?=5T{t1OxqFZJj>%`9Z1mpCu{uIPu9>%v<=S3u?ZSn#*D0J`yz#(f#EDc@TamVT$TP{{;)mTX6|s9 zIcjn<((GW*)0mFaiS8h5#%OT5T2Ged*;Ey^3LeK{yY~?u+s`Uk9+JH@^lb8FYh$Kd z!w!^g7?hjvgr-E0N?H8$zL$R*C@brc-Ud!GOtDcXQP?*)wF#Yo!>+TSaCP={$sg$D z24Eift>N&an*=Kmj$uh@V7qOGu$$xTd%nmRAZ0sp?~f7dvJ^%VV@486U{!C9jt({B zRAhA9m|CA)u#1Yo_GS3$%k+J+;>n?r~&W-bRk9yRlg{e=Ik}QV5f^R zP%(YZhynfMJvqllUwK~WJn0U9vuo<3HS(6(e2Mwky_hl6l&a4t-U|CDqE(%@s=qFD z`MvFtXLAlBVY5V5l6Y*;W*2N&fl?aHG%Lsmn8VChJ>u@K=Udie&GA@NfAk*sa#33R zEeY6p*fQ`<>2H;*xRVa!94m~0IL#$eL$q_YXpvD>ZRM;r`|o&%axMYsAT^|Ylk0k0 zbv#zGe0Egtc{Zy!jG(g7=ZcZDq?^xU>k!#7ERp=XFXhu` zSUeKq>I*tp!E{V0N5HWy-%;D&{Lm)^fA1c8AkKmRANE1g#gWE)k6Xi+d3J`@&6?^+ zWM?km)vbylmGn&0k>=kQ)~X9NALUowalj2E1oxI;5;jt;s(fP5$u3V?$~`2)hGFRW z;hqmEHK<@PI-}sYA`VBmJ&3J+Woy0ymURXX9Q2A&ec{Qk?i1VeQ=pR0{NNHcQ|HeM z7uwRf_;ADzLPkF;su}_-n=LcmZ1Cfw0_-}cYW5J$Hdj0+~$Ik z6+uEQ9zmr0z~3I@=zoy+5|m5NEv?-gx_;G=5ets0GL9<9zR#+@q`6<~4SOS&-_8h- zN^0L7hSB^Q2d^OE{d2T)J4T2JKu(pif_74-LQ;sbv=*E1CzTim?%fx+gQhVz)ps3m zoD%H}!TVRms}ZftH(>07P9c9iAULuP)k_}cK0WP^ea4w&n@1MlyWaOZWE0)wV$dCX^j?;F|_%?34Mgke*QmNKTqC@V8%Lo6# zn_I(7nl3+#sizn_4dWC3Z(DERwQ4czpO$BJgiCU(oywx4lS>@WkV~(f@ODV?Pf+-4 z;l)kwMzbt-@8LL;)_hm|f`;zSYxRxr?i+TI9FPDXx&U9DHBRkFKuc=2`OSle4+hl-@O;YojQjJy_nWuWZG2ab!U&}p1f!i=agvgcD(Y~ zJftp6Cw{^}s$lGzl(+K>WSomG;Cu)04C;+ydRzE4yO)+r(t89Eo~e@Q5V%48Y1z3A z&5RXEgr8NpKM`O>pOQ zl4E*P#g-t4&nX%7l=|{xk`K4+AYD&N07R}lMb44W>#gC;Z z!bJZ7{+DRGM_1v25dR8mfEd{%;}DeYZE7JZb2YbNCfCf?mH1CQlPcXP23N3WO-G<- z_dLTIQ#OopY+cW0Oyg9rA$Q;RvxQnHV7hm}!|KdH@6J|9B%IakEpm-q+hH z-{p1hOkobht84*!8t?=`R4%-3i8pSPb3G*2&Ow+X(Fsr6jF`Tf+(9}(|2i{=Nj zCFcob9#E6CI(3r5@a4ZJlPfmnX(vxtBXT)HYt3Qf+4@FiAc)Jj{IcY}Vit4q?l(W4 zW8X84*vS7O5`c`y&+T#k(TR+C(_3!xHD~{5Vml8G|4;21)&&kqlG{&GJ+{<+t+I+L zfrpO6kE|hRsnaU{S1M<0vV0ABZAJR9Dfg+e#5|gjt)kqBIRXmikml64QOERT_TdAT zp!nvS5yHz&o(^~sQO_FEqUaWV1#D1==w207-?eAw0)`IehZ&>SUot^)_Iq7vgpd*` zc%T<{U#d7#ctLEQp}r2^x8pODtcH}NMFgtJ>ar})zfSSEr8^iS0y=+DGndaXIXKer zV_FJEl{_~Eti3QY5=>Q=#77_21Q1k!$=!0#8({LsK5_B++<^oOR;Rp&rPA9Gg^dxw z8``eigvUHz^l_BHnK=|AoxKR@djR1DqBD{?rc#e0w%x7%(Ko(N$D5%ZKP6C;|>V{ z`I%0#@d)2KsBt7aamc`B^QfgPN z@qg!@bQoCz7CKjRyi>Z(p5JtguV#{ax>5xWXo^Jw%K0s`QHu#oSz?^DUa|kh!o2_AQjaeF;TcDvPedF+l;DoN_HkjJ z7zG+Ugn-MRRJ5xkRW)>}(dIWf7oIjgVeay``J%YlIfDex_#zyx7Ju=YX!2^RQbkK- zY;B;Ej|MoSD}r!nuh&aW0Y~Ndl8{YC)H9XN%t`%E)MbmJW7VO|Ma%TWY4@=H{P6aXH-Nh`8Ksa9hdabe{{=E|(5RudiYXD^Cx-LEf7C3mo}f)_ z#PcTpy(kKPK#7vu*n}`v7h2fc69-f3UbFW0h78qti&wM$#)hrUl$K*3WT&pleZA!~ zefD_wAC)Q0RyR_Rr{X)2pv!)14sWF;Pdo9wFVv7~o38})%!1HkPli0xtk#)&`5>Qo z`Z@W2-e-FqQk*yMwjauj@GfWyze_QQD&>NCcV%&-3?@qa{- zAGf(o@)yotSvhn^*XJ4bh{ff=!{u{~#r)i5zMNK8HQJ)jxQ5Kw?sg46qYgCeT6jnt=s`K+IUC5RKv_9IxXi4HGA=6b@Hzp#D6|5lTA&L2@{QG%LI9Q>6%T`_1&0Z>1Q8h{T zozGfTtFX7nW4AW$!a{`t2T&z7^__j5S43hQOl@mRzc}Vii}WJ!%FaWz&~Q$_biy$n z^mMkZn#nfZkZc}N9Zitq9U%7xH@u!6bh2gu++5;2%MW+VH+Ai-*);q_-_u%Xv|s&A zVN*!MO;t{XFE@yOpEzqLPL=ej&y&TMM>h&HX|kWq;kYXoP73#hmasezcew?LKkom% zaL|ug6+YDeDCj>wWL`{}TfFTvXEu}HV{2I`U^M)L!h=H zqj4%hB(WxrQhbr#8LBIiAsm@$|=24&2jXK|&mOUgwB)5QqXy zX#UJhl5QmQJu1>Yd%e;)^;EvBnqdWuM$j5>cXF3M#UqE;7+=4g*l55X)tlXAdeyH* z70HvRQTD+>GHRwpxHeMmIQ95Esz#O17*(_V&Mt|D6z2oTemIW;_SJARKg@4wcILKgfqp}NkT*l>K8q|U%;B6${(d=cDFw+G@0F4i+vV66-7cd z6yA&TY5B#fm4~a#5J)k{RAqy?qF$@&H=j>F(h#T>ylH+XiVfOIk;NE7cj{Did#Uv+ zbtSTz2AVl^-fP}Xv+E#WNr&}K?Ggq`Qh=<(hB$*8MsHWSj+$SmKcFoQjF!TpLaU3aC*!YbPhJ{;{vE!F+ z5*45YV6NB3!Ru?T%r&=K|FCztRpE8Z{{xV-FPg`97hk!zvFa-d#|i=rd9ib@P(m(O z*Mh=K7@kAHzcD+~0FJKE_U5pw2fcr|o7KuT_%J4(b}T1^AK#E(wcS*o;8Rn|=?#>{Nlyq}W@!G|l3mSOTdsgP*{ z%9*zwHeEZYQ#-O!SMPTPDAT^PwVgvAOA{c7UdX2sIX+^0w;Y)=~=Uvq;sL&`S`GYAh9w zIIpoDbAl3IhAGl!j$hvEvOIs?vGu*OWSuq%f(}B>YXeb{d?)ya%^qT78{(G~gDUUl zwgFe;;IhRCDXw_Pa@fNZk(D_=?`2ZZ#{4!3&(tqvRd94?E^3Pz?}PoTG=2QY&=vG0 z2#K(4ILb8y?>&tFF}w;X zsm{{<;Z#r=T&8DJCb|fVW&Ps}Z_p1(F==Nga7g^X*&AnyLnA$y*kz*@(I^;i8GE>xcy|Hv`uC7C^2wHS<7(f=w3$voxLp8PgVAG z_iU4)J&S$cj3{kNs zYmyWGc3BT5LM(FM@!3K%=nV86H{xVO17R-0)l%vb*Q_b~JwQDxvHfKZU4oM@)fdn1 zCo*F877hB`*co_r%Z0^tY@13%_kpRA{CcmrG_`L3R&4qBC;kIjHcV93#|=5adC1Fm zbi7Y2_l20k|A9`T*mOZHgY*}-D-j0Uzu~=kwj{VrLfF1PT3H!14GAm&56f_8=Q;N^ zadWbAnzD$k9^AzWUJ)W{2?8;f3yfbeosBfLes9%#COd}t(FL7cNYvVH%K9IrvPLpuVJ~;6le%qCclfflkv+ zTR*1iD1u)TAK`Dc3se8kBYARL+8sJLs%2U-haecIM`qG*JS`oSZ*hkF*<2SAfmORG zRtzo~GCt+iVu~RS)1pKKj#v@`-WsNpJM}@I#K5ElLQ98_R4n+2c42w2&$x&(zo|G| zA!ZF9G^j8vCnwbW!cgPdKo1CRw^hOw6j12Wd$}e%-^yVOA03T|8rX8`vVCwp=JgCB zC>0+soQEK8YMxJe;lzK-DvyO8(cM~&cc|5TBl6wR5KULtBw0?c-|}Kl#qo}GY34Os zb~I+aL5(r?@?|Y1&8Zv(j9P3e$mrNnB{it2paI)M@$+mb(TIH}!h!<-M4bv{#;<$< z{zZQf(ko;A=xKz$x+EgLtOd$?pm4Ovz`9*v*Xl`faw;U&UFRHw86a--Se(IGl-R|i zWzAUo^tu4eSi0geHF2FL{|pcAp^cNf0`4^TSeZfRzG$6}Guh=74ayzHSo9);?H^sN zfdt|5mfwf-)HA~4{F1@}wN=HunK^@_{#Uu>Gzm?*C;XNIOmpu{T1KiUHmfp+MKv|t zX0p$oD3ordH(=frihCYXxMWf*G^Fa!*J&~V^I3KuBvWVmTBu9`t0Jppf8wo5X`gh`rA z?o?O+uY!1BzSR{V@7;YM3WNw`(*|Ug4ThP1&g!JOy()JeZERA;=}`ct19qq;fkzap z-mrf$c~Ew1+RiJYV3S0_trE$yt-Nco5{y_8z@_|uTIJtJR%ETh*Raz0ON zc2#`g+&n17)4|+CX!RXYYN7?^Ll8KaoM9%R>u!|B`*yzRnu+&sBz6$TMAW!<2?TSC z=WnH*HSuu>AORTBH64Cr2Y|Bugc8_#JZG@o*UGB450O^ZQp#*=&PmO-0R$Vb#f;4+ z&SWu8VcPYHCXCKM12B9gpm|FWF`LeuJQvWr8!n6U8q@M}v46x@Yf3w5w4X7s+Rzz4 zxOwR|1;W0WDXVM;Mz~%pxJM?1Ivd}RO0}9a_SV3T#R)k&Vm~iCHzYht93Pp*9Y694 zT;H!a63e6h7k=5rHGc~6tb%mB{jbyynFj;G1rwTcJrx@S z2@Weu($Y7j}%e0IJYuOh}QZXlD%xLLI zld^9|=_0Y+uk9xPA*&d?IeY9R(zm76f4rhk{LqD-Uc=h>t((BUI$?5plSuoj{W)D$07N!v!GO5u>oEaR5;1t(zJ$7b-Gc>OtEowkrEBtC;N zYjM^xW1!F>DS0m{bJC<7OJr_*%!K}KKSId5jG;x<;~cYMTmf68Zo*(^=7avaxPOf^ zWPU1ABfmGTQvYveelFht_Qkk;L|;)6gtDqZUmjq!>9XI@;ZIRecW!SK*EO$gRoX-) zz#i1qKsfLU@wU6?khb&9OZ{t*z?!?q@NRj@8h}TB-lp86dd%1!Zc^$~Z_K_by#B-Q z#1;IKa~@KF@s`Y-n@{`$ZqX|trsA1kr{?-NojzUjZk)P`A`wxADnRJ5%|;7+ zxTVelkU2{(M_6ymn_I;pHoBOZMuA6m6NUL#AJ~Vw5wAVUIQsO&4!P~2e&UqA$qo9t zy6q)OrVAeMr-#LneMZE^*K>F?t^c5DPSB4B@(Miv?_vdk-?NGaKCZ{7W>5%&;W@hu;_@aem_MS^&hhJU;LP zTM$36zPv=fNO0-+8Ep+ZD9Sr7T{yOGcWWtY+>V~ZUb+1P1|IR4L=;xt$x{qh8qOmS zr8VN#06n;v`|nGzX$dTwV9rT1+=Je|iXg@#7g7?@{crV${ZH-HhZ#@zC0gM#H*2e& z%%qZ;zb2xDY`}^nV<<;FlWQ4 zz-2OoEU(2flt&nfY_Ykea8d03#-|SGodj#|D^eEg0*}7fR{hi22$81BFWQ8n)S9%~ zz6V7fzTsa5&VKnt@Im?x{lAflg9)=j$BoGysv*|Kilcu0SG6>;3wn%?sO`)aHF`&kcl+Et{c zBvYpA7`j#dw5s;JJW@~zebO+pZJ?xvLN!70*PLwwYwOVWi4VKhD`X-{7eqogs9xK3 z^TjDiG=VUH;N}hFqq)v~$rM~J3&0ZnB9oOQrQZ-*Z*myCVp6uklrU9erme0nGJ`WM z!x>KDoeFa}Gd_z=Fp_+^M0-4~+rVplzcy`l)OFH6!}yh0ON-fAWaF|20zfg6q>0y*xs6d>RX!PIYls*efx- zezX5uCT-CcS7f?6i2_e=v2a1*MXFyh-cp{cX9&5iqB1+8r zXsfjX=pry)0$mwGoS+TS;F3(Fbzym+L+9<`oQYP|*``Brb}b+E%_d@8<=X2ukF#pF z5TR&_L+is`okNt{jj6g-t0=QQ2cjq-o`=a75lmE3VRLJ=2QmjJBF9uquVDF4-a)Vw zY(i(^XuEj#cyG>pAWZ;P6$F+9Ty+6sQJ6{XO))HO;ZK8~wq?$VT_m3vQxW5_`awI( znNSUe=E%FMC<*)w39&P=XGV9reKcNm0f8jkO_#;2C4gdN3`r_Uo=pE@J@O;)Yy1o1 zv~5GuG`ui6X%HrOA#54UfXoHEdmF{i;r`3;S$k6Rcx_Mdn-O!Q-gH<$XS{~A)V@PL z{vj}1a%`j=x;IK(KUYL830&eb0k<{fxUSIp*UPk?gjf<=7LblbH`Z>!c?9_o#r}zt=`@XDL;t!P; z7)H?cv6(@A`U&4r+`oDSG$-0;-(DO}i2t8ak6zp@d^+$qhp_t2^-%ZnJWdO4nJ7C2 zpqZ-8H_l^v4v9u(?vWa+F&`=U8V0P#FBSoz<^X9`4zaQM$YKSpvCK}!& zK69yx;_8etW-4?$3&TZ{dh1(QY#NR%SBlm#aH|I8bSpG>`s%#RkD}lVy?a<=cZYz(G-md5n=J9q)~T{@{eW=7P8+ zwhD~Mz(QOoBTw%&Ktp6Utt${1WcY0LdK?sRH2v{+gJUJ0K-gaqx$CP z@F@`J&&v;5n{JrGnxSPM>X20ToJD61(yoa#z4m~ir9+>3!!#ZQMKYfy9DX6YDO|Ir zLSWQ=rml&pHVkF;_s_8D`nWGOUK!hhY@KCvX+QBn#4cXrTzobNTm!7e{TA!s*!xRE zI8*>T>FG)ORsb-@UoJ&mOnG}tc3wH)!A_TOk|pJ{>+D~K=gM&TUjCv3ntE!)RCrcD z#3LX7o`wF`D~5qf1F)kE{ zQn>j<{;3KvTqbNMVO+-K!r}x0#%Er2$pM@*aJDV?=&C67J?T~lUZ8a;Yxb~=e)G{PoFFyW*DEGE8NE}27iel@%?Q?PQ&zcb^9l1JVpF*D z{8lDMHbS5jn&gjwzD)5`(DS``rDa~xFmdJl3o%(0sUjeOvL5iR_2#%vJC2>ZZ8i*3{9f#y zvQybiMp*137W5d0)0!!<=HpMG&HQX%-sMFLVtXBK?q3Vmmc{tz_Y3WWoe5vAFWG&s zCEoI2yZG@~9PJ_N(P)eQbUMF(&SLoaHBWq@lHtLiQ79B3djo!Kbu8KHA;M!$+)9tE za=a}i(Xsnod%Y8GwTBz!3-$1=ZYZ-2Pb*ln+^RI=Q_QS?s@C2>wS7@c9l zkrgAB&=)My0Rd!*zVRO#3%=j=Ki{HF9foNcH=N_pxvF@7|h!f^rXGr_`@xUcz|DXki*d z&|VdTG*7lSOLLsOEhVv}ZFdx^M2fwS=uRJwT_u`{dc0X!II$?#c{4-Y{7t((HE>Q5 z`-IT-*I#m6&q4w_iK5YHi{ft=C`9an1Z-i`PlzKeJKn<2*e4p3{WBLxMv>YUcUn~; zD1Z$osH)CDYs6IVPSi8x?dkm+7+cz+kkOp!vSAa2N$SS723?(myCJ()zh%uoiyc}F zJ?0F3K@6f8%s*Nsj|8<0&71IaC@~PbK7(#o)$HIpU{=L*G=M6cNN=9_HbanYILCGD zogrHdYS{}!0(LylU^nrm>W@#Lc;~tU_1cgIWHK|~@C=iYaw+BZ4~AEd{~TL`ZA?A`v@ZU-pdH?Qndi z%9QQ&!C3(pUgt=hX02UX+sF5sQhwNFT$6$z-9}>z_IrTRovhLXq4tII2f z<3i-IeJD0OJH<$lO|!}t>_-;re*7xx`P>POwco!>FXGsr8%F6F%s_&SGHr#rQC|Elv5jn6y7M|8{SZgczzc=GIu zJPvTN4`qvJv+*c?#=XY5EUsEA1?d4h^7x-O;O74X>G$K|l zeW^cddMSrl<1s^|d?;lkyVCRFKjV<6oiP-yKXLt)KE0PNMwU!- zT$^jEOpPfS_C!oS6VYKuB-w$?vhuH-b;2Q!oRKyoVu8)Dzv@!M6IeLQ6Mr!DxIT~9 z=?Xiz-JBkl*p$iF@|TvNK*HwQ_wqcA>$4=8pt>&xW1Lu?}VXpS{e#sI5C#63UaPkIHV`a-RkTUzHXS zy@?PIX7|taN?Lay#XA#JrP{rErR9U&HjP+*3+Z zYp+h@lNAeLFvpY97t$6hqd=(98w{SH;M@2TbMVQc-SeUX$?8yZ1FQ^k zY)r4ib7f4+4nCX&JSp5bESf!|nG!44zK^MKoEK+*mwhE* ze5}goT~K#!*$(O)e|dnP<;2EpxBeun7e;d9I7fky**}0FWAJZIcN9XDH4Ho0Sdv<) z(fyftS2joE8%P$DH>!5q5&z2&lfg!koy<&qV&Ad?TC&X=5NAvI7&CmUXpt>=oXwoZ zMhPu$L3XjymN`sp{h`s!6`3+>)#l;|Eog&2Jqhz&=>DD<-_|jjPUmp*BRu=9*Cn8u zw{!Gb61-p5lT{}wZ}9j%*prv)!+qyE_q+y-6>0O&0xP!{Q?);quoXCC%ntc(1Q~^{ zYRF87>RqFDckmLB#anTMbG(SW^v~O^ z>hdoIQ3oI5^7=n%qoo79%DB_njdJZ&YgRPb^SH@CKj+Mg<9=GlkL#+dbBWKdz&Y4Ak;Y32SSBT9|3WAN8~?IPfA?S; z&%$>E+#WzsB*8x3Ton~npe&)f*$=H9S#!f(ZVHPD(ZH#nygy?)!r1jZQczXl=zUT> zw5%*t`Vve50uBzfUbxPU+CGBQWnyj%MwGB^t{9`)vJ@39L0#%Hy;4g>~(|_BuCMV z2XqOP{@Pvq`{HM1QXX_N((4-ud9eK9sMuA=`t3n+Q3V;$?{ly7Z1*b7j@--=&nmR; z(M;E7_-V0Uyo}2FM@!g+vz0V7nLUyHh63nPN_EMbSP*9Osg7g^Og^l9Sh-U}t6C4Q z$I0wvA11%Hd9)cI490Z_v0)atH(la9|#$-geKM81Mz&#rqcu*(HDx2M1I zE#dIZVy-UcPJsyqcmCcjFgQZL%>AT@A9+#2a_5)dyrrzI9u;2 zRpAbP>Y84%1pdHMJZd50hFNo|3t{-egIj?>O2!I!*c6mw>!`c@${_VziLd+!6CaKt zejZh;f zC1+35nV>IgjXz8Jr}9Cx&{Bvk_&~cU7@5yO+?eYts@b2x7yc?3T`}N17 zCRbKzNIxC`P6TW_Sr)#H8-8lZx_-2v5{Rgk{+iBrLrUoGno$)TEPfQ#H}BhC{cVZc9kM-e(0hAy+R(bDg+7w! z&-l8+g2->erEGn}Y@`X4H;geW25YhDq0X`a7(fl_Nxm{|H#;apgY`$;O>~}4>kdxu zDQN!yg}xc6hNmWp2m3_@Ni3};o(_N@(mY9&L1Hi^)HM*Jj7x5^emTZ`niOU}tFpV` z%^L_@)e%cIunP-SEBdeJE-PbmC>-3u-edQxe#teysbGhhWK~%Dwn1wq0Hue3+|(Id z75**?JGkg2Ed>9q&eJCjp9xsb;bBW%vlyE>Y=e%AVzJEpF}0M`vSXPm z_-Mr~R;~;F8^Z(pR`#@=XmJb^>~_1L0xcf;t~VdgqN3{Haz7y&={c$4s#Ah<=K1Op)}_UM!kZbgr8zUm#Iu)G&WCHK2Wa zpXj}vNO;k~W-plA33;DRL?#})8h+c6wZG+(cSTf507kydMmn?q>jn6aUWlDE{4#FX zF=A6L;$RMyYAxsPF-09dv>g<`CB5?3^zzbg1riIOw|MCuTx5>Dzte;$1Gk?+K5(GT z?z>by3cCbks={lwwV?<6TE6rbc~e)iV^dOhjoLC9S+&6#v%~L9X}+;5DXRWppoaY- z5;EsZm2L)gCj6jc!D8*`A;v`18Gx&f;41xH#u%Dbr|RZ$IJ)$dGubO6Jk5utuyAt@ zC8BoXNGAe88bfz+34l)eb3UZthQ3cM@^F9~HK}ZhS5+it${^kzm~$=fNWPjh)#6TE zHR`pFe^T$_yn&Jl^6sEYte-q_tdqEy${oMS_;fyCu05ampz$+D7=LBcoAyaKDuIFv z3NVPz@BDs?&V$PxRqdd0U8#u2I^V1{m1Q*HTX9zL1&>Y-d%6{ii1_7=akq5|h!Z5@ zAGeZ88zKuTqMS@~1^Jrp7EjfX&K_@EAacL>s@6EL+bhvbH~$G=D8u(S>f?uF z@9QNFl@c(@5q?6W{Ea_+XiTRHP!>Z->B;%_t*36;oO5ICr%^X-Z zpEt}fkCZ5}TeHAX?55OvW>4`}-;TFwP0ksliyDB$GjxGJ(muXDkv}&_=)*`Bu-3rV z3Jtxi1dSv8_s_5Mda%vI!K|=)I7+W+&-FIRpw~A*>DO^}#?KLQB zb9L6{Gi*l>VOldSXc5VLMxtyde_X{2?xedJ2j&d#)V&bYBDhQin>AgXdbZ(CYbj@^ zym+*kb)CgvBh9BUj#fUZ^sxsVdkB-UH4W!RhD6sh`lso=-J8q7A2eR}&?!`+k{}c! z&tk?F-pZKd%f7i+b#_GlBSzaxRk7puX-hfnKvXm-gW61f4#Pk z@i}LUaXS!oyl(+^iHhD%rrW54(7%@&i2h@fg7p0Z==7yd*lAK6JBZ>W7j{gn9U0)H z$*|!&b(Ipj*5Xt3cG8#=W)D6nQDCiauKp>J{^{7)tEqfXNZtvzH6#b3;s=inFNu^A zqBGf8m%-v;N?s1YwO&OFpRNM0glq^Yt5|`%!f;Xe ze#`f8eSN5_w>$_f6gM?5zoj1;&%D3=I@> zwBPR0ZW5Z>=r%BIe5(G4Eb)gz!!@To>j}zo=)1#Vqbg2$s{a=XCg0xDg%U)(+E4v|WF42zDH}MN*9H>b643@tCMf`Uy+(M_9eQtkscggu5TWCg0tPi{@ zH@0|DUR8g96iG?vBGA-nvBmB{)VhNvpgd__BlBB~+RylE{bnBXR~e_?E7{Da{v`ZL z<&U4gCjaHtstwjvl=$gSEWy-ILR6>FU)2AA7~t>yhMk>SUzpnOl=9+hi*A5}K*fD1 zjqY2e+bD}PQb^D?MZ~?1tQ-u}iy&F;O{nNVb50(DbWnU%XF`%hv;pHr- zya+cgEZM$zX(4K{xqY5-P-ycctj#$Kt{k7x*T?Of<@3P$z#65q76y}mgJOll@mpvJ ze&MIduL&%dW?_9YT`VG*bSdSuXTYx{@kDgz_3_}Abv1WuazlOs7=ZGa%j}!RK%?4H zGl6@LyQ7adSbA7&HHFslCZK3HrD>_C5LDYm_FYov>P#6UMS)O}8Z1cE z^^*JT4`|Tjk`b(fi|D_SOgtY5&eX2)?eaQyX6dQZTD$A<3mch3H*0Gl8 z{>6=t3U;_Y%Pn6c_2Xv^k>erxC^|b_Ioxo1E8tMZn?}&Os`yZnkdh(Iu82r_QwV-v zsUHKP=H@&-*>Per7x#!sIl)wx(DX_E}Gj?(4;nmtR+6t;bk(QUmc>lGNRGqfon9QNZgGtF-B?jXY)&{KahYv zl{VCe?R@CsR#Y_y#Y{~VjctVc1T6DrF)?Yq|GpA`?zFS-8ivd8d3>oX%wQ1821C&_ zIebT=I<;PLary>+uBJbA;9c|6nb<+vg%#0xz{?h%(Ge_CIxUxbD=ZdrZBYo_4l9x4mTTW)6cm@g4Ea_^}A`O#zF; z#2f>+*m8{~`5Q5KTx|{8Ba3FXE?8N6s#Y`>5WK=2e0%O=yzR;rQD2`i-JZ`kUE4~_ zDBtL0#Us&9JnujJD?Z=v4nP{9lPNte;Jy^f{zK%lmW^Kbb4mCw&PV3gEq;>2%e6_{ z>H7Z=D*th~=B1{*mMNYs&pi73$a6NYDLBbOZQr2oa=u7P-Uy59Z~~&8#C*61m|N z=81@a-WBk*q^-78HfQnQX7OTLokUbIQ@Ah>M)mLSuZp`kyg9+}pcHj9m`}#(n%FEs zH%HJX=GW}=M=ZR{^m>D4xPTF0g2g-MC=>mxA9P~*k_bFWo8e~5SXW_OAMQGddOg1t zuemIUO&>Lo0-GUQ8msgh5@@6eIZLs5j7$BVxNA%_!u73qc6Dqu2sG&Fiy*%)F z+XUn_b5KeE)})a#-8}s)oda`p>HhU zZ?ASWbGqh8=)X2tp4YZ-XUWMI>!?9?$A9Nd_>};|lA%V^*=yjUM*O|k&DearK;o&t z0sh^ha89tJC6d(;Reef;9Vrv#b*m@Tt1Tv{O%bSENKs4IzyHg|4@(^tcfdjQyDzO8 zAUf!*0`FsDT*()+=5XV8;%<$zkI`3(iv-WD_%#-zs)y>AhB?PKGlzojRX8EI98?eD z>rO9AA(}P9A_7%w4U@V`1(0aNKw38W3%4I!OT>8fq=* zV%X^%R|9WbXBOrSobl1bOk9`PACZz2}U5by^WhMn*JhZwl>YinOKu#k_jeuGO_c-wrv{|dt%$RZQHhO+jvg)-rsxv!hNmPRozwH zg$p)V|K@r(A#2>x>`(NMV!~0tgNb8Jf>EQlsj-o7s9n#_7Jx#3V%ae0FeX(~++oCP z;yrfNs`PCV&bRI1+n?zu4HMqw^6pK^D*kg&d{iQdx| zWO`YTsd7`a=Q6;9$Af3i*mGR5EC9hl$LMp%%`gGmFlKS_TP5yNf8@P=I%UsB^_tMo zmZMd@JU2^`94cqjoooNN03Nbn9^bn5>@7wU^VQHCx^; zgkM9rHi{7~+cih`rIp5jDs7A6y$ZQk1qK^EvD8|uB1`=vW%vxA6xduZMI;Od)*bU? zPEKRfq2k$gmKTjt&2g(H{B6}-3m#E%aD8iVBzxk%G|9dpj*yVib2&l=7kTX3{t69o zS&F^qZheM3orVPMAzGktp@(~C>;fok$weIFfxKgSJ5d`azbaoiDHMetTlht1_@2x_va?u3{s8t+ZQER0qOg)ZhiW%!!lNX^}z z77I&rAmUJr$No1F;qIBKZBpvcNJf0iG0}5~P_+3{3@=4>bd51d!6&kq-ubukayMq1 zc?ZKMsFu!U3yY)gQ)`+u3D#N515RXQe^*7yGKKeHN&E*Fs{#Ag1VDVY z`kTjCX|y8hVZ18SiG!<^9ZN&3kMNlQeioSW`8^3&Z`3IVnbo3lxe*!L?3p!2$4VHx zHyfxA$15Jj_$&J9tfaE1S1`X6vaz3JyalHNW@0+o(Fy8$KoDvwc4%ce>dg0{?s-#n zX=ObrQPM9sM?Q#>ot?Jp;>Zh_SUZiDBy!!2iaSwC92qRfRv-YDPzTzkG;2|fbVDuw=?cz0z z=psp-A3k@!ME$v;g))LwE=-5&cp-C(U{v_&w5{_A^Lw+YjMVan6GVMfwtP*|!gEfIF`(;vb= z)?-RiI6{U%bV2&sEoPgnws2awr?Dwn&J(Q(9(F({L#E@{la*m&K?rB-nbx7VkdbXP zC|3VxfICl-`Fxy5t0f3$mTP#xi!`r9e{)IrG9bxFNSarM_dY?B*^Q*miG`qKJb(R@ z%egj*h~=l0?~Qe>)>fL2mx{wu-<~Lp{9e7s1mj#?NdoV0f5u#5t?;993uuC~wgn_OxER6I3fy!Cf~ z+k!Ta;F@&E{(>}VyLV}b6Jpq9kB35-j+6d5H1v8H(>{MC%y^Xr;H+fbJ;r|RP)b;% z+Qf=U!sakIaEnx+2rAJTKiW_6ykGA~gLy81htDO>VPDJ{T{&LBeJQrXIW00jIwNRN zZCXN9rG8Ct8{P-tH=9kld&ul}7Hx0Kk2Ia`CInSt-g$D|0}~}bWd6|nGv)mHX?Ikn z1FY_U6Q7x|S%@q)11c}BYN`cWeWY8Dd<3s?2QR!`;-f8p%9(j-CcV&}iJupb-w+Ek z#WZ}7v&5nJ5hQTpcZH5dZR%^4%z5?~!kV{N3YpXBp58__2woH_qZL%?X zm}x|m-*WlG95z{Kx3CT3WXSp}(^-YVY5|ddaJ?tv;G}$2E%J2yNYcGG>hq#Ah94lm z+G!*dgC@Jfcu#vNeP3WywV8pgA`)}jl;TQ9O{6nlP018EKLQ-e$8~sdnt;YBp?9Gs zc|$`f&Z%Aum{*o=D8+=50+&`3G4;v79jmL}Nu>K`&%UyP?IB4TKBC}qKKN~(lFIH& z2n!80jqA3vCxR;*EjEjzKNSpRtsrQU7$~x^CHt0v583#r9WK|$5pos}uobZd6`8^< zsu9*}67sO5@+ty%EaGiEOXxGXWB0~{K& z_tG!m|F^z=jW_s~=oaq+4L|1e^6vjY`o_`776?Ep}Gqpeje6GxmufL-tnF*o-=2G+1dM41knEi)s^^3;^HKE#ur7d@&7VrdRZr!~|OG8MNel~yDy zd;e`bWuTW5-001uF7lJ6!AiBHu=NAsJ5MTAYk??+hK zZ(_}_+!!9j`5=Z*nJI>unlRifT7FDd$R+8FzAgT&y(j#(G9p){%RIBu#anA*+}a!J zR>--IZ%#;)l3M%Z8MinqwebKc9Wk-CMiHZ5e#*3h$~ZG@M^NSCbk%`Wm7z7mNjO`v?bKntRKIN3Cf6WKj%(S zm^z=xrNJO7%PFj^=ZHBc9=c<@KO`$TS=RanKkGfmpLb(>qp74V-ifK7}fjp+~Eqm?D4Ts$w+>fH^J&-~H^yZ=481!=R@hMc#LGx&9hT!S9@U&ev0zGiLsvLb zW2)#8)jiFSbYJ~qX(LKP)SOMR2OBO_(^mMf&xIR}sWV73I_zodFV()Ze`|Cu_jg2R|V*Qis@mlb?Bw|u0fb$!T; z+`XLYw9FNy4X%EKCzzC2J4_!&gQ7zLDI-RRuIg;A8phx6JUW{{wY)xdc`SJ~dT3`gQbC95nC+$VLw0*H1hEWfgq29L zABS}21nUHZE6ZM+W~;8B|^hy@r}cQ>s2B2Bckb55^|2 z&o?c|FPjc#qod3-tb*XDJF;|#X#E^X_8lk(9P@)WN7pd7<{^~Sgqv3&Mo<$xle86` zxt-lanM2<2)E(G@Oxin^*)fj2MU}DylB$D`eHg8h-@^NJ}Rofz$WBph3p-P@ed5_eoE$ zhQ=|J452jFJ#;D+$n@^T9`-a8TaBwW%F`3(7oN;kjx;0yyC^s*ygi(iKGEaY=kV5G z)?tEkqwEd?DkE27v40JO<$Ls%vNx~Op)r5z9fcXkR=5K7no#1=(Yq&B{X#ST9wpr% zH^x}c$pd~J`z=qUShbU3GJ;(PcRnuhn)If(BMBBu75LK&LKg6Xc#`Jy5ym6~8jhpk&|!bQ*DizK;PGGAA<(z1Zu zaHr>NlZMe7Zn!F+aE|+!^}CAyv4Vf(?xUd4>}J8&RPkaYgx;;RDfil<&H{96i;;N= zQ&j6D>;_P7xP;wl}NTKch)T!^58Tjb&9(ry3!PYQ2WZrvd} zmbku(CFB|}#4AsQzwm~NU*Rh`9O6{z#Zt!gwK4H+ct?w3DC>3?AEIE(wH9vk+wN#D zY#VZmRW~?H&t=>Btr|uPO|4zgIb3&>S=$;+~HBNj{5GNM=^xp2r_{wdG)sMOt!%~0UI$PT( z6#J>gnJJCOxjdZWIyEMm#uNe0DEX=|L)r3Ritb?T$nImdy+h$dZjZ+Y^2~Qz`n+%! zd!7%tx+M+U;a{fp$ByR24RouA=BY*?C1s0v$P!4`3%&5&83&Qx_eQ8JfGM&U!d8Tz zV%Jp#{7|;CikA}URsA)uk0$Oho{spHsqAS%l391pS*&t2ex$NeY4a<$Wf9FGTmDzu zejO3p!$w0%EkDrch$gFi3>JLEMXLIlc9~Egbs3f0ka*)+iNnCu;v5nUw#UIvMKzX+v0e`RnBEwmMB*49F3t5!*Y1JJrVrR|N13SsKmU zY1wL~qLdz6;(D7GqlBGXaXXgA>%8D-oLUQI*835|f$nQpazB$Kx5Iz}aKS;E!V#Db z$D*b)73REU<+AfLVM``T~QBZ=yko@Ua z6DAQIF-u)_xWh7)iA5h5RS1>+(SuOItyHj%Ubq71J!$+1*HO?p6{_$bk^9H>oQ3t} zZIsWWV+z28;43uk<2pG~9Tg^>(HENyX9l;3Ox1FsW_B1lMedy1GnU8B!HM+_8gjVnch0U)WPhGO3~7oY(=paJbyWz1%p_c2seFF1 zR5X_}lP0%zYBqOI#5{=q)tLVYXkaV7Wz$~R^rMA^G+>aZ3 zkhg0Xf{`>V>(p*sd{he0U~uc$cO&pllqbfsj+;!73SYZEJpIih1#-6fFoOve?1Eol z{9yF)p~R#@kLg-~D5f>GHZK?|nHPr7&7T~OcTxrMu7#j**Z_S=A7 zIArIH0Z;g$k!Rd6!lLF%Fi8S(fAW#WCn?e7&jM(8ru6)LzxoPZ-EE6+3qFjBVtxiRr@MM@PQScxKdzF}o z6c{ZLn-&bI^V?zv5ji6AU8l^!1yA`rPMt{&yRjffCWEf4q19s)0wQKvxA9&XFXHy3r6R7JH%C z2y`17J7C&&KWWO3hyEZg_Qh}?(V17H{rc9ds!P@oXrL|9hs|f~iHxU|n8Q#^3AIz4 zdBdj9;*a2(2As4FvCUCd7cT>>fy-dfjx!wm_S($82Gl}1nd_N2gB+%~41=#VS2;9M zMCB$O9^E1?2ga2Jw_QSyYE?@%t=j;Yl)RHy-^0@ytu05kr`2G&x+;ru6SxLkO(x4+Bg`R=8L`fdt?^9vORCe+5l6l*wiIFRZsWnp<~dWC`g=WlI-$C&wsAiyObH3>2>>~pi^Ahkv9WE4MpZa=emPUR#BjaoYiS>&hM3x;J+^#-hr_Gn*`SLgOumhni(Ib;&9|; zF1h2nlNMsp$q78Gf-B(4zhs@65Te0U?`Vw*6Mp7EF(775vm7i)hrNP5X@Y1&SMk;Om0 zJV_jV+0h~6F@K#MK|;#`{YTnh2_DzCyd&@b@iYDFd*}g#A^joHL6zr(ao>T2I%oS! zWBh%J1S$`mLo8$Kc&*v`jjK@|?FZh;&G{4Vpum-PPnFg-*BulR&lTxAM3kYvp^Y>` z_+VEq_Q=eBB3MZ{L<(QVGgT$b+SKiZ@@|pj(c|n=O3j28mTXD4TyqM0n7qpsA~#l0 zg&>06+hmdw+gDD!hBREq54IcoR7AW&<{cK&Ca-}aGMs7pM7U__yNUKWwv9b7UZ{$d z;MRq}b#o&3BfWCJ%e|d#E_Fg|Re*Ej*EN2o@NYnIOPHEthAv%gC%BlU_0j$KU-Mr^ zvGLb0_Yki#^9M#(4}>SH3U*JD9@4~tV^@)@xhug+8cS={5ig9R^F1L|8(tDbCChqG zBw63ZGJOy`m4ls~4}Txnp^oGtp~mtwkJ8h;Cl|wK(tQ~AnEyVAqIQ0J5vUe7;srnN z+y~l#yS+{2CQTd4dJn&_+)q<*QLHxsXgx;+L@%}#n|#L!)Kv2zR5nMZR{S@LX8?aN z`v31cv!}g~UT$ZDn%=servJF^d`08%fvvw-}n6tV@ zL%GO4lK_+FoVr&iKVu9wxA)$ZzJbkG-SSC+6Hh>FfvH)Qx{xyQcHy$5{O zWgT4&fs`Z~XduO~ePUQQyAg+o%&FP;@)sRNrtNU9DFHIOG7>kaU0NbrEwI&EDj~!w zz-K`Db%dj?qGZHqe0%beZ+a!cMiUu5Q-_wkwon-8@W+joA_$24gG)QndzPSE)FASP z=sG1D)rD-|f8}~gP*|bYv>C#K8kK+S{)pYK}r z&>`;>RuPdU{Kp+sZd4y-^DM^m1^~OQc_MGU5K`CtT$UW@Uq2~B*8jKuTajiNY%nwcL>#v zn%s#Py4*>WW3bTn4w-T`w9Re=>=BkO*W6K`*7FSqAt{_Qpv@n_;<-GU74|pTzfbGI zrjF-_V+r3mJE+;_myBu6qvMg>@p6lKyM@*yBAnAWD0um0`Ha!FjX`c?xc6h1;xaS} zLl0*n^EJvFOOlpzWbO9u%?HRBE7l91_`=^>5sFSIs@adMxCe%=a#%79TOHs`Rq!dB z#grn(*-784OQ6426KE#Lio8B*S{`HBU#P+#6qrIw9}KWFx*kuaVI}<#EhCA0C}XuR z=L=}aMNK0&pt8&cKI8>YKVFZjF|4$f`9xcIO#nBTQ{of-ECHGU3gtvqgQBKiUzV1! ze=qkr?XgfSP;J&Bl$=9b1b8NbVuoli%-pqoIAU;OGNFGq$=J+K_XPXjfIcI1pIkX4Lxji%Ycp8{2YO~00>fGOQNL#K6_U^#-ve+7x{A%mG*A<1;MnBn2! ztdDi^K%Jf_GI`8s$LB)FRi4b{x{SOCC&@?ZPEDs|4w*#F4ho2zT5Pg6ir?^i>^f2C zd3u}#PH>J4#UD`7vrD65yr@*m%x4CHG;XQ%ufJYJ0(GmGgTG-eb2wvs?Ss~@DSWG_ zC(kJ7JM!&tNQ5W1pCtm5)6LZ4N9%QA2wQ@yy+-3ty3$r68Mj>F4<Swe7g zK<>ards{VxT3sM-Nv7LKzfl*qOue^J(?3<~kz;X%lvIiKKx4`d;L%(M8;xVuZM-sZ z%B;rp8i>aAs{P4j3C1I8Wqh6O<1`jK92m zC>ylMw0o%`K`ChMnh|S;m^5Z~xxeSorEuIO_00W1w#f!DjY?1wX2f67sFtV5$DxSI z%wcr@@+(GLmp2=-=zys~9W+6KA1Xif4@QP0QEydxD@cg31FKgfSt{#$+wh&*H>;W9E+GiBMY=EjAMj|ytS+_Tn7Bb9E%(9m3R$^m{kH=P0) zf9*JAe$j6*6meoHPTt<*#3}v|U|{@QSw}l+S(0temtv3YSKL>wHv;aIX$lF_!!)^X z&#W%x8sCPFxGrdfPAAaj@Q94B)cO0OZtsv7pKHI5<5m^ER7&kDk@*|x(&wmXv5n&T z#Ko;O*`xa8;Y>6N+}q|GZRi5cT(O>*`%S7cy(H=lB|;17v_7ZjuGMNkFnn@-{+r&{Z)m3geeVJ)?B zRoc+9WG1M;T29PHQ{D}X+PevU;fiq!M>QcJ@xq|?8u@byNF{jUv3+&(QNK#y<#(BQ zO9jg{A8neKGzNaqbn+;p!6z~)aEsL!x&>|XcTrxD%PQCK z1&$sm`XO-1irW7&v>m;uhe0~4VU^|z*dPv;(+n!h_rw_8v4Lgx-#jmiv@E{cPJrpQ z-dvXf3+7H0%dPU3c@9Vp3)`mM;+T&@xGkaUF^F12#YfL9>(1;Qw|jboxW3YZwWQL6{@|Vc3P<`ls#Tysqse+HPH=5zWZEDDBnIQVC@kgWFwsX3f)$`@U z{}j_dr9Ql%?Jq(2HLMyUkhlFPK}sPmark7z__FqAJrvKtg#lN;lmny0kj5)*$)sp+ zwrQ^t^RnNfR^ zP|oj6be9P zf_U^ue8Q6{*LLxAbI545Ksv1yxYibNCcjWn*X7C#6R;4hLip9vshqli>wlTY=7>Qj zqvp%Z5`s8D5}!E8S}J8);cF@xcBi9SHs4g)EB2!C6!%$Gfm{!BaBRsBzF!rH%>Pa7 zc>ujX;e{rS%xjFkDTMp=MDp0VkucD{wy9Fjp#q_?G`0~C&3%O*o)#BKbZn02&h~cz zzdSo%3a65rbGYhGI*^5;AKN2Va0=yx8tk%X+Cu*uN2Y*~5Edv2)7F(jv!(pO-s?HPbp@!J&N)K1J{SX300&8msPgY zn>$ETsR}Hq%zw{WTQHz_bN!axrP|Y*ifW6{KD5^r2iDx(s4?t_L}*My7^V+Rps(-GXq8lEm3l6d7->| zkp8@pEsItH0SU@;%>MKuH4kF?Vu!-xGkfmM@JvWrTS!Q6J3SivWa8TzPfj{y4?&xkCr~;pF849?6>TO8s*Q?tTfmd8*4rBJE zvpI77>F&-XvRiGu`Aps@r~Koa+qYZ}_r%Q{n5G}`Ks|lGL0pRVA%dj$eAUEoc2Gi1 z7qW*W0~nE#Q~wTGPGe)-w>HLxJ`aCU5*Po2(_Z8W+~f9@7FLrqm*``JM>|C9D!-n8 zAl?>02LSx|c=x{EKW92ux?p3*zV~wL^C3V1CC`egPJ|ucbPOnxl@yUk9G;;_kgeJ-%D2szdGy%Z<;iE8w&yD$nDOr zQs$BC=2yW1vwpj9PR)e8aRvoN8juTjJegJGJzx-!V!2t3rtt?*8N!^aNa9XoFms_X zc8G>N%izny8eW{i1nqc7oKMzxyI>OMN_T*VhleAFt>o0?w;s_x;@P+^>?SE#Qc3%vtnGuj{Y83Sgk~mDxEigW2zP_(UnT&gd79Ha72}$Vc zL+`pH?zEO!bPgql%wZ+A1fT<`i3q#HxmTlzBvfX~yN-UGkuFDA47fTqo?hj0ewqRA zS`4=9bel30D~}E^Eh8NVA2UMJLQ7}yB)|fzb&vNlZZQ8tha^TB_I{Cv`;jW?CG#Xl zrezg;OSQD;$GE5$TIQ{|UsYWFH(SnyQv5otZ}|E>WQ@sKZm3NMzXy>rf7Md1%whGM z(8QadThw-hah5?LxuO@l0W{q)YN-1Ve?CUXIMHmNx!Gwgec%1kWLp%4Cf*`dy3AyB zJV_$$la8Jh!S!Nx;*B!1sSR-PJLUN=e=T2ku&xZPdFssMEF_1JYmBVn8|}>kMK{Bo zXR0QIF>vdaIAq>NJk;-h3h4kB+BJ6ijiiljt3VKG-+YVp1WYZodei78bk`^vTE7ov zG=$igc=Sg>Qf3QrYww=`tLSqS-7tQT>xBra80(kSDOB!W^yoMo_1!gBEN1tv^#RC{ zEY@uY0nGm7G(I-YS=1OZt`iD`^A-@Shn^!%Su`eQ>Klrurkg`m{SXQa{22 zuK&Yl$yFU2ev`4)-czMA)z=T>$Ts+LZl+8V{LsF}3Tdq-nlKs*?8PkSi zCiQpzTGeMYN^1$qjUFg3U{6$k4Q0{;QZ{{*&nM0X>N$PgNgb zQJ(I{XYbScU-@NNWf(Cv<|Hcyg?1K50G29R$aNf`7v6!Nh8|a}P{Gge4!olXyRN=Y zM^d`Zj&QV5Jq%jP2X+Y>`X_FYCj>eM){RjZ6Jp<0OIX|>HMXw5NZM|w6JZK!W>ykY ziCE=pa^a=TY^|RLJmRgP7#O%O=LRGEQ`y@^8_>sPE8~p{l-Wb_?LiOj@P_T2Ax15f zp_{y>w;&v9taUf>fSk%b!z2)OZ&VJF8KO&VFV<>sJ#=Pgz`OlyO~b_)$QHJ<3aP{C z{1epWD_DAB#4@(k^mRrpg)GRVD;NCl38(dkMlWfXf=7oHESyT zESW!Swqsvui@sR>%`R}mcWUm%GP0m#uCwk^-RE=`PYBhMz#lpGI;^nU#8}y6F)x0N zz1ETeUu3;Mgs$^O3<`nS2#ezjBmnZCzcXuC8*<7^&%`xF~M&_=zf}ED9wY^N(2X4G|d*fJ9@>E9B88c-(Vm*b5$ev4g-aV(~HnVC&&&3f| zeN^8g$9K}^Qz5kRQzZ56kq1t;>TYZydlH7k00pr)_!7bDV!~ntQ_nr&n{)wuT0~}c zrRa&}{HaZC0q(n$E;dFeDET!z%N612Y#DF3YUA#QV(UIEzaZ+gWc2mnU=j1>Pv%yJ z5*mCXDhRKajucL9qq|JL5;AJjvSDT9qS;?LE?+-np$4`@pP!48<8uD8MAJ4s7P|DX zj%(ILFKD#tNv=)q^omcv<*->cm&KXe=xa80ZY7K?DS`X+6~4L;vrg-Ya6hAXe+;2Y z7n34l7v4QhKE&TH*P1u{{0|aRp|(<1^qNp^<}{U)2IJz9{V3K26KO(^7op7QYH=rl z8*|~|S|>QPp~NMN=NGcpKMt(GQ`n0p;cv-Fz4kfB&M0(3Y7OniE0LF7A*LeRLdXxk z&EbCpmoxC1O=*FTr953cH8ZJyABaLE$}-?T%5t?{KgxGs!p~af2?9=<4nP29mW}Vk z&g#7c5pl*O@;D6SH4RhO<2l9IYxmI>!$0A?e=_)~9MWue%=?|=yU{Em9*bKlBCp=_ zYYrUbbKPJVRB?2VTUm^7sYhx+ekXFP@NN7UVqkH?rR!?(H*gB@N&c34kda$1DX_AG zpZq9}a=2t8`~cTu>5urt-Pip2BB{~#_nseG4PaB=`Yn02AJvO8VziZn?m(!y_sxE5 z&a;`69ll~s-5crURen_+*GZ9~G2e~#mBGN=nyunYYT-~d(m_*weGyYo#gJT+n#(v(c&xdEm6H&$#Bv^Lr>(b8vYzghX8W%38meUer`b%rU0FIcRy<07M+JmxO(NODhK?tD7J_p5!@3sG9#Sxo+yiXi=?D=DfDwzS|1GSqsVrH*8spSvX;`k_Gu0HRzuunU=`QV-c{OSAr6lXeg!kW)3;gt^T^JZHrV?*=3n2JrZoJ153y zSr_%@{Ox2PQF$;r-Zl~YHs{`j|5Ht4vD*9q6~l@>a;-UX;|VZ4d=__lLa(l&z{08&c_bu#Nz#+Q~%nN{=CaMs|D*OpbGB!cxF;&Bj+ICC3lojXO=zH zi7GyQHV3oCn5qET0VA5Y(DEN%NX1aq8OIc{`m(ajxBPQLFDD|^s4|rgFR>-zp~Pb4 zXp49Ds6t8SoJMH|o2mJnvQXQ5H*1NFO%`<`d8qbfNMns$pg?zT$)j^d(8I#SQ6`4mOCsMP^H?2!eS$;c9|7LU$}_ z$$FTo{pAtojH&oga znv!ol1ED59rS7%=vaU1jT69Tonc7>U0t~XA7gXQC3xI-@`UBw4lI-`mBA3bNRHs(zlsQ^99kw-~5$TYo+xmMU7_GJyHwqtGM4Z znW;9u*mWWGEyN0>RetjjP{|M2I}uL4)G-lw|t2C8(3-^E00v?1=??1!T5#_ zZ^xh6zo62;FYxL4;|ASwqN>}d5gB#OPlL>EZGt%u5Zo%Yk!602uWb2OYympL&@$d8J6xG|c|*I92T$SIv3m3+UgDf7wgyiG?ztnwO+CFU8rqUyVZ;XLUz+q`Ib| zH8+`f8gV*SO<`3owQyKX&tTrATq0&%Jb1(97Rx!lnn~> z=d@aJ&?W0|Ma$+375_JG379(`NO+hJep^hV`#4b!++_FnU5KJFevBGu*b+#a@_n!n z)p(?ZW6)HMZJikee66EuVstgE%puO+|1-L{`Br@}Uc$Sl1{=H3q?&>QP^2aJu zb!J|SmfLA!9K~lu=^o(Dx<$|5D?=c74u&IxRql}nvsS)SS3IMq7gG9>Zl9Mw_CG$Y zQ-k%m;!M|}c$!vF0StLq47T7m2!WLs1so7NzcsZxZ$lKG4z13x2uc{|zr@zW+42c$2{Vy1{h$s052!%IHSm#R$Y9_^!@j~W3Zg{V_rDb`@uc{tbH zpea3DUoBbCBW~t}BQx#YqSmDOeBnNnz?%y{sRWk=UH77YJy}aa43Sy_ z&W9O`h&PzT>I%lfBJoSd+GXj6b%Qm#s)4~;+b`zQF*FahT1fS)v!6;sTfr+15tsJ> zKWw2EkOG#Y_zInC-!EkQqHRF*9>>Rlgrr!~`k0Ol=CAjs0@cF$SVm^h*5PjyAgC6| z7{cocsUHDEE13=DSOscVfTYKNcSpU=(@2c|c^UK-3FH*ik3F*!r%E#11 zrr?`hGaXdz_xCW5d)y#TXsztG(A;C)fzF9wStN;?^#x0qg?THJ7GRw{Umu`KuP>ww zKX-;Fvt`6sCzQL&Fiw(@x*cV7qE(XCb5qcS<4if~hn(@oQv??m@f0>WvuKnsW{*GJ z4Qau1XL)7C^tfG>yQ^G!+fl!}!;aZ!m}&~Emz=yeSNR=Hj$>Wzs_t0 zL|ib^iE^*yZs;(%Ycs13pZPcqG2O1Mli}L_AE|H&^z_A4`Q(qdY@L&}_&PpQiFEzy z?zh}di*8{_Hg5%}&Ner0JtNn~Dcjll2L~^N#bx&UWSZdW&SX995%Zys^|h7y zJ+J`SBo}e7KgN)B zPi@>oMdaI~n%!j%48_-^g+d8!YPV7t=*KY9;YAAdzTjq$r^;E`JzW>S+^E7-ts?Rq z#yl9DT0tQlRKI=yE`Mncj!k{RG2NprUh)*#W44u-i@d1^!rJy&XZPV${;5WtnsQoK zSNT?-Tx^36PLll-N#-Se2TMb>X)Lf}88SybUcGLGN33ZVD><3v!f3f+iDBBkh!^H~ z@K_Aru1n+VEaF^v7Gu_vQ+oe>51QbjJ7&?LDo6j5?yw{G&*B*yOG}+#$dV&g_e(5l z9Flt-&t>3M5xL9N(cQ7nodoCg7YKg!?5uVXCn29yI14GUA9aal&BK~p0V8#Db}7np z>oG!^Q{#Vln`R_ay}FJ(Hu_Gu@3z`oo_{zgK}N*=oo~p0bp0FR>2>(B#8b%295+uB z+MTXRIXYGb5Kv+^Mc{)lq1mrfWKHCe`Ta8D+5Y@$Z=Zp&%i(eo)Xk0<(tMaoZswT;`L)lGhhrDl>4*9p0Y#`TqDs>#M1q3FlD@YwA-*$g0pSCq zlQkEgo{NcFKSs5&n(vXj#S5qPRhnRN8wsxdtDTf0_g3T-ylWQO<{m+pjf?AO=xP3P zVnf2i5TUE??htdD&4T*-sRHZPQg5iU4yOQ2BI^m_IKkF#P+c+3!xsZs?g}B=Jd;BY z3f(28o@C{t%NxHCsb29foXkjVg|jgYMVGDJ#o>Hp zDs}Ea>{~bjY&X{%@%_g&RBSiB31UA2IVzcI(Ik`zw-_+G(*IaKklrK2o6TcGK&VWe zC-#%ZMCK(-1 zQ4+ZEd&5C|t73ff*>Q>51gZszFPRFXg@VN^&u?F1AP&Qr)%Ufzl&8}_%HKf&N7MF) z#Ffl``Y=U8$xz~o@zu7udwDAf4q!>@VqcLd9h@K$h+p(kbLkKSke~SX?8g|HxA1F>@`&a&$$hvys!S#snN)nV~ zIJt9T<0QAuFxR%lYaXSA-Gcn2sjne7J-?#I`hpM5HB#S~^|$dr(Xe?^?`UK2u@V@7 zYde_(9%XU$S7*^!@$0LO_6IgqSVJe4uB-)mNehIuZz4tX1*+R@IC>gkJ3@nc6Rx6P znw6|OGG4c*=b2LYqTJBM|$T?6p)a$ zhe%NvWN0cT%F8_7=eCBnZVS~JGo@~UX1kP~IfiGFsO$%R$)DQTRABQnv!l* z;YnCGi$Np@|y9JVoR=C`%?OSx>lxwK9(69<`{b$uS< z8g4A4ELssB%PO@xl$cMPHjZ239*Y&qI1O|G#nJ;HkE-u3*%M(iOrX<+s|bo2lg-w% zh5mhDo%BSurOLZX;L*dx^Ahpx0E!j;!B^*7OsDriGe=J5K88eHJ!q?BIq@sov2qHe zk1fV953ji2%NA~J40>)#lNI!Gv^XRa?^Tz?{mc#H3NBy45}9O??XtZCS6v0eLdBA# zYZfx0C0mZy(cp>n4OxAPTHFd0;LV(1Mb&64)vc^- z)chO5wCA+fOBbyqfpr#83>_u;k{*=qQ<;AL&v>yT)x>07rW#`u^CLwr>oCXOUu@2L zdn^Rs?rP_Ri^Yo~Kn4edqv@4tsA;y|*u;#R>}2R*a>PQc*u+%9QHTTkQM&m3UT++F4$FuuXysie{d#Fb zkF`LV0r!L_DZ`o0=;~FtoPbRL=>1iN`BA-Qn&b0)r6Ny1+dr{@91n}uPbp`W=#UFf zo`W8;AL`|6=1@Oo^!{K?r&NzCYKCZq@bvXcP1Vp;me^EX3fT}@+_Bt(Yi!$4_gB~% zM2Zo!In#-VpEs{(w{H0ORyu1++?+OiZ<6kf?@TbDwM9Qr06YG8klpFd=t`LYrH4=( z4Zhg$&5cN_Ciz1)s7qw=;XJ;jE`0ysY@Y{&&AK{4xMZuUQl?bbzKd(|^YdNkAINSZF zIyXdkug*lz89|09hyr6h%hhTU-eEC~C6ISk9b9D;CP0j8$!;z``k6A%6OLAgWtDjS3Z#e+0#24e4MqVeEcD%Rs(^Qs z_0YemFX-OhcRwRRExGu%%ecS6(c6t$pSd{Z=HIOIYW40l(y^ zj-CR1#LFl*(?2z5T=J>U%CNJ&Po#~XJ>g%PDZTAmt!P+S**Xm(OqGgzMjq|5Rj1ND zRt@Fb$?sSZ&FfxyWcmL69BOm@NC=Vas!E<$qhmA*NO*?8rP|EwPych33D)E!sG(`n zWBbt;tWz&gWpM=t`~NEY>ZrE5E^k_>K#RLWaW8Jg3Wef@77JD=#R(RmSOSIOQrt-k z#R*W{g9a;5+}+(Z0VaJq@0zvdo%y~s`6KJDo1Js--SXRV_PM8dE|i+7-j3IZ>lc^V zJs2|*?V8YS4&;#6zgsf=w%?V+NbYf>T*!b@y%TvxIdqd8; zPCj*2V`Y>LgEt*2C!YuFjDOm1-0(W?%PntY_LqEkHSsHp3un#1P`{!soIx`7`l8$dLZ(6dBrlacn!Ij;@H-=FL)PRc72%8LyXVEgvU@hQtx-aLH# z>2=6B{FRvL#fS1$T2y7fK zSvPZmO{aQctXz^K&cWV6^A)7{0BClQ%RQSYzj;U4^VzF6oa7521EPqI2Sy8A zJwBFOZ0}@#kS;zRyiK49_wfs*XCuhfdp{W&QQ`&jfXTvKFL;uaw^e3VkUu-|m$!fT zoR^%BPAQ4*s7%0bL(3wS3MLyvbgIEmUq8Vb)I_gUbUF=Afn3iGdWk2LB-_-qEm{FP7%y9pHzC5CV z+8?KgYX0dbucEY%o|n0{sjdJjaa5a&I!wP>&Qs3o&}rH42ex7ISQEvDL|8immaY2$ zgQy2GafV+JLA2tvJi%}7rl7sPy3_8FIiL-VVh7~#oJ{1ML(OotX3h48sPNYt0m`Za z5`Ot(z|o6zWQ4`+qKI`Pi#l;$bcbp@4VbBM@N^q4CC|odDnioLa*wg)!#&UvJ{th z)>V3!Zfr5&nd*$rG`3LBIXD5Gk)~b9Qfiu=AwSnV(_1}ga#~D$ z*^Y(44ZS9fHDg=5+wW|KIDGlm5LzeuQQp=qj{!Pac50?3<;{y$x=V+x1-J}f(<#vn z@&djJ@eV%6CEf3-aXxW#b-tWHKe~q419YB9i*HtLPHk;d@K+yV8z8Xk(Z4)Uz*;B@$1Me zGrNsLCgWcCBTHhBdPqBKK-q&7xxUj+Jhr(_)FgG{7`P06dDdqhA}gv&uid$-q$+c;VMp?ymcOYKS|$QAZs?7KG2xr)))qnP%ftMJAHvgGZ@Yx;Jb$FzQJIYliv>+^5C7gZc0; zmM{`s?5vqhwD-H4cny?7mjO=Z{qw2bQ&PD$ZJUHw6wg_!&E4`*ikU`B$14O8i(~1)y?au_QuBTHh|!{{DcuKd z$<9{JF)a?IcM4#PO>VJ|im#QjNuryb&y}Tu5$CDGwh#tidutB%%=vja8$;`n{WN{4vk3w z>Xihki2B4au=ov3fY_{;jLJtu${8G(-Y=DzQAML}6?N6oy?3{^C6rQug!u28q9dQ_ zQE-HQ=bny@G#tvl5X?$UT&~<8I?eM){(4JwP*P4bBbt&$4`J?GZ`m6DCK?puGN%(? zYS;rVqIOz>-5xQYiiy{m6UyLI%LUs3^W4;))w4KeWA0)kQ11454DlVSt?}{-z#(bM zXgDyyGZTY>XB5Y;uec`xilc7r6tON|ZTreCg5COpNjge9iOcC%H+Hm|A1qTe8;D09 z!KWK4#+svW@kC0>EbbzsSu#GJE2E?aM`OE4Ivu4c$xon}QMmIjr|Pji4S z2_;TzZXz*-s>D=EU5_!lTr)O*J*>Rf!~81caY$iWG3Pw0ve3jR7~c7r#ZzpB&Zg)3 zuCe`i7^}VpHxKEjtVX}4{AR8l`TS(9ptuqti0Wx5Q%`HLFQSGS1UJlvh7Hmg`7s)q zA%lqx;A>*M9~h>4iJ(N^?~nhQZ|PxCJgO6gYXRBh3?Q}c-Y z`j{Y`NbR_#=Eo6~>2Q8L?dqx@w?e6wJX6(G3!(0!0aOBTsaU>7(GKYDYn$FwYi8{l z$}hiov5qZ$;5jl9K|A}<7siZwdbYGNDlz8mo2zDKQ2#{rfbDX|Kyn?WNS1A~ zs$P%Ij6zhm&>*}uklDpF5orl*dneFL{mNR0H@3>}=;B4&Oj3xJWqbi=3Y5w=y!?hQk>Rbn)F=+lbXF~`R) zB(LQ1MwXn!(3g7m?%g5v&aPLCjTVTCB)?gND$*+O{c{Q@F`8N<-a)srnV|xL{E6>e zd`z`Eb}m%_6&01|6i+YH`bpL|ve|L)YN%@pv&MG#DV|b1eF&1EWsURyOe`KRDeH*M zEKz0TAzBI z@&JAVZ+$?FjOnRT)ZSha)>ZlLl0nH7yGl{t_$l7(xud+!nGb`g^Tj|RZBrE-Gu5~r zuO5U=MHKzOGU63tC9a*jH1-wl?~0Hkr+MmEShxyD^75wP>e+BqL&0qa+nM=zqSd%E zS^DVL)MQaaV$C@}8X#u#d8p2tdbj7uPWGf)J&oOUXlL%z3`o4u?RT8irmeEOK(TRhwa!3~M{pm4S8?D~7W9JG(?VUEbxz#l6j2E;%JB zD8PHP6fGTAl6hc^j*fCJ(j5B=DsQDmYA%*aZ3tG=t`+7Ht8P+t-mL;*l9beECJ6}% zK9@_u@kvP&$jhUZuA!Z?q*GM2!wh1!&b995d?rN(BHiSDAzc~>8O)UOIUCcnt^yeG zlAD>C6&p7sy6;U3b1s?I0BO-mm8G60l76VJ@1qYJ_ksXxW;BtG!R?IjCi3(rH5Il} z{%nLWbVm8^-6(S}P}DsGPx4Lfeak1~r=T$TmxZNTHa0eHF9A0a!I;7A{{5DcH&ioW zVxZr>x4y_iNUleNGdqs=#xF)*-l&L(2tetSFG_5JPBKVG$0j4AUk@Am9ffV~P1Tn# zH2f*--0b>j7n3T4+j3-^eTiYet$xZ{O^Lcnp_+^|aQ5ILz>+u;v5l z8Fu&}t+P2#5SO1+^hy-SY1FRv=ibqYEnZ2I68O#7=J-tT?%LR3EqJoAZVTrk03TD4|Pb``iGXpPD zBN(9N?=~fXf?PBp*igLWU74Tm-`(EuBf8!`_myDuSm42iqhX^j-#@T`G$YRNduOMA zO|Z+}le9+pSh7imglD&eq}7Fl595#pN9zvrEu;*`gC zSSwrT$QCG1ikCN{@Ss^Mx_~px@YRrC0dsK6zSJ9%oNKCWki@C<;F&Ldq@uiKN>>VgIUtG>QY%h1^09D7ou7{DWv7L!BUdHe9uEWS!>yd|@_PIA%uM~U_@2$s^2!(w%U1+|Ctfldob}QfcB0cM7D}Y?6KdgDds+KJK{yhURt6J?3t19q~*Syb(x?&Vf z53R?n^Zdcd$)L;$^bQrA$YU5A7uUX13fBOEK-s47PewD09s9<&fLkGB62 zOUKTH@1D;5(Nfp!d}zD3iN0BJgskM$%-bGT-Me>h%){;3vu9$?%UJC}xGU>LrR%Ln zD@9OIx9xX;O6%4nQ*ckC=Ltq_QDyw)$G+!ilq5|P;a^F$qo}gP-2pa4(z{7~wigMz zK_!bgP%SMj;nD?cqhAq}m!%93#=xMUQC5(9S40b%kEX$RW6>VG z9CFl7*Dq(KLPOCOD%)1=K(jeb>TAKgm&9#m>LP&APv;e~i7(S(Y@l4&Q(@Sxv$n>b zo0=hyvoXN3vfp5HcHCF_X*~sSV44!snmMWe%ebCE*n#R%NptFNLZ*|r!`j5^Vgsr z-nzU!eE_*g;LzvUf6`gb12eis| zMbT<<32Kw%)Th7FA^}v}djfj2#;)%t^?lLEYu|H+N*9hNXW>v zb#))ge)=Tl-av~s_%sm*^uS{qIb*hz5+HWu`JQ~yn1KD{b37WcH&Rca$;q$Lv@9$v z=)eK3nH(G(j4Ui)bYXy)v^3S%uOH(D2NadmbFud_n1XPgLkf73j zil||3AcTA3t6kkUZ!x|LJtlbYU)%)-yP`@rB%E5$y_5N6`>whG+M?w#PvG(+MKV z%1HqdLK9+_VI0rc?$5nOEBSUZ1IPJv&LeW6g+mj z&phTm*A391q*?vl>2gJ(Nq;l1s_HvB*ujCG9+cH^3; ze2;m#l@sqA$Dz-?ryzjz1|894(}PvvK7Be zWGJ9+4ld7jLvJSeL1tzO%_n#O2t-JNHfU1+zGEZdok^2zQ?R&r$}l=-Io_)o8s(rL z{Svsy&6(9HIJh`b!A6QiThW-_(8C8h5d3R0p6At$nwQX9(7vD;6>j4G9DfIbNXQ}t z1ur6aX{2cRE4lTXT)==$*7?gAO7Ne8{$oboa#PnJ)37phFD^P6v2H_GTK^mnWMMZv z6^+od_C5J@tHUwJ@(*#Kbu2c-`a+VDcS7+G(aVr0UyYyq9q3#O0=o% zvpP%b7A2q&G&7P~w71hC3(XEWFj#s85ot%XA^5SEq!PdrEp?u3G|Otc*y8^uZc@eC-11r?Ts;$)f+|DK=!I74H?Vn8XK_t~@ik%}W0CC+FY@@g_Muf`Un zc-qm`HIl2IhQ3cUBy@Brpy6O`Sws$balppTp5KE~pKkONM8{ijKsmm4`(GX_#IgR1 zx3P!+s~~EHK*yvZrfIrGYe!x5jshDi8yj7lL)mL>B4%?99vkTO;Ogr>UT51ZQvGSQ zgiMMAG&Hjo0~@W6=sWC1`o1`1p-r4p$ofs3I8-A;;%2++Fm2~Q@1VmmH2(DeD`xbX zx4#O8p2`33xA|{6@rPI}u6IpysNn++2Z!)oy|h?3@jllUcdyvt85ZzhDg*9gRdg1D zT%|Ih9FJMIlnPpOe@cbKRZ4f6OVfy`7q43<4RW)OGH_(5ont_NU9qf)L$yK|a_O>@ z-l9wbDcqnI{ao#vld}=?1ZoX(AFdSd*J5{W=0q*1(qxk}fpr+cEMMs7imyHB^LSA< z0rh498wF851bxV4(r=O5i1XgP+Qy>-mcT0VInQ@5!eOr9>DpW) zf|GNg2~k>+w!#X&4j(cBTIHHI=Ah41;1MBV`TMmt9h*533#N>Ue2OTQHa;*+O`-o2 z3{LfF=V{eunA8^^x0Pl3vGlN}ZB?loyF0=%-|VQ65Iv~Ap0JN|p-mjJz&~JKH@bdx zTl5P>m9OB-$Pma&SY3zB_A1za`&&(PVF{O%B8&*Gj{Z(kMVZ7?R23{lguGdS>gSE8 z&s$WPqBjY1z+Pk}%uW&l^La)9_*76T%F&kzwH&;>or|wmiXeB9!Sr6~*p9w~ax)3< z2qq$m9$kF@vVR(Egx=oI-cBjlBH)4z0AN87f2~f!#H+j314q<%OE^&&HsFmKE$cEP z9(}F8z=+~{p?G2W8YQwvF{g_7!y6_=u5vM_NyP@dp3!uZXGiyJb`vmw_xZg-S1z=> zHs>S4iQwqP9i~Uove=!}8x_U*;@CgQ&fySx-vgf{%o47<-O*v~UJw~dT^eqG3r_A+ z{aNU8R*Is~;o#wsw>s)tJ=qvt7*z8tAU#uw)+*|7d>gH`LrMVOpv~UbR_O!j+scGM z>(aIVG62n=bc!mI_{%Zn=V7M7{>{W5S^`6UJ&TkcQFVDNn5ACO!MF5Foj^TzYujI} z5hW^|J`Y!HJ;f6g1uY|uZn$I==~wYtnM!(bpi|5V$HyuWmV&8h0r31I03JPARHjD+ zr=^-Ac|sNakH+B;gZs709slSFn<5W63;1J@Daw{406XA2D^?XxwzUIyPX1~yba_It znh5}juaqC_JL-{1SJZk(<1FwC%_^Ljy{sX6_3U+`4OcN(NPcZCmpSX28hn#>x_DNZ#lFn!mnIuwB7NkoWiG_Op4Cx`?n|9mlI|&P z0DOIZZ5P#m!6|;(NnZT6epvDqWDN>kU;t8o?VG(w`nvJ3*f3c{FhQec?q!57FXU~A z7F@1|pTUFofUl?BH8hW3u!^{5jws+Mr5*FuuiTijbS6W2!rq>3UbmuQI z8G_S%2eLgLNgGws(V=}Lt);{ql>c4J*%tkF3M$_n>g~ate}F?`6cZZphFJdPSbptm zVX^0crn5-s*f1+m_CFHgi@R*n=ie6l1{Qdxg^L}jz49zztYy=1Occ$YHxVXnmp8)Z zr_VY{6?JqBTAzWXc)64=_So_SzE<~O3yBI>O-14y{1R#UFF3VsvuNb{ z>uvw#QU701`|qy#UjzLQxcu+L|L({C?@oWnLhOn1LURgj%6Q-Ho4%<1_baz?c{dkd z7I`(Sb`sl(@X>+6AD0Gg?jTbO`e)*j;?_*$(pVIq-Ur ze0Pp^X2Ig}_npbZ4TIMG2c{>kKLhg!mXCAeN@X82mS7A7*iWx7uPdK?x)2#51uX)I z=#XJ&>PM-QZ&R*jX96LvkLCg@iL%kDc;YX#ZvrBSMv1w~!> zwuDW6sH=i_5KSw%oGq-!tvqyc1`Wy7!n|=Z>OssuDzvHoU?@s5eA76)lTE@^ zmH*{oD_JoN&`@&Uy?`S@sY6?cogn<)ePL|>PfW_)amw9x15-C2{QO>-RE3wU-4+Ym z^_wCukb4zit8;NHD0+qW3AKG-W9M+d4wVhb;m^=3@Co9KDgp%K*BFS?jR=z`T@R_nd_voAMMY|y(N4uH_ zA7;xeuFuZCRxm4nU}+=ngsi_y`V=1wj+1$5-0+3-QfFw|6z4gTPKf*Smi zBq&$Ye5=}awFqzPs77DHnIMw{e;}}Rw#JfA{g%1xYDx07GpoS!&PeY`AzgBz_xGCv ziZ18#S?r}m&!VC~ajwYdoBTc+t8)HmwpW5rvNS+HGF8!AnSOAMS5B#0jA z`C3pkHIhH0#&PB-8?U{c)~m`+Cn+L^+3X*wd-*DIOJ{ z9TzS?r$~2(mPSgF9!pS2C7q83LJ>FiBV>;xd;4P@7lH|Y?>H=^dn@BfC#7>uqb>v( zu}>u8oo2*Ou7kZWGSJZy(k;#L|Zg0qUnDyDPr;&-_SB~h_u^s8RDsxU=!KNH% zxR$NvKjTt`DXl!pg4hV?DLW2})vonh!FKl-%E#Wi_WoeJqm|zE=9B3TLEwnRTEz+e zh<7+hWE`sabP|qP{JLQ754_0}@YE-jtf8;>8Eo$S+zFkQ$rxc%4P;SRaorGO&Y`x+(MjQuwB(TiR*zAkLH1b>`I|qil4E!zc1N`og z>ic-HRvXWMfT#}=-&G*_ltQ3i)nhTsx|}aoL7%yk9?x9TdD0`Cl&WR$=h9Cu=N`eW zz&@B)hUY|SQgK2MqD>h$f%Zc8@|)kJ^Fg(0Ksc)91$%dE&u5v#fm;?!aoN^5ON_Da&cDiu48cGZ%0~ra!uymVM8i+8kWR@hTry(Ec=>;TQ!=#%S|C z`}VV%E+DO>EFu%@VJ7{(2KDC;epClZ2u6gIe8UR7$Wr>ia~1@DgBu>QoP`Hc#jn>k zZ(n!%oj^n_LWpI}soztXV#gk-+&Ll|pT;TE#rC;-jn!5g3Xi9(!@KpEaZwD$P~;h_ zvSPp46M6{uZ5`D1p>cQQaf>9NAsbJCADRUIzQvD;oTl22c;EICwsA7im4KzlFYLx@ zMi^u4TYPWnbbIKvL({!hBRwD=nJl6=lH1!{T+@=(3Eto7Va2_cCzJYFQr06yTjdEj zC;qwy&i)t|H@AT+T>U}xa<#Ehi!MC5XQYcY=Awsl*!#1=)r*B5@3qvf$Jp4P*I84s zfDgYBm)2yoB){jbG+Fp1|MGEGN^Z$FkXKXXBLsm@bw~|>XM%3B*mC8qrmMX+9kf^_ zkBv295E9JAGsAvId$R8EVRKsM025X(JBZwCHWvX=W+eCDX>txbZGGhrjU%g1Dm zWeE=kMV)s8B8&CKpp;TZyQYa*hOar?V#$qIhqYtk^w^B?qZ_@EF?8BoLwg?+ruq^JNsnz?u&_)IDkI3anm z$sggI@D*P5w4FYlcIJZc#j}hbz&kY!fDQ17kc#vRWa>-fsTX5L&_U5mG~oQ`^cP!x z{T(TopQC=~Q8!iV=1d&>)G?XymT}*#_zs5vTK^Q@RzvuzSpAabB+q|ao0!80ZGJTL zU7dK7-d2g+gkE7Ey{P30;s0P1zv|ct1;o|U&P0JjQv1*+J-)?$ zTLw&1f-f?omZQb_-*ZqC*Ar4d&p48Sqg0PZ2lx*_W}T+GJ}l*9S7l{FMBW6NL_A5Z(P_C5E!G%+_7)AR2Y2O zcSB53vm@e_==&@5yUaTN0xm*aAV~?wGA^Y$P41^j7*3PL2GH^)gFX@xy|p!XVqwWj z-{2rLja-hZF*hk#KS)tffit15Tes3p%F+wuQ&U_n*ypKJ6v{3hBcpuNSR5mU`?KTg zm$;uL9aO(l;TY?jcr&mR`&K_YgZcc4_`+KhN z$P#F(>2AX=qt?U0H8h}bZG5?K?l49pg%WR`M{hKO*N9r#I;WE6l5S1;eapN+5&vQ_6J4UT^EaZlAn8(K6FJ*7X82Nfn1U`R1+-=&CTW53;HhTZdZ zYFK$Z4ByaGv1u)h*H+;`V}sr>9U3D399J&t{W+ukUq23iHvQ)WN6rKIKh%HmF&<^ep8g~K&2<{Nv-Q7uoySsF7x5l-n$vJc0 z+&gckrfTNid5@~DzjpWD`}g&&Z~cq!%8JscZwTK2002~383|PY;KdQ_qxJd)?3<#9 zM=DqW=cp1qlX_=Jli{vS%w2u@ z^+HhdPj!}`KY5N{7J@Rx=j;HSVz{p+t3MW+R~A4?t(z>(3O?Ym5Kq`2O)Cd9y@6DY z9uC%sFBFvzBCyhLi9GW8x>1}M9#+_W<3)fK%WoV|U_}$|IzFuU!r09QEBO| zQOfnwjSxM#YVzXS?<{Xuq9^QyOsi$ri$Fe8&pIv5LVP6@)6Z-66IZ{#i~v}nLK!; z+R;Tlryfgvj{SpTkE+9Z-BvWh);e+F2Ks%Gr@}WS$?ne84{Y&;R~0E-E}tg0ckDdw z5v7{tAvpsr>r@-{v*I@B=YC234D7U#5d3G-m``M7Kto5y6$k#~h-^ zezRt+I7;sMX^+2!)&9deDt0C7s!jVQ9s>`nx3?3pI;QYscP{C!aZ&4PuZgi9&r>kH zf|#c^Tua_UK}26#DgDG((-u;+`Kra{jU{Z7y7N~PXm032f~w;fxR#;n=92R9&kp`T&i7c`!@ zj?~%afyUDAA3Bo>%mRvM=}x&57=c7SPp5r6sIB+C z!XRV7YxH$|zvMOB1xE`d&4MvK%6*h8rc^!$`aO{<^Q8d!KK((txjxgWuCl)1%=xXw zVxsa_kcxaIy(Q4Y2%SF1xW2}+4t{0sLsJ^W|p*+Ve``fM;8Tj&KWYa^? z!?Hd^p;I*0LdI)m?|tH@L>;yM?dB--gT<{#KsmR3W>XMuuh9@}5jo^s6_iw6nNf%n z6MT68)$@h>xen>v{LLlPRrxJwRVk2DxWY8!Lxs7-doms}fm>gBVXup6!CQ6QE89<( zVa|=Ia}N!Yk5*!hmi!O(G_}3JDL%0>1ivq^jT=HDYwL-2sFbLf)@*}byj;6k`#m-6 z4qd4EsKXxYZp2Sdc-5VwfE%xAlj3Zj37dUVcaMtZBjc!sg$On72id($qJrg55(Oe> zqm7<2nn@~T1KYUGKIagP)QgG&$u5I?OZ!*lH@1T_G=W~XS4o{3gC$w9hDu)atDvq! z&wFh7(um)kh}A#5)HJf%nd#f^A~ZG-hu-EWM5PffY}abf)y+|5T`11ARp;#P-`njO zqbb)BmR(#WjSY34`O0%^F!_2<=kGYvL$K_7i=%8}MN;a0wUJaHpxPi&YZ&X?-F62 z^JaJ%vw`|cbezqn+L|c#gpO80ZZ5!u<>KMMPJQ8BKF8q69L07eCPm{{u2z}`IeLW} zuW-{Hx42e%bh-C9yxxT=bNfP<-Ue&_VA0ZZ*F@|H2Bdy#;!(GiZ3nQ){Hd z|0D5qqqoOYM=mgfzi`;$ur98y;7C{3crd4d8F|JmN4Wvc&kBbB7;0?<`bw=i7CnIn zb{^ny_%(+daY8Kt+|t0nm`WG*CqEZvx|sEaMl^mKfvT5gUqaNolYONWoITUV=m zJ28C2*uOD{y6?L8!OxA%g{mlYrv|k&hOT%#Do?c6x-v4$T=-2m zOI1u*DlPPPh}9X*+&mp-vmdt@b;Xz7E?HzUzat$H6x4j8r6{_w^zyyDp7BwFUQY@K zoO2`GBO>@=toZ}TXDzS?LP$FxFGu#-_dCm++EZVV>p@$A_h4T#;q+@Rwt;<6-;lgP ztF9CZY$=J{e~;0xk&(*m97)e{(p|vTDKJC=DZJg`p8k8F`2paG>LW`997_0SN@t+o<264c0=!zQc*2lyW(aAA;3^O01q7(9Ra7by;*!@dOo5DOd z@O3&)tFgx(&U&?tgI(!ALi!V=ugZU%ojNC#5#4reW{+$QD*t7#Uy@)mIB`s-R_!^p zh`Xcr#Xw6a#89xK&IKMZQ=`i5vEfbgGtnp4n}{@CXD4cWcl+gzF29pZef_=1>D-SK zMet&|wojVgGk3eE*SemIuf@)I3cpV<1!bS$$eE4`NNQ#F)b=4$lT;gshfq>|5Ekko*svf zTP^f+8QfmK_q`$2l(yZ$oo!!SI=pZg{&MAU2t6oy3ft| zv0RJYU=_D*FALwtz17oz=R5$QKfQr3zCNjw=?>nstaR0Nl7*I%rPrGQ^Sz!oK^CnQ zMdX^GB?*g{+hh_t=My+ftupPRRu38WqcVIwPT!Y~W#iz8^ru_-t|e1*>YLx`+|TL8 z&)?qOW)ow0e>=DQTms1D{^PQYCN*t>g=RID4bso85NQJV{>fl_~-e zke-))(@1Jm+*o3?e(NnH1k(tYQ~7yNf7)IhB_R(dYJlJfsh`L24|mdvV#?Ow78~op zD~o8sc-7`zEYhfZVGaO5V*V?<$)iVXtau7{f;D-NWaXjM-#lvq7q+)x@&5l>Rt4+G ze{vr8|BD(?Cr8swx)7RC{^&eUHere!e^(X^O88T05ngX7Ef zNBKLASt_A?Rd&Bx9UC*g91O*gb~N!SEHOC!6E@l%P?&)?^WV*%+&0RpyIOH*-8ToR z?q`SHZd&ALBOVMP(_uWhEHui zMB81kP42fJ>Ozd2w9q6u5IiM9|M-}N6+98pIqKzlH)}Tn+1P}I9Dv^!$g8;KO-&&Q-Vf9UkGrCIQpV6eZy98P{CD z8!V7Kx}WYIlhLkvfK&`rY8_7=PV(qjT0c+gBFl*oI&S-^R6bP^oxKK#!q+>}EmVoI zz^iN3ZQy&jUB=%_+mk^?lYpI`SCO6IQ(xPRwClZAY>|h# z_6V>Y6T;&AVrSIuhG3ifOT0Q|cvuV*q}Q*!>7)=bShyP0@_FDW*X}b;$#-YaRA?)@ zceqZ7YH0@6S~*?72!xjPL~7bx79J*9SAiK>GCib{}yCCp%< z{4nYG*7?|z^}+LSV@hj~OK$?H>!fL?Kz{UanRfnK+Pal)H%wZr(-&$rS_ z2(pFSX|v+l6x$Bm`kH>ArQrQ19{vRAJ320HZZGV=3!{4gqmZ{`8aAnynOaYW0+8^? z1>s;FJdZCM>#kr10hdkOzPv#VXT-~AdGJ`3@klNY@~7gcRYpoIan)ZU>QINvd?F?e zF+OjA%NhMSruwx?wCjH#UlIA(R<2d+pL4h|<}1NTL9(FDy|HI~pUH2rXpgul1$!NU zO`?|#SEQW}5;RlT@o>BD?klig%LcvOJa0T{X&U--ja8XaXR}OjyZHC^YKhVvz8d#^ zg$VHO*-#y$j{DPt^Ey{~a68y;H(*QX z?CZIazl7Lrfbq=avXI|r+P5|^v#)Qm!!AWXs;(!KbTa7fnu}RD=Y9veQAC6V)^-|`rMFT_)<=dq|B4oY-cE@q72n@~xO=9VS$4$pa-%}2 zOxg-AN3T;MZp^5f61*D@p( zgyG!LPq-Q%A$pcX^rH+?F*^+-yv;6*NEl5AbtWUC1G3ictOyA}%nJ^II5;t^!ZahP zgO?>Wt}^%8AU>8jCIcCM*J$+ThWd06hiSbDBgW}feV)`9muNvJ)`g}3;$?+dJGu?p zp_#YenB3F^87qMIM`+h^z!*Vz}*&VvS*d9$G=H z`mTyB=H9~B_`2u=xczwVw#i@hnZlry;il?vo{-G%=b)K&I~sl%Kn9lrc?CJFP?JS0oCfl*%WE zVDk&pv+ZxwN%@v)q*JBC!cy;+d?f5(6K1C@ z;H~|;{1PtYg)K48HY_VIavdDJ=^ROsEM*;9T*xyaU!Y@g#ukXVJ&DGCk42Ow>HC!I zy~J}QbU5Eny%Uv z_mc9Ul6-lXDA#?PcmJBN$#I31@$E>;Rqv31lKa#5;Gp=to}b}v|6naNcMd47ZdwZu z#n`~xF=%_UQ>LEe;sqHWs2j*aG~fJ=M#}6`k{JH@CyVMiIa>Dkse=2dBTF5(7V8JU1spYxnLW>^C#|8v-XtX=0CCraqde^jJ<{`7 zJ%I9zcnq+;__T!YD=F>OH~!q2^APvb)f4;7ljHtL2a=%JMy<&Gb@cHA;>CoYuh5A9 zxR%PwiYduf6|bPZn<2s>IW8S1e5LW-rBzkWY~w8rnIbgr;yPfkb^PCwz1K)Xk6~e$ z-F^W&8AD(n-9F{O`;wG8DY)tIw|#D^if#KMu17wbP5zrM-obkGD0@pR&6f*mOG3`j zpJr_AFuM5jXx}sjDA4Hm;!Do-`FOyRRuapj0YT+-$7T~YKlhYU^ZYZ`f2q9_ND_hd zr2K^W4(S?vFeFULe!0b2<+30qdkdLN;B1)8K8?%8E$KJ4_Rxo@LtT!IwF4Gy z9!T)Ohty#0%Yc6nJuAk@wMMmlkGU~O%=*pR2GDc6#CY&F51#16~BVXm83!oK}{x`|H@!T&$w$^IFfX7!T&MzZ4JayL5Pcg^a~l+jdt0HyyAi|aVZ||-c9%rA z3M0!(2I$t23OsAZrv-D-sBM!K{~z+83h$$l z(x``{hfW&;HtRu>mD1UK;Cl9nrIVbH?k$6fXwF zhrQY4$VQbt`cU9^(mz3%KZNcl7i=LfU35t-17~Hgi2n zrex;x*G&+|<$OJs;u;ZlfQ`-);Pk5e%CMgrUB6VMTtkusj z#=_mmD4P(BUR`zFpACP1P0IUG=(aCowKPQxB|A8=-E(X{Pq$O2{cPvkhUcRf^wzcg zuFEcv0sy!KYfZ_tnr+V8F%Fqp*Infe235_6YCoI--se@A>pl?n0`havWJ{>tn0! z;hYh?AHL&fM!v_FAR`{({__BL5RGV;(;q<8UMc;*3HlYt$!-M(9DQs*BztI(h11S! z(`t|VPk>`Lbp^FEG$b5Gki)1G{!Z&56x(lfN6DobQ1Al}X>+-nPg6hwAm@0bZ@^r> zpT*&b_gUv1C!c9^9r}N`!TxSVG^~QB+6%HL$MeJLq;wH8{W&Os#`glGIS@W@4bk z+fj;iw$H70(~EBT-8nwFg)EPoXN(@M`_q?)OF(`06Q~hG2wX_ZkR9C!XbX~@wE03b zK#kR-5hj9McoKV_%Us^eh#tnCVG1=_ACMsuQ_(1aT*MNgiZg70OEwH=M6~Fc(t!&7 zJT2B{S`SK&Rs>NTufNDP(Q3-7U0oAN7-aPtd#pPYMg7DmV4An~5boDRD zBfl2i|M$EQQ_I@^rLqtacQgbPn$gf*)XLa9 z*f?Z#8dV%qM1Fl&T5kt;nFECbh`xqxHS0%X!H%{Dk|`eFYTBnFG}|T8rRFe(M1Oq0 z-RC=#_2CH_Py&PcV;;Tsey#W(F1$Y}raK|xyU8F(RbGKZ{Zy{tfyq&84VWe^{5qcO zf@LLIx-)U#msd}8duKkTH@=M5`XPS2;$?mIY|E?Zs3$}KMGZ<|#x;xkAMP3xuFUGa z$L7uDRS12NYtD*DP?XkU&3gI435zZGa7QQr_&BzpV8k6Q1`BL|G_B3!V!xVzF+0-c zzb~(R6TC=q^N)scjB~kWluO0B`#uaMRWlc;>(QIgTGDxr^co#)?6~Hm_(y`2~TV)Hz z29&PAA-pW%P>3ZU!?iQ4VRA2Z-yKL~rezr*dRCT{xM_LRDN_k7sdMzsSr%CNxrXNgvQ*$+eV zK(b5FgMyNthtrE^{_7|6b3{42VIAKUMiZ)Y%24KF02;8b#6k=fn0KO7)F0TO(2ADZ zBlgE$R={V6f9?79JH+!%IlrKS{UvG=YV;L(?qhO9*SPwn0TEzyDI8@VX&;QCXm(r; z+_e`$0IxUy?&BM3;$fJytP%J}iUWh{kS)|QV#+p_IN3f(XN~vW+bpR=Scq3Q1^YDr zl(525ojwyStLl5#z_rv#f!;ohcV$O&@{tORkP?az5KF!f1N1;v!VRrltv+~+x1Qlf zz*=82+4D25aGt1_d%<6}FWcfyN@z^_&?c+f^^h?5V5H`E(o#m5k@h)5hM2S!?WM)^ z89+TiNUFNBdYQI3@0-`G%2a_@m1=^}`b5#28Gl}cES=am_gUg!vb;vtk?bKF^~&>0 z#yG)6J<_xzwD}^jxQ+wCmFH90v@R7ibgtsL4C+zd#5h7X2mS;i`PYIQ^KHp#5(pa= z*{h-Te1qf#>h4L>Z^7|N(uaR0?6&61eqiR#&q;J^P4zD%#fYHw2Rr+2(1pAiCNq8} zZm23%t%91*l$(X=UzEEZxyUu_;sY9xY-albM(8j+{V%fKIA18Es3MvnTd03~|Lk}W zzE>v(ti72GV7Qq0z$Q(Stk8ehjCsI|j*0-&6mu9rxKB;8s4ox2oCEcQ{XYJXW+03) z5TY7CYe-zPi$Mk4_2Fam`KA7Q#TWnWavnknPQFhQSD!GxQ9J_rqcLEao*nmTJ9YXm z+baqUa}O;hN2pc*aPi!b6nMn`%!saJ7AEp@1*@x2K3_N^GPB~K-DkfI2~dIRC?&?Y zHI9`hMrnK6rsX~C{mV%I^I)M-B=!$hkPVHk&k0Frb zK*tW?2-kWM5*d|AXTCzN<9`*4%c%1G1pt+xSDy&h2kXz8FewJkAsp_Xk__xr0>(D} zozd&3Z2gJ7j%F_qS()*fDs=nJGu$%{z|WnfBK=bi#|yPs4*ByF&i&vWfbN+g@2jJ% z23p+nJkTBu|4XQ}eNE{@^@5Mpg=Z4-uBJjK;e#^xS)eU)wj%i;G3X=jtf*k+I*&Z} zpfhrxI{P5?vS1N!nF6;2b`VCGoU(cHHEWgVw^6Zik>Nt81I?aunM%4^?jnh=NK`3aPTMZu{GgzXx6dwg&e#5Nh@W#ZmcVFj z_e*_|I*HbF@-4~k;w32GY=)u5I9LxM8g2aR(XCj&8fp72TZ=c1Z6f1bxVx+!ZtR=8 zM(f8`tl}ym65rrG!%q#&oCZUa-cjeqO>KI@M3fCeo-=hx@ELdr&>bb#tfZAcr$g_j zpj4y<=e}BHIF&E7LJbxo?(i+%Q?7!>UKL$O{vt)kV6<^Yndv}^Sq+nHG}VZ(a=kjC zl9kIoT|b{`?xbJpXyS8s(3?3DyE5Rt`p1C4wjW`5O5?J?YvmJ?gk+@sU>wjAi4jG5 zbcD%tf>%t^W6y(TmWC=3oA!M6wb4Yld$CkwvfV^#JkEfrSzqM?c%QQ;XqGh3$7dCp zZeT6R@Jq1zYna!M6Q64U3=d+6!Aw zwDA|h-gp&5P%EpF=yh@0w6DpCz{|>XF;;o~TkHrq5dB)qKPV6vohj*~EYjX@9;d5& zvExrtDK4~#_41RPpmX5BRBjKusK%!%_D!9djo0+=D1lybDF=P~VxV3JlOWB6WNAB6 z8uSwFS{WB^dU~W*xOW(joIft9o41jgYpR46h#|Yy3L)3BGn5TxBa~OS6trtka)1~N zk0b9-hnK6(wz5%)pdThiX|DpA`elrDjU#4Jt#>gd%ZYBCs=W%fFQ)Q>6sjp25UXuJ ziDSUezzzY)303<^TtmNQUG4)k#XJ({39WNhP#GB%ssWfmE;N2cNYw@;qL(L_COF81 zf?iE$g^mN3?OPrZ9?C*OvCDTkdSen)#^I`JOq_x+L%^48jDs0C6vP2@ohY5ejh$%p zx1pxrJYc!Cx9nw#(a~dkDaS4nIdzC}mVt8N%U566>hldG&j?U6YTCRu{d>=bjkYFG>N+LlkM5hJcG~G8AS8Ion{`q--udqENzhd0U zP)ID>PIu<#p#oRnS@&d>Z20gX2yJmw$Ref(8A(Ro$*yL~k8(8*imiyXVu=D~I@nl6 zZ9p5u3|3JaxVk+IQWt8Ph(bs6_?M}|MsEg#5FJpO(wya#n_vGin%LFWFjWg%4eNE%tBGhuX-I7{jN{6Jqs65%|Y{y zQGRfUO&wPp_X`?0y7*C?)>qVn#Gcp(`?$4lQr+hhiCDn{Zo=om|6ZG*2546x+&{a8D@OG7#h%QMR zBd#bB87VJEl?4HB{k3g_Sa<3$QwfhIu^uwao$1WS{Zb+iT)n6Ux8FH_jCLerFQXcO zD<$+$Vq>+|*lfp?M4*KAeJ(V}O}xQ~+bYBXhK40Q?6N@>1&@&`=~IAjF0K~H@|Ad8 zpC)#LfiqLXH~lo`gOb~y`LxflfAB`OjG{B&-DCj3D9M_?1xZx(M8dtAQ zDXQ$8o}}O{<)_;iz45NK)6$ya9#!)xrnrX<7tlg}p6wDqKfqcgL?}xoY~k73@cJtk z9qJ^;AF4RBxJj~s(B{pqxvt}y0N4vP-;qd9=jhnVEIu(-Cfqu)(F=!ud{ia%IcfW8 zoQq-U%*|mQyEWvVKGHQ8!v~HP^1M~^ZI-gZ6b%szlH9F)qkd-TuQMDJ(Go!XLbH(J`2~wtb@m3mRc)ZU@ik#TE-K>}}qECRHFUA=yunZe&>gZ0ULTLri2DwapH7ehf zBXZJq+04I3Cl%FLb^{9+A%3i-C;e|FRLJNj_6thBgOyf}0XF9Hsg8kw#8;H}vU0@q zcyQ82bf77fP4Gzw^GhMtmFiGpa6lROSCY1%({(+C!Y91D;%udhq(chd!&t^2%8Er8 zg`-pa%iW_U$)90o2QX{TH1O~)O26tY-cT@Cwb3h9bvd~l0be{noIfnb9x9L9zyx}a zuz@!8@;<&WA_V;pPrTxUxUnn|{o&sP0sPHG1g=!gr&wxjIa8xaUkZPr()aVqjPgbf zkEgV=%kERuKmkCnQ(4IMQukmHTaUkT()&zS(PVMLZHzZ;I5}!`peqc}5O|Z{ujmcu zgMs~*hYyyK3#w)Uqmp9@%)Zeg*Rhwr(Plf*len9UYW;231I1d=qycF=v4*Xt0_dun z0%+_;OSM{-Vjq9Tj9DR13r`lcKL93Bjoyb8XT#{?rE0wgIe*DFB>flLPvgqk9$oQd zoUbsLq@dS0F7AwE?6VuovyL?8JhxF6ibla_@#q5`gH@&PN}ArkM?{?sq5G!ioUKQV zYx3B;@8$Q!kf8tp=GC5-H@p%>p=|j;k;X!x4fm6hNFY!EHF(jXUX7n%Q3;7$BD}*r zX?GDzy3K^FscTgEo}u2%x37epZI85;6Z3>;Y0H^;clK*ITKIeC z{YVIGT=>sHp=4I#Br=B|=Qn8J=JLf3TXhkI{g;ciYYy2fmm14LEYTu1k5|Rh{KQoj zW{mFVvJUehxm)Wh)XbS_o{?#If39&RTf-di8!b1-#c@7r;2~JSdau}UR3jyLD9GRG zT8>8lo4g<>;O`cmj<`G^*}g9!Z6Hf55n@a?eapULpE>#Xoytrt1>h!@R@nHqh?R@@tTB(I4V8bLmqy-$;bcYx=PTd$j-0IH!XsZbQPL^;> z;CZL4=SX zrfz_)L>nlHo?5MmeQ)y{56n!IXT|TGv$^@60YVwU zKovb1&0F%#qCbPw+qRx=NH<`(Z^E9fB0x!XP|jll*$)3 znrcq$b1-Bv_rkcgNoxD`QiHjW_C0uWe3Q4?CUDOqYbxaJ_uXJRT_Az9)iPNUmCJf3 zD{Ye=>}+Cq2N^^3Wg-0R;*0mj{Oaf;I9hR?Y0}$JT2da0uHcyJotTHX?hl=T+?(TL zAZ@&NjSn|`pjib_^Fi@uSX6j`<2~g;hDN8ilpI2=xAYCj2x%`>Zkr{>Ret=~rleyz zNjCD(rO5$KfGVvJa0T{Rli}uDKbgh;hax4=AN)r#c?>VhMbd`m+6d+O3on!ZM=y<(FAVn}gQQeJP% zj$Uj$IhoJ{@ojDOr0&5x_DjcuqlKBIJ}w$oMb1k!G^Z}x0kHAmltaPlAlpnMNuhb! zS^|5;dhZwtrW#92l*G!{s-;V+d@p37^3q8>xMe?*I103r$~Cw$MVhL8X^#o|nt_^o z(H1v0=0{C#qq|Uxq>hVDC~l?7ZsiQ^3w+;TC^=8mxfaofg^VQTjiuVhPDm5mXU}87 z4xSwsRp^lS0w>#7TC-&Siz=LYJ*{Fc%d zM|Uw;RxIe%6lF~us)$v01!GE^XWcvY6aGvDY{TjDtb#v8w$8?v9{l!9mt1o zvL*Jlb@LcwcCGh3St0nku5eC(XX9a2!Rw(Ett6fhQE9b&+qy8JCp}jUV(>8Kx$E=O zl{ik6&8`}|(~xZS3Dk3GJ;!0kNPV{Bh4VXS2kevnyjsOiuBWRu;ti+f0_Hrm09}-dT`&x^88}Q_nQb^}+0VXX^mR z*;h?GGIpLdR?N+YuYo?>NJ$D$%R^qEoGm zMfJ!!2~rqhXrGUw>@bTa1|bEBa{jm?;~hFZQAKvzs#e|uXCxMFs@Ppvu6|cmW@Tpu zQ+t(!AF|plImMhb_S_o|S-P0qq6)%1$Sb2VSPLqu)dVhfmpwC4ukiMkeiVcev37eJ zm!2pN!;BxW6G^=uHr+B3i!(TB!=Cg=#4lMs9Ae_;mkKlZTfgXfrsBumayZhStmLQx zYb+3$2V+^+*0f$dE@?or6Wg?%&fcggElsLEfpUk1MU`x`ZB97j49M3M(Fg>lJ7o+Q z&(U9Kz*Mh@TjMN4WbfEylG6S&q5eA(FPM3_jg(YWEw?xbEtVsaildIZSP*pn4su~p z{jq=HCUvwJ1*^y2uApt^jg=D<0HgIg~MO@E+8M9}d7-!I9 z@+4LLQAUr7-Idmo+D=cI3rfwlU&c{^aR+>9^WGO_nw5LuOi|bUR_FA0G&js^1-BsuECk?+7q1SILr{amH5`6o0SvS1f_^+v< zUUD7XoQC0F+&aUVVJqBdXtwf)_;ItA4TF<~c+eH{t@L}a<}kAuO2Dyo^>?j7iIr>- z9|PWvqcf!l+>FeNUxzfE4-PWI1Ou$p$;XlV;sp+|COl&Ab}{8ICeGULSaTgto3SV3X`+ zi@BdWKo+oSFsvLoNR|UtYK8>5V z;zC~dN;w`mEyRNKQBlrCa{$iV{|#g2C=a!yn>4?Yoz;X`S>&K)$&o8V^IbnCT#;Q6aCk zq?OSvfx_vv%7>hZ^S+Mi{!(hs*2KP-!8{5CVnGTE)MSKctOQF1Bl9%DTV3NYgM4FE zZ?RPl|DPWTjB92F8oe6qeRu&JA5fyEF^PrG>x?5`JkrK6piwZPNyp?kVc08Fv9B-%}23aTHCR1{fb^DkMK1cipnCL zB&{~h;weep{q>Lvbl0t8N&Ly`Vd`49lzfW$UYH|INTDqx7FDxgPnyw9^?DF2LRiIBNjoMyv(uf-r2+n7zcp`oc)dtL!WxRt(2@RVQk>pQlm5f^ zoC~N?+fHQkHQYR>5Oj_gg<{pUTC9-yt1IxA_e~ef{SK^Vd@##@*Xx9lTcYv}TjN)1 zuN7>RTi=`F4Hmj2;tg&XL?0Zb`Np-hGULn_qq1c(I1ciSCSw&jSVcBDs7AlxZfE~c zEGcH;PLl?sg);QIE!0bY1f4u&s(*7axlVD5&`*El-fVG!a*{m=zOzRwDR+YNR^kH z5rvkNAwMp@?(K%2pJpYEuSDQY$k z#jKp_9_B_3h{g4*<9{8V{8qi~$nrLILfn;=?2Y+pq*m`ALGm@~9mi=+)d%M9B-l&6 zAScVd_X6rSF?wQ%#HJpazEllAg!Gg3rjejk0$Rak;N z24V@lEUo>n*GWk`FN=!l$J^`2iy+SP>9Oy@+T~}*NUX*CE=9x4H@o|? zQ~cZf+9!l1UDA3i^+J-yEh0;owrU#rDRamm`c?c}jhpx%pFbJR`#gDMR|iR=tm14? z$d}?x_AY>a^r1cp=+uVn`=4)lFt0$AIzA9|n2eh|wm+=--_2YU1_32EE>0ygtEKXO z8}Tb=8VBX$G-op827h+uRzxk1G;iOKE7CuXFpfNYSRYu^X~a)mGwz(H=Rt;F$1l*q6MXl;ES7#r#J^ZjUfX8ugAip_x8+lK>U+ECmNaOr8&M=^uz$u%=Y%m) ztFx5NV}INAYKUl{P%70<<%eBlouYlN;KlfC`mIk1PTQ!It&D~zbk|(S|0x+0hVhFV z32l2MEt#A8PrcKZ14nZFKb&n6FYkiYHWr0j6xC)dfTK_V)7Nga=+JxV$>?+=_)}k-?%RyFK=YF zv3!Nr8q@KulL2duO7+NJ0;f}cZNn(kBCG)NV)y|~O}0B)FKOSX z+ld$ct^v-?wCLQ)cMpQG_9`h~~ZYhf9=Qc5fJcbcJNe4eD8TbJuSQZz=l ziXL)|P~_UZaUzoaSC^Ic_Q5qD8Pv|LB!{#skD6(<;Uv^y*s^%rs(B23nmMpfyXeZC z!8f;ssmdj9<)FVrt$6>)Y<&unwVLWklo*3Aclxfifgi(U7}~Jot7o@}uq@6zy)lyh zSzNZQxZju)pU=rbNc4UmGe|AeUV;qYPQN%Gcj#lfd1Z^16h3kR1oICPy;oM;TfuT2 zMbElZ`yZm%ShxQ9M^aIW#EaPyMu;wXDL(VsnN&ss-eZe{R_3oTRP3URDPeA*KCe?4tX3WyY^jYiNhAGwzB}K=j0ifk1a$=Nfh6xZxTc5x$s-UO6S$2w4#sC zF!@@AUY4<8T*>Xy6I*Zx8z-!FeE9X`JJBI+BZ7N3CP{`6qziBD)w@ZsWX3_}S&!;( zT+@MXqK0oE7Cd*G+Jxqo2rDv33x0XpH~dB>cJBF-euE>bCoG^U|9RrZyL+>s2+D9Hxx{F2iST0(GuuQLr)a>`%={TirrucwNs0Z?y$H3VRA$*4P$@GHKj zPqH?k+$Qmo{-}~w8aIE!iH(s{q*rS4DP1DdfvuaKCF$A#eA=#}{ae+FRLJ@r_(*pn zJVDUi!h^JZOSNOz)wx~JNyvaO>2qCN4SbEgc?ye8u|IL(ezBokqR-&k=gc28iN>P; zO!D^q7pb~)5TCjw#UlX7Bq*MDVKH zVw;fuC3BSEbOj%i&{+$L8u2|jETu9xh+`qjIMnwb;Y%ZAy6wc7cKy3L_emL}a%UnG zkA&hBD!oN3DuP5EVnY)U7aEZ0h+kQTH=3*`_IF`bFUV&(*!LH{@c!)CDY*j?rT!8| z?%QqXU2a{sDVsN?T~wYywaxkT_JA;PzEp?N^>Cd&>PmQ^O)8Ig$%3AF4||5XE(ggf zWW%vTS}f~4GM!M{D3XAS24`xlBavwLkgFy;Z4_e(qss1M4PC4t1aV??`;&C3 zv;qO8irpL*5Feto-1W|3xWyPuxMdwT(YS;REDSe}m60 zb~M?AldckYfCsp(tHK;nm!h}@?cEGq+;K#3p~*_%PKhLZ^C+2hqoxdkWh9=jEKW*E zLwogKW9`L_jZ1kXg!752Om#&~Nx{Yw47m|@nxGWE$@C_D2^T6di8pH| z=LUKO+|TdRFBozhndTa-wW5FYHR7_|i6Qh~HX`k1QfsJJHn*HaTwlRm%x--$Uz9uG z-O49uu6vhCTeQ*m2p6id7b_OLY_ZauQ75)|rxj;UVI>!7FWYWJcRR8NK5`wHS6aFW zAdQt^ZU3cSyY8i8lB&SlzZYIYs3k@WbCjqRQnHzM(zMpi9Td5Ha4pJ}_%x?zy@kM$ z?_Z|rl$S?L%M79G^{f|4xgm{M(qM@!NR61;f1`5EgbE>MV9%RBH1$`^CM}pBFW;d zr4h4haf&UwGz&#!y#d1kJ;=9;-3vMTNW zaI8>%_dgdS`V2mc5m(w(u{G)q;$qDFpYsF3OAQ)bAHwPlz6i`6?#=tns&7M4;vTdr zZ7)G`5?$pl$R-!a&axjqb+whY@oHkAU-Ws}+LW#wr7^hX7s$AaH)uRCA?Fls9>56} zG6_skv!(gd>iB|wO;0aB7|%)BGO?u@`Q_jW@;N{USsr+k2kzqE#y8Xtf~M`KH*zNC z%5dvrP8xZ0=||Xd)G2`{!lb2+@0_qKI)~2((7^EbY*;<>KC9K)1@#d;Du2q)=cdDsX+NSV_-R$-4yWr;( zKcj5DRbh_TfMeE+&A9UZ&4+mn_PolsTWglpt#^HqLTN?n|;by3~iABUnL1+ydfpvhelN z2YR?wOKyzP%$Ti?bLHC;%%B6Y|J;nqdU3APn-e3N$yPHqz2f;P&pOH7%J(~Y)Tb1WYV_enOX%_7{?ej6o(gwd z_z?IiZ16fK_0A=0I&hX)i9CSX!_|3NL8$RalP5-aUjl!QvQx=>yYTp-f>S@A~oWl8` zHPwqte8ou7QHE?KE{=Tz^gydw#2C9()McT+iq8=Tw2%3W2DW^fab!2S3R6}7kx()nBLx$Emd5-Wxr2$y zEfYW7sUB`M?h_PdUo;E1~I9Ox{G+ z0j%#%cF|}}!wQ{u^k_1qI{Pab9>S@71@8P8MtZUf?FspPaSHije5ST1?f#}!R`w}T zv9Sg-{^y$06R0+X=#@$IIu}t6r=`JfeRjR)fcyrW6&-5NE)`G2|wD)u5vUl!_c?yL*Zfn zdSFSut0N(LPZGV?h5XMKiUHsn<}(Mcr{xzi8CtemHKW@J;2@3oMzmmy2R%8PeUdz& zf(JZ5wxxL;0>OBirC(*u{8q+NzEY0m2^_0%b}R!Dx)_psOA17%cec! z+aR|OBh#ccH;HG?^0%i$uXwp*rpe7VGZya;S0cIEQC^$gsQCa$3&-_jq}km(PMw<( z9WrQI5eE-sy-TxcV({YFF^e{3Ezb9#6>V<9*7MYh*J2OB+BrtjnRXs-&kiZNx zE_446Zjo{aXtt(e|Lq4j%vvUjrLr7o<_)yPU@vzTIP@kxYzwMu6R0Y6n&u)l!GR-e zi%MWX>-c?ssS4={+pO^1;~OP(3gd#ovoFc0rLxXvO;70D9C6{S@JtRshVg7fu5*&} z5zxZ1RyDcYRMJjQjV#?|Zw!aUqn**VG9pjY_Lo0iFv1!gRblI zD0HdEksst86|ooYe}iEy>YwdR-s2i{rh?o8!Zt(`2{V^i5^i&TKg|Y9v}feBPl0kK zf2y8d5ZO}vS9cNB?Mg{szI!>iEK{BQg^4E~XK^AJ$9FrbckgwnAQ{4ll|)?On-9gq z#UUg%RGsMZ6V~34lcir+2=*N8^rT)I^j*2OSDCB9?1Am5C$-q>+xB`xyR`q^8O6jI z-9fh9`D31d4{BH%rBDJDb8&I!mCT*pxi*u(#p6Sm^O66P=%e;D;( zwMbTz+3?m-;jZk#Y^F^HwDY=9jEQbKJw}zjnP9j9|BU^)iAH7g`s+p`8xxOa$R1O7 zf|3_}PxSJDc7PYgoD;WsvCkEc`WF&CN8>5^Z|KKAtfEEzZFA;~CUSq2`p&j1y33`1 zRg+F9oLDs6;aNAQuvp+J$;4r-`x=SK+D|tzP`&>fkYcCBCZrWmfaeSng*sX6lhm2K zP&`j7)LtFt`*PAR-}fxgNi0u`d&d^XM zU4!>*e;Z58nAcP;)>qfTqY}5@)pM!Bbf?Vt@$=l#HJLv$3hC_doP1)YEX|dDDj9_i zEXTK6LCHAtBV-KwSSFEl^1jJ?UQi>oTLP-YT1%&H}NvvN&ebz@yWstSp1p@Q$?UIfOu%F3opg1}q4?m0+ ztE<*28iM1IRmy_$#ECzZ+m?iI$`5KYqD?y|aQ{T9SEoHBF2y4*!h7mx2TUTN@zEaq z_QIF7p2V{PB?I&x_EaS(@}sUNQCL;36B+6OT<|_&x)>ncYqZ?UzOs2r_(Lx1U?TwH zA!-=8g0YvEc>hil#|+x{OPGm={m66f;srwD$^>h@sO~N!&e<(2LwFY#fza$eK<0?JI^Qh!_(}aC(^x19{@e|3> zpS_*1O&xs`PP~70l+ce)sN1ri44UbZn3{$^hgmoC{1_kMLB5i95^knoOS|>%CrNs% z=^Bdd2FdgA8*yf9ySSY9o%3H`JFMo8YdYdD{nRz>7z*|I-;r{f|MGqH)Dz+e;1uAY?PTWQ2O_H1%9isH_T8FazIB&sQ;IJc4)I5wDXv(0G z`}8T`6fzJQxJDd+u%YgjoHYwcsV#1od(82*Ho%kc8+ZAIKY2*?U&EO_Pm9-DAyHh# zo~)(VVs+`;XpYm7Rn9#z5BpFv4Cc}QI4jTE@?5=~ti8+Lw$%jL##Ir0hwG=Ds|p(D59Cx5cnRy8aT~RhX+VwVN0|+bVAMT9 zI4_m&SOpguz^f_!q?{>Y@$hA z7KwUv?p}O>W{b^rbDhypLz>XIJILClL;zDz>~4|46g?$#qVP(eDKxv2iCdhUxof;| z%})}>eXTP;RY1~|xGClcMBc3Po%m-uI?`h-yg$Urof!_oh(=z01MZm3_~k*oy;|5W z|47HO4(bW2H-@}hbNR)^+%PZtpQA00YGJ-w_wu*QZz=ugQN*yfDNZ`gKH_!~dfdx0 zM4`XkTqpgS?;tdKD3eX`vkO-uE?@oZl3n8BkN8-gZi7OSh%OJLiy2NuJQbJG?__Jc zIzI};@BV0Hjz8-HV82ZnEr-dGkj)c8*!8<*r{g0tQ3Kdf0c>vjwn?!8?^9&&$-oD` zhPh;groFC5F@?F1lW0Z`W&4Z()aw<#;-eSL071 zl+$4)i|`>~Q)|uS7VKCeJ(0Xs*g{5xa66kEy7C)>n6dpuX@R@3K%pa-`zn*Lb3{s6T%<_$ z;8WQm1d1|ThBPDF`;`&6zAW;{BY*CLe2?Od$}NNZ!pdx#DAh8hvi)_p+?;l2I^b*0 zLz)$X9>C)E=q4x+8Ch+ysHS>Aydl%%89{dA8b2fKGdb&$19pH1W}i~WaeRn#<_I_a zz|9I1Y;Ht8M!)sQtmk~ZG;OzXr&MzgZ&BE{@Du6!lCHBkIIiY!P7q5M-+1lJ!R(b% zRDZ2-?@+Q2=dLXu#fRWgNh`;?T6a#t#BgGWGa#0X>ivV01=zxE^<^eSXxK9oUyE@0 zD%m`vEs2xKbEiSYE9$7+SJ)VDrJ}l;DEex=KX6lc;V4(|7 zGx=2+CmV(4Bm9D)bTWxAH(_$-M@Ddl}_l^dFPOG|RB^<~*w+WUt#b7N51Y*ubV>uJ0e zHfFCcg~xZFBrT$ub^1QqfCNHwp$MYfT^J126$vjvqF@{c%*R-mS#IL&D7_ZAcjSq= zW$%wo!Mc}IyHIx!Er8oZsuOM6%0#`30J`ovUohLfE0>`>fN0WF^&~Rrdj*2a1=Oma zCX!k#Mp}1=DS@|Tyg#jv^Cnd1jj}+PQg~S2F_oOxyeRFS+bo>!FXikP0}S2Ir|1}EGul-&d+I*$j7{2^vbxL0WJ2hN zyk(lu2gw-|3-nC#x^OjuGus)+4c&LfM}lW7_bb%&l6Idek?JNKKtl*N`&UjHltBB$ z#fX~QOiRt#fxaY;p|xeDKC0K{LL5%R&^m&9u?=b;g1v>p9c%XyD;CSz0-?LqXiY#Wj`a2*SxX2yz+*}n zkwQHV&FbQGDA-yeOhjLM{0j_d?)Kg}NB<+el)TTRo%B!C+BYLk1N!bAe0;S; zfU}QN$*)fv!wA3(3s!As+Ah{sm6Oh6gwgR7<^lOVP+VWzNlf^H=+1JxH)FOff$viBa zi?>V1dl-sYIsO#JPVGT%6Q`L-T6V9k>PPhK85dl_~08`jp_z5J(T+$!aG50%)C@lH<2jyY8BG>OZm$Nh?!i+X*?FtOu*ekrI#6Z`Px`$s_YEJRLb3$>bOG{;^Oq&;%pL zI5O6)FnUdf`ESxrUm(2M({8*IezJcUPg79>kMaCaYtR!4$w-~6MA@%?BI%% zT^!r8%umoQ+N1$#|_&6KQpJ)@BDnwV6LE3kPHN^q5qo<5Ip0Qs5UNhChnZ*>~DSnsTM z+QAi;e4aH~4w#mJ#sV(Q(RGEn0n6>@olX9pA}7^)Ci@8s;_hj9ERE*5gs@y4`ULjd z@-6ezZ{=m>XDOR?w9V-IEpHrTywDaPQ|mKz96WEMtM)7F<*^*`{MqoF6%=OU;XMuX zRhYco|AUlqnVW9}ZfB3W^V*_7j4}tIX=Z8M;g#gB2F1G;PO${FSH=Z~Q*wXhLHTAv zGdn&^Sr(ny{%5dNUdjU|f#{wP|9}9DT&hvso}?RsKvbX%QZ}@IoQw-h!zLV4kH<8}Cn%i$#s)q17RL9%|MUV^1E#%Zoxd*;9Z}e^ngMlwSigEAu8L@eH4f5H^R$^S za6&6C4Hl^X*wxu@N13rw7LjXOX@InTCvrEt{^-e8V&s(oe~IPEr|YtlZBo%O5x3f(ls2xnT{iWJv6dVJTJ5aeLI2(G^z*(_lfvd0;;ImR6s zN%2FXo<=rv0XY-dcw_xj;q3}F_n+M(+p&| z>``iu%*q!s|GcqEXzOGD!$H+XA?#zIAvzLZ0;a+3`}9Abl+7a-otUh(0M2<8zt$bT zS=#DoG>_5JtaXtxNZs4!E1qthN#>is8NIb?+>HnGz$HOfNx3?81!GRX>c%Vs6kx~W zgSCQjJ{Ilw1)m!%4%XzAhudCdIt(9v7ErZ*B%FE<%v1rjklS?kWaha&{fp9)W7q?@t;|lgdfr^F1<&p zH|kk`9^T~sCrM9?StgB7>=!vv8%k9;U8!skKt{L@&G#NW&xGH*`nBJhiT13fJ-HshUxYdpM(=txbYp89TY>&h73JX{KxfEH z*J5r?3-5N}X^m)P2=-+m45iwuCd1Z;Zt!L^yV61!$OPe~wWEGt{bMIuv;c?#b(! z@2A^8o*F&XGQ(&^?bu2pp4SGgs4Ed-?2zT@Vc1{5C?U4hgFM^E2>AXr@u* z^HM$4%B#o%y?_q1XJ3dIby{zc(oV`2FXmRD~eZEagcdL)> z3^Z3bHGm>A9;JeCY#36IGapE9jj*mDc1A zD;ZBJaA&9lp+DkPwG}ajmX4!Ax{Ym?Z$MI~^oD(+pitc!sg?a`l3sk}_Hie5GX-o( zakdNoIgU+vLK#eo4*#BZymljvi+gjtKxE=XbEHyUV(ei<2!U{UE+>1us<$`F9#45nsxj$80Y~wWk*YoY1io zmnuq6c~)OdU*KJm_k%}6&&N+9Vc^coAiMrC#GK$O*G(r5hwPLg1}3e-i{rHmW9hYT zYtak%w)HDwuS5|a13%_ug5DVQ9rkJk+K~s8e8i^oUWm{^_Wk2}H>Y%-?sRYD{+8o% zxNsi$69+0|FIlztV%ezuAqbF$jep!zF3?n$Xm9gyjd9Pn`?({N>@GRC@|31sgQ*U~ zTAUV{CHnZyCM2)ZMVf<-#mA)-sd}@0Zr$PhR8N@QFV&C6FG7Z96Zfc^ZSEj3+x+i2OMQYtubbdn<2@+(^K6qkVPeIf-i&y)Y&IjpvJ28dldTIWh z&_hx)L)N^q*3^FPNf+|5EhfQ}KU9`?-cDBdHEoyv<@8Mb!W6s~>N`oZYHhLgC)Nhs zj$a16j)!rCDz-*NDlV?k7cQl+ zF=$0EeTLcG^1L18e5Z6tBXu^~quOP=H4H*@@OqUvz?XX=B$LxWNR(NdNG;&3NkLkt zGWQkAP@U{!?E!r55~PnMF%d@E;qy)7-m(3T8eFv0TQ|o&N^oI7xX*B)erNyC1o(TC z6+(9@`eMoDd1SFRmqhn>`K}BpmA-PWl&+=zNPae0I4PYEW=v4^(WxMtz4rP{nlJO6 ztKV$gHaEj8LgMVxxbe=zu}A%fmxwK#4c4X|}nQ@c642b^cCCt&(Celr)`B}=L zYFd7UjyLhDoJy^?92CbP(wNEX_@0cs#E?uMV!Azn?A@Dp5`@tXn(~AANR6=-8x#&r zm5#a=b|(#H`){j&bRQ?VIk?TH-UvU9VfvVn4xR&Q>2OZc8>g2o)lz<_fF8QVEk17#Tt=M9MpWOfj_!*OB)&ZSTBns% zC&)-1jP!fRTq$IxC5o!~1q*vFI6yKwmBRvsJuPdN;@RWjac1Pc=`L3_jdlCnr)h_{ z_Ph-Sw`ER)QLclZKI5CBT+k}5*xyA>3bIy``tkT*qlU}r3XA-3Lj}q~Fcz}4x~-bt zA~PqiMe@nC&+iC?h|o=;H}6GoR%4zfrPtkJh8Q<`U|}bzljQ3~ot6!n0XqsLbJlFm zBEGmuvg%2P%BO~|RHBym{N2)X1t}&yw)^kR$Y?VHmwuc2{FrLzk>xx%+( z#nFp8-~tNn6~F45EWRU*7z))y{MAK7Q9)m6@QEr2?U3LAI@BGtJfE|Ktx%lvk;%wx z$M|oshk=LMB5cX_PwA~PcA5ydbvkKtk+SH!?wE|1e}l^dE<|~4hCL~W0Vjul1=(9i ztds-br_T9%GsexL@N-Lb2ZqK_&+4_v`D2g8=hrZ2z&YKd2#Phx7l&AXL(*hv8n%1J zFP&u=wjD{OR1msBIw|Y3xDQ$AHK@}Bl_mHsVae)E4O3t z#{jjrwQ2wbR&U%yR>Q;^d>fkGiTKO`N7-!ik94>u)GNbt)>bYW{%vz0qYckZPgZHX>SJ&n9qDWCVK z@b#aqfzH`01w3T6-*+si@K9xlepO672k@V1RZm_CL**V0#5OKB&|J8{ohF7B?$xtN zG6(Dg%Cx32>xz-W#GbWtc_@7|oIXCkgoiTdM7+a>)Fl*sUVP~$p2h1JQ6TEkjO4V* z1wd8{GU+jd<5xMT4y7pzN1c+&cz%(AoO~Itzwv~bO7XjoaDf^=? z+X8}L1{~K7=%^(8g`pdy$Xc3)x51i$A_dE~8qvKAyWWSobb)tcH%&m;j093B0^LVGv#^NJ7zQGAQ~&9<#0gN(jlI^592Wn+=@4pRa`%@@+R(}{4dPE32qjP zINx@)4(l-B4K{MrAndso&}{Nts~eS>SK@_YbH_ zGK!r_PV{yN;u(@IF*J6}G|sdq2jie`#z@L`GNKg;gA*+b<&hD4^UwrM(iL|$9j?sW z=w9{(P(d@pvNu@iimkWzC&zU*p@qHUT$JbUekaO|HHnq9iQ)}#woB|!VJ zH-?AE5crPWr$G?lE|mcqsMBC|RIz4Bay&Ueu_#dEXZYI3o%7>EbF8biXdSH5( zQETa7Ry1E1=}rol4PTc-kiSf6I<0O8YokV;HcN@BXv;n+-_KP%_=Iqvt9}$=II`7m zJ2Ihi?vMvMJ5<@C$7f7^>`mxD($c+7zx@Ryo7&Z|fHdW%W|FbdiPSYN!K5TCZ9&YN z1kzWJrG!%0zVQPC6z`-w>UZm-UG{lyZ0)$skow`KOD{LOI^`}aPquF>4mX1b1jzyl zO361x=~8EELXU5yIz1Fgx}+5t%8b-(MWa_3V5FMC*Kvs~hol?C!DJih?<&ac*e7tw zYd#cyPye-E!Fua@ove|Qg^E%Y6 zBjd(gDXrj`|nfEh$oFAI6E#>N7=k`rZ3gk1CwAc3Z zG1JxvCc*{9YVPnWH9t4eI?&+LV`jx}w(a^pA>Ve6#jRZ4Cs@z*#K#s-L|LglQJ76C zN#E}P=O1>J$N4=a?&_8Ev&k&tzV5oj-V2Z5BWUp3aLDFsGxG>nX3mb5$ za#>wGR3E(mpJh~@Ekk3iuiRF#r$JTbt1`5vntNbpU1Q|Q9A&=QD->Imc5ufVblXF6>}D2$^FEi zb#}|~A{7M%3|XwKC9LPyg!QdVvB5dFWgK?=3Sfj|l)?p|IniP9hTq|84&(>_(SLKr2} z113Ukv8hM`q1?OCR}uJxK9Ojiqh4Q zu=%jdOZ{%MpI#D;5K1SOyIGv45tO+o6@&*EZZ@b@y>q<(h6?rG`+3$^_v6#nL3_^7 z8-qFugmChjWzwKvtaa(8LgV&pkP@5BtP;XDiCI1GAG(ykoVGs>AufcR;0<*zo#6mR zgs1(tneR3)Hbv`KMKl;vyz28At{BcI>@9@r%&<$W(&JFjuS7hKbh_4rmtOXq7)?dNZU~6IS7~v#+k^p7=fXm40`63)7=>kYFJ;kTxoz3Oyo7Ex;F<>f9aLD zozJK-D_!9jcY}8h4!OLHKGYhj#kQn>tJX6`sf~wO50>?0kskVqz@A=65pZ{mtV8^0 z4Ie0g`_`Es0+f$MSpBm8Fr_#Im1L&*#rY0RSpl%9-EEY)#=3YmIc*AA`P>hp@&Y4s z-ymiNo>#||hsk9eXbaUY3Uv6jM;P97-P@Av+@9Ff^bF8ZCtkN+d6o06?wJiX)Rv4S z6!SH?8hmWY=t_j=XrwUJ4cuBN;Y<4Urw zRv}<;_jz!aU-9ZA-rYaOWBJ3>GcWaqUNUAgmoYwTJ|ZUhrH?H*ktpp+<7^<^dUDBF~Qs0fzx%kTh^(v}>`>_E^9ZEj0BD|75=#S)Q%RFu=7On`6 ztQ{jG-8KOuhQwXZ!YM6b9Kl%8t?T$sqk*(Y@zROvu09DyXr^uPJK7@5(#eVeuRmqa z#?bBL(~J!U6@A4Qvbr;rI=Nco5E2QctiB|UhUT@Cj8Ny~X@ns={Ogt*g7NHj__z!= zS3KI!QgSQIyHqZ(rPlKapnNr8W!>b6R;_!+%}n&+LnEY7vTBQg2JkbAN7?QA=+UH?vwrrWR(}&g6s;6V?p{7k?0s@p*wOdkQub z8uW+jmsI%KLBm@|rMxH6e4=u52+lj0;XUP52C5^JwQAFanm_a~+=~|(jmj6Xb0uOh zXZnor67xRxX~Zg9%iW_eOxkz((1*ci?4Txa652{T0dH%AmktFAsT!Zv;#~n0ezZ>= zx|~Mf7`x8sJv8U&n=MSUFRlsaxfYxah~IwsZ2`G{Y@jo+k@aJI%EWhNM3)&^*EA;MbTf0bZ&X| zPCh)9Ib;Eszsgzj1!A}++$W8AzQN3hTN5LEh#S9{AEGV=tpSgBOF0hIK^%7!+BF4Bjhvqd(mkVQ)v1 zdFJH!Y~U@i^8QX{T|(disNcQ^yv(Vuz&CilFjZ@*Z__{sp~2{6+DmZQk~<7f&j=6cXGsKU9|jJzvvj!6YN-&aY=d>+2ckv;7LM4Xw&Uzz0=#RiPI>O0cXrk zX%|*X)w%vPkiAGnJ@56ho4T)j-bjC&JzOoP=mTU|`{<`m4TNYz-D7C0np$ zBpNH7%+wEo`66R8isvR^L?plT*jxAe=P4g&n`q1+2%9ZFtYY>)SE|)$q!qK$R1)9E zOlxlietb70F9KCau|5Adf%DS+&b?yAq#d?fJIVb-Qn_n=&T=n)ad~|{;Z|y63yi#6 zi=UQws9~YeH(9guCjn0KcIsyBZ6oE}WGUfW5*vtO$B~Qg_VEvi8^|KC5W=fgKlTPYwZd0p_-CO8ZV z@3_wW6+2p-(K@T_D$=MUa)yL6P}Tgs*FLmZDdQdcQa=&LAdpv}#Po3f0hK}L7&EM* zI0_xWgCTjSQsVb*`$;8gIfsqmV(k_E#$U7f?yu&QQ4qDo%Tu|W^~ciz{jMhz(pA0c z!d;KlNL%R@tDjE0fkejCW5XL)bVs@#t6;F&kDQ$Ylw1ezaD~VwJMHd-OiAUVvE9?T zp0t<+dnV0$rsE7%wXkVL^9p&h-2DDuwe_aVOs?j-*h=80-lYKhwnPNm3@tDFcf{N- z;e~e2h&+>inu4-$*O`)_o*SObTOn^7asAuJ9*VH4@T4hwzF@xqnw5IF;ZLsCPv1?& z%dyWaNLm5>#eF)kq@Cn>WO`vACcKS@Eyr%zYE`4vq+@xiGGtNSE*>oVu`7}-KRuvD z#qYJK2d3R|&-e3-|2K^S0Z&4ZnfXt9V>yfzM=DBy!_-_LwKe58e26?uRNE#+^RL`{ zK?I4;TepcNfbx^KnA${0#b%F!WMOuOl_9N)JKOIbgj}IIuk* z(K9h1a30#KxfnjqizyS!GY=>vSw}>ob8U0y>*D4Z(kC&+QTkSSE545la_b{U||r2YIM@-6zHZ-^$~EXGsxxO|zRNNi@X>^mw3 zu#xiyh@aU~JkQkFxan*xpNmnnR6-7DN1N~z83;ll{YE*w38cR^^zi#nuv>~@GI--bjXcp2N$agR(2%#O2 z!q^DahByjaC@N)qwoF_o-TCBD)0c?#X|XcLZ}?s!`Qe-u(;^VnH#rI%6q6P0Y-?@$ zqg@IQsMrxf1ccyCStn~XH47w3MunPZa4LbWUz6V3E4QTWGP`o?;|Yz=b}Dtf$Y`Ou zBQaMr^109*=$$bTneO{zG`{wm1L?BY=XqfKuJ=P6$BZ+%`opT`5slbB9*g>qs`@V` zA%a>##r%`rY)ZAFr{V9vGlS-;@{<{$+hR+^tU$jL&SqPZ`SM405$yT$#rq5Ev+%C( z;OY#45hjqI|~JC#7TLPLtWn(NR_Et^31S(#rh9Kh!|wi{~<4 z7t)97J{5w#Q3e%b*Kg^(Kfh6^-toJVfDZ+#4+j*4Dk-yDH~}{0?$Nyl%XvmVN^&4P zZLA}6h~i46O&j*&A&Q%l*1J~=t@S6#h9s{a^((y%jaUNO39Q3@JUk=s0}mjBTq z;k&P$7|JuoDcj@^L)Y*Un&P#bVV38qA9b7Mgu{3%vv_#&wU_%_xnIWFuQL8T{KUMc z`-pfMpBC^?Tz%df3GemXmzc(~+;*=}%imBT_Cgki0cB0sS}$2>*(V*3!C;WDZ7;^G zJZWGjK`o~Fkdq`)r{ZR6OySt1DYci@Mn03S+uuWJDiihdsm7WTJHn}u%o!$Lx+mn5=EwZUR+Q3Z;BuT{tg$!SMG1FBZ9ny9Son zHm}uW%L6F)%9Jmk^|m6pcDp3V!D zR#MeXCztx?hv7_=XJw5&j8+XCp3yq(Unm`{Iz(J$O|@Y?5?r+NId$T6cPRqG$e{jT zj%R0P1AON^1&yh?{eFw%!PZd~zT)xkXSbTG(P_P{qXZ;;WU?CNl}UDnaS9WstobG( zeBuUtCEHU0yF>I|U=DVSiOst1XH@f5nS7HQx?G`FjLP6r-pq+VLy{9~0ro@sX*A9y zPQSoVNs&)1jN=5e5oFm4rF4H(N>F%bn8JvDcpvmxm8+4?P#J$^AoFMF}3*GvTKkpGcmUk-9S{e z9J;4{(H&HgHxxaZMM>1}J@W?%h;f38KMGp6adh9V@9xEka?p@(9E)8lhWEkmJ(H$K5KMN=jB@pkEpXMI=X|@*3hOL0kRQ$ z1%PNWph#c^`l%`<{mAc-r|6x!Jf~dh?yqZk&A~K%sZyCEb~kVc#~suUsKLH=vr3%&(ab zk0EjUoT)GC?<~eM%jOtmMqGU~U+|)CUtMGDagA&13(sgulHl5pY>Qqj5%o}TiY=WXUeaNDJZM_AS6R3xD_AhHu?6H_n zXxx1X`NL%GkC`NSep=Bi7Wk6r3dlWnpWn|>5atAzxlb{d;f(I5YX80Pn#oe#faZ89 zey3=tm-BL!*>lC7l;dl&po8a-P^1{%$<cB#JD2Sx2<%$$Dl5*W5jiVXp2;KTipUBk-hI#Acw>#-^-FZp z_ou$_LAei7$zewei?%(~qM*NgdQVPfTFSY==3!zQ!#Z+mHADk8rFcE*fHBHq2jpwJ zC%j$t?IgA7eeJAL0mOQ{=N-6C6plq7Ve&7R4Tw`EGo}#(MmR_U@o9`*Rg{L9m*fZC z5)!;a?iGfpLXL*yb)A+zq%^IyltkSeWyn<7*#hg=tim0N!3(zs57^(QjFvKGi{%qp zS#;l?9|slDw(#gxeDU=?mGfrp_-P`Tmt3}cF;(OysAePVZZ-9k85elCAU7*?K$Fo~ zeq^AZn$%otyhdPz16}5oxm6EM5x5kFQcI&h1bAHGK6hZ)`Z*2~Y+b_G-=@+7x=)586aJFnK}X5N}^-*9x@~wy$c!c@bB~d z3T;cVT6hq4VSlu7;oiTLLi}4wAK$|odgy)IDeoG3W^~T(o+OWS*A|j!T&iBn#g#UK z7c55cLkzY=4~*VX(O)(u`P(7X>yA+(G7{L7tlkL;T~gh9E*U517#uO&w%$xGNZ#>Co>rn&e=skF$?fombzumN zF6@#VzlteUj0IQ9eg9LeEYbV=AV>s*O$9UW!TU8=8BsekKd#x-5`p)k0UNSOhG1|bDNPxu~}`4 z1NpbaoGJGTv%Xc-%H%V)P)03&Y1v=%GiEJeyINBQqd--vLZEqM7jMEVWMG`(T3t>p zf%rcdq{LvMIy-rPQC6G9MJ#mmeN%D1umsP(Yg52vT_qnIh6?h$( zW9Yf*ke17jL@)!^IB%M26dP`+PA^pFqhYY6uiDF^Vt1#ch&0psmqKMtW@3P>W|Wu* zks~V;I=Z{|g+$kAmxRXPWP*aUNNo;7H1EFqYunF5`a16v1RY8!_PJW zmu*5f3w{ieX`U{-;J zo{gN8m%0PlQ^IM}>x~uIKa*~x|6|)u-Pn154Kwbb4h?;a$D%lk@AQMed8$wSDCiMV zaH?LP6k{0Wo)E84lkl`lB*@xfLc&rw7x8L1n7qC&a$ATLoaOiaca4sg=`WX82m&4K z-y@qW=(;i1`3r_tbLzXU~kw&S%>nx6~Oaw~wsEY`~?VrA{ z{*FtPhMyHmN7?>!$){SiGbB?Ke{LkhBpQ_9ruT}4iFP+trbaC~!$f2aON8p~1>nc2 zbvyGXLhdJ-5H!|5mKMalk0W{xU_|K*cBjXNacXf&^E5lN4(6}Abe-5F5)a!tn6QEf zC%Riw!&jL*^@j5sT~)TCetg!qR)eJ;wpH}z#naHmv#LNM1au*K9n}=raf1wBP{09b zu(nyroP3dZ+b?-siTZov8%F=jyZi;d*$S(mU4f&Hxk20sDp9a z@duiEZ8~$qh&q9vi$BQ@!|%dS7lh}v~iBw4TTJN&vcb;6*d_|4*ih|Na8_@f00u$S{Nx(^aYVRlq{ zqf&JlZRa`8V?otf23%-&wet4%o-VQ7R{@QTjGUjJySTVulP~yew_7Pf?);Ish+tiB zKj#^nuBc}dfB2%4-~YB#uY|(IBP~jT?}8~xISu%I5A zB-+P$7ai{MwsEbrvCR9nO%JII!o7awoffyDcj$m*d^t`?V6TVu&P?E_a$QHYSWiwk z9E~jsDzNad#r0SCAqK;dU^dU!szztAhc-I;Cv%hqAC9F#e=J16t@4!?Gpl}!m)PzA zd=2fx-16BR!^XGjn_Whu)PxkHuW$=Kjpvs~3Jq)|eAXY@Au&CYC)qDl{;#z&4~Oy% z_xNa`Qc{Xik%VOXq3n!E@)L@pv1WxF&NAuVA z8*d|6&%7o3d9kg9On}MIBM>?o`w3E2R)=VL>xVoa6lwjdRiM7Gr&#Ez^oza=GjrS% z7|LJ-f_day!e!^9+`GSkVyub|(UBRe_E~-l_~0BwrMlQ+LRg(jOarRC!QX$&(@jBn z+~Kt6wKK1@j8IC*MIzJt?7TtIk5%zl8gZgXx%J|7=?`3(=*iqsxIM>hZMQg{*PN-J z1j%9zU9GK$3R(t?9Bm`-gugB=RWO%r=i9K|}Z&h+Uq%9ddVEr499<}Go0CZ!{YNb|Q6NDS2fPVa% zoSe(@ueBj=?*12Q+P4Ew$IZ`2$YG%LmzKO{+|owbwTo*zuY={P&$vFb_yOhOd435% zs4s70{?>A?3v7~FKq)~jt*yU`zBPK+CeA;+R~0~+V{3%uqB*puGQ#ODBmKo%y58Oj z>T<&f3O;4mt>hN>nusP3KX=1krimsUCx$QFnZ-RV%jF*&ehGEG?spNx+4IMHm9*0} zE|!V7oOi1dJ1;`f)2CmsCLRmqALv3UlQTbRC4-Us0(OXL7GwB%BB-MGLfRfxo!l|6 zkPIV?rVrmY7V@u{|0)a;safl=*m~_2qj2bZ!gr%=<@bRG{}CPW$OfywDxh(bgIV|d z_6Pja1k;U&Dn=1K&vN4s_hkrI5nFxwa#b_0W?RB@vNM)N2gOZv+-S-VzOGr&u5Y$6 zPb2n5g)zHy z22MLzDN7@Gf1vS}f4e4fxtG1sauU+2=(BW>_~SFA0Z|>a` z8^rdyo7*@38)ScZ^#c{6X6k~XPqFAQswSv;!RQ_m2uXsB723XqQ^x!WTfxtCyZ^5e z%&UK{S^CP@YXcLJiV?0E#^%Ixz9{Mn@T|<_~LAm||-{@%= zy`t^D+GwL>#$(%9jF<|~qno@kkTJ;lj=c=!(iYiaHVtBXCBy5;2VoHdEja*G_>u0a ze03E`vAY6ze^-qP>j34CWXP*$7qYh}=`zJT=QMO-xQ7H$ctO)&SFAqwSBvUArB9+$7ID_U3SvwdBlr>9ATvOjXA14#$yUQ z46ma|qy|2~%ujf*S@Z-M6lSk$)J};QYjyB;gtC~+I2XBG_8RcxK56|dy0o;k9!@WO zTyjNG(Wft?C=KpSm|IE?Gnn$HZ(4!`ck4$FQD?Jsd0bb1!ae4D;U5D7jia!pR7mHZ3CtTjgTiF^?!s<;t z#1ah>}-r z;1HT5_8A}6<_7TLz?*<%NZK4qcg<;R_ z#?oCs4A-Jv(t76DYAkcFd$4e`ps2&CXBXayiEClbMrkM&rb!6zmP9z^eC^bz`|D^5 z+>vY7r#<^_RLH&i)yyb;&I)@G|HLv`Ve#Xn7U9$v>!^HMC$#xgJ^spYL}(i`XJgzf zEolxF|GXY~LU=eOG5+)_vnk-bsQZIC1xV=j`djjl{K9yygD_(%_f8&1go)Hwr&GV! zM1NDClCH-%nWxeAA-nIP z$bJI}Kk{@66uI&{-EVyu7*hZ=l9H0Es~UKFHrjO{CnLiFmmm`s7S^47(^0OE(-d;& z5MdIyN26#C7vM|moWzvV@F*fCFE6706N{(@BQV@oxg4%q2#V|q3Bl=hYhaIAf&M*D9Et>)nVC!nRDB15s3qes}=1c^I+yy3(&n6F5ZTu!%;XYo| zkCI3aGzj;@C3b|@yh(rsBJb*x&O1%=kyGi+t$ymXa zil&&kDzWoa+1kw=+wb5h#teMtIbFCn4LSFKxf7`NY{90|+8btIa1>|oIj&~o2X{?9 zW#2!3oW!U8A&pJ*H<_a1B{yN_H`Hn@dW*CWnu?Ho#L;+7T&a^l?_{uyh`vVyqH%$~ z#PW&=aurigXRWK2gx5Q=)x6ijxnV-CgS0n};DGt0%yG1gl$2v{DdHW=z4!CC9=#HR z^X~hc7F163WdN}rd-6nhVl;HXnGoATO&4XJf-Vg3whX!}=o2K-FU?!BWUU^jI@phe z3x_b8x#j8r8A|W%tYm)Vm$A%h_>HV?E5eQ*7KRhc97(+HjKdeX{YSa1F#DB;J!=Uu zGh)*LwqbmB0lt_ftLTYQA)()y^+CiRGU6Mn;Of>l0W!Dne{-23KbqX% z-~SYsaCj$R&g{t*^^qrBsn(I@y0=CZ=e3t{-ntc*j*_p268Z; z$2$LKUZdnGNCHA!R`vs%v42yDw!F-O*Oh0)vKVIxo}a&7Bxf&jv41{!>2Uzryu5j7 zXR~p(g?@JEM#4~*) z%kl@`@K4AlP7YJ7+wLVU#5#g+2v&#Z3HJt_4Ws=oq1`x>zybkqzE08#_Rzmmlfjj% zidFhPUJ3Gp!2^;m0@zH!W=eO{JNEObt^98;Stk%o7f4*>dX$*rYN!1KeMeonH zb`GcOhL^_v4Bn;Xe)T>U)i~-7x&I42hC#B)7FLTdqQP#$FG6@V8QItrM60qx{JJ)o+ybN`7V2x=_&0}lj+TKz%( zfk2fy0L2ktZUgqX|HVLyX$ezVV6#xenUInDi7!xI5vMO&@}5vB6yzzF`qS}0+RY!T zH-JJtXMggasdoPFM|EVXsr0C>#@mMZ1X5ft=#4wR^Lr*2<79SUk=&HEWEv>%WoJAe z=ZysH*#X#OzbN&5UJ)-=dxZvlylsdoG2}7pUe2t^>Tm%yn^n6|E-1^86rK)wSeDqs z=;Uxby+iPj!hN4zr2@<85JGIdLZYSOk0=wZgWEtTk3be__y%^F{`#GE{%>tC*(B8{ zUv*;n-0?YRzx(f1XhP9g@yVCR2Olmb;2ZFh4Sw@indbySt@6AIA?a}=-}TUlBlm;3 zV9>Gn*tDc8LJYx5QVDb2(;_iSA2eiM?b(vN2pvbaV~5NS0%$=UF&3Ax+<{jO zNxZJR{?M^5o^mH9@0uhKr3~E*xzmGH6eF{WzsG}7NXW?Q2ay!TRv(ak=c?K_aFPnM zJ|2E|u}v-qvE#$`5IekrI(pNr8n$*bMbJ*sPtn<*3n_+Fn9$SsAc6uq|XpbTVIJ8^-=-i<@LK4Me*1|2o z&jg~Wio7(vos_cNJ=Jag=y}j=)new(fl-RtzOU=med5sP6ohW$EE zD5=cD7SQq2uFaw*y;Fry4$uicAl2j@4p)*(QK>0<#^;7utTMsTDDm)4tzgq~zMCZY za*BnL2YhjG+rhDxI)o3YuVy!;aJC!Z8ppbTMCx{ltSkK^C@+y>mL!xSrzaFJTcB z0^B{O<8;l+-k;~~3RSOJ@S0Xr%H$L6l$UTu=SmL!{siRZ&}Rb~pCs7ZR$k(#aw3q literal 52689 zcmb@tcUV(jw=Nn)K|nx7K#{KWCS7_H=^$OY(mP1+0Toe{-n&952~BzpL6F|01?eKa z*8mA2xr^Vo&wkFm`|NL@KQ27Xgt=Dcnq|y)yyKlCpI&IIkdxApf@(hH(`uz$oP6BF3JXKA+K_D`!t3LuzX7+uclGsO0OPP3? zl#)V#qH6c}AyCEOWbo2Q$-~Xf&fN$27X(uBvU}}gXUpvGo z?>&Q&vTDi4^WP5gAW>6Y+-U{VTi;ETzow?zaprB&^r}WGXl}%gB z8(K@&`IZRNLwtkLqT0mv%gc{Ny>Ubgv3^j+n&653VN=q^74~m4lHj5>kEdmh#y3P; ziu3l$d=F{d8D_s5Y*X~WY88Df70pmZc`W6Rxr-Lro1Zlzs4T zwJ(p;xwwF*Z|Ghl-|!}+im z&|1>Ri;vxN+VE@sZW<*}&XGd@WlsNw?wH-Od$dZfIGD*47oQF~T_{&IXRc09E>v7+ zKsLmn!9(_2mqs@f%9C?x@`p6rhF)8BUI3hDF3O%0?IWQi_k@ znV3mc!&wpCGjhCI-j^^HN}m7|ads^1wU*R&XVU6KNzk3hotx{OWZ{fqpx*TRE?wi3 zyv6iJkv(aqqj+CWfoh^O@0VW4`sd{_b#p4TrUHIYC+brnc)eIwoZ(hc1hVI0$N272 z9C@yt%zRPyszZZG;!yR){HwaapwzlE#Rk`%iv2PU(^R-8f;X$?yWv@zPB|ZK?z5G_ z;Bvi4Qj@~{i-}CRJ)_d(hUqw~LU$ywnKdr>Mp~#lwE4G#>7@ouH7WJJJsjKDY1GN8 zJ;0u2C-7o^OUk!}I?0j}aZyrt(8X^w)M1&bRc%{iB3tNQO%&GpgS3H{C+v8@Xn-{= zHBBpZXvqyt%WLm@@mI5125X7xwmju-?~400kNPxO2$@ghYj5724^5k140PEeWaDeu zF{-)%Yf9ETo%E{gn7N0FzK)-)(iR+;W!Dgs+eS9L<>NVVa5>3oFl$)MMNTmwe?5rO zvs!*BItJTIUNr<~*9k7P_N0=Aw8a#^oiZ>^Y{%^7$Isn z`pG0CwrXuK%!(5Ev{-H-@C9L!Yuc>0rd3>kIa9eLRBwK9qKrvyRH@FoHWYI+=6oky zI?-0=g=Rpy_NAo4qcvjK+4#H3Q=($)(~-%>LvMa;_HG8)y}FO;Va0c0GSphj>n#*c zGgJ^36Ro_998A#Jt|4?XoNB2HRhL6$Jhi&`>^nLzzRtB#z~X!t-_XW5rql_hNPye& z%*%a^jGkpPTPkYy|9KPTx{+3>GSGsNmzk}M&PE27TYf(gqBU0Z!P?gHP8&jAR!zV! z_LNLdM;+&bT|`sLkw%18=jMn!-ojbNK;?1cy|MfyL&*8~Ox>GzVy>#&+a9~pj9C~u z1<&uXk5x|}a>MfV6I%_cyd)%&zh1WZ59D+kM*jKpNIl*{+@Q>ns6WuqVAYF)>ovk} z-%q2>0@a;uJW=rBa~y9ty@DELI2NT*t_w!N@I{t0t*Xb!9;g zgVCAr_H8u4T54gezXaV&^ig4BuoyLqr(C8f9_wWyxur}p}NacZIThSCgTPP9<#n^8@zpM$X`D>u-mt`TAW!oh( zR$^tp{Y}U(azd(*n=s7aXY5cShR1!#0dwLt;wJy9pTnVHz`aJT9^^}Z_Nn`XJUPf1 z*`}-|`es1=vihWq5e#|N@AenDQKMtbW8USv4-pXQ#xfg9HY;jzxQ~_zthsol5d;PN z@xW|!F8aVcZRVwdYTcWD2AJq<*biN<4J~{YGI{lc-@^!G$_LT2ZHMLtMOPolOKkPW-M&`-MV?INY$?cPL%pyK~Z$GG} z|8XUZ8~1gM9{hxApFM6kN~PCrdS!RL`N_?>3J_Rs+Lnu(mDTspS+;S&d$ZIbv#<&> zxj9B=uw0g{G8b#dP}Dt81QV!YufdcLwd-ADIooJNwvH=T)8ZR4^N}YBE1xX(r;g;C zD|+YNr(4%XcTaV$sCjGRAj!?U_AP!sSoh;Gr%#Xe_<&i}2WRtM&kAHG%4yq{U@}ax z)L~?TNs3})qRCNtXR-LYiC0f|UjalSo?$Wz8mQ)7DqpD1y%ay()1`XEY3uSl*X-2{ zqLE>8a;1n&pHiX}3i!Nfv7W8oA4*3hd&)}zrS%z15R96f>g4uBe4blP{yY4nWy1s~ z)ljadZJQ;d5I$cTTw3I_<@Kq3U)R9k3$NPIQPYNmJ91=PoI|cg_f!4I=ImJyEV%px z=QF)xmJiz!bu8&7cY!63Od@i2D1=LXELSC3mi8pF^}Y6o2*$Sa*L+e@%X-{vW0FW; zE!Fs)BD|dvWZd@+7K$lZJvTJ13TP8Mji=ewco8v+ff?V3;@wsxt(msfxI^u>*)#V3 zy#~IwB!w>6j96=d?onQ%s6nMEiNw6oOdRS+eJjTga_fun(VU)if9mO(ewF4ct-2Vk z2N*RcoFH^U$3ttgIJ(a&9-h9H+W4#;l|33Q*U-<`5mV7bugGZESqx*z<*eoN|{KPR)!U=iMIx(Jumqt5i#UBsQa$S+dB41coZWR*Gu zwH2Zcoe&<*lsI*!c{5q%07_0H1OBYSlH=FW2dezRZxxj~1(Io~wPey~7{6L8TU49q zN;1)~#FXWFFHQ-=zj>q;#rsH}}goed4aBcAagV8HIq!4n`J)fTnZCj{q(V?d2sW2M89*GF|F@r;?8!( z8f+zNfu@QyS5R?zJuhjs3?@tH(c&1T9e8muuqY>A#~7+KvaqAq@xv)-4P7XihTIEz zxb@>K3|XWURlC{KAetX+5hyk^v8^*#*t`ncY;#g6eE)=je4#)lcnm{|T#BD?xF(Bw z2m|~oNpQWhS@z?csnqfx>fg~Y_aw}b-dl>Y^lu);T2pV!UnhnbAYStYPT#F{*cQvs zs&{npeCyigI|*r{WqJXUhy_>&`pIFM-c(q_HkfQ}YrC@WeZI^@g9gbo8@e_`mGB|> zTbkG)l1yijw~|2A$9?HpXl)l?rF!Uz>N+b_$tvq&vUp}HvpTq*U3SqZ%px1()}ab- z!)C)MTFeS&&j&`>xz^&va8-KL*6U6kUkZ+@G;~!?9sO04VRnCAn^(B>kCEC~&k=M=TDj-Tf&Qzq6E zhPhd}e$1LJBue*8Ipf|MlDf{xqj>H${_RZkJm-knZPB=~YV`XDqRxK#PL8p{{P~Vb z&>;=}MEsY{ zBykLDC=)w&M-XHL4adS{CL1P8OUf zplyTTRIaUZF6b^VFhGK^zC`gU=_NPi+kE(Yn-R(LiS$Mp#Oo$^`Z%<2;eOB|VVYwd zs$v4AFP9^b99gVmIjO?d<0?k@=19KvNH^Ev4kLK5T&>vim#M1@E}`?4(W?%^Wa@!w zZXWQ~6P0b~)&juVT4yz@{4Reja$BdZPI^_RG^QHwWIB{*YMTsmD+%M~_)izT-P~m) zF%;WG`()#R7{jWdkXF%4CkdN(h?nW8SXCP-2Abko-li{%U+3*V5-NN(-K zyST}Vc{Av~*?{i}R$@0@Lb0JPNKr2D^g#Pcy*RS`gW$w@V4vr?yOmQKS5Cx@BgU~P zuw%$H6KeQOMZy%gN#2qYOTyyd+vY4>#~HW;l_)LID)o|lbMQok47l7|8nH-4RpFiB zF7dEdZ@K1So$QJtiB5-Z`K;$NWsS7Ij#p30NG2oNomn~X+Uj-iFI_R{+uY?S?kU)4 zTA%Qb*Z7?0Ug=O@JKB?Hu=3CCfdU6o2El{Q$}+U2AAjABeE)${>{+kNin=y-Yr^p*KwoxD8Nw{rw zZnlqNUFr2ALAUtAU!m@k%P+6yAy5z)nC~A|RK{t+|>hM18qIdFIJlRxL4T<;hy{b&ze|c>vT&fAjoJ-)^d9i0;u@ z8Y4Kno*yM1 zPBIx7;6E2`k|kMNC%X6iOlJfG&0mv?r@Y6-I$6RJ7@RfBpEgm$v3m^!s?JVg2UR2( zmO_Y`lHa~7yx2?nKv{gH14c0Qij&eLuMK`<06I{g54jTZu23jm8u1pdH$d{nr zJKIP#|2YcH1Ol<*qfQZZ@`G3}N3xdeKW1?Ps;Bz#-UBCXpwrW_3N4`U zJ&T8}_|2BI<@RueMT@ zZf9I6C04sQL&r>r4HQK=&M$Ady3TQlYpH$xZe^QC)JZYxYTQ$G(bR>RqJ?g=nj2@w zNsM9XegsECOiWNajTr)9(}Zj8Z)-e?TBka2K^#TZaGV zSBw8{Jy+bKC^c&A)xej^W`FwK<{XQ9U6Gomb0(Xv_hr9m{XSoH>WVyyH2qg4{F^pO276W&V6o>LN)zQ(h@2~Yj zq<7yAnzV?m?!LcXvv=dl0RPZ=x9Bg_^Y$%&vxt{4gr&#h7d>2C4C=UnjRo3qldIe13ni3%|w-y&~9r?8sMv@gaEc7#s zl$(ifZs>ZWSVRn(Fa2U^|FOjkuOrCHZjO(Xr0Gn9fWLHuQdA-lBv^Xv6BWI{KRaBg z(1;J}s4M)!I1!75Si-$}yj%8Vg>PC2;r;f953hwwhXV#2pLKqr0qh*552_Bssw2{m z>Ri&Ka%UlGdfybs@|DMi#Iu0uzC!P$XxcRU;lZ2{w-d+X8=zic&dn4d8`U%uo-tRYV(nx`Vwm_1}qio=U}_k}^dS?1wc2!HSAoZqkekkFJn8T-ter5%40% z`w@g=;RIv-Dd;m41tV`{q}tMwp5_-H{AHpY+q_kM*~u@Z!~r%mMm>^LO`x^?;yS3} znkW|J$>+AfD?zW;Fz>Ekvj8*1g}_Hgxd__;KuB!(p~94r^fifN2$8~bEc=hQUD2&` z$-1(3yW)wj3b;^sWh*OcgQcrmT~-#@EL@#o`R?-p9{()Dk=ma;nc3u{#`&@BN{!vw z^~I@KXwu27hyBbD%&^cB9suAou!u)ZQu`t`qviscqQZbfp#SmT@Am&h0cM#d2h-tn zB~xkiq-5R~dB8RiXaAF2>3P^gO`b%;R3ll;DnU(?JlmP~X5!6*uxK zuCD=VDV!^XALl=#*5FzO4Fgg$_qu)nE)*ohLwj=2vsvkH^=k~nPPtx=?YO!32SO+@nmZKLHs>VI>(qbkBx%B7VzX;F%jWCbN z5<`V7`_OM-R=vfC{s9SXSac(7vb-*K@z*xCr~h!=1u|?R+|ew?il&U%SO8fG-kn&gNr-Mhmv~-;(M=W= z%pm!>RoG7(oF}=JRaA-ttzN!NH|M8Sx#Hi~aoMYt(R|G=FFt=pFcoVpww9Emx}D`8 z?GNm+NlTkkacC#c?g9kWrYDw*Ib01`Zot4s*yd(vPGaA>76{!tC!^slQT|L*7z{pM z8#4UtX1Hf>=8G*vLW&RBf1wMi_ zW8cwOTl~rlutDo^5fDJ>Qh1#Cci38-#?FIGh21`B>%)`8Q#e^9l5*rE=@a89uV|8I z%xa=Si(ks#VeH!=h;N?8r30hB2Zu~o)64`E045C<7QK+xlW`sPlYb~WSb~Bn?PF|{ zd0*n#aL!n+j2=|4sOO63T@PD%6c(m;iTRh4>S+B0RQ^}=`L8wq9*O?smDlZ`^-^i`I{$9a)@o2wWB^M(*+&3O?W#-Y=K!tQ90w-&9u2$i)-%9219+d{ zK`+P8_Bb7Hmg=*1%MF+u`9CUcf{yVkUK#in^D+3@7&~y|bh{eWpUnGmmfWTWrq$1! zk(zW;saK?x`QVY&1IdYytGBZ+#(?Si$B6&|rLt4%Nx(1@z#y?ut&7-g*Y_$F`Gtni zFrN9D+C)+bM_{=?%sNE4_sig|0uq6Z7!MFm^cB%eJ7Tw>mjv z^&Z5q0}mx%v*Pu-llM_bLXa)OZ5Bc&3c1S$nX)X90sZN}hA_Jj%Nu8~svO^EqMT%? zyQV*dc}faZpZ$?p?f5Q?{&uBX%d(RUNdA7L0)Ej}VK0!?Z{@YgeAb7i* z!*V>{KGMg1-Rn}?1B#QN$vR3{Z*V!)dHDE73GQ8z2$sef2=q-Jvp>gN`a9W8s^tMg z|0fq;HD7gyRY@+<5DfuIaenE?`%BbSGEle^HI zsqS)pNX<5s&2@<`ZW4I%!n8>brq@+AEE7~K;>o;A4$3&Nf`)Z0fvI=KjRfX&O)1ps zm>R9hdnkUb&qi&OPYOUicCXdafSBv{+W^w{^5{s2Aaq_*xLvHk+8XlyJ!Doa3vHQ? zK^6XaHS+*e@e3@2H44d|lMVBl<`3yy;xLY&30f=ddmjptp8>{6%=m;rhE-8A$be2# z#QS1nY9yQUX-;Bgr9ln5ofIfOGFyZI^e0+bC5sXL%)Q|rU1n2gG7pE_?^hM~&d*ij zq*>AE(RxrkL&RdVL_WC&4fhyJAKawJW~6U_MA`JdV_3$lhUkl)=XQ>wpm5#Vl8M64 zwVvNd@cd~fJ2e@LBjn<$_zR|8643O6b2mQ^bha5}{eoBhFr4~b@Mb9){%lj)kVW`n z+!+-97+|COa0jA2zkO{93eXC&eZNH5lxHNSNEy%=Y#KB=Ka5g<;?2NX!m+GT8WS}awxjOZstn0(awDd+~-{PX?g!I8RZO1e(0yH zb?a$qlQpjiQRe}ltsMpa*->i9PNpKX4b#-%UxAI0)khPLnGY|jW|%}Y&u#^&R?gR& zE@uS*y#$`im@v`Fgw6_k`BE_sE+}I1JMA%(;TEol9rd(ydJ(Vn8Q9iWS^!7(O{7BJ z2WL~6^14RS67*1=uQi^)^j2dwH4lVMV~`XA+&A?bytxn^t6Nryz`8lf{p#t_AaNJx zBZBl)LloXY_7URa_l!#IJHP})t%Lw?x_xeE!eu-ISH;E(AN{hF#~{lDU&~cFfO{x5 zlXM^nkDML?P`yhC4&vEmUmu@V_)M_*DJI3Wk3XSlUhkH-83EA9-E$Ks+D7%EEDdrx z)hw}$?@aeO$?waz0M5gO+bK2o`>rWwfISCS>CT}T<-ap-(tjH9ne_JHg7y!MZ)pq=Ht8VyxE2V2?0^^ioIG zY3tOZG2#?dJr+T@=51J-3IJ_wusDF886-gV%Zjr_i@L*bdc@)Su$upZ8i2F_#fkUG ze##QaZ|+;qyE(x%bNwGy9T%itc5&7Eg*3?aMYNr-{$S_+LfLZF`pVflE8i^< zee#+AG|S$~FtjqA`0({DsD9y0o%e`$Fv<}6jAV1lsu0i(MhAI`K^dgj&7n?&wWmO+ z?-E`%rvM9Lop1a>d*Vj7Z&Yi#mXR2@*BKOiSXoc=k>b~e8E|;n>Sb5z~OQ&Sw+q#s-a*(_UBs*GW&?!t;wN)_s>X3 z^y-}H9e`O$u9~-ei3&nMJc1FB_s1MQ2fyCrNbD!@e6Q^{r97xTd7s!0y(HvxTHg(dGMujj@CXYad6$_%&Y3N-$-fu5GJQ zTZEm#a`)+$W%U=*8^2!3r*17+U{1}bFbovXR|@(ne20`TsfRF`b zn}H8HU&aL)3-Fd##)*MT!&d2OWq38WEq5R-Jz=G<$%w|C<)14nXV8TX2%*qUk?6ho zW0i8ix%bXTEQW4;)t=le(S~-kJ*L)M=HE4td_6rwtvtxc%+5N{~f6g-X?e+NVX zUcbO>G7F;4(2gP#%-_6^6LHZ}Wy)5#vgOIGF>Cqfm)M$Gny3Jt;69JT)2Gz>gQ{rwxL!mjWy>Mlh|Sdj}7FWP}bNq;fp1i)Ph zw8aD3l{*}@bvED9Fm3EpJH20KGG^g#H}B0Pu8moHxcTAXpxT?~_E1UB_Aj9l!N^+y z_$A_+??wr%PI9tBdRyZvGp#1hQ^TzkQSZ*k!?$@31}qKSdIa<|~QclFfh%YS{?$Fmtn|a{D-I=<=Tp1@?+qg$6i5+dW72NR4(@A37 zfv3}+dEc&BLqP$cZuB;{%LP_*`G1ZU(jOCZbMC;dcAU>Otu>jX2D$?R9vI8wyPJ8s zyx*u~+Av(^EaQ@jUYN2vZX@u_xq&0Y^3=aLQ{dB+dE!1U9`wdVCWh(PMG#E!*C>B4;|M$G$4)p^u#8 z+z+h*we}c0lAWNPo7|t=bb=$J5gB3QAD%l6fG9?efw5M=!i!0on$~|gyA{6uL8gGx z$AfH4N@3Pfkh$hH)L20O?i;q(_~VhnuuF*l!Z*G*PRh}$d7eZG3m|t{?rs%?7`S}a$ao4PqJko-P# zorgy~3Y7xT6X#j6%bqEio%Y+ia%nLSk8=q;=g%vn7O9%mj^B!H)NQtsYZ z$u_o3une6%2^-FG=%+8z{AS^~d3&xXW|OVbaNzxV*{{0Nd-S|HPgy3*xX>3?n8Sh8 zjHB%Ha|l&96IkTkCjqfH`GGr>a_L_Y0acq#2>Pf_&A^t>7LubnXA8_B0>|yU!?`=h zRp-bul>X!5Mmvi3ynI|k1l^}5soN5LZG7XbLGi55B94gAYmk`faf;+K<%|WhYjXU> zA?T9mm)f7j~39987E6WNk?*#{i9fSLC#mJk0G> zOz?*M{d?6&G6#NJP_HBaPU?fG?IDq`18ExK3+YvEpJ_zNUh$dQ674R8is#vZdhMZM z1Cr_!2B@uFk+4459CDeW&L|zulL;d&Fr;t>fi2eF$ty(iSWT_B+;x;$Df3>3H2W6n z6%J-En>CEFx7R(f{Rk+mCI&o0dO(=Jns1e+5BX?fmG3f@{2Gw!^^ckEC_E&T_anlk zFSd>LV@4cpFG$tR*?TP;V=>x01sejzPR6fXe4W;i-w54JDJ5LmK~5u#!VUfbjTs*F z^24*WTu!l}YSA&G?>s7h{_Ps$$Wv8{Qs*qpOQ;o`PId<_pLR+2y@B>pGSxx+a{dn`);R zHdO(rMPtGHYNMk?{@_K~8g)Qk48Df&m{mc=7nLYS!kovNbKDW|98*zPet(WVY_Jo4 zPs%Rc-Z;RVa>AyYapgM@6uf)MrhhT}jnLbl&}1pa81g(uGehgIwMUwek7NHx?hw0H zI`bs-k<3x=YQtFoAXjSk#(ferzM1IVQh2;B0VvtZdc|y0T6A?j#m(5Z7X#u<6Vr}; zhGmKDwJl0+&i7K+v0iQhx0$VGC?s~L9oPV-F-)&NfJd6ul6clxhM5HIic+2U?}_OD zsIUy(bh{GiM#O~oes*W(qJNfp2-~ar&)Ws%8F_ES04#!j*oMaP!N&ZO~j{OuN zD`o`9$(x5gLwy)P0i1Hce4>A`gL1sS2 zI3U}#qoRaUI1l`eC~d)C^9!KK)PlidXF!kX#8Yt?4Q|V9o137t1Q?{pq$%-l>fl8G zcNNez5uDL@6piEIjEp4p z?u(@(@`=-mQy5jRwV6CO;M^e`37rWOpYu{_twgNk!}LnxCtCc+cGZ#wubF;Y3d4nL zHm&nxf^Br@TC;LxLp96seM$CKsdn{bH=opCK%ffd1C2y;*suIzqK2;#;RD>d9k;qe zmu~3O=$6E1Okuqiz>BxscYggyzD|HvGcf2+`M&GdH!x6^cZk4e;4dz+o`AX7G%_>s z`)$G;WupDfiM{%G0I`9%Uk3Bq8KzPTLaL^24nA1+o^+xvtPp$Rs?ipxwP`!)#qB_g~)Oso+|{-rFUd{;xxqPA5-%M zp+i%6)jVWD=AnPijFNN_j^kfnnxqAMm-$0vdP`NO;Q0gaPH`UlBvwU5L%#^n@(>d+ zwsJEEnp1A`mvkbWPOm%x)62^t2E|WCSb3$uU^89*E;HWVhD)mszMrWJ?^~sXI6Y$C zrsjT}Bk8-OIpe-2M_fH{ur#K^q;`W${di4nDAVFncHZ6T!cTak)qbd!NxwW(B7srxl0-*ww4^s&~ZmwY%EK0_i& zOyTtW&pQZ@IzSc1YJ?ps-17kK(!xIjD*jM3@p(*h^<{vx{a23~`=ZwMQ56YGP<&2= z-0P`}t!YRMJ1<@(58n7}NEW9^nOZZhDDT&}$zBuiYirV8;ah*%n+VsVvqiPfaJ3?i z%U|Dk7OesrC*UntXAKD8BolotJ_J4LW#;?>Pewq0lkZL)da@Y%N%hPH2x zqs0MRyi2j&c;?pZu`!T|*s(zYiR+-F`UUvV*8^@t2;gMNY^iwz>@G~})FlI+`2H3! zLuTK!HA>?zDjRYaCk!Ga)aujKe%XT5q{J))bLmKe%&m+nGy|z8+|%B^JDwlVl%PZu z6fuTebaZgGMJ9(xBsXd;Zlsi>M8f1BEzpDF)1)zu$cdhdi(*ULtEh7yfv8UU_|W}{ z_YUGLcY5mM9SPy^&}pHXBM*b*Cd^?Elf4)VXe!UB98!tUCcR`FNwK;y)Fm_*xxYXI z@qb%?*bNBwXv$?J%8dA(eUCLH9_;{CP2gE{h$OW?ET6IxKi*w`FTSXWS!QH#vs998 zeNV|uh&dBylj(}iIP?Jm6Ka9neakgK2+aMZl}THxP(0pL{Q!ac*tkIg3Vh~R;yPSj? zhqJNnE4oXZ(S~f(_F*ol+Q6rlE6TH_kWq#op(qf4$9pZ^k|#+fMva*<{cV2?F>MQH{|v^wIP& z{rZsbI3QLF7*^&UyBSnNYJE%5+$LkU9Erk1c%cG|mU{E-F~)Gw@!A!UE-Cr?3zTt9 zhoeC<2|kK4E3hx3^bTES^?MF6BgvqXqgnXD+Xsy_blkhYSw!73Woo9r+-E^;bHva) z*^|%IZqC%|%ZF!}eEd%Nrew>rH<-6fw5OlSJxxy zri!DfhcFZieHG*Gi|%W!h-7M>M51c;$EqAUnFP%yn{yJvM9gn~RD8U-iC*_EvN+un zC43KW9rXEnc-U$TGS7>^k1hRF;b-c&>D61JYo8pFBe_QD8#eLnozHf;eLWQz3^n50 z#9au$hq_~mM3&R60^*o2srpt2hSq!Bbx2z*n$3e+%sjL#*72Q`_NUpr7oTl(LKC-r z)-+q@LTb1kd9@62|Im@`3%&um0*sa|zu5rOn-cqYoK6rvbaU{*<|25AX)8Uw6-8I? zp5ly5R!`GL_|0r4uMLaZNskw0FdBjJCue8?E$Dvg77SXeSGINp-*ED7(i8}?R?{}m ze!%0!Ma8Z<-%^aV^r@|Nw?N8NzP&Lt@}_B!d74!j(w9_&kQvSsH>SNi`$!TqlX90p z-klU{WL^@>Nd7G{{y0@YrwQ~NIFQ|Wxe$m0^g(pL|86311l%2)0-Wl~o%nCE`fjI6 z?f`J!8I?61yf&Ny=s>j^=Go}8E?N_odz&q*sSqgpC3bLk0DYnlef9~$LkJ}QRM{Y9 zD*^lJ`dm07D@+*eZT-tV;+kFzotm9C|I}(_00{U#41^?}=Ux9kBI|`qjhd{iUWQQM zI@+rBvA;p`CVYRKWBKABVDOeKprI zBPSbYTXxRpOki_5>8GgW{DQ*Ji@{ss#??aZrA88qjHN~yKRSN=SRM&O1)TaM+ra?JWOX@M=F-@PY+DH1K%9gO-k);pwY-O3E}Gy6636tzw3q zT3(3a9~De1d>m2j!$r+)-uz|#CyBm2?Op4wB`~@xJA2J9l1zh)_NWcyX;D3Xy*Fhc zKuI##Xr@UYW-96-b9R?a(*)2U*loW&cr@?7SlBRK+jqU(%tN%MEcZQ=i1maD5?4dtOibPvXN!d`dqOogQn=YJ zQE5Qh&@K^Z>ILv!s?%zJrwI+X6AQCU@R_;`GCg;=l$s{>$j=tSm2rR)9rs`G%OW}J zBR+kuoMG}MJX<6rp#Mj^OfY-o<@@WKu~M2NU|Wd9<}Ol8(&wWeVYvB&b3zY;xHdkZ zNj|GECmQjs-?}g>E6GsI)~UFU~)+Aw>IuEJz|aF7txYXM}BQAsmWNn}UT&UW^QGaj?|3%6a8|Wv+Q@{^KndVgzJ) zm55=yQi({U*{tT(7Y{jgJ;e>`6>4&6Sql^m*wJ+LbEl?M8!c8RI%A8qguP*lV1z+& zY^@FPK7s9Av#&h?>}Yi;m`fOUIW_orb=_eByvc`I^U0(d(~;9cKM2HZmWA>Gitu8a zz3BFEPEr^kV(Q_Yi%8;&0sW@j$^-XXDhH4Qcua0`)~pRC$ey<+AD?WzRtzw5n$jk{ zr3s7jYZ|1E1W?Wp)G%vq_k9}D!zlbYh#<}T;Ohfy&eLA(sLD{^_HKh!*z9@0F(W0V zILB871-&M(vC>NRoa8Wcq0dPP$zlv$#zkIW_n?UHxE7ECVsa6*2cIer>G56>kASZc3B3#I>>T=Q4#=!;nisMq?fPAYvjz9#NT~SbKCF~hUWMVAmt2Ro zRo?4gE;Ru!dIgr+6~q*pTXknBE%=zbSE`-*+luZYEqj^hUe#kdWQFJmKz4`l+mlH& z{3~z*AgO?vid`qQJ5K!d+{j4sl=R`xlwFrKO{xv50ZQP^WXX1K4#GHYncFqFq(TC=?g~eBW}CMjbWFn6tiW2$LiQ$WbsqE1ZGec!s~!|y+j?rMcRwyR zm0f#q=5p3mZ+AwGCwXSq{+6Pb2i&fo6A&8P_mNtrO=A=4_=9&7wa_N+@NEt2ra>^G zYnQ7t#58egkHbAFg)w;0oILo1lSEpgm`Mt%F0I?LLK z`0Lf&V9k-XxHys{MjebyMc3ynh3G^sGB3#?>~iAto}L|jZyvx*315P-qbEg_bUtXt z3r3m2e7D(#tcd11m*Q4D;L6Cro#bEtoJ{_&TmWcKB%rdK&KA92%MDKKuF00L>2BDW zb;#|>6t&OA?HnP^#&{~zM_wE)0Qs*GOpUBVSy>tKr#pi1V`Hfc9r^IhO&yKr13W<} zA!C9fZBZ82!TUhoW2|AA|Js)fl4A7~$XBz53Uq%7AlQD9*qteqRl7wY_AY$+uO{@@ zc4byB<{70d=TN4d`dk}+;g$%~llJ6vz%ds^%LI;PGw(0tz}*rW<7t7sMIc9SOuxC- zXMnHC1vWw{8z0LcEL``6VL-5dKMdV<(!A)Cl;I~NB6583`}-1pT5A7*v%exHZ+BX& zKz-jZI$W<%jhKsjh^Uw6k2cPtm=171KRwgc-AJo*c@!^p-@U=Kmgn}Ma|}q~_H~xdJCq1!TVhGyw=6WY z#7@fV!w0Rn!>CNJ(apygj7yV|M8-ZMs%qZ{Cb3IB4=7c*IkX(UOlR7u;X>ob*2Is& zvEsaZ`Kk51Z8`9cVE%YBYJ(ea-f5pp z-q^UB)pFVkURSvN{+5a~_H8^vW1v1>lAq#v;!qKtD-GEfRu+ddLbupZWo{cWDw#8S z-7K+h`!2ht`DvDV7je^?Cx<=HDiM2#3Xj{KuDnDbe%jH}%DaYTH@QrL9y|dN-mw44 zB;pv3=>PMli}sFw`U;IW` zS%r!VCTw7QQK(#*t#wO*>PtsrX<$jOEGORPzSym9tV^W=Qqb}C0{BGt`r+QJiq9XA z?n0|qxt9=|di(Mv((L|;+nnk>hS1=Ppp`qJ{l*Ph8$dSIa1oHM(Yh186ne})ibX$j z7`{!-8E#TcO8tZ^o+d}Cl+dJPyS=e2aZzb3b@E8GfG=v6asAu1?- zP7ayDV!dtUUbAmaQ+4Ykus&)3dAnJT(~#6FlTtQ(@6yld_iZ6&K6i2J>meDE)ZHO{ ziO-6)Hywz|jPlK!Za)h{3oS^6+&`)=P|^43bg5+FY%~?k_uIwtD8KqubD8cg^EW|%LyG~+!G`#PKzRgsm@|m4vgbdo}Bg?DG{|0i9n%|M+B6$!Zl;yj9 z`(NEV@a z_uvI0u zhj!W>orTtFq^@yjq#*;G-r;d{X!dooi##rDO<6@jAvYYZGlUKwy`A&seiS>-lZ^Q; zw5J3$IsdcTk+Jks{j}kyK0HhMM5$VL)LY?g#VHG`JY9ESORz~3Mf-RQiPj4S?Tc+3 z+OyT4TvNB_3iuK-+Ffs^enpnUtE?wH#8UG@20?{p!3>V`pzw(gB{B1LN_@4iKd$?n zE)r&eeNUs{r3zSutuVY#f1B(G$x>MHweq9@%EN(Z>S!s2oKV(uOMEdUlN7lBQhxiw zGEa`BCq;rNrx%QNKivFMWV~VcKH10smO6BCe1che4xQ*6EJTxOrQ-Q_14YI^#4K%5 ze@jI}`7>V;xrB-eIe{qk0sZUOSW&Zgmu#iXm=wP`>dYDBq(L|zTkeFZw6gebpZ3cd z?Dyw!QBmBUm4O7NgM{6Z^q(Ey1J6O%o=w@j@idIyKWVQR-lZ-j>{_mhfqV~v)G6gh z0*b1B=3f!ulM?*)r3}_M(uw0S%An;+nHKb-2&|Un>+ol9uGpXwan(#`*C|)a;z!A# z5%<+pQ%m@JS6%92RLBGEhlfOBpP7?!e*!-FH?9pVor~{OApOEZ`ab^?(QZ8f23hrF zHq5NZ-p{)N64a;@s_8M1yH{r&+++zpZtMc}zke&RzTbm&2IuS@=m=4z%%}+3g7`ml zUsGNOUB1Ge1pa|e9dz>&2`928`Pv%`JZuPFE)Djbs>c)^w*LLvYKR(mdqCIBGXKuz zf+|*G*Zy+8>1(S&Z^|_h4UPJ{Z=4K%DgU@kI=lc zxq6l%|CZ!8PKr;f_4T~`5g%MW5b$Rst{C)`l|O$f0|#xfEb!ZcE=q?6dd~vxUC5=v z2(W4Kr#ep=k8O6xQ(zHszrXs@JWGq+o6}?HQ%S@jOZnaujQm;$M#WChse8XAzUkON z&y>>p8JSGMbfZOpwy`F1tFG;E3*Dmrt}IeF@ZqRMzk@U=d~~2NW?0515ApTUzluhP z^A&|cB=z9G0fh)Pa?q=|*KZcJWx@v@4uZDO-ey%McB9ETb!c5S76?B#BN* zvC?yUy?dN3Ggh}&f&EXZIx1QH1x{@yHC<9` zH5Y&4Dh60GR=(viR`x!lXTPb{4>cqLzRSHS1riQ~8<0`zyY-=yBLglA3G{QsD(L*? z*b7lHVrap{LnOe1_Jc^%_DjrPCja0L zMU)U@My>Q*mtzp3n9E(QlqxMI@|{Ggs=IT)Q$^n6??U=F@jSfZKK~*N*+xX#7Hq@M zA$~m9;BD;rr;B%mMM|ix8zVfi%PsQY&*->Y?F12>V}IM-I!i(9Sn=>7Fwon6y@vO#+zTvE2p z$QgF>wA$oZVw^!Q=)9P+P;KC)m&8R2)N)ndBboK%Vijef@;UD4NZGni2*Ih%DivYs&~ENPCr-r!KrVXky4!W37;0E@>0N-l~P!HX3Ej7 z%XT6P&c;Vb5hnGx2&D9Po=wIVK1<8#bVpN-$o{7PiR~Za3zI zlW~O=Tuv!Xa^utCQ7C!~f@*JItOt`QVrMe@cqZJ#bF z)wNO6t6~mF_~%rn^QRW4VaFmGbMi#q>(~_RrjM+J(R5KB&b;|zCvhYxR|;+%b z4MnV1wwMkgm;NsoZGZyLoIqC0!Cczm7u?k4ExB=vKJ-FTF7ru$iL=6|U1`5o^@fJq z3-J)z+;`jYQ`?M&KS5%ks@_hAu(H72Vj#c!S2J&|ow_Jxa z7%(QHR|IpFEDJ1Dmge&v+MZHZ2XjT`%}DtLnzRGn~&a{(rxMWRWBSNE_zV)KLsFtI1O_Hu~CT! zPG<{H8{z*6H;Op>+sGe%{jt2-N4}h!gR4m4?#GVrlzg0^@B1w8=%qg}GjuMz=tr+KEOaC5;@~G+frL_a9bPZZ`h0)o(--gaqWT9dL+8ynTC_kH z_|gjXF8SD_(vRh*bV5#ywl;s?^b@FkkFb+{cf8EjOk&TgSvkAfj#t-Rsv7N5b{`eZWItstgPz%FWAWf~nsnT4YG2st%Od89R##`-OD~`Bc%&YVKG_~5 zq44w|KiesS2>*q{Lok+?9J)JQa`wr|&a13Q!=qBX~Q>Xz46%sPlpUzbkY@g03A)@FpD?~G;lTrg_WEyL>#(JgPL5>hBruyk z=cDL&jy?QdN1vL^Jwj}+*w1J8?$?$c=rLl2;Ygu`EFAd*@+ zV!Xf7(o)5|d!AJXtv^GjD|tsG

!PX|l5laf8HqH$sft<+K|L*~c1I2%`(P;80)O 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 cnC@SG)5BSczH

Output files @@ -28,9 +26,9 @@ The initial QC and alignments are performed at the library-level e.g. if the sam
-### Adapter trimming +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/) gives general quality metrics about your reads. It provides information about the quality score distribution across your reads, the per base sequence content (%A/C/G/T). You get information about adapter contamination and other overrepresented sequences. -[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to consistently apply quality and adapter trimming to FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. For most ATAC-seq datasets this will be the Nextera adapter sequence 'CTGTCTCTTATA'. See [`usage.md`](usage.md) for more details about the trimming options. +### Adapter trimming
Output files @@ -46,12 +44,12 @@ The initial QC and alignments are performed at the library-level e.g. if the sam
+[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to consistently apply quality and adapter trimming to FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. For most ATAC-seq datasets this will be the Nextera adapter sequence 'CTGTCTCTTATA'. See [`usage.md`](usage.md) for more details about the trimming options. + ![MultiQC - Cutadapt trimmed sequence plot](images/mqc_cutadapt_plot.png) ### Alignment -Adapter-trimmed reads are mapped to the reference assembly using [BWA](http://bio-bwa.sourceforge.net/bwa.shtml). A genome index is required to run BWA so if this is not provided explicitly using the `--bwa_index` parameter then it will be created automatically from the genome fasta input. The index creation process can take a while for larger genomes so it is possible to use the `--save_reference` parameter to save the indices for future pipeline runs, reducing processing times. -
Output files @@ -64,6 +62,8 @@ Adapter-trimmed reads are mapped to the reference assembly using [BWA](http://bi
+Adapter-trimmed reads are mapped to the reference assembly using [BWA](http://bio-bwa.sourceforge.net/bwa.shtml). A genome index is required to run BWA so if this is not provided explicitly using the `--bwa_index` parameter then it will be created automatically from the genome fasta input. The index creation process can take a while for larger genomes so it is possible to use the `--save_reference` parameter to save the indices for future pipeline runs, reducing processing times. + ![MultiQC - SAMtools stats plot](images/mqc_samtools_stats_plot.png) ![MultiQC - SAMtools idxstats plot](images/mqc_samtools_idxstats_plot.png) @@ -74,14 +74,6 @@ The library-level alignments associated with the same sample are merged and subs ### Alignment merging, duplicate marking, filtering and QC -[Picard MergeSamFiles and MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html) are used in combination to merge the alignments, and for the marking of duplicates, respectively. If you only have one library for any given replicate then the merging step isnt carried out because the library-level and merged library-level BAM files will be exactly the same. - -Read duplicate marking is carried out using the Picard MarkDuplicates command. Duplicate reads are generally removed from the aligned reads to mitigate for fragments in the library that may have been sequenced more than once due to PCR biases. There is an option to keep duplicate reads with the `--keep_dups` parameter but its generally recommended to remove them to avoid the wrong interpretation of the results. A similar option has been provided to keep reads that are multi-mapped - `--keep_multi_map`. Other steps have been incorporated into the pipeline to filter the resulting alignments - see [`main README.md`](../README.md) for a more comprehensive listing, and the tools used at each step. A selection of alignment-based QC metrics generated by Picard CollectMultipleMetrics and MarkDuplicates will be included in the MultiQC report. - -Certain cell types and tissues yield an enormous fraction (typically 20–80%) of unusable sequences of mitochondrial origin. This is a known problem that is specific to ATAC-seq library preps - see [Montefiori et al. 2017](https://www.nature.com/articles/s41598-017-02547-w). There is an option to keep these reads using the `--keep_mito` parameter but its generally recommended to remove these in order to get a more reliable assessment of the duplication rate from the rest of the genome, and to avoid any biases in the downstream analyses. - -The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at predicting and estimating the complexity of a genomic sequencing library, equivalent to predicting and estimating the number of redundant reads from a given sequencing depth and how many will be expected from additional sequencing using an initial sequencing experiment. The estimates can then be used to examine the utility of further sequencing, optimize the sequencing depth, or to screen multiple libraries to avoid low complexity samples. The dashed line shows a perfectly complex library where total reads = unique reads. Note that these are predictive numbers only, not absolute. The MultiQC plot can sometimes give extreme sequencing depth on the X axis - click and drag from the left side of the plot to zoom in on more realistic numbers. -
Output files @@ -101,16 +93,22 @@ The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at p
+[Picard MergeSamFiles and MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html) are used in combination to merge the alignments, and for the marking of duplicates, respectively. If you only have one library for any given replicate then the merging step isnt carried out because the library-level and merged library-level BAM files will be exactly the same. + ![MultiQC - Picard deduplication stats plot](images/mqc_picard_deduplication_plot.png) +Read duplicate marking is carried out using the Picard MarkDuplicates command. Duplicate reads are generally removed from the aligned reads to mitigate for fragments in the library that may have been sequenced more than once due to PCR biases. There is an option to keep duplicate reads with the `--keep_dups` parameter but its generally recommended to remove them to avoid the wrong interpretation of the results. A similar option has been provided to keep reads that are multi-mapped - `--keep_multi_map`. Other steps have been incorporated into the pipeline to filter the resulting alignments - see [`main README.md`](../README.md) for a more comprehensive listing, and the tools used at each step. A selection of alignment-based QC metrics generated by Picard CollectMultipleMetrics and MarkDuplicates will be included in the MultiQC report. + ![MultiQC - Picard insert size plot](images/mqc_picard_insert_size_plot.png) +Certain cell types and tissues yield an enormous fraction (typically 20–80%) of unusable sequences of mitochondrial origin. This is a known problem that is specific to ATAC-seq library preps - see [Montefiori et al. 2017](https://www.nature.com/articles/s41598-017-02547-w). There is an option to keep these reads using the `--keep_mito` parameter but its generally recommended to remove these in order to get a more reliable assessment of the duplication rate from the rest of the genome, and to avoid any biases in the downstream analyses. + +The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at predicting and estimating the complexity of a genomic sequencing library, equivalent to predicting and estimating the number of redundant reads from a given sequencing depth and how many will be expected from additional sequencing using an initial sequencing experiment. The estimates can then be used to examine the utility of further sequencing, optimize the sequencing depth, or to screen multiple libraries to avoid low complexity samples. The dashed line shows a perfectly complex library where total reads = unique reads. Note that these are predictive numbers only, not absolute. The MultiQC plot can sometimes give extreme sequencing depth on the X axis - click and drag from the left side of the plot to zoom in on more realistic numbers. + ![MultiQC - Preseq library complexity plot](images/mqc_preseq_plot.png) ### Normalised bigWig files -The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The coverage values represented in the bigWig file can also be normalised in order to be able to compare the coverage across multiple samples - this is not possible with BAM files. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. -
Output files @@ -119,11 +117,9 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in a
-### Coverage QC - -[deepTools](https://deeptools.readthedocs.io/en/develop/content/list_of_tools.html) plotFingerprint is a useful QC for ATAC-seq data in order to see the relative enrichment of the samples in the experiment on a genome-wide basis (see [plotFingerprint docs](https://deeptools.readthedocs.io/en/develop/content/tools/plotFingerprint.html)). +The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is in an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The coverage values represented in the bigWig file can also be normalised in order to be able to compare the coverage across multiple samples - this is not possible with BAM files. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. -The results from deepTools plotProfile gives you a quick visualisation for the genome-wide enrichment of your samples at the TSS, and across the gene body. During the downstream analysis, you may want to refine the features/genes used to generate these plots in order to see a more specific condition-related effect. +### Coverage QC
Output files @@ -135,18 +131,16 @@ The results from deepTools plotProfile gives you a quick visualisation for the g
+[deepTools](https://deeptools.readthedocs.io/en/develop/content/list_of_tools.html) plotFingerprint is a useful QC for ATAC-seq data in order to see the relative enrichment of the samples in the experiment on a genome-wide basis (see [plotFingerprint docs](https://deeptools.readthedocs.io/en/develop/content/tools/plotFingerprint.html)). + ![MultiQC - deepTools plotFingerprint plot](images/mqc_deeptools_plotFingerprint_plot.png) +The results from deepTools plotProfile gives you a quick visualisation for the genome-wide enrichment of your samples at the TSS, and across the gene body. During the downstream analysis, you may want to refine the features/genes used to generate these plots in order to see a more specific condition-related effect. + ![MultiQC - deepTools plotProfile plot](images/mqc_deeptools_plotProfile_plot.png) ### Call peaks -[MACS2](https://github.com/taoliu/MACS) is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. - -[HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. - -Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report. -
Output files @@ -162,22 +156,20 @@ Various QC plots per sample including number of peaks, fold-change distribution,
+[MACS2](https://github.com/taoliu/MACS) is one of the most popular peak-calling algorithms for ChIP-seq data. For ATAC-seq data we are also looking for genome-wide regions of enrichment but in this case without comparison to a standard control sample (e.g. input DNA). By default, the peaks are called with the MACS2 `--broad` parameter. If, however, you would like to call narrow peaks then please provide the `--narrow_peak` parameter when running the pipeline. See [MACS2 outputs](https://github.com/taoliu/MACS#output-files) for a description of the output files generated by MACS2. + ![MultiQC - MACS2 total peak count plot](images/mqc_macs2_peak_count_plot.png) +[HOMER annotatePeaks.pl](http://homer.ucsd.edu/homer/ngs/annotation.html) is used to annotate the peaks relative to known genomic features. HOMER is able to use the `--gtf` annotation file which is provided to the pipeline. Please note that some of the output columns will be blank because the annotation is not provided using HOMER's in-built database format. However, the more important fields required for downstream analysis will be populated i.e. *Annotation*, *Distance to TSS* and *Nearest Promoter ID*. + ![MultiQC - HOMER annotatePeaks peak-to-gene feature ratio plot](images/mqc_annotatePeaks_feature_percentage_plot.png) +Various QC plots per sample including number of peaks, fold-change distribution, [FRiP score](https://genome.cshlp.org/content/22/9/1813.full.pdf+html) and peak-to-gene feature annotation are also generated by the pipeline. Where possible these have been integrated into the MultiQC report. + ![MultiQC - MACS2 peaks FRiP score plot](images/mqc_frip_score_plot.png) ### Create and quantify consensus set of peaks -In order to perform the differential accessibility analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. - -Using the consensus peaks it is possible to assess the degree of overlap between the peaks from a set of samples e.g. *Which consensus peaks contain peaks that are common/unique to a given set of samples?*. This may be useful for downstream filtering of peaks based on whether they are called in multiple replicates/conditions. Please note that it is possible for a consensus peak to contain multiple peaks from the same sample. Unfortunately, this is sample-dependent but the files generated by the pipeline do have columns that report such instances and allow you to factor them into any further analysis. - -By default, the peak-sets are not filtered, therefore, the consensus peaks will be generated across the union set of peaks from all samples. However, you can increment the `--min_reps_consensus` parameter appropriately if you are confident you have good reproducibility amongst your replicates to create a "reproducible" set of consensus of peaks. In future iterations of the pipeline more formal analyses such as [IDR](https://projecteuclid.org/euclid.aoas/1318514284) may be implemented to obtain reproducible and high confidence peak-sets with which to perform this sort of analysis. - -The [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. -
Output files @@ -192,17 +184,19 @@ The [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) tool is used to co
-![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) +In order to perform the differential accessibility analysis we need to be able to carry out the read quantification for the same intervals across **all** of the samples in the experiment. To this end, the individual peak-sets called per sample have to be merged together in order to create a consensus set of peaks. -![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) +Using the consensus peaks it is possible to assess the degree of overlap between the peaks from a set of samples e.g. *Which consensus peaks contain peaks that are common/unique to a given set of samples?*. This may be useful for downstream filtering of peaks based on whether they are called in multiple replicates/conditions. Please note that it is possible for a consensus peak to contain multiple peaks from the same sample. Unfortunately, this is sample-dependent but the files generated by the pipeline do have columns that report such instances and allow you to factor them into any further analysis. -### Read counting and differential accessibility analysis +![R - UpSetR peak intersection plot](images/r_upsetr_intersect_plot.png) -[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. +By default, the peak-sets are not filtered, therefore, the consensus peaks will be generated across the union set of peaks from all samples. However, you can increment the `--min_reps_consensus` parameter appropriately if you are confident you have good reproducibility amongst your replicates to create a "reproducible" set of consensus of peaks. In future iterations of the pipeline more formal analyses such as [IDR](https://projecteuclid.org/euclid.aoas/1318514284) may be implemented to obtain reproducible and high confidence peak-sets with which to perform this sort of analysis. -This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential accessibility. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. +The [featureCounts](http://bioinf.wehi.edu.au/featureCounts/) tool is used to count the number of reads relative to the consensus peak-set across all of the samples. This essentially generates a file containing a matrix where the rows represent the consensus intervals, the columns represent all of the samples in the experiment, and the values represent the raw read counts. -By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. +![MultiQC - featureCounts consensus peak read assignment plot](images/mqc_featureCounts_assignment_plot.png) + +### Read counting and differential accessibility analysis
Output files @@ -223,18 +217,26 @@ By default, all possible pairwise comparisons across the groups are performed (a
+[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is more commonly used to perform differential expression analysis for RNA-seq datasets. However, it can also be used for ATAC-seq differential accessibility analysis, in which case you can imagine that instead of counts per gene for RNA-seq data we now have counts per accessible region. + +This pipeline uses a standardised DESeq2 analysis script to get an idea of the reproducibility within the experiment, and to assess the overall differential accessibility. Please note that this will not suit every experimental design, and if there are other problems with the experiment then it may not work as well as expected. For larger experiments, it may be recommended to use the `vst` transformation instead of the default `rlog` option. You can do this by providing the `--deseq2_vst` parameter to the pipeline. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) for a more detailed explanation. + ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) ![MultiQC - DESeq2 sample similarity plot](images/mqc_deseq2_sample_similarity_plot.png) -![R - DESeq2 MA plot](images/r_deseq2_ma_plot.png) +By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. + +

+ R - DESeq2 MA plot +

-![R - DESeq2 Volcano plot](images/r_deseq2_volcano_plot.png) +

+ R - DESeq2 Volcano plot +

### ataqv -[ataqv](https://parkerlab.github.io/ataqv/) is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing. Please see [ataqv homepage](https://parkerlab.github.io/ataqv/) for documentation and an example report. -
Output files @@ -245,6 +247,8 @@ By default, all possible pairwise comparisons across the groups are performed (a
+[ataqv](https://parkerlab.github.io/ataqv/) is a toolkit for measuring and comparing ATAC-seq results. It was written to help understand how well ATAC-seq assays have worked, and to make it easier to spot differences that might be caused by library prep or sequencing. Please see [ataqv homepage](https://parkerlab.github.io/ataqv/) for documentation and an example report. + ## Merged replicate-level analysis The alignments associated with all of the replicates from the same experimental condition can also be merged. This can be useful to increase the coverage for peak-calling and for other analyses that require high sequencing depth such as [motif footprinting](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3959825/). The analysis steps and directory structure for `bwa/mergedLibrary/` and `bwa/mergedReplicate/` are almost identical. @@ -259,12 +263,6 @@ You can skip this portion of the analysis by specifying the `--skip_merge_replic ### Present QC for the raw read, alignment, peak and differential accessibility results -[MultiQC](https://multiqc.info/docs/) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. - -Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. - -The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . -
Output files @@ -275,17 +273,13 @@ The pipeline has special steps which also allow the software versions to be repo
-### Create IGV session file - -An [IGV](https://software.broadinstitute.org/software/igv/UserGuide) session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, consensus peaks and differential sites. This avoids having to load all of the data individually into IGV for visualisation. - -The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. +[MultiQC](https://multiqc.info/docs/) is a visualisation tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available within the report data directory. -The file paths in the IGV session file will only work if the results are kept in the same place on your storage. If the results are moved or for example, if you prefer to load the data over the web then just replace the file paths with others that are more appropriate. +Results generated by MultiQC collate pipeline QC from FastQC, TrimGalore, samtools flagstat, samtools idxstats, samtools stats, picard CollectMultipleMetrics, picard MarkDuplicates, Preseq, deepTools plotProfile, deepTools plotFingerprint and featureCounts. The default [`multiqc config file`](../assets/multiqc_config.yaml) also contains the provision for loading custom-content to report peak counts, FRiP scores, peak-to-gene annnotation proportions, sample-similarity heatmaps and PCA plots. -Once installed, open IGV, go to `File > Open Session` and select the `igv_session.xml` file for loading. +The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . -> **NB:** If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. +### Create IGV session file
Output files @@ -296,14 +290,22 @@ Once installed, open IGV, go to `File > Open Session` and select the `igv_sessio
+An [IGV](https://software.broadinstitute.org/software/igv/UserGuide) session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, consensus peaks and differential sites. This avoids having to load all of the data individually into IGV for visualisation. + +The genome fasta file required for the IGV session will be the same as the one that was provided to the pipeline. This will be copied into `genome/` to overcome any loading issues. If you prefer to use another path or an in-built genome provided by IGV just change the `genome` entry in the second-line of the session file. + +The file paths in the IGV session file will only work if the results are kept in the same place on your storage. If the results are moved or for example, if you prefer to load the data over the web then just replace the file paths with others that are more appropriate. + +Once installed, open IGV, go to `File > Open Session` and select the `igv_session.xml` file for loading. + ![IGV screenshot](images/igv_screenshot.png) +> **NB:** If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. + ## Other results ### Reference genome files -Reference genome-specific files can be useful to keep for the downstream processing of the results. -
Output files @@ -314,9 +316,9 @@ Reference genome-specific files can be useful to keep for the downstream process
-### Pipeline information +Reference genome-specific files can be useful to keep for the downstream processing of the results. -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to trouble-shoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +### Pipeline information
Output files @@ -328,3 +330,5 @@ Reference genome-specific files can be useful to keep for the downstream process * `results_description.html`: Documentation for interpretation of results in HTML format.
+ +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to trouble-shoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. From 1dc03f3026e2a88f70a7280a66c065f30f2677a6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:43:09 +0100 Subject: [PATCH 210/226] Update docs images --- ..._annotatePeaks_feature_percentage_plot.png | Bin 73104 -> 24552 bytes docs/images/mqc_cutadapt_plot.png | Bin 35497 -> 63551 bytes .../mqc_deeptools_plotFingerprint_plot.png | Bin 114836 -> 78044 bytes .../images/mqc_deeptools_plotProfile_plot.png | Bin 115914 -> 74083 bytes docs/images/mqc_deseq2_pca_plot.png | Bin 61615 -> 21263 bytes .../mqc_deseq2_sample_similarity_plot.png | Bin 76247 -> 25642 bytes .../mqc_featureCounts_assignment_plot.png | Bin 76240 -> 26436 bytes docs/images/mqc_frip_score_plot.png | Bin 74548 -> 26374 bytes docs/images/mqc_macs2_peak_count_plot.png | Bin 72526 -> 26994 bytes docs/images/mqc_picard_deduplication_plot.png | Bin 76669 -> 27788 bytes docs/images/mqc_picard_insert_size_plot.png | Bin 116371 -> 59566 bytes docs/images/mqc_preseq_plot.png | Bin 108852 -> 53270 bytes docs/images/mqc_samtools_idxstats_plot.png | Bin 113974 -> 73244 bytes docs/images/mqc_samtools_stats_plot.png | Bin 71865 -> 25307 bytes 14 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/mqc_annotatePeaks_feature_percentage_plot.png b/docs/images/mqc_annotatePeaks_feature_percentage_plot.png index 6aa81d4bede0972579cccc1ea2125eeb55eca4ab..a14ba0c5bad8dfcebb0f7894d926470ae1abd368 100755 GIT binary patch literal 24552 zcmdqJ2UwH&x;@J1I1VB*N)-fDx`-fM>If*kND-+~=_T|IAvy{SAfWWl(3^m?P(naJ zK)Rum0FmAkdVsY1#o7D6&&=NUoW1uw=eg%zpU3AT$ya~nUF%)z{e6)Jdg}BS*e}q~ z(9mmYs2S4GoExU0IphE18Q`128l_-h^PRV$x(ZF@(6x2o!}kvNb??*ARL9W~pPd6f z(|Tx_dDGBb@uB|zZqA-NfQAMH(Nw!{9ALdoqVusjgb0LinCltt}SH@qwlIHM23dcLBz<2zUT&19{BiCh)v5h zQ}cW3?z~QPz~<-p0uf+CqZtpQZg@3O)Ry^|e{65BXt2E2)O7fiP0Z$ibLQj=SjM&S zCKqB#q=L}NLqj9+w(cB_{rg$}2#;q|2m8E%-G{jEOsW`BzBzAiqr{4~5u`RdGQ zqnv_thOffpX&6W4ojXSytzXh{7hm=J;9Bwdtk5Owtc}9=G?|(sEHtU>l@!CzY+MxV zM6h(_Z0$BSLptQ3mD@KW!T}MBQzjOM@bACucA0#A!{Jpcu~UXJpQUf@GwGibvIqCK zI#|l$Cb@35w(dObZLP?03l;PxfpeN2AF-XG8Tbh}zeY^pxXYc>V=IwC7x6UWE6Oql zq2uc`Hpd?-+-g=|*8C)!FLW#jA1BUD@Xu-HP2bqiRzebA4lIH~j@9Ser&=dO$*Wl@ zGoiy3o2y|rXg5QzWfY<~U-GHF?D1L_)MJ~O6@!o;bE+ZaDihZT zqOEqD7dNU_zRrdCuf)?0(`jlQo@2F2T_3`6Uh5p1^~Z#)4$(t*SviJ_j+AKLa#8O$ z!+X;D3dYCBhq?c1Ue)5q{qv(iextdodl4P8l4}76%F^z=mKd-7r1W~4j|05Gz0^&o zV7M@26{SMS)mTUzxM@3KlBH_e`%qmOf^W!H&YkVgB_35_4%6bGbyJ%gU8b(box>qc ztL^VdFWxv|CM@zA5DN_0jNgPOX7Sb`yW#TDHucNl3j}p+X!G$CO-%c&1&*vUbIj*= zsP5Lhox6RK02`dfu!DHl6D*>-zRJfn+Ky~y?<}a#>==aj6IQE4lG+(JtJ`8VN)@JnW3PKL*D>ZFVzSmZjPT8M&|@Y3#*-a8S_KIsvC_ zH0cy!ji4dArK3|2i?-vmij!zJ@;=7|>-m9l!pCA|UtRvT3@rLBIZZ6#}#s-r)`8Lq9)qi$3HGm zTzfZO1}(o?*@kylIy}82mI*x~crGRh-+3=Ab-?y`A9fm0zzvo!oDdn6oUbzd?A7O^ zP|Jh;veHL4XIb{j#O2N#GSqcgyKrv_2;Ac${z`$pIb=e&6fiwOjq|ATJlv;onHlm9 z)<~qoOD*^8XH_w0I9|l-TKIH{fJBwdE31Mr zqZRns&{6Ktf-$Qt`odO+9*;GoXlPAfKV4dL28B2=$y%=#>(8X_fut2u4(4KVhzmz2rj&K)?CEjrTKjoz z$Z+hl6FyUGW`D7G%E&5?1G%_$F>&p+elc)S^~S@zo#WRFwaqYN=xL=aF{t&hwWqo2 zWHP6*Kn`2B(%FWu9-zb5V^im&X=#S!r~$k7fp)aRh(bzE32Qty3wkJkSDZzxFknwI zlnGN0+~3E-%d#{MgVQNR%Zt9A#-97d76L)52^k=(Ywbg^jQcOnp5NacOgDK|{6M#> zPUqMs)zm7pWm}mLSe@C7oyE@rAQ7#MU*(R>IKxStmOwI9-IE!p4P>ihPi8$*lZp6Ix#~bxQbuxcXv3Y+CejcFZm0FK zfA^h3{TPCzxErBFwhTR(zH=U5*M$q#B?%p#$k8*-&H5|MaEQyy#C~ZIrPO-(Unvu9 zx`q8oW|la29TX4H5H(^ykP_-aGr~GL1(Rz(U^IC$U;nrsD?tZT*xFc7_@! zr|u4d3|g*x`a4X|hhlaUt`STpEKhLQlNpo!g^$ZCaJ^8((sKDkx6JT1!KC_{ByM4o zau9VacRzpFFR<0Oe=%(!P{tB^SSktD^y?@ej)A|QP2--m0}pbDzOhMH?EwjoS7TSX zn)k8As&}uBkS&juqlYcW~=;2Bw4d~MfgV7GBo(XMDK*ZDi53L)B~v+y2zsi+mJy_fnE zcH;64A$EjzLy6=O3NpjBdDUjsSD84yLh##)RZW)4Y+I|B=U1bLg<}Gjwz*plthM(3QF}!f4{Q-q#=6dU1BVz$E~+zG@XZMQZ7%WXIi<8qpv=klSX z<$$QuBgkT#a^^jpQGQh=Jx!()^Vzd!k-ADbRpr9gtTZ&KLVg&lmKQ^ZprE~p!)IR_ zk8m@47%o>xhy&SxzqSP%FI-9f=*!)*ve3NIKB|AD=!a)*+u1oH&F()29n5pMkv_SD zjJ-qfuP7_YgwV0OxE2e_%H|{}wfEXgP=9?6CcA0D8`Ik0`5|Lkr^p)*$#D(cIl%_H zBXXCubJ(42?}oR&l5g7s;h<|4@I}w#k5*9p>f}X)Ho#Njh}+2&vT_@R*pAgHI&IOe zoCzQagcACid+T}wPO;I-SBJyT_iPzSN7BamQ1%3?u1Vc_}kJ}h% zm^@n(1PSem_r?TY#fBtBES4`}u*`@uH=H}*+>+yRi zWOfc#@mkcbRlr;gA6>Z$wHXRV4Vv@7{gP!RpIZ)f`}vRY$-ez7gM-)Z1u3*#AC!}m zvkqKNGANkXUF>1tQecZpjOJfjL+0md)Y|mKnh8qu&38tCAcx}y1!f=+s7@^?I9N5y z9;tHAXU#y+u)Mt7MY>`Ox%B$xpq#wCL%T}k<9)|lrvw6Zrxh7) zb+C}BGfY~3Aa-&7^VYH1y$rQBnhr(#@YdE=57A}&!Pjc`J>mU*N@sza9ejVXF6$CH zFwE|--*@Mq7zc(AO7ZKt!YbZ!5BABWisv6!S|+AhF#k~a*wob2-QC^S*SBPJy=gT& z2TEK{5;hH&8@$A=qyQxo&(X2GmaA`u!{fLVo1b?@85B?Fsz$Kh)*z`wvZzBTKl>iW z8x%i=LMi1{T;{DIW_ETPq8C|35*^)JZ8e)&`*s&+t*o;8Q$!hj(>djQ9OpY8?5_^f z9m+PZa6vl5rVR!(dg3@Y<@|1M(-l@V$e;us65d7KE2Ri8zKe~Gii+wI0!{M(Z99-A z;ecG|%FWg@A?&XjPlVrm)Dz1oA4)u~vFlgKvaf2{)AG?UG?C)CR238ylzhjEeZwaz z_NV+LL{Sm{n8ZMISXmVFrpjGfq>33t52q>MAZYatmZ@1-$A>XF)FIq%`Upm4N#H+E zz|&Q~qZuv5=E=0~!<_DUoUt!tAV2SF=2m3B@YR<9&lYVlNL3N@Ke02R-y{g+z+@AC z{NFVR4ZA*m{MjdAcy)7QL+h2{`-;NSLXjEKQt-fR^$m_Fjc4d0OPAnXH`V0v*_?PTk$42IfY-!uXp20m;ZU*!O`+s!_y!tlCZ#4EE(Ghd3;_qx44j5q z)EuVROThi=?8L*Y^qHJRE4ZDjGpteu>$(_p9tP(kj;ZR$i^xH;wO6f+v-UGhf;LY^ z(U|?>`6JyTgw``OsUj@An|`R`2Vg(FZmCHAvAJ}YsHN;iNg2gEbR@7UU&CItts;(6){o`{xC#_l)xgoB0QDfTcJ~h`yGq)C2=_@@9Wfw5$w+P z>8kJ0437oQ`O-NWo#N)`x#J zPX`{XAswY?edP|1jvi)U9F@f#^foAcY$UD7qUX~!cDZ^LW-xKqoJ^MSzUkFGbsX%DqoO%eYGs`H9P zQccZ*lz?Bw=rsNbg7ZgKpqJq|r(D1Kb8GoV+R>cYuUFT1l*xy+@@=daXzZgmag;Cf z>7cMPzYUyIFUQ~!v$-_(S)y1{zlZzCowoO7&md4;UEPwNyNQ*KXzCdKmqpQkUrzn6 zjx2rt^y&5H-qn2oqYLi~O-zi8jj&)-fMAK8dQ1PH-~-sGvK|r8kQ=xkbJ!JZ;}ZN^ zshw#fcd7f_i~{kXMxUK@+32T1Lh;eH&;BNgqjMZT+~wgU_q2ujt>RU_`{?RPB5})E z?w1?TBsP6@JS4O>$TNL>zu$#`Ud8I7mQzfm-s7rDOKA^f!$*>)Ct-Z(fS#56P2D;! zl|l^_OjV!0)2j3Zdk3r)CeQGM?R*Sy=I}0ba36rxC$b^- z(8=2hm-mXP51XjyvKQP&oBP{w$Rx9u*vf=7wtlGhwbf4bw5xJ?Kg@J=$^O=%%q1!B zNQ}T}tG`$TmFW%n)wW`iT}g%01C^ZMG@WOYjA1D4O_$EIX7%38# z`-K;K03+9EW}ZnzR0?68@#H-^hWdI}=RwzjBr8UC;Hc};@X_QBm~PXAj*U_2iRN~A zcX<0I;{ygrK6r#wVJkB;mI`*CRS4)>gPk`=IiJT+6M^3bwzMrSRAekvK92ILaLJIt zR6i4BDs8(vd2HDKMb$`_w!}}>C`9Se9oF-A!18|dzUzh~;=S4&)Elj}{u4BKIyCSs z#G|?`%^pfXevgAEm1Pd7;Lhvz1)Y@R$zd$fT977Hq_T~o8sQSkeBp&S>$Qqd4Bju| zOsa2dBVM!?Lt+YwP{33%<@k_~ud$4cP^ltzPYPwLxCj5KhoRnr@uL6|v;^+24E-YFp|9`nkIzeVf0>UFKwgRT z$1*bmc*424QI;y<@O!{FzMU8rVIA1hFTjnkvFeGUv$HN4EiHx@7dHr?1OVb6d+lD$ z)A^33q$B_y9QV5GQ`Maj3^~ErCZGXQ zK%w_eITMb;u8730neIg~3#(+ALm&_W9;dvT>Af(@* z!;Nv^;I(oSD=SX$Yt=0CtSsc^-9OKyYX<&VSU22p5qK1itcdZL2Yl7^3~*T`AI)k-*=@U{Kbw5#-(kW6owcw*&$LHO<1 zeSMBH4?qWXHnWhzRjNH#`=ZW{o&KV2HgtFAdrD}tj2$cUH)g4Y5|2r~Q|WwMZ^B3< z#58o7npud69-6+QLTC8DjfEd`2Z*c;J=!ST#= zP}0^AF6_(;M&cX>fphF~0k9wL0x}PrlYpyyC-#c;v|S`lvF#3%kq?m08EIMkPk5$( zA3px|U{?_J^5x4l{+!{-@$sY|vUGk=;RLldGGt^XBM5f-pQY#Cp$#n9Ws6|RMaeJ^ zXhHbOV9FNT;nQ8ChtQzowIgtoZbiMo95;AL;9-u}BAfm#r@yd;tM_75aT0%*^A)tu zLy4OX{-L5wG?`!VWGqBo*qZK~7}|<3(zl;2M3}uOX7tAv1QKEwXJ=q|<@zieqhXSg z?p!057=X1Ld^Gs=-K>YYf|xO5DR)rHOt)*`J+@zLIr1CWC5g$ea<~v>6?_d~+XIQp zfZG-*nH8<77^|9mr%{+nK)~(#m_mn~o%_2bEIn6&iShI`?-1`TDcsb!-1HdFz3Fi6 z+O&?j$i4U*U=a~;TKLM0uia%$$rXRsR2|!RL}hho4L8*b&m6z9(NIXPIn|kuv~u8$ z`COTyV?6@P7fArm1e6Jo>R3?%C-;FJKTeC3T6?)nj@w@l<(q3P{L)-1#HM8Aq+!ut zG@-Ixc*y8WZ&WEQKkX1}IOPX*$<6ibP;vwgqm#dZIRDBPh`+W_Z$LKENY_GTSm=Ssc8ve0$rsr_*ddl4 zcCQKgTY~L)ri`PEfx)GoZ>F?@cSz@--qzj@FFFp%v()=aC005mf1swL1v?sd8hq7^ zA7K=9uMQeBbF985JgARpa@r2@H~2$3sm6ZoZv>P!6o;GhuUn`$psAg$7p+jhrCH_D zq_&5C_?q044PuQFYW^c}@H!n~(c=Yc3OUhz{8S*~@%SB##>rD|H2G@iIcf*INCdtB z{{6cJ4*zpU{*lXPN+VmK&ciQN(@sRWVpCMg4v!8WVhYQeOn_XB{E|GEJqN&gSkN`f z!L}&AZGtN*t*p2hh|~9yzF{+&OrD!d5KS~rof%w{$7cux>PL?* z|4=w_(Nd6=646{*34@SG0Fv&PjUc#%*0Jl669;{O%$7k#)50qi{J=#W?c$O(4#IRu zWnA0pLBaXD6EkTI+<`sORfr~p1XF?-9QIK$Eg-ibxPc8Enm?|%EgY=r@9$ry`XZQ6fed^f@O611H9Ph40IFSj?)3Hd=T-<1%NPuoTjp;v2p?f~xI(4U|Ku3#mkio= z9Nrh@%KnPc$8*JI`@M%(9fSZUc*^n?rc=ciUCvKt&89Mf0Tw_&uJiF6PdAC?KTfGI zV^RdSxAcwd1DAVY_VYii=_vyWhkkY2I|%{UlG9Jcy5A<_Z_np{QB^FBLo~-7&9o9LgMXf9cSpB2>9G8_n9In2yk!br0Fj!jbC@GHJ8aPFQ45Ay-7+1*}?s8?n`ul~MP+SB7)A0r`ZUZked4Z1t$=7SrhZ zlga7@l{D53pABIAu5U*kMFKqnC>Xb&G(6NeK{6@R|ef{o~>V4h0 zbw8Nl4q6^Ro0}Ttm@E0We3sd%Kh0Rn;;$0t084qfoJCuJjUbI|jMA|?rE3PWb@80X z|i z2SDrI<*-5eVr&#j3$|YtC0osh+Ac{ZBlN*G*jW1M5t2~U3dtz=(h|HZ+X+YiDplmM zsV^*ax7&cmgB`MiAxAg0O<%q6_5H!F!-`1AdJ`ZuoGj;+x7Dnw0zL94skj&gD+I)h zw=1UrjVU@GuJQ)Z3l?7HrfZPCz?Y=$`}^B};zhF|#($e{xJEo!GXaY?z-e<^i^oy8NO}Xk>D)v|FZ5bVfD6CVEbO>rm39c9+=gzY&UT zc_woisdJqUx9FW*rpL@n5Otw>mCyRd?F9$}kN%=e#EzfWwb-0c@v~VhEs_P!@X=MG zvr5x=!d*Mi9|kv%`c6mNqSIFYoZN%$il*aNUiy~l9OcThja4&8F-?~p1gH<{&`>av z+_)OQg)(xL6Sq@^9K=E&RrSf`3mp0F|Ok;I5tY3cv3%AF%&d*LXG5l^p$1fOm8zL@fM>b-s$EXcJ() zRxS77^F`gR!J8}U9o}dzN2hYI>qyx*_R(HiB$B(Dn3sIiEx+LMv;M0ZYcC!fpG5ge zSj}bETMup>4rb&dZ*%VxByOGooeS z0bQ3>_^Uq&7}4VY+qbT5A^Wb*jwJy`lPNU90)*c;t96AU62uE%fcv5m0_p{T&HrAL_HVv@ zxiI}gUF5fUoZ05LyH`lp`P=K#9bgY0?=Dugo;riU;F8g;k1x;CvEH$4 z3Ggg2+MKGkiD2MX!q0dEI4jyl+{=3qJ<TF_a3MAuzr|96Yip*EfALj*N3616e2nXqNCe;|U zIS}SckFx7erc#b+mD2a`Et`FuN=AjuNAqKL%1p`uH*kA<8(EcjvcC$zJ)me@;mjBV zGzx$bz~O-Zn>uK(n&p*XDF{dwuz#f}Ry@X99#xC`dG&kBh4b?H#hja1VMT7Bi&M`P zh>UK2MrKD+!d9t$UKnFgEA8%j(hXcdp;>C+< zGC)OdWo4!0ucQ3wc>V2rAH0_H24>0t%K@M>fG-W0(W+U}qGV!@>A)s{gX?Q+Pk3}o<+nk9YYx&ZF)D9sql}v} zh=5w(*N7ixIsEQAn8jnmyodq*rlzak1Qz>q=7t zTK@lO_49uxK>tMp_yarp(#r$`_tnE9@(Nl5y}cog+`p&j>u!L3Iuni>Au-n1OV-zg z5qP8|0gJt-gg5C2rN7VZ zzhbnksx_Kin6q^p0ob{9C$kY%*nw-b=ROX2kmtK_81kaQ$F0Lx=Nc4_h|LB%$UoTt zMqu>FmzF>cZ-|Aq(dgM5p9B@+(Vo3udFaC?bQhO|s!wzMd%*+ADX(s50QW6+T|CqI zVrbAo87z4Q_6|ARxKQotgh>@fNc;817U`ld%+FVkNhfDRI?i|Hn_qJP`su~xc-e%K zu@)Os7oj(wty4In9&Cu-Tejy;hzB=HW(aL%35s3?a$SH8I}TZyvbDKdtKL3eA+jmR~rR*!+?>j?`sJd1_{LLz!6`!l8r^1 z>NlMw!cscYq`?f5%v4N_bJP~M1D>p~fnCX{ROhb>z~T{|gcjJZX82m+hi&qNit6Gq z=eMx`{iv62-YG|PR+j5f1>xbSrrg7Oku{+feel}Zal?yG%~9<9!MDB$IlB*baVG{Z zjLdvbTL0!%Xx;)lVbIyVm7L>8Jih~{%jWUyQg&XhQc!X7i$B74?@u zezd^>n$%PseLq#JvpHcz8wz;hQWGrZIH+O_u%?0LMeTztPTD|+XrL314~jq`m6srWeL=l3Z;+3$ji|ndVh5azG1`*i%Qm6VBB%J-)-gB7s9}M=d^{PGf8bQYB)QpKC|MP#UJou+4e5jRR(b_+T=oO$0 z*ds{8;>A@BREODuPm#!|*Y9#cZSw!}5~}~VP@zT~$kD%L(|p<^2!mK|9Cl;FvNa^| z8=$BH_@Ax}wJuRFvqa}4_bP;L0r{DY6G#w(Kp>UwqT-APG)bVVaXvoA#>ThxPWrgg z?C9(O`68M{^pdX};7asuVF)XHn|~_a$+Jl))J_SP%gW>V|PGLLZ6H+wQ(X=M$a0Bqq55}WHH~)^KFp(zW z0LeO(SC01*aNyr*2}Pv0vi~VT87RqIU;;AYe@jRZkCBrL);kpqLRDj1|Bo0T9`nNw z;=^qL0lz?%XM<%Gs1-G-A^=lyTwf>)2U$q9w_yS-LUak|_HSwb)vNzkQ_H`aU$Tj5 zl!f^Kp#pPvko$pES-J%?kg0R8;kMVaWZbPw`djw)VI7s=T#Z-R+1WsbZ~VB39Aygl zWC(XLg*WRdy6XzDpDlp4(PzPzQna1eq{wp7L9h* zMY!ea_DpkW0%pm_>rHe=BuS=^1%DLN|2NtZe-tqVjHX~hlPInzAk`WiJe&{xT_Grh zPj}0EaX4$^^~Zj%Scn_@(sB~dna_1Qv~NwHfqS-9q@lF_=o2A7hWKgC$nDyqCZCb~qz+D%?gD<^zrTQ?6EK7ZFOVIN$cu1)9_-W#^MGxk+so&VAfG>d_yz`hY9W zrQzQ`Pv;i6b>f?wn)jaz3o6G30lW>1@$KsDfKlGvYxMk36&DY9_oC-j-?}bxKKt2L zc8l%5L13t7dT3kKPv3R(Fy#%}i}&(hyb8?+oPV<_1`YD==2+GyZu!O>+Ho607r*e@ z1N9I}K-ok5O9o)pif!_ZxoeZ`4%0dq;SamGJU_mhosvaFYV*V0!~-?au`nH&=VEEB zc5p5vli}7@LLG1rO=tWDUxS|&xM;`lGbf76@s@Kh;Kv}7ZTo;n)^e8$DKbohCF@pD zD=2!lS?v>1Tedm({#yH1E%%#~%dB}SS&bGrmqv_J6aOPpOs;-{FUC<$vqwLHaq;3v0ry-yeDOBs(sQeVz z`9(bMNb+$=I_z}itpXF5)74hPy@?5xyQ`_+Me#J2+o@4Rx6%CmyDQ&V&U_P?p{{OR zTH0xx%E2lK!Hik>yJYDa7}KIgznTzWjH4g`|gQ@zFrt z%qZ#v``aH&nbMr6bGf0L?V_)N1sn@;=1M+}%T+4h?KG2iN4;6M2u^}8Gzs6bo&S6C z!}kD4H8RDW=-%FTqRUJlO@rz5Gyg{IlOgl}t;Kl%kn|W-d$i|fkM&s3_P_}Q0_$zd zp8$y2+ytsz&1-BmOZtgx>o8`k6N7^L4h{|`kAN(}$t5)HY8L3ce2L&aQn zHc%w@KnQb2y-i;(jw|LLRagLJcX_1GEu*alcLJ~u{i|cI7koGWkzj3CVkC?r9vvQu zSk{Ss)7~-T(@h0IZ#v5*mbr64rk>cUu;)>EVIv<}+lp3r%jf<`deX7=f+I*Ia&)xz zn}=fL^J#CRylP@%f?B_QP4kVtr1#bcxiKdeNPSs(d47xs(5kf(ayONJH&Ev0<{bAq zw$<(L*RlW8#fL1f-6Vn&j534x0PuAx;bJ;Lqt0ERPA8s)LgZpPW`a)qKKO93& zGh%g1@@{@p<6hKpP!~o^#+0#|=&s~^D?YMk{O?>L4QK>^1j)>A#kJtB;NL+p+TW-c zV&P`wa)XIl0R^BYc|fM_qTaRbZ*^Wr3$uW6FEg~`#LkXJVhUmB)6Mkrw8Wx zZr~sZGDXX1*n0ZO{`6*=W1-&om8(#d5twk~o7B{rDuZS}>^o0>+dTK#0f`_94vzF> z$?X||)VBxQTKxN}e4Ofnb{r*pm-Wz<1tAq&2;W;4yiQY1DI)JKdy_6=wZdT%HX&=r zpkt#sIr?JZvk#OhC&SwQvXBdLuFamKJYfr@Vr<)PHzDWNoNi8lilO}8143)l`ll1h z*b0aHj3qk^_YUnob1(?$B1l*eAFvY*>7)30Ie9>JxC}f)47BCPz7*|g=PRN$XzsLL zBj0%1v}qn?mAYRdm~-oX>?`86;;2s0`8>dNa+kUI`I4(B=E)%Ofw*HPt>);>Nd9MA zNpfIq+ZkHT>B<7hhMsHlb=xyNS#N1s9$!eTqPN34kcS|3d$gLs1G-uX&T*&jucMmc zh^RM2&74XrO@*q6$47gG5?(e*zdR6M*p&1N$&VOXd+h&7=Mw*MM@o{>EOo>U@ygkt zU@#VTcGZB#n5ie|iPO&|?=vNUKHsc#UFluN@8+)+^b` z8k2+YQ`h}`)~ciWz5>PQp~5w{QkR60ZA%}eg6n(2CgrGP_U5B~Jm(t8E-A=^p2 zXp8%L&Jx@Db%SfE?pw5JQihFc_7TToUTbUR0Ni31^)$+uxu$2D{lxM# z_J<&!UKi-MOuD)BGRLh(S3iXZIWIp3%b@t z5RiHC9TY8d%JA2w-`0P^5hPTf?XP{jImd2qeXHQvyEmC{CNFQ#KJ5ncH+UDu)W>e&A zB-xrFAwz$p@vb8)_^8=Z@~F_PZ83f@|47JbI*G|*xvu_V_|bX6AH;WI1oD=0_O)kC8f5+bOK|xstqdjK!{s6}K%9tkyj4OrR^R;;+ zE_t-QZjCk`@7~A63OEp}Z8sio?7mUHQHoBgtKVvTFWK!cY42ZO;Gg?O{>D0Sf;oe0 zAbiEuMn?k`%Fv+rg({rMmV5?`w8DT+lK@_nHqg4O?2E66dj{er@c1=?k!4S`rrPMr zKp}Fj+HY_Q8k0JmH_asy{gb!UY)(_%jRdm{5nWBWI4x^dpr;Lq-dat^I1$gYg~r0! za5BJ^)KJzEv$tK=9lY*liMxpz_7&S46L_0;mUC(I`gh#;}&m zhD{{?;J`)td7<9qm8(v~3L|qrzD|S_pq{z@DAGCF=*{h|@=ya=Sx`}EH|a6VRBeo% z=}CWkd1NQJQI>YlQ({=Qp}z~1JGlE}vD>P(vn`W9*<|4H!ae1&_s^fm0VjJoyJD$Y zr1+l8X(s97s$~YQWVj^}P#H<|=|b>$+SVOfa8`kcgBHn-ez`cbtKa=7D?P*7)4O%g z=;q=!>h_wc1oH*7bbXyvria)4nLE`xpDJ@_ZD&4LwHP&|Ib_nNDY||d`n3im_D-I? zlVN#b^0qaPA3gs5<(%)W=N@zoh$CMQu$P+OtkrDsW#1?M_LoR>E6Y^gE40{smFudD z%80$O=#8$?Ckux+AoBQ;Ck#TBUuvIL2;ppR&BEi6h@1h*Md&;uN>0;aD0P>Ru2;2y zb?_r5zM=dg$<)|ADmBLE8`TA>O(XO0W4$X8t$}a4uk+mDx|}m4R~vkf6ROfjt@9o@ z0J#EX=iy`)$vxr3Z^6`%f0?8DGGx66Q#l`frr`1J%wZZ)6`c4^*f%QW^RY#-DzDqX*oj-;X4&Rx(+1LKuz_Cc z=d1RgrdVR0NJVLv)zzlWCjf1qsQW;!)qI&pA*i+3nMWG?y1<`j0?5Ff+!uefGlXeK zuNaOR+aA156pc@W)ayMd9j#OA&Up*Om#Ds0H6C?Y>J#(xX2Ihbp)Os0MSSN#m7W3x zA@HOqATZ5?If<8IGWYG!6=`kfxbAKCs|U2qOBkKlAAPD8vEVI5CB3t8CD`6m>rf2O|j4=LGCfGPJlfHwtg{^Ns3el~aft)!VG zbb%G#MH2x&E>vp8cCDYv&jjvdwdd2*I27jkJV3M1e7$XqX$hPvwPyhqQ0X?QKm1-s zQ`i;WRxiypX$b`3{jUxHDgi41UZm*&#W`X&^*HcwWwdINs~gEA& zxoM}~_5JyGmPTJjSi+gRDxUn(em?L1?rg`zF<)+&_O4TB)omDL`mv6N%C1K4_RBq) z-o(DCBCw5Ae5sYG#T19Kfgp8WSH$Sw22y>79K-Kv2GoEQ@5PguoPNfXm8ew~DH$N_ zcX0#kL0(k&Qf#;b%3SM_Ca^$j<@9-uC~`+Ld(3Dm9qp;P3&}HO$xlw!Sx+oFR?D3^ zt9ozn?N)dOJ9_b=z+}3UYxAAjZL+`}ME-#@&C?a?TZJ5QYr1dUFrlgjpRLV7TDlve zrNec~$j8pfhVUEyHlJmjCm+T&u&Q_`mAW``=>gzXkG&OYaN7dvBwg#$6X~f;Pg25(FbVZ$ebd`#a4Fr8w1Wdo{vf!Q7ExZ3CP3mQ8m!#={VbT%-$ehaySSR(& z?EB1JoFa(v_mnpA0O(`!Jkm25fF znzFL2zHCrZ^I{|sNdLF)H;MEgJVE~)WQL>w5V^vdIo=3yiQ~Pn*($lu^48ftUSfIp;Ki4XxY8RlWejodhyU~Q63ZMvpM0e zMA%XelS{aVYmu??pFIyHG;pX6`UF)H)ZuZ8)m8W|0|#+o;o-nlV)*Gf)7Pi(Wjxkc z5yNhq!SfMm)O8!@uAhUEkJp9}Jt}uc((SyJ_cpbM%nYw?Ok8caVtSwmsV( zB$jM2?3_a(La&KBM=FpGBytEdoFtM%*Lzu>R^KI;#RtH?2vKreET!1}>wBe!JX}tj zjN90i_09DYGKAC?ax1Z*XHof@jC15QMHGcXoXrIhy&AV~&;aZF#PYZ2{E065aRf%_ z=c=kK$~zF~N|f0K2WILNLq?MTF#$&$icmf*Ei!nsz77{9FD0)Xor)?3Zk~?(#xxDV zcgd*PK$o{MtqwN2Y<}j%wc{c6IC7l98(iK=iZ$X`HJ5FaJYgX{)1+9j550NTDk2uT zNJ&`VymTmgi)C_vvIFfkK8`ls`Z{4zNeVgeW$R(iAsiuaC*;A&xsw34p9sgV^yfkz z`2=^kR6%!oEf&wmPms&!20@{GOp6u?S%fNzEfMDX$|Bp7XwEMY;lYdDTyN>LTQP^{$vSTfOB;6BsX9dFgC%?}WM>DtrAx*K4J{`9fR(;TMB9?jB1$ zvD)1s2R?eDG*uB2ku-*1lZIL~fsS9r=PZeClpbx>QY3pz`1U?A%6BSWscCBvqkd8u z-k+Z{D{>zx{!y2l<^U&QfH#$uEuV5cR1--XXvaYvfedUaz z?H#8qYnm&-``A*Otd+#W`W0|E+4Tf}3}p9%1&r%W#I`%4u;q<{RnUY;#e7E}kF|-k z0@=dF7(+T}pUBW=co5F5J28haY7EEHiEh#3`JWL>f20?_iB^V!6(k4ps_lUa3s?I6 z{e=vRXof_^lR0>2CTIHiD~YxxY&+K@KMaQnQZ^C#Wfp#(`x=S=Ss?v|oQw~qr=UxC z{`sev*ZN$U8zTpLo@7=5%F4t<083XN#&!zv%G+h<|GLB9vZR_}CR zhclp=$RS?m6{E-)C3;nwNPjhijGb>{YBM>}5f0vy#Ys$k;Hz0q*xjjKA%1D_@gO!_ z8akR(9BxpM9bzTqit3L_JA8KGBxPA8Y|}ea`bTHnkq7#sG@3x+{D39GXdPEytgIyA z6EZ(_2#oiWCD^c)nZhqIaVd{w=8UW#>PHXPTy=iW1-u_Aac3z3)2bM{kj2sQ@^Npn zzIE{GB67ct)O38>hQ<;1o$jH4RSDzGF$hv zetH|us_vfVR}K%(@eIQ>v@jo;nkkth3EKRMlxVKD{h^2sUQDx6Htj2iCu(P-L<85t zFPDxk`df1h7CH(st$H6gp4`;d!7vpCeYJ(anZRxP3G8+yFOvuStDuMO6f+^!r$CMbhWu`vXtR~%8t)sMVG11>hqh~3;m zhpw(h*D4xr*)JQvcWXh&hVQCe8_KvT71NN^Es&kOS10I+Krp(StFNW?B@{0l=>E0o z$M=grBxN7>o^J?k3Mhe+q&D-O(ENnU$Dlm)u${-_Zu&K&*tbuc5x*88PAj4-E@dtjY{0DC$u!J_S&IxjMvpuTGg z7R(J;L+(}C9}s1$*)wSi=RBMzlA5>C*%+C1JZ(p2+a3uQ*|SqtZ6AEVskEGFXE4|u ztktA1l6Ue`DDZNs$QRWt3x;i!gP&=yY@zZmjNK<;hZ z#ymH0qf9L6BxLvKwA>o^-L~fV5X7cYhIYDXvjZWNifUNv+y7y8FjC@10WD8n`TVMW zan!gw9bV6VXoId3A#`gvGF-qJ)Ou_J-%Iz8kn$H(z4~tGO**abW=BGVE*A1j`#q4t zUR%J9vwYW>y~ebEz!$sbOYaWOKd*JqKC??ly}U4R|JFoh zn&YOq+bjoAaBSoy2LMI^z>)1MqoM}fTb_jq^4Gb}XZnu~(RHas3H*3b2)?5(dz@1W zyzgLl4sXpIMT=M#VYT!@!d32Cb!WsFnaXYdU$vZTG@IEPfP1E$V=U9rDWi2MXGS}U zYFf7-$Sjw3RMAmkOb{)q>JlwZNJvc0=roGfEma|dHj0v7+$A!qWL!#HB1k214GAJ{ zN#u6EcGj97=g0YX{_XEuYp-vwz25z6_dw&UpRdhBA z6c>n57FT`fhTsOz~sxh<1W9U2ISv z)aQp*499A8Vm_l7xI)5D70IM_HPElxRJ+i}Pn=~>q;t@dN3zf7+>V|*o|S|gD!g3a zAikC&7Tl~6{w93>si+)&8mv2qk-Ut3NgJJeRhsCwH+PhLWBOPzGVZfpsRbxiL}ViO z_a60e{=v+a@7M-zlHT@9E2EmzMtDS%xBrUm*kAF_l$+f;Yh*?*{aK=QZXhSAx9UN0 z4c}TZ3IPJq4G6?)t5PW6R7f~)WUa{2(i|4qSFlcuf(O9rK==0TN>L=-`=bQm6?;Pbm${X;jvO7YRV~oKkZ2QeU-Dab(9vf zyMC+0m-vt>Jfg*saE?{pPZ)*L_E53!^ZlE=u>2YDxF)XXKwVEX9%&Q?8$5m2NC6PfZP+DJanx0Wx=$t&Qi* zN}r#PF|{u*BY$OSp`OnVq;9T8kdAM0xFHHiuDAPXD__ahC+oYw73!;?xscnQviXZZ(T_KPnZ9MnhGSP|!c_jf4VMwx#O4e43=O%B(wlz**Ym!^Ye#Tn=P>Yp(uHuIR1avC zt_|a5-WJz5Au_VJWy$##norxoq-FneLq|bhp(`+5@*p{;vr|J4RF~Q_Rfp=z=q@;> z!fJkZs;CiI<~&=633Sr3!I?)wrydVr1A5mV*r6OX-b40Eo5TH}1#q1nz`+Y}slM+o zTgNGYXaXMpZ)op-of83i5PwXI%lZV!8&%I0v+1}6$4Bzf=n=5VRru*;ZKriCM$J0fX2ffdxvpUOf|QDJBwmb7F2pq zloBondYc`2B-hCp_?u5Z1u>dXF*S?_LsBBvK{j03V#WHKfK}PzUc|KO#_@wq0zB8` z&QD~;mvXGDtsMqyf4_hjB2N0EXpNM#AiA{_IZxePMI}4${J|T-hpkI6+%3pVr6EW< z`DW0p!J07W3I0HO1GIR|0bnZcx`JBcab&?X9Xv*ic-w)Z*>$Nmb|}~=Nh|}EA;hVq z6CJ1qxKWL!`l+S=kM9paXa1N&Om9GO2ec=))5V$^Ex2tsRJ4Xo8)@X{)0ab$Apt`s zc#4!co84N(!6v@hq(pYu3}UU&u6Et)}*TI!D}mjzlgZIH?iob;A|$m0k=H^+oln zxb5wk_ne1Ib>QR`WsGekvzU%!K9G7mG|Y*fU6C#FEIHTP8paHcp$qd+dT<;S7aEfP zRPYiUg%=f0Zf@oY1bJCv?;XVoA$H(Q!q{04Cm z0Q)ue|LHiBgspK{b?>_$WM^3i3CrbVjEqQN^yQcLVn&KSY68Q@;TKKZa-~MZjC_{^ zGPwyV*~p^T0Mn(feR%Cv!t+%L4uAa={aQ;g0Xqa?&}}q zv>d88OPI8FL}Db6dWchBMm-RChOv=-H-?M1krR@MmhM_~nmova-AdM-)vb|;ZW#}( z$jD(g0Ca{I*L-!l(?Cx>3+L`8ysuns3{?kguU)P=UQU;aD*&s*wVJ+8k z?GH-O@|I!-33oX28xW*e*;!pozZI?j=fqZO#MBZD zIzm)8f=~Xm)rYbx`u1U5RiG7gXO3Z@1%J#kdoDf)z?IXDUIFPJ{CSz?Kxs>o&o>{M eF?ahF>VI6cgM++p2h=H7QGJq5y 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
>}oFGj4;T=g#ZXrm77X6_Y5w2#G!p~x8 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 TX40(I{YiNlCFu%DlfeH0ydSxm literal 35497 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 ^+B`MvRarnm8Dk*%{OCZZkUZ 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%0A+v+T)W79|bMgMsj@spAaHr&qR0S;{( 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 diff --git a/docs/images/mqc_deeptools_plotProfile_plot.png b/docs/images/mqc_deeptools_plotProfile_plot.png index efeae182584721a990945fcdba98edddc5a4afda..812dffc55b98afa2ff1da4fb47659c882775eee0 100755 GIT binary patch literal 74083 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 literal 115914 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 Kua)ZGdGbFTcqAGC literal 76247 zcmeFZXIPV6vo?$o5JZ$BARt8nL8?dy4K8`Gi%n&IV)IOQ=2a4B1Un>%Q$d?^`jOv!|4~7zjFF+0%-GI=5h)nlT6{`2Quc$CVOga#`q-M%Co zCm9B1_-g6)zkdgO-Tp2S(%@4X$-;FAAG@FKpI;!2A%Zw)^No#FQo{~ht%QDm4|s+u zl{`G=vBcx*%Y~$cGiMn8Z5_u;qCyct_}oe6V%U%d1wLISe>_8;hL{Sb@}_H;oeDOp z9ZmMf6Nr#WM37LccMK3RjJa)*z(2+Om&7q(6$U}B@F4a=(#+m7=l^&H)wvVI(3@r1 zx3#EX9@#YhPyeN?zn;RWM1+iiDTKdxg1b(t?)}FyiHNUUd5jy+o_R(D$z?Ehr1(SY zkL9_5Br))d@$6(6o=V^EBWp5LVcU` za?R3ssE}rU>=`nM2j^oP+N$s41|yO#!oT@z#mK|ZVXH`)A!ms`eZ4BXtYo}~1i{@I zNkac1RH&}f#4aOd#Id9eFC0*(An^!GS-#dTU2Wz?C|jI5+UW>P(!9P@HO;!!tEXkn zkmyo>;91_0t&=_yCel7LmE!AMu~6KK1&irvyWYxA$czlAmKgKvG4mX>UW$-jdJuTD zH%7=UsGGZz=y+Y?V7;fBgu%2kuWonFIoSj6s;4getfJ`UfqibCc+_&`M1-3IrbtO^ zhdJ^cvrA1^IHO2r)&<8i$N=)1l_qBA+`RIKLUr5YcP?Qf6p5kreN31GUFwrh49Y$* zJMlJOg*g0-FjGn*1yEx0SQk4@94plAKRIj2Pf1B>eao_XvAp#uGz;&Nf^Z!s$83!S zjwO2z*$uJ?9k@woJhWMBlkghbY4@s8O?KYJ&x;$HdBpUnq;W#4#hWj>RdPf~eiXpY zq}685IQSCdj|vagQjgs0j}Deg7^R1utDP)v4z|c4-8y9Y4<@~?tw{S*R zE>?_<`X9_&bRc$0?ZY35?y1mVQa3Y%{99%N!xsr&V;*DMO%fxOt`k?bdraNhVl>uL z5GcE1ww-=+UxCDg_sz%2o*7Fdjh{Tewr*Ee==X zN`A(fK2+Jfe}WQ1WvfYqY<%5C0SqiudeddN)yfFfx7K<4ToqqIO}AO#!N$_3b8;7F z7j0zM7`^sank#DF&U0zilZmF!RMa0VeqP$u=|58hjg*r8i95LjI0|PaaN#MD8*(4zwm+O3 zp))i^;)-Qwcq0mypPNQFG{qpCV(kbQPmy7+KRsnLCiN2O9I^EwX8;~idbZh4B4(De z5F4!1CoUD&X+wcDpwk(DuMVR4LyufGW=O72W{l#3A-~Mlh}+<;A{y>TJtWD33#hVy zHFs(4ytQ@Uk^y(nc1i>Nb(>`o)oOEod&6Vx_%FIWJ{D4!vWG<%fQ4mDV8$9HZ2>#2 z7FeKq?Cf@#EdKioHrZ7P0eP9D{WY)q28fdY!ZRwEx%{glgunsbELSh8Ig;)*-%J zD&&u>oU>ve!AAzHr|XVU6Ig)_=H}xq8wMKXE1G>n%I>KjaZv5K4msrkPeVOA`uXXc zjhQms!$hH+Ss!fF3VD8k6H4%n=C)RI>&B>*wf>K1n8=j&SWC1%lvg$iPM zd_^@i9EfIK)WmHz%N+{)_WlGh+FhI?*Q_V~P5mBWxwv9qW~G64(B!Z*@@d0I3ZbMH z4wcg_g_;`No5l~!A(|ya=S^JvddEANol12!Gi4jQCLSAF_qy#(ciely65A)Q zt7b^~u>ohyu|xP`&02datD#drCw#+5moH`JI5>MHI+Yti zDOkMX%zbivcW1Lo7Tv$v%UmHJhz#7H;P^iFXgYbp)p%no!6v2U>EKt9js+;}-ZRXo zTl)>0X5&~!7uNl^PtHE{DSA94ySEUX*Y~b&R`@IS+G9!vF|8#Xvct))O^hsho_q8k%_E#@7LO6=g_&>yoymN=_}G@D-+Gt^ZC{71os||L6T13{!xo*6*2819XAKP zA|IBcS_ZEMl+@>rqMteY%v8SdGZa`C@6z%cryVTXZxjmX8eU# zU2e3>{5oBpYE@Esu6g#T>%yCfQrO-pHot3oi#5x2dr6~+JhvPpn`ALxyDqSsMIE?t zBR$&0`YTVKm1L&?oA4T9+Pe)^ceHMjJ$5CzdA35Oe(g)nvYWul+pz{N5X6EA8eb&spYP>D+zGWK*}9Kh9sf-t9aQF411; z-s7IX`9g00lC+K9MgOdsEsbdnZ0?u$E-*#R%bPUgA_@A7_m8|vKlU~WBDt~NnOH;0Fg zX>EQ|!9~_@rIEqJQ$r;8tjv0+qi4d?1e9i&`(=a748cM)CR#JQRI-lKZbI!0lf&C+ zeik;Gsz&_$vk?{Ug}#rTAyry(_Lo*B=|MUMLP72FVj@3bVR>X5&Wgu3J|gZq;ndynbsnDDGe+ z_6F>R=8>|Cc0`X~gHLeBjp?MG)t|3zlMKllWCVsiAdu&Z82AXz<3 z=)b`M;TxYbxD>l?m0vC6)02!stl7pY7a6?HVo?$hte=RGj&Lk)X7vrbNe`ntv^d)B zUjoS(GkI2Mb&R3;jc9#rwhuVDl_XH_kf4@UZN*Vb17hNYuEB?`0)+a*je^&5cBGL@ z{Ikjia+BEBEF)@T6Lk>*cN=YuTWSm?)~Kg<1tpEii?HoDbg`x-hPG~;MPG&2tg}P3 zM}6=NCM(5<*Cdc%?vU#xXKKi*uGbZ=)Wem?z_6EBRcKkV9!0PB5{$)azb{S89X;CY zh|-a|SGzNnD01~(b%GRQ?@Fe0=%b!G<2`jRDUW?y@pnrj;=|A&BkrU&W4ej933?06 z+vq!OH9PYbM<@cxadui#U9!tR;=e_p^`qw`>X4ep=+YRMq;cA<59;?czCbA1XU1{1 ztaZqx3il-s*37;)OKq*04YD{e=$Yu+nKnpMOA~O}z3I8O*$u+g_!)lxb1!2ABit8e z)^e8F&B8_kj}ACWR(rEZ=wUb&R#D%c+=x$LbL%_a0FAahblz8YNd<_KvPh$1Vk}^@ z+g%F^ZKLxQvk)zYfJb_i`hhLt{uUv*g5n`*It_tsm)7D-|; zfy?trdK10z>n!}PNkRheoYreEKf(`)`dUcz_O8q1Gk&FU+|BE(pWic6Gq6o!QXXA5 zNgsm-`$1%wqx6XtzWN-94d+?ipd^(t=H_Z30m`@n>C-gOw7IF^2{U&Upmt5->w z{T+ICt8Fxjo7~Xvy?j)jD?PMtqL19`P_p3uGtIADf$J9>S9Az|(C|sC(FU!Hdv;$q zcHTuBiIFRlpI5&HeORSS#ZT{-9 zlC|93lu5zbcKPdA$Zk=jKfiBphIf*_zu)uSB!h#h8P396y|u70=SZ*64yTG!{LQls zzhGv6^^Cyat5hqMg&C2)%A}{xr85<3(~djk2W0&If%7X)Vlt@gv9|~{!;uG{Cf*nlj^)YV`%o&XwOkQ(kE7ykR@>@RZbauj7&5BXSv~Y-#l_=*|cAl__M-i5@q#eh3%xkm2l~4=y2YRZ3*~OZKfOAF30w;)L1;%>Q zI0`T4+ZtHrNNyO*!Lb8Z%h9W)w{whOD5FwLGdwLR)mdUQvVQ+4etz7UGWo|dxv zh!SX$MpnIA{#2yI`3l2D51KuYOWr@KN|;3Z)HG5!{OFyQkF*utJA)3CDq@jvHpR;& z-=8k&^pTMbT#Zf*dr3uj9XsPt790J(G+relJJ`m&*>bcKqUPV#7*gku*oLvMxodYN zgj2xnU4AHSo0KhA2Ip33xv}7cNpO~CS(lH~PCAdVjXHz#V%-xD8;kjpyJ!cqPtWL$ zZ8;VDnr*T>jQUbTH6eU=2%*i26=S~isl%GhHiupjJqK4RjW`5BRHCAu6T5cags!! zds<@IdI*EVZaaRuzG z^Ds$s-}f3%b4~zy)_-N3g6LnWB73CIkF z_8Fz82+6sX+Xv#M4pH}aC|QzQ=Ng&vWIJ}3lg(E-?#0R-W*1G(TTTg!4I55>uupbI z&ncDNPim)Fzx$STvBLtF<~FfERh3U05@{&TTo6nB*=Pol-X0zzmX`(sK!P*rdPiWLT5Ev`P5_ zW&L)x**<)plJ41?%)8TGkB!4sAc`foR`CTm-cjq`$g)f=hW@)V6;}ug{XB)(!K@zf za7gZ)l*gB`Z7)JmuSxGJeu28yS!gnZ0pF&%9a5!r48J_crfO$c2M>m z2~=WL*}-5ozr@(J?fgOYq?XR%ynt3RYk~8dVwAx^uD0XXT#5uwik(f}dCy@_x4&Y% zEqCFqzFJtKbKMq3wt~Q_buo+fi1o}DSG3W_&cqbqCf3|f+DZimBZkVtHZy#>3~Pj>}k^NsPzb0JZo}P;&i2;&xqy3Pv4Q%!@Seqj;N1BvE(p zDGT?-bv{2P;AxCWNy<8cmLTJRAF2(1znzJOQYecz^^PY>3G2|FJ9s=D8BNz8V=L}d zB^(=oiIJ$c>W{?PC)stjErjx(GhsWnf*5ms1e*%|f!4g@B*oL|VS6P#*^RnE#{_4= z$@94|p}gix!d+;({*|uFKN=;1#FzB^?qm_Hf_DO}n@wtny3^rRrgmPAbjv<-n%+7} z9&YON7OsLunH}cRcA4?$gw-jELf*-}5hW%>E63N&|;>(YmQx^i6B+xl@`wks$4Qf>tJd zIQXi$Pv1@>L9l#$;_<(PxnC*>Y&UA2$2if;`ufLZFbzMqi9se+6dy zCL!FR!kr}JUb^$Ly+jlKSrqHu=jGz*z<%s~EK!fTcI}VC!SS88U8BAgqsbp@zbXU& zVGmCN8GmkvlTh=GW;+L@LF1NJShL*@GFT*h_~ZaXM09YK7}b z>1MjKqrG?qKFqOv^j?u%Eg65?!(I(eLJd#diE4t)`)HiKcsg3xTpHQ8Z5iRbEivyh z!9Qm%yR}muUecY5(UUv4mpTVpCTJVf!#l*#hQ2&ie!5f{7r*biCdrKPxYS9A2`g(8HlqrY9HA<>h4SBuz3QO@rrG9oT*t5E!PD~X9Cm(O=E$#1Dt6t> z)X%hx8ELQqN-+WUH!o%#<=Q7l_Bhv1hd89#u@M$}Obmy`+6G$K>X((_SIZ|~vKsWO zzw=YrYD&T~Vi-Rg@0InX4--!FZx~7J82fLPGr4dh`<9%(Jo*aO<`N;;{&NoCzK)*Z z!E*U#_^_BsU@lr}W0-q0Hx@L>j8k%yk4qun(G9vQH&ziYD`?(G5>>NOdr$d8D6Xj@ zbvE32=Z%fPebc1O5vM?RoqQ7RzPf`&m&luzIX0W1sc;l=FQjABi=)t8Le*<~)q~zW zPQ7Ex0qyg0>NecKjN8?|X1fP6gqkZjV$e(0r(b?$e?{dm-kya7oD4w3FY~Fkm{=K5 z;q;IS*sG-y40s_XtNJ#{g8|l9wzYmidE!iors;;445I4u{_$FYIWxo62w;1y>!TW~8XBqBp94F~Bx{$Z&>kWb zX?k*H@GQY^z1ZX!UB6^tSuVQ_Mai{lA0OXjyo2plW}>FQ;GWm7fIs`ucw|kPbc3vs zTKQs^rwmsz6||N#wjkjWJy0{ui%B^kjE?P6@5h22hoWj3QnB3Yfs@696JPVjXIw}3 zi%!?J=!+mj@|Hl#K)N&Wg)kzv9P5>^xc;&P&)v(!i@K!k*PvZe#EDrgJ1G#+ae)|0 zmm2B`_8ROK$8#(-%plNtZ`LN)Dq*76y8c=6=-icn#kzWb)+|DR(692aMo!IahLlg0 zW_6~~`x~Lfklc9X>9c{LqF=nGMG*C$e66f>i19G?P?xAH!ZIVvfM;8`vSrWS)Sj-+ zGdF(kBzn>))kw?%xv@~vfz=QnynjE*r$J}ldUJ@$0&)pTkc}F3$Pbw7bvRpI0h+JH z-%@kU+&rJt>3OR|!2-6U_9u1u|}iaZmIzLa`kkU3_( zxp4`=PH&~{Mik1>{E@Zibg_Yh>6vn8kwX3^lYQq`BhsM4C(WwVs5r9mIX81-t2-oA zK`p@6G`Wtp^g{jWROq0%$$ZWdWFF+xU(LPpGbfBpGvh5o%sWxexyur@3VI@nZshz| z1zHLau6`h!MQ@vy(w-FVtz|}9Z&c;&zWpKTq*Y2d4%s=*#xqljqwS!x;<%XOnYVrY z4KE4QO4HwYJ=^k-CLAGgQ<|JV?*J_^|6?qNfU$xlkvItyx?A0vu6T6hUScraSS#LW z`;i>7x(`TGFt1qr4 z{ZvXJj;dS#zS+yUv&LD^gqSDjgd)}@2q#*FmO|!PY`ebC7u45Hn6wRTRBV$n6DV7) zp}GD{S(OzuFe#lbW_^8HF%60S794232C*S!iJ^TSyrUnM5ds;O0VfI)am5#0R)R7T z2ercsikGJ>(^kI4Hne5DIK;ONzg)jiq&c*f=~1G;W|>=!>sHiWS$P>S1}eeUX+{w{ zSnI|(Q`p5+VG!?S85SGl&v+~=!9fO+7hxFD6Wrptdl<1I>Ezd1g2R! zizJ(rM@p=8{Q0Rl8B*nA0lvABM|WJM`&vwt@AiV|8+!8nKbxFkuw zGau7kLrM;zSG2e}8>K6THsh@#Tzy7zH3GehR7Jq+;vQ3qh9z(8w2Cil$6C3^yL8Tp=lZir4 zPw0j|uK)RwVlV)-0^Bz5I#okWCDa^(W;p9t%D#c%%~a1Cy1zGel=7}KJpl`|?RUQ| z|Iyr`y3BX-z1bN8W1M~ zujaf-nSzf=i*xcLJ5DHT(le!0GfUA`nr}1#5yNrHLQtwhaw1F}PCpE) zz7nfYnc%j4r#In>WUlv|gh!Q-eReD{<1E%Fuz+AfCKj7U+%23JeE`a->0INcS5&5ErPV{-wuVB4 z-r8;^*oI{>6VGL#;-|+P=$ma`b|f@`>;`nZ!SOkuZj1l;*i~>bE13j3xV#LD)B`Dw z7ZO#+Q08o!Yt0Zc#yC`Gh%|U3Mi?>eVlMPJ%*k}?pb)Ht2i?YcM|3$tohC4nE$^U0 zYmA`&8Uj+FZ4k0~Iabu#Q0{>-#ms7}5L=aY z|Ibn~t3zlk;?p9RmRzMfgLS0L=7mQQ<`3n2f<3zW>@O*+ND^whuzWj_WvtVk>Ac|# z)jpqsS!2Ft2{@3(W}+nOhG1zb4w^qAad*9EUN;#b60C#n&Au>TcwryKx?9vsVqY{H zWbA_1b52&bd;Z!u9T#=23$~WaFzHQj2%s9% zqpK}@Rvxt9n7+@gk0LFg2cRgw_}It9A$4Y!N>mkK%C%HTz# zx+n`G+qN9g8})*`*_G{0Z^Nc12TFvbHux6gdAnvOQiOnhQmZIsdLlUubZ3FoKR?#o zXV%dqbV8(ITHPuKw2xHIJk9nk!Vy@PLCwrL62#g~NN&h~Kw!W31}KYjUv&pe3(a-k zcWY9~)w5g|c3jj7Ai3Uax26NIA96-^T6sg7b6InHhTn_%8faWrxs@|eT4!*W#z^qK zTBjpCmcRXS6tuJA366Yq9@@jRjklz-`ogus;FOjG!L&>aQ) z`yWNMA)eUv&B!J;-2>Q6gRa*@RPAcbAm23ei;;L`-JE_8bcpZ<2VU}%DmR0a!WW^+ z)x`~~>}Ck4Jl=O7e^)dqx4Ywswe1T#CnJc*%u-)J$ez+z;VgD%xLbl={~Xn1lqAr% z;Di`D`VnW*F38y^<^p>1wwob7DnczhwPH#Ked)62ZvMo5KEDO(Y_yT%=L#}4B~p?~ zrHNy-xR=8%6j%~H z!MNfM1=sv7?No|B`DP_o=Dbf)^%~bZO#W4;yFjM1HD1)cxRURWJ_MDzuMd;T8DIu} zfz5tN_O;q=xR%7H$pOn7^Squ4KuXt{PV23<~7EzQ94-0*AfE4@0Q)2vfOkI z4(FN@AI?kbh(w>2UMPIM=y8~~=F}q8Hc&|y?z z9)aJvCZf|Ncsv{WsK+DR88u_7K7D9>JJ-AJQn|6x+m+|;pnA0F`*P6{9FrY)GU-{6 zbgqibjk-c+eP&E%WCDOD#^S{non`bBDq^_)q#%L0ku6IzxrZc)e(}xw+4XYS7VFRyj*u+9L81k@un|%cVV!pM-Ao_Hxw2^Zsb=t)X9OZ{X z%|u1Zv8VaN)6r5n;;2U%gFbnvr|Fqwc!S6a z?+VVEO^EbPW9B*(B`n!N z8NO_3%DbbYVAXB7Z6($P@XCBBF}!v4R9%lB_Myah`;Xa z`uf(APj-p_M05w@OGQ_>0y&q=(5Oa_I%lou+d-38CdnrA)zYb5oaC9yV}P%aZ!JZb z>8mPn=D&MkR*|QX88ajtSlV$5ezh(jvh?gQ;81nbho+ErF62Umc%m9~lMvHo;mD0d zA)|grya%vcX1k-67AVAbNM@V?h4|dTJXrU+3c=1Y`D(#ZvD>#8mI&p}YwpYiJ;N>Q zC$pP_+}~wZ@9tj0M-~V4a>cD%Wk{%H5^!n)Y{8IRmqsso> zmmaiwd-k=wD_vGHsD$)7JNkI~(mu261Oo@Jl`x!rK(D?5HzA=PBiQENLmrEuozYA| zU~G4H0sC%{93f!8y9=mOD4EswR=0u-xpQ}tZ?#eNhDivF3KgYEqfzAr(Zzndf!P!e zuQ3lnFNR(QkG{IMd(l3e+O<2KT57P@Mv;5hc+%vEPei(8#kSK%6|)gvv}CUq#8dZh zPFmdy6H~HcO%d*jriazCo-zP{(%A7(NZ(jv4cPu37OFY0agfdU3~QCQ%-(h_8$Bzn z=h44aBFiR4zkZO}5xqLI2OCQcj})a}Gko-qmL2rWQ?zeNMbDObQM-Y^^WF_lz)FZ5 zVrR`l*S0Uai>OA%sYK0e8I>$<_!hXq+vtZthfYLkm!*Zxs5P<-G;+o?g(^B-q8sYk zkKEfY559MU{4nzV{;VW}Ylr~T!8jDuikp0qpT=S@<+$B#lZtX|O&qt!#|8L$i0D^| ziu*6;m$XX_4v0F`3`nSmB;TH|&?(8}3NNjV!F{RccF)fkyV8dJ!nV@0AS$Do-+ZaM z$}S%Udg3lkN|7h+r(y!6MG>{4DruV2rg^M3LIE!N23Y}hp#xdQ;Fx9qD3g^E8RPSe zG4%!#EtJwGtqvg*H6^lxhA%;S*sskH`%r5>X%AU>!GUvSijYaTM1=fLb+j*i){e*I z-x~N8l}6%9BJ>5G?@{cy>C3^_ugH-_^h~OKCAxG?8=T`#8Z31`QG~}R-F>XU{TRoz z&ha*7Vj7a2;*s88PP}b8u*&5lMl7kB`~B{DGI{p1U~Q6f+HvOWg>$-BcNsx*5n7t@ z&dQ1G!HI_NCjkBVXVtgt?2{)VdZhG&WdZ-008%UuwUEU-fY9hlgp303|T3Wb!ybl8j~e+QO*-=h9Opr3nFy_VbTcV=v)Iv>AOC5_wO^GUPzT z^ITn%G7YqpP9pyyXT=IA?@u)1sp4OP6WNorh+{=r_05!sfnVUC23wE-DR_BkPC}?& z0$Mp=tZHvM8yUu@H`x47UU$^x$2e7V($o_Lcml_j6aNJZJ{(AXk+v3)yEkryI{iue zrpkT_%5pSeCuxb1V%IVdZ~tIzBfWu1$8!`}e1dT3+c7g7f4qfV7}%%bG$)5LirYr{$k~eHCWKwU*aOy^D^t7x)R z|8pWh{w)oVRrT6gbt+;!?hOk0r{Twex?ETa7#HSU*R z72|wB0b>LdTfb+f2KZC}(j*oz83jMRGlFF$d!l@|zrP?rO`LwC%DGw!S$;0K`iLp83XyOwFq(Q%yXM6xh;l~HueE$v+%@t_O zd#|=|S1YqVYFGsG1I~3jQ)+eigELgfzH?dAOnd+G`NC z&a*crskXov3>FN#;5DQdOKDw4yvF>04WArWfYjZ){x7poX0#WiW5Dwk2oE6hX`zA- zB}N`R+52KxHx4!P=p&E6398jgFF7I}fC-s`=+9|lATb#KJoDd;R+-UmFY=fm%Vwp& z6UQPfSbS#QIe(28KAr<{6Zv}WcGEEzz7=66vojg(3y^5-lXz;SU`xk#aSfb_^2%*Bsj{Al@byIBrG6PT6_#C9a z-I2f0TA^*R6u$J4vX^hxmFm6@%ZaOC!KSyEkb456pG3@#8U=u|qPL|>l=;h~uFx*F> zF^c%7_X-wcK4t)GYFwl|*zAAM_MUc|A1Q!4lGz`1mkh@nH)3zAX@xW}D0 z4Wz)izYIL2BEyu7u*DsUtAAODf{1T^{7A9~CiBqkv+nJ$)J<+iNQh6xBGt9>P+yUOQ z-O%YZ(>)-TRdItcV_8q|k)Lu@$5FU1qIDT8I2fq1ThOYx>k?SBswD`xG}ewc$iP!J z6ycOg{(5XbWY!odFwNB9*U$eqzrF)r-V~8;MG95E<47fplw+ zUDV9y0d^!W?tRwq;`ES)|wn4^59ZTLQLV9RcT$!F1{m zF#W@JkX(*5PH`~stkV?xL>`C&;taf3Vnb)tg}*TN7QAnl3VdMwMx`Ths}VQDpORrj z=LYQ0e?2zA*JI#Jr5|g+wk@;zm^VS<%M5L2S5OZWW97TOe#z2 z%PEF(I+)r`aQa;oBR zow(MA|G@`MqEDQH*@WMNcCTAhQx%}4vC`r?Qneo`3e<6HYUwJ345yb7Z zbC(L|{1(7@+*IbsUm3n*lX3?*HI4OO2m~(o-#GS*a1#7wGK?|XE$|W7;X6$Y8-1Pi znhF`C#9|U2#0YQ{#|UgN=J)0pL*d6SKXxXUxpcq#gR8DU7AuVyH2^~_CeDPk!5&y;SEcOlOv9sh+wepi>6)ocg`C%nM% z8ob3xa}+`t-XdnHVPbqReu5&rQI|Y102JLTo9O9~bS8?9yH5bIgh>q$OZa077f(T2 zV}-h$$oHKRo~hIFKUlWVn4ld2-Tl^B7yB-1SdKw&k2e)8MgElP6WnRyQ8#1aSetLi z?n{Lbi#wkzPu05<&U4ZjM5GXdw(6iVMl0 z5kCN($_L>Byb!+fkb!kjSotItn@xs+@!lIg2MGQaX~Q($j#bYzXuk$_aAdBKJO7LR z-OD>?caw}?>+Q)51vm+0`Gx?bRph7qEY-1kRDpVkr5-R5L%%^@)tyH+$4bz{0H;fp zj^`)98;&H~$cGr(cA8$ziyBs>|1pz|jGsBbND-(9N}YK4OFc9|J!)KzdmxGXq2_J^ zi7cpmX&1D!YU#iLisuCocRipN{q_aYLfQe;&BxE@ZtnM)?LmA$Offu=Rw)ZMAz`nlD?k3fCXtB4Q@*Lq+A*aRkZ zIf}~g45*IQgaZ5#goTIlSP31+Nc5s4FqT;g?7n0xW$ByKX&Pt{xyL9#Z9e3LvSH^ zm&Fehj)BVsfD4Sa35?bnH&afWVr)g;L%g;>tI)GeT)_nxTR#$w-HD<0bQ_|qzvS)) zawE5rfS)jWzjgnGmkfXx2#X|8)q@jvEkbZ|vJQNOQ+3pT%WJlqQEI3w@q5ot{T-DA zwnO3mtC3_FU6Ru^BF77~k7Y#~lms<)oBawGvmjhNcW^ughCxH7+%G4(^DD*-AIF#- z8bU0t$3e&%^)0%e;PN-%ieLdprCR$y>pLPak2crJ3t?#hvT^dA7Zg0AbxHjH zJ+Rdj27{Fx=>ENxJkv0|rg3f0W%>HwSV?69Scwz=-;1&1Q+yzxEJjKHjeOu}Hwvs| zL*nlRl=`}wD7zpdp}J3h!+E;tL8cZPO7*t_N?f_=py&tw`Z~h@_m$Ay(4oyln!L=mVv7^JSB{1dLa_HB@Xrtd&qL>aQ zV(}7(uCZl33G$GSn(TBCKIG-+7a$NmVvoQZ;4}bx@%1V0w91%;GjXgO{?heJg}1b~ zQbkCST!W(nrl0$oHl z%U1GE(6E&AC(;$rL2fijyx{vB7gEG4HUp{wq>8*<;9ewhZ?Pddq(Qo6%nUCim$-&$ zAq0n3c+ERwc?RMDS~Sj5v}!c-PiZwjbG9`xyDZ>MTxwraPeUAH44|&y`YJO$8X8#| zIU0E|ty%Ny)&u7)+{ts5Jz8=Er_wGZXK;B?f}}LKa)=NwY{kpIV9JNgFfsr`{Agcr zO8@~Va;Y3lP6w|ZUt_bBogVRU2x>KOKU!nt45)k;6O`Hf-)!sv$=v_hXA9kLXT}$W)dl~?^@Wrk9^AlW1*>%@V3M8G4S=usy$}UaJ96KcUeBIDO7!IwGqv`<;_NOh@!FeW4NQa9h z%m{AxcqiSThLeWt(YzA;N7@fi-2cpa>E`VFXw>zdGdwB`GVR;Pcf?$`?a`3%0K^w( zuCPS%OKmCLfrfPkhGuOk0eIDKl%UQvuLs090qd$ zA^xDLfd!X8V8JaQ-To8IV;5As=JP5L-P)12?8V~|wh81Irz7t6T^5(>1BBEvG_E1en1auDZ(XB;)dlahy}+%uO6!XgLwQyM)-D(BuWlw&B7Y=$$NLpgU_f7@ zL*=C(xb>$UUp!|3S6Ns9T|;NkS?NHKh?O5-O2*>-4LP{0Jv!c@Jfasg#ZubLyVIjVU*>(HWysYbR?g%5#H7IuLIf~y zuoUp~3ER5Aya!+55_VqD>zH;KNgXgPJ;vCQ)qEz@zwA8hXb@z8ZQE+Z(6Ljx#L}Sq z#d9kh3tH(qMV50Q`OUP~A7dbfZm3&@y*$Qo-xeqU$n?Zt25A`jxtWFKd6*BsX5=~h zuGO)FC9gr0)^V`lh7IR{Lw1x!6x^6wO_*sID0Uolp|FmN*)fKP^&}qxj|ts!;0Ck7 zbZ-iwng@2pbUP&>SH_1XkNu`pX86vXFJ8>{>t~bLu&53 z7*m^En2Ohg2ge}tesz+8@4H89h#QIP}Pn{i(pYHtqkA z_T_<8w%y)OyIr=DNGL->C}Wv2gfgTuW!~nkfy^aC=5|O(GS5UIwqciK3?(FqGS3;d z%p&vnt=oH^_nh;-=li}6e>{J9b~pE4*IMgZ*R_7X-#P}hZ_9JlZ}W%nv__Y?C#g^b zjrebSfg)uPdqom%+76pLyr;r`i}?6L?hN$x!rsh%R|FgYFhalX*rcHzo#M9bstUoLk%_(*LAC-weF zpD*l%{-pJVg$BsJe16Y-N%Uj;zq4Vm}3fv#Opt{&|9(NQU#LJ7~ zdHvvsBitXLMMH_0tV{b$yMutxLnxrKGeuPSXg(H#dPd%!A!sC4TJOciMDAzJuFNMz8We*n z$Z>uIY@70;f`+)eyF6hW-d*wsPpn9S)d>oR#6QUv2RIF#R z+Sw+N7KQDER_tpL;uD#TCF_|*PyG@_j9uBX*&?XPagXPo&?C&31i0|+X(dRioXg8e zI#bYTUYyjUbyMt`3#eAkQj`wEU5tnT?&TCaQ8r{Tj2=(&yF0>*$!eti6~==6@DhHw zI3&zZ`G$Fpg>f85iYYGU9LC-1cAYn4|SYq zsh;*d0W!eFBaVNeb(%>TS$7?&uw04vQnt2C*n*{AM{1`RP?c?NtaeQBWQ*q`LX0(*pk^4cNx+gw=E+KF+3nYYJcNguP` zPo*>Ykx@6kK@N|r=WKc~SLK-T@sgcrGjBekX2x98T;Jbx8F#AsKQ;u30+4qw3+CHP zgDp9-KP!)FyT!r<+$gp9I}2j_32S43Lr$pN*EhES(ZIW)JU07@6F9;)@#VE@LeWq+ zr(1i~@>WIO3%PI6_U3-6{pdFZsSoXH<0pKCb?VWpkoQKBvbdmB*c^;tOWUf?miyqf0WGno?KlOb)PK;$eB4Vi}I(T_peALF7 zWpk;9t3AsA&+(q^8(V*hVh0>FGOh7*%86)@?_nzGo;(*1c^jH{~U&D&iut)jzFMV_8Sr1kR!eo+5!MHJGfEpK-0^ z=*Xj;FHum`ar^0+Q(?_+J;#7rPzuFx0_GI)3z_1BArKF(7g4DZ8-ByMgS#xd2{T@z z=OJTU55RIdWH+}e_V$-%J)OSkpk z$3+17pk1u+L zSTij&5HnlcOsKK%gb0Jjpo5{4y(kT!P;;GhDQHY&>TG%_;2djItyCugjMihbwplPX ze859$&xGk<@qB?_vI=oDu1}N>D+3U#snXx7&H!2~29i$|0`6hYOP5AYjBpAqf@wgRcikjZGcgsPyFh(xl)rqX~E0w;V`av4j4X*MX9w0N!A{GT#F&;l9rK?{~qZZ>ob?rV(WIl<3B$ zfyKiw=YD@_YLeErF)Y|vkhJA{ZP#Iz7@(U}ifS6y-g8k`=|%-fvL%5jsYZeD3Mg*nTTq z$8K~aN6)=$>;O>py$L$bkq(tL7jeG1_~2v5iSAc9{b=#wdm^JP-nKM0Hp<(TyZ;BA zO&DJx0g{5)_|m)3R$P?b%D$n-&5~KXy{%gja9=j`3dQ~f-E?c zEz(x3hYlUX<1L3mJPSIGa?t8a&}1eV^ci(I+|o>PNU&J*^zOSi7&O&ZzL9U>Hkscu z9A}s4`|S&NcCaG|)|P;T-QAQ%5QWWVlyu7K!g(L)e#mIsZa1bs3C&gQq6f}&c-m6* z`~>u>6CKCjw!ubtxy4Nqt@CcY&1M?TWucirod6l!nhmQ?bmgdCI75AJ+zt8{K1=9U zP#=z#l71PZ=f~_69fv5;h9aVPs$P=A(br?8+3tZ%WQobz0R2>6(t1`GD9v5xey(SN zM0gklbo*XsEqKe~I)o@=cHwD5%gVbkyk1#yW&i8`4HtmPZo{Ip`v_DC(DD1$9_%B^p;7j2a_8sy`uISee1A8CoMWB$eAxgpwy zOFg>fa-<75UpAA5QskTP-OHuMzE{F^0=W8A@2v-rc249gfl+vyj`F#YsD_u6j5Y(_Ebt-mNrlV&P?mJIegnCtC{k*h!@$ zW`AL_PIr6URKP8>F^e8V@$h|*gHMm*me=SIQ zfuU)s2faD+Jot4!0Zu^@XWI<#7TLKEGTOp*O8l)h1QLf3&iUFZidV)6J*iQ~V`WQK z0>y|lXwQqBby4U$dyv1Qgd-=dvqUWwcC`6*$EE*wx7=>}w@XuUko2%+(^A3%CF2CI zjpdH6J&0Iu0c5PAQ)$sDqqgNMExFzGXZyNm`MiNx(GY)(eGP=JM-eW$YDU(Oytqo;ccgk;Ns#V$JD2fN)Kn zKc7l3gpIBN$%Hnfh=Io}GQG?WjTbs(r}WvaLKNs~KUmR4$+sUk+x-KuuObEYqFrdl zu<4H&-oB6H36RRBSN4ocp?HqC3iwlFjZc%QePH)_uk<5z_m_&<2jbX6Xr0q@#x(52 z(g9ArDs*pe9~Q?$CPG-&u1Zrw}yv3QPvPFJ$E zOx3-O<)2$8b|@NI&H`&IfIwvjK#|gX|5xS^Bm@m_X;z};)fb11phmr~``ie+z1%wf zInbi7AiU4PWHB6eq}_YrZ!AE@1AaCl_x($caOhrXoJUjlbFVqFrlrXT$l-dbMb~69 z+9ZWg_;MAl)_&#`4g@Hhy@Ob@1$|j(CBFP{15j!vyJAevgdz;~SMJ>doj*#yGJt%n ze9(!5gUtT`4`4$+D?vWvIm*mWb?@hS1H8!CuiL0V*(d;FayQ(5$_8+wj857oaQDUf z1tZ5wWaAA0-aU5jRdx#hiU8tCS|_+%VEyt4`G}v=X#CQT1aHxiLY0^U7uSD%7A(oL z!vU^+TfNWG#J8MH(d(QHvia&=Nob;-PnL~kUHxDi)Vhx=Qg@mycxXYLB&4Zp4phK zibDgvReyYV1?%Q>)bu1;$4BAJ$RSkSUzR?s)L3e|)DQen&-)y`10Q{?O15GqFTLAN zFKMf3=B-W!_m)!=jM2a>*j58iQbw2#OU6pH=DEel{I~kr|Em4&e6Ww$ypiCPI95?7 zY4f3v9S(>Ag<{lz7NRv(A8X`5MiVr9vB1cOJVH|=Kg3ioHI~6}pM_4y zilL@AK7n!W@6b4IA1^W&oXUHzwYr(JBjc1P+E~ZpGS~Tc&;u`ZdjptYfM4$fCb1Z; zqD-Tl-;lb4KHlOJ0K{od1?>nqQtI5DmPVe|JzlV*Hvzx~#Klek8`BAeF%}O_EgrGj zLF0M)#C7~UG`n{K*mxIq_N>Zj(p1zA8k@Z`RXRA88Rnh6$vTTyt?>K9eH%d*?hm^D zQzsxlz?A_o9yBB8kxuIW3@?Jafx^FD2q^qm*93S~!Ol8oi)yQ{VQtD>UhU*XnhH+l zd!;9&FI6ifi1trY1Mx}0FdkC^Jr&|fN63#rUK%S0{K7^@i-p?O!N>~^Mv!DGktCy) z;SMQ>bo3A_6MnJbG#%DN5$8*=UH*c}nx!B+g+f_9%{1zVGav1T$EOb?dHje2IsWEf zA|IY&vM_-frm#D~M`G~Nz(8aE6STD0-MS}T;T^bHBQGN}=Y<2vCa^7xk9Qv2P4Q!R zyY_WnRQy}b;eWMC-buFFmYb@QYGuEDcWRu2o^W_}g4%p%#xWoNhjEw%PUcCj?uAWY zd$^1{I+NLrjvPJ z1pvFYKu8h$v&c5q&FZNddpt4c1b+*zPgF~bu->kkF>iU1?vO`;w@7Ev25-wI#|O!* zX2i~g+XA5@8{_UdbrioF57TXaox6_D=R*ofA`$UQChuCe{+@p{ld2q7NMp;7CQo#vIEtY16+tKYXP#_9U&Y)^}AzQK}-on7qR z?|fdS+x-QB5RP;h-f4yG)2t|hZ1irbeRz?-6y6?TL)AU7Ja>i~rV4#{&4uArDxUdx z5hfk&cSXV68z_l6YCO+S9r2o>OzVlBtCKnV$2WS3Z>U~Ag~PdQw9l+6ZjA#-1b5Mq zizzzMR7e@T3*%eCaG%Y9f*ODGf=FUC!d^A)p!v@Wi#<~K^X1?~>!H`nk6<3NtZFye zDi?PY{rRpOMu(z>RnW$SUF{`*yqOI}%3(a|-Ah_ddHA1q|B?mx?z2yHa`HI6t3h0x z2yqp=fX3gvd^WKid7TSt#~TH}4a$ew1@@vUqo!_k1|_R}J+n;{EWJ)pzDsGdCiLgv zy370V`(P2ceJ-DzMnCjg6lsc=V@$BwrWgDo!5YYIe+?)$J{WFk-ci$2L@38MkzyOC5alnMv8 z9fSfhg0P#9?Aopi%DDSL3@9vYI|f47Rqj&qt$A!W4Q;xH!wdK>{Q3RkzoemW&yg1> z%>7?(WwQIS5P<<^&!vxcA#pcCFL!Hcs*pemlCEGRC9oLK40S31HKuvIvNE3Qj0lk` z9nw@4PmKem&z?g{ydje^md!8UHs_SiUU6O~MVWU^KoiCmS{=EMXJJ;?@GdhuMC=%;gAp&xAMtD|KJt z$sUqkA63)+{0ggyvYyUO-eo6F9Ibf@ZA>}Z ziB;hIm@DtaU}+v*z+JZGecOJGU5;7Cvo!247iga(Y`8#A&tY}Cyd3G7UVK}-rxn1= zLokbViu|-i5)2V+k^22bhtpd+ zo3RdqRjjdj+hKOISnT!muj@5hhtjp5CND4kFAsO;{~ws^dC;8{ z>6yZl9lM>Lv<3|4OQ@t6M&aXKm=Gzwm72VdsZg+NsAPqoNeb@be#bsJuklu zRu*?|R#z0aA)K*(UCU|v@Tl35jwzVm`+3D31ayi4ms7>}rcu@w6eaB>crv@*JH(zz z6T5ceGKb4sFiCNP`>+suKj>5bLwE*hjb_7K4ED`+M0tlR!67v4^qSYiJIC;wRW0Qv z2Pi}f56T@cEUA0;o`dQT(*wy1-g})7oS?ddyS@LtR3S|~PT)r4@yZ_(-iywYzv~iA z8kC*;y3)Vqyc_TSnKPd=L`v**Yx`}n@hNYtS!$vEdd<`8*N!wP#Q)jiLlCv-ph0y$b|FRS)xHWUH%DE$8YGrJl< zaYfj8lI8+i%8MBb1)PX{9RSXBOJz^az9&w37B&V;1wvS=S`&3;yLn>slc~^ zY~TYkhfczB>a(%^zxpc!H^bWwC{#E&mus5L z1oQh0(bj+(PI@8B71gKy(c?M6rS?dF_;9W&0P$u_0k}SyKkt1|`UpSFXgrOpxPSX2 zwc?!Pmym`6ZsIW*Fnb$v7kw`E#*}k8W0A3{Z!O_r&%4iJ_kR8OwKN#4dy=Ti_pU*Q z?ukfOS@yYVAyv4Th~GQtz>AJ-!j%U5R?H?|?FRW{G0&nbz_W*Hb;lz=WIeo3hB~$< z5<}(Uah0F1y#FC%fMgP-#K<#spGyRk(ooc;(?wiLmX9}z031*W1P8rt=6t}L95zV; ziOPN;H1HZ%#Q_90<@y-651onoOv(mu0gUFt+F0B|Z@@Td%{$btcDa|Gn5Q6Vk^`1R zm&y}dStHuv`(>s2-pq8OG}PRIjgW3KSF zeI;cK^kJHE7#m3XRfGV0)MZcBnNRG&6Z1a0a#TT{D_I44$Sg~M!m#)Ncp!Jl@q=Je zFFKMKs%Zsd9=r;H5K{?^63uw6aaRFdH7SAewb^Su#p5}QfNe?;d>-^_IK3@mPb+U3 zI&zI~zg_M5DLI4dK_b;SwsJEUfVa@gP@KN@@saEeeqsg66bL)qd?GyLb zqsAWfGZ%+$a%h>S9gOa~evp|8drYG-X%{}VA)1n^5wSuo!7PyX^`}qSpUK&Zm<;(( zM}=W$17b_fxXMf0mW0tdLegwl`M+v8MxT2P`Luzy2iEX>@4P49r~sGm(7asH`F9hS z(=L`jqzZLQ9-?0xlIEx0FGc>STA~PR%pc9N9y-^%&|N5G1qqFX6vZ5OXKclT;iJ0q z-&la_y=GRNF*ibqkXC7PO%@hHbU8`JXI!e(Po#8vX;%?qzW+`?yU}j_<>houtjqMv zd2IpPQVkx*lGW9a{p+OZizlYy?|#*Lq_A9dsR%|smteYbHjimbB^9`0ciwkqTk5yq|a+Oki&>;HqSJC!gbgqYG3s1KZ~GmxVod-3AQULD0Ok;!&!; zmv&|vz~Fx$TV4BT%^a^Pq(xBF=?zB)sE-RI=3zfds1AGe|4$GY56#@lVj9! z0Tf3bUhmQdEfq;%D!%(|GXW|i$Hdu*o$TgLdUmM9Jv!d*gSseZK+qFG^o@SAus|0> z`sg1o9~x$4ALHW8^-|uxR;XUuKBinQ0hW4){JY7o+@f z#T&N=wfgyyL6lk-%==P0RwIi0>RAeRg_s&p$XJ#{h%{HGINYjO~3-iw&qCsV+P_7C2Nt@ zEl_OZnWExe9leYZ;g6>O=I{egwpZN0b-wAT_3XGe8#8D8?GMI^x7PNVs?oO=NO;-7 zkb?_rz^9Y07Laqw7RdDqkPmAkBYg}m-J3aML62`)YPqs386s7;e(QNsh2@%xvvXe@ zv3zMDuo5Pd8+Hhsw;a-QRDl5w^5aGb`p3P+$*)2~Zan2Qs!oAoOzt?bnY!fG{R(^P z-E!xT2b`xwjl%@P>-V6*twa!rv-|`zl#+3JC=HMO&+zV|Eu!1d39g8txu>6KspX{B z8G3<{Mhzn~N(cB)6=`Npq@QJ-gWtj44KtOh1o%D^9zR#ggi4x&;;7&W-d7(FnF8r+ za^_=LH?0%c#|P+YZ2DJ)S7~KKH0@ngrsyTtepPyxR(H&^e^)bZI9z7WrflrewBoR_ z*r1;pSj;Rmm8@SLF%VSJ$&j1(SwO~#i#TMb_i+H2DRg@&nZzzyP#3c~ks`1eEtD*1 z9myAlJ;$iAEw8KzR{&I36I7AuTo%;Bia0M?$8G2f|F}v;UPWk=v^`lX0%4VneDo|t zcV(za8CNS5BY8Tdj_ORXK-nVY7Q+am8bInCSH|=V9`@!es4Q>pOCfJ$?+PifS!w;%7`c*2J2cH zLbcKl7NkHbeb$WPuk36JQ*>c&(ZHTd)X|UhOoO2?=m|iDifG*aOvsWV=MC`(LZGJ@ z&_jwn6n=#$9y?_$WoVHa5m3_J+3#Ip=@(AuVn-1qB5kw*gfv}9jh+7r?s9Bd)XBfX zGPktDMv5F{F=hk0M{=Y6i6OeFLs5T`5>vC^c5?HAm^{1OEd^X{Wsu2i7>zPQ(tBlm zBeI!ph7FZg5Nvo{;N4J*f{X8~FX=H#~b#F7FZRy+%%l@;gotf*uExC8a*ppvq8s)3;_d-|WhuWsh zqD>#FAG6ZN`Qxa+v3*dOdd&cZRA5QWQ2tr*Z!KLML*K8;>khI(a8y+19$z5krqHsU zu)m_}QhT$fXMHyL6Sqsm1S}c(?7pOPTq#%NBjdXngl}DqhFRmQf;zzsZv}ICJpmNA z{}rbm`Ex`>Q+R6LQuLBDeb8Bhrk=%w>3D6VNR}{b&nB4@Jg=%2)?O|MI@?>gMXD7=`4{K#C3cN1m^ zkqG?|3-cS47b1#JaS=6W8eskg&-B`tG(}uYvfB3}_y}~K3$*WC(3kguJkfh)8q7;* zzGV!g77F6OIydM{HlDdn-?Ab_TMlbi39~brHSEMakW;V^XbTuSWOVG+PEW1@4ztv%=>T3k?qo?121V!v=k=?w434M9PKF4TWSxcY zZ?*i{L*Bmps)_Xa%KZK?Wx>lPky;DZw!b5L?)@zJ8E(}1z4!@UvS7}zy|g#e=jZ&$+J2vG=VQ$prw6Cru}frEO6r^0Y84>5SnK$hK4P2PsL zNq7BeXdNf&*J)41cLJ>2z-`G(EofuEhlf7X@@?eBY=63aMp?Ns;#(Ml6OCEdW@=a} zll_kAKhklTB+gV~*n~(mn4z|_z@S_vg6*QJ5_$lp?-UY4`M5%`D#;E2=4BoEg20@k zy|OG*33KvC5p;`bloCb~2G^VyU z^dSG~(p8S|yu)&9wgie`>(AKfgoo&lpuR_`6GZg@db6e8RmYk-5p1 zpr15Q48OJ5eO!kbuU#NdGf9Szz`RjsL`PCDeY62VLOf%>9FPdp|JmkD4W$`bJFkaR z@vgXX%+mJ&0{^l0*1%+mV)U*DVt5Z^dRhW^_eQcfIZ7!kC#e&r=;)m$M}LNBjo_$} zIEa>zDLn7^_=&|^^=!2}Mu3hrDsv<}smL@)@n3*nitc=Q0Q3;u2i}6LbwyAoEAeqf z(?4778nxsOp7)Y18=hno=xqD>5afBUZGZidYhXT2o7C-^Z{*O{^BLQH9t-9N?D%%g zU!(=*KlS$NcFkuW1Liv=s=M9iU5nuP+OwM5e%^QMdF|~!@05x>FSr--BeKsrI!he?wPCY& zE%_0b1ZR)fH4&w3h}hU$c0QGNEi&PvP8Nx3w6yU+97 z#EVd)cwAo6iXuRpyaQLDxITU(h>wjZ{Bk7&1WLnvhe4oJrP$LFgdT6aKS6a8=+WAd zOylRMM%KpkTh2&uu0(A2&ySD8>(BL_->&)Q=fQj{xw+d6ekM8~>I1Y{rvsXWkcQ&Y#MGMMD zLUl>lhVFI#jnL8Hh7hu|)tT%#vmvqV=k3(t`QFa$Kd+5EufN^rr)@Ri`Kj3LKd*~C z&#>+1BlhUXpmk=i@>nC-5;MkdSzP{wPYed~IE$WYJQ0LzM88DOSGPtr+dmFiaHK`@6sEpt);u1WZg~wF}9nix}3pa|* z90b{aHF`kE0+^s{Oy0O`kB?l2$BwlmkJN|f84Dm{$AsX{cbgoke^iE z5o18rnVuAX>{IcXHFZ`9I7E4M791#^^f#Xy0)TbK?-%i3I}=XmvdvNTmf`hkef{k( z&T7&IEn*hW>oDn#y383!033q@Squr44mSR5*8Ls8|kTbrOZEWhSB6hQG&ARhAtV?Uz5)f>>I$DAiP zVx>MTK7opi$#3wsFw&{9KSGX=kh?-MM|fvZP2i=f77!O=f)!quZT7&I|4-aJ+$p(*+4<_cM>fcsnn5K}(Oks==Ul*gVChUYOYvIe44t z3A8GYT%lx#ONvVwh);ke^uZFRvS;(Q*2@&u%P)KY-m*&Q#RF!%ou~Vi{N<(V0-1kY zV5l|2c8hs)2Tpx={(2M4c6z`s{dwzIgLCi20)^dtrkUZ4FHTw0e+$FwmppX(5b_5< zL%f26q=SRRf9ICrLDq{2S+7f{JVAx{oE&#M^^uuMq0D-&Bj%>tH%q_FIYz`=$ZPao zcCfoo15K~)ju@q)98R2q!!Lvi)h%M!K$bY~%)M#cW>RHR;7@%xzqX6g2d-?JlcSzrI1S--j%XR`eu zB21e+((kjLkzXI)QEq8j6vz}!df8XH{WNFdxv9~-Viw3XbyjUBjw?{MD$_C?_E@su zk2iN|b?9`nHCDrkqk31PbU+1t-#aG6TP{~85O(4%Kl|RLbh>}P^K%E@vR1Mw58L5A z_${|~lKwlK<+S3|M5iXUzeGtMtNL3@#Aw&LldU<)bG6v=cWq6a!uCD4$*yn9bB6}& zyLXcQ!|eLBY^1C1$^7{>#J>gfP*(vG(C4b|35o0=&n+#*Z9){;uN~d~4lTVhJc;bk zY9bpAJ4!Bd^^%$O=?q?bx1Vzlmb;uqwj#}78RAZ&$dA1jcIbI@6Jh&1^yzE25YJ7I z!JXepayfXhG`G_|mOSmxkG)&ovg`Moi+^JQ{>xTyMD!YV>$MVaojVDr%8TyLI^8?T z)BgM}>R+Asp4XBeQo|(Le#nU1K@CH}yb)sgdl!xBpWkZ!TixKWRI^o1o$e3cNtM~l zxZ!X4dz33)cKd1OU4PO=B>S$AbJ^`A`%bkbWr(u0dkJnooSe%y&LQEndsVG-CmAmx zxBRM&wA|+9KW{wz>p7rzd8H1?G7XJh13U3sJFoc&%il>V!Xew=tG&usBoMO*sWzAI zB+Gb}Gvsu-SNn5nW%pf~f&Q-`qRrb6XxaS$=2C!;tyeT4CO+s}Wz(jCbnlrfr8Cux z{UF75Fc-wEj-0tBk07}!QTutXo)g%7mmrPFa=IevnTwpiZ1i?PKf4|2XBWHz@gKJ# zkXv`7OG{XKEMkQr~S|bqe${t(2I5%j@fT2V%<*s z1vpPM7C8#7D*Nf3ayn6;TW1n*h;&%S%BN0gn%e9#!3 zdF(BBv)A`X8;BxX$Wd%rZZLa2fOUbJ!TrpK||*DCsscn z7||zzAdY=2EZuF3NRhW;-1kF3zMhzP)1+G8**fe7V`@^AUsJ=xkuURBFrLLE4Xk3` z*)t^ujsF;Eh$RRiO;k4Mg7+0q+mAFRXBse_#@)AE?+vKS$bgxA{Je!f9+-lvB{S*U z*RNlX=hCSP)}CPBTn25{V|x!CV?xHt69KgxJX;$7Nn+`TcVL*IeG0+Im_r^Hv%YNB z0d3)%)(dg~F&1i!zfbeeTPxYShtQFnMyt?#TBXoX{y{>(Q-cVu4dm_UKY(})w!23N z;L`NDQhcSqK2&XwemwK0+=tA*%fK>lnME2obr3-_+0kGSBz!P{ zFEfb-P;elPFc`A;WP=9)tNLM>-2p&=lzUGYsdhdF{Av}CDKd%b{VjkF^N93~1Ty?y z&{8&wgT>ol1X5xIA9Bu-4eb(8=V9#zm{)(&=9;T>n?>#=rY|0vVn|V;H7M3K-)Lv9gC= znpzBLVq<&i3H{`O&8W?OsfKgEA5)~U66Mpr$ZW2`DuSOITq1(e%a_dA?hVmqZD`=I%TiEO01-09MlT9L;ywYQ=d}XK^E{17N*WCZK?~?U;*jvSO}szfo@M0K;-iD z#?te$V$M9!^7P`1{-ii18|vYIJk-Mzz{^!K^xs(Bn2kK=9e-7qYO086FD*BCNq@Gl zl^b3H!C8YFLNGz_Ap*5Ah0tUniP!#ou%92p7UOeMQBe^_g3Sv!n6Sp*JXE5KfiLmp zxU)X9%TP!^2ubZbD7}Q6nf6|@`NS~=urJjSS6O9Mo!UPCH9qHe^aSe9;3m{Lpjk?U z*YpEd&CT^Xq$eF*@mWwbFPR!^HuBr{am8oJaVdvLg+E7mt5c6-n=kzH60!LcQVdDe?=IK}SOE;oiq@i_VV;wS07q{F zyoNUA(ooAtdJLjKd;0@97g`*j|M8HL&jHc)XJRp}OP|JXut^M|qvB7F+X{Fvm&M!; zb7gxapXo0gQUt*Fk`NpD!bkT*#7Rj>fPeR$$Xr3US^>yFM-I=ywRytLlqY>^DE!%) z4aP3SkL?uc&|-D@K?u5gtU?OKPKyCQV21i3{^F4o;`b{&zAB;}FScd1Q$!f08Fw3C zZFIT&Z6Rb#eQ9+@?o0q?_U*j`HjU3Nm%HU5+I_Q_{pCm1Z8Bxb$I!Ay3Bfp zSpV#}$)-eB@mOY+V3F4))i=t*-{h6RO!)zoB1KrfEp_*EQesDA)y_?}6^y_#cg z)~vibhIgunF!^;s>>-B3B~{}^(&BK8FXC>}Xg5DYewdIOE>EXRRlq*M=JC7p2)j(k%MmVO5T3dTwrTR@ZyZyIRB6f#LrGW;*V*8kWm zMV-t~5r?$GFP$uMvz*)CYLMJVkDmt#e_w#$5|;9%i_X3*Q5($XT~;-&KXm4}v$^)n zD7Vkh$C&tYj8<8%0>Vt~$z9cwfTtpJ4%iT;&x1s{JtuP`8W6yb;R4@k_

94B!| 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 z

ALIL8-4wzszh^@@Sox}H${%X_Y0N(w+NA}uWq5cmJqj=)$-`U3>X*8Mkllbh4_ zHgo4L6EKgQ^7hNe-W>Y|G$Yn;OI7$KfDUIWoZGmgnH9BdgzB343Lhk$^ECzNo4;6VX(#m0v!R54FohZ0H&%ww8U-9v`_%82A(DgUU1;})1}k@W>&2n75x8C z^-F&y)oUbZZe%RL!z0TQ4QYRO{)b$48Ygxfi?TP+S9zl4he@!v#e3(rYyAVht+e>q&qh026jyF( zBpB5qkB4(Ch%>7szw`NoUqX~wwXW8=UkB~o+a@CPN} z_&X1?FI2xm$5t7MWeg~`2aS$`+l-C1$)T{Ihca`i`+Gk{pCo=OEvJd7eH{)s-fC1= z{Sfu&U+z|N0!RNS^A~7f4P895&D&SKrmB_xI~#XOW0^q3j7koEBSQPBzfke3Z#e7H z7dc?pNj0T}>$3^RGmnoANR@WSlXgbZ`clNYhe`KI6VvxnKlo92*9>S^DPa9W^)+

XPM{42Zjbz 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 literal 76240 zcmeFZcTiMK_by6Mf+9)Df(im6NkBxBfS?EnD9Vt7M9ClwNM=MO=O96XWSJSsnE^yW z$#Fn|0Re>}OB~6!H-4|b@BH5HoI0oKRNcCD-~Uk9dv~v1z1HgIc~*zq(@;Kjg7pLu z5z#4?J4#waM8}GWh)B;e|Q{%-n@@j!w6_pFof#1(^t4K9p z;NqZ-&I~?(f<%>;n0uBg_FPdO7$@53_d zp2fKoJ=_DM{h{?=MBaru=uJOy*SbanZP}^y9=XG@zVk%H6!JtQv;joN{{2Tvx{r~=(-+!M@M8zQdjk+HXaC#e{`F{Z3K1D>a4q`m|1k4E?=pgq;jO;L!~K;y->t9tnK2Y6|Fx#_i^r}Mo9P7aK`yW%|1Hg9+(qu! zdzvvdVa(Nw?Gp!E5)#;l4>oDj)OHoVeV~zZ^B8jplDK&8={I7+OsZ3@#Q4(>`D-tP zecpG8d^+p+<^|&uesp=Pf#3EIoYHCa!KkY&Wi-deeF;W{2q&KpHjx%fQT}_`88q4s z%(~jzk@XjTJH{3m$6_))9dLd5tH(5?m#%tDh44~;U(XfxZHqW7+3&lz`pI#^mjI8` zyy1DZhWgd#FyRKgP~Do1>bf>s z4Ik3u)j6znQ-$9!dOG=H`7>A4*^AS+*&M!ajo1~ntA-)8_2#5_(&q`q=96wmj*WN+ zHV!-@@+36GkD8`EvIMtb6Mu}R+gHn1@W%Zmr+voe!itkZ)lKa1!TXLobNL=RCcbcN z|B9pu3#@LbGSwUZCg|nIl&4c6vP>0K<6d^X^QoxyLgc%7zwHi_S{2^3@>xSIis*Tt z5w`(#9I&sjtr-4x9scT=F1l*Gm)RNz6J+^AJIid55Q zlB5N3($BNl*k^ z{8A8z1Cp;s?NMWx}2tQuvo_j`(z+wYCu!UD2HK<3Go} zSJ>qXmICzkcmvIVyR+)eeA?s*WT9wIV4*YGxjc}C4wWdx|)XD^GMeg+sx5ssN z`5merNY5mhk6j(OJMFg?m+|Y6L&WU)uy3NC)m!A^AUg}MHqazK#^>(Xf#jC`6WCqy5hWs$}=EGa~or)2^ z-KAMqozW*9g1D_wC%MH6x!tcldobyWbNhH@$NV&R*1^WrpLkO0>rK9dx`|Dv{ed^X zc4n~YnM%X%RPN>*cLf;f*8vMhosaT&5 zv&zu?SC9ARH2v3vEuYRLTl?r>oE2PEM&*HrbtB@({SSRTR$G{MC+>I2bzzdNQra3H zJ!~}i&{Zc8+_DnG@XF7R##Pf#>L!%n7G;V91kJP zWG`!)joQ+9xpv{*c&{B61^)$h-*kkucm%(z>bg_)hdt}pF1LX*?02U!>77i|tkrN@ z-P>RBU$Nk!9<~VI+sK!5u%l&gFm(VCZ5a%7gU|Mcl~rQpsdT@cxq}taTNX*5<(CIh z^OeDIpPKq@(=otZn=aaGXZRIaG>5ZEIGSo_Q{71WF!%*EW58G@nZD8I)9X>H9Y=?( z+5I8x|25+gkAo#irL8Fc<{?TKgy&IJ+f8qamfVbq4;t&~Jx4j>ydS84R_&BtLiNux z3OwS6$>Gkc#+mpB8Z5f+xjsDl{yB!UWXRZi34xXIO6u2BOP0(Ix`eh!c52x6IhU-j zpODKSX?t4zYK#ect~L=`f7(-K$B-w1<>t#Ia%9iqNNgZo6aiJWpJf%MS!K zmyWTf-2O%Y;=;O;({#rONTkcI56iA;M9LjJB?QUsz5g`+D2RRU#A|y7^=p1*2+Own z1~)9P7lfq363=Xssi0fqJo%>Yt0TiK5^b;vtv-`4n8qd!4+vn8^VzP|7Chn-cI>R` z%(9*QOz5n>*L|=1E3dOK>;HJ=knm9Bq+ogU0AnZWMR$IfQ0?crpX;cQ7SRrYX}5p| zDnWF3-R6)1Ig6i^>*6kWDJ{<}R$WmER`rK0U(^Ijp7$sqy-OMFcAS!3Kt6ZtSh3$y zM%JRIzKaxF*tZ9CrNBJq32LL4Dr{Bw%gUc<@KbE2UZA$!Q6HRdZ?zJiC{5~G-QcdF1Y`L39V*|9kZ^+wqdl6Mp1#~F2->_!TUY`eOp>==jE2%kgMLPFw2cgooljVF z$P5##Ov+G%p~{^3tLXX4(Co9)ApN~#^>i$0VKgpk zO|SwEn|FAsb~fF6&!?+FXGFjH@L-qb<|Ek&)@i|7e3k}TqH$jFTwW@5d&$?IyYo7Y z^Hpt?Uf!t6?rV;|@!J#iCpvZrpHtN28iHUGl2afNfp~NXYW>Y9S+1kp{92xaRE62>tiST9Dm%K{wk|)1joULPtB#y zDkz)lvGMBXzG1MpoqD5v4`h!mT31eU^S1k~!LTaJQQ=Xvdufuq)BwMj>BDS}oY6Fw zyaZ)^cmfMi#3;7ZFmzDC{4q9kMyKpTVNZO*ENYk!itB?spN3WcW#YJeA&>bIsHtp`McO!+ zOS~&DsoiXv$JXtr6qt@>o~xKYrdR&9L#t{=m1r?*BY|-pEt%e3A^o$7)IfvAH-ok6 zhk@ZMw%{SfRs@yLmGfzM(Y8ziJ@9(gP%Hlq;XBohOEGJT{rX5 zY4oQFh|QhHpo)j`G~U9r&BFGoWw~sT=YpwNy48RRGH(O+-Z2G6kMA=?RQ{ zC)|I%?}TXDX{@7Vinwx`_rTLTwXn0|Pv&33k#@#DtG60sx$LCMjc1prhTX^#!r!iToN4rkHbH3vHj`#)07eQp0V^HhJ; z6;v6&_OldeZOofTFUMRwz?AB zZo{^=x?t;y!fl_spANX2qnq1PHdkV%t_?kU&z-ySsA|IGUEooia|W}Y?5rk%c9|uG zn`p6P{c0;hvCpy_?>s4^PJ{T0SdIv~T~!Mkoh)xwJ{;hmEDLNdYtWaBc1Rd_-y+4E zSMmcm#UUq1_(`9sA3AAgi+`F4tbqrtIXn4wX6qquh{}};s_M(;FvzCC=v4U8g?3f* zxp&yh(OL!^L3R<=oA~oy7)(j(b`JJ&)r8+}Q?Ar$wN@kdB=@RL^t-qi6xKDFC3}5( zV*)(_YR1XRQO7z&lu-T8<_p%ZEYIm<9T=>yld2g=i%$%evtAKfe`zl8L9O+bJ}+s9 zS%WyMT()x5mT=?aVW}=$>jG=l!L_2RPx~Bw^8NVt_q34Td z3MBH-wey9figOXqN64&jtW^)^>PzhtH1b{CmbKh}9dLLrPEI5yR&bs|!T1YPTpfIR zms^^&e5EumBgNR1X9MRPo_7dVy_U;IZPV^*ETV1Nyj1xb{kr9FQvC={c zTI-oWnUKobRGh;~h~1(SZtLaxxH7aT4q+)W!8)7W@L@-&$}Ylp6f?+KSGoH0z={;a z)H~+aW~|tm@G{c;JP1Z9d{-lph3I0x}4(kqs8+>HxZjzb~7aODGef>>s(BN13@tOw%?!BG( zc?(m$&Z^tXBk$7K3nni2v^I!_&`5rduKWQEq<6@{7t%T=Q2kxJ*zAzQJ;lj~`Y0Aw zf&$mxll~Os_79IqvFJi&auXxJ!+RS;mAEQe2VOSGC*S1>GeNu#l!K$?8=9Ct^;t{t z1_cd%z4ESmf-q9#0I31p*$UMesFs^u!xs6$O)J!mjn+06hMM}5rN5?9q;^%rQ=!7& zgfpjY<_RWx{p_Yza5m4En;#}az z3Jgr$$*@Rx{_LE90Cqb zn>C6wvV*flA4cI6PlVNJw)8Ed9ask0nm34~#%ffhd}_~Gn=UmT9*}O%N4QEal@Db0 zD{_26NnVa=C3kQ*H89%dB`M(lF_=y<2U}zOH8D?yT+Esnl&21awGQFk!!dy3?48I# zy=bM)`xn zthGHJzn-KLz_^_^V3C~gS(kL+TO6dm@#`C+N;S{clwsBT%$m3EtCdIjHLbHpA=*@v zh_oY}j}EG(l@!4wHvtawVX1mL@`edIwEsk$3Quy*!XAA8UEQ)2t>$RFTcuXr7JzuD zrQ|wnj}L*rHm~|XElp(*M8%&>Yl~sk9Xgxv!2Irh6?NTkA!<+(WdrOZZIATpA3({pTI%3F!uZy; zNvcAyYOEjUG2z=_@Oz0%SakOffU8>n%T-&z4!!)6|NhbJ6~OFs$@SSkr;0nYZLhs* z9D^@Q8Qiw+EchY$K!snI)#PwI3<3X!Ag4Zi^Wej|gWjcv-DPmdu4>1C6LN!Q5m}jvXIldamQo!b+oX9@x`dOv zy!cJ3x(b&kp-^SRJ*EjD2gJta7N(6iquxPMbRTBmP=Q$Q)DkZa{UsavwWb&3R&I zR)gtn9SFg0(i2-Un=^faL0_@MFzZGHi7i~%EXa84Y=v6%M zLO3;lGldv6D<4>cPGdXau}X?#eD^VQgZQF%y#K|w{+cX zhQD9tM3RX4*l@#Eg~IThpm*agZe?#mpT#gDZBzcO_M@*gng;eIElrGrD3eAwsIWlQ zBYN$lCK~(No~%g1Q`KMGcNRbZQR9vEf}Ecp4%pVBY!XabxJ;Wkk9hZP4= zvB$DjZtv#@j`z+pZ(td1C?}aR0ZS;ieI98lTq9ihzI)pQD&%O3fvqe%;vPe8l*JkS zsmbebpRljEdQ!Olo9nRq68!NW@KXR}ddUoT$STYd?K7%U& zt96lzoBJN8>ArxjO85WO$suo$w!VSSj*@bq>>RPlPn%%`6T9&GoX<}MCnZaDYn*-K z{#M{l#5uX~VfVS*S3Bq@U#l6(61hLM=2WyRS?jdbe@^Lss}JBLT#DVhxhfwkCwM$v zfuH^(u56LfYXu8#L&;S6Gg|K|9)^Qs*|AX6H-rO<>X1AMKNjXPrn|#T8xn{OWH)0gI zq3mF8_@s^7*D&I(;;7{pP^+;zzCX_7#+&{$s}VLznX3Mxm;9PtWW?!7z!a=nd(Cxb z%RhcIRxeHAkbAh5;@7TU}?lz2E1- zzSKqi3cvZ^mbY*#d}+UsYdh#J&6011_T*#i&n}6g*6A6a|ML0P%$snb3JBX>u4>$O z_(?Fd%IS6(*wePF*b#KP=euH2XgMK?emxkf0@ZVu8o}9kBc8ZuA`xZ7kbjWBg6WQa z;JZWJc4c@a2u4|$YY){kFAg|bf5~?4?q{9@^&3F<)rd&>jU7HyL8VO3u{Bm*);qH| zZCVc4$0x|)BQ5BWuMdkgf2brGiFMR<3zT@Xb}l{8fbwT48h5+ZOrmpV&RB1F5ARe>2^6--nz2dQX0C@l>}vIz!6M%Nf?~ zIWxdtR6n&f;qRX>=;4{tNsC^y*-R_GQv9xA$2LQAsGPNQ;99@CXX9!s+kt&iXYpW- zu9S~)SD_>FI!FRPP)q4%djQRab-m1M@QUE<3Cz5i*DZgCr;X8f?vV0UfU5;%@E{%R4XPJIP4 zeGTwz2zFe5nFLdLtep^k#z9XXj@8~jQHTOXx_&~IVDJM?*$M-n)s}r&i@n|Jwf@SB z4$1xRze|1e0rAykVsAzw$Uf{rx6~oPmmOC}IV%e9ns;0sC=^N~&aD?6TYT)^uzTagDVt{9c!>8LvaR)*X9BT~kEnb~e_)4D}^Sb}K20 zA2xEE*H2%acUsXp25!6Gf1xMP^|MdEO#j|srC66{7caW0|26%>{p{PG>-nA?4qWF> zlG+8ayZ=O<$6DN-w|{4xLS=w1d@w+e8Wl}$DK9W6@rr;D(Cc5FB4JPG$0X7`b3OTe z-82&Y9t^Vf@DIS+TdOkX*Lzod^S6h7)ilI?b<*HpV%?oz$_zUDjzrqtZUMg{|Q z1D*qn}=>3P& z97oXvoJu$#yoV@C?Fc=E5Fnysg^HOjfXz^_gEK-^``->PzyIoduabPw$U;3PKi#W6 z<84*@Wn{T!&Qg_^YknnDp$%JJrFlQJYoMl{9GVPmY<({4mg-QyvHiXHuQ6oa1c#f;7a89kVfnw` zOU09k)!|KZiSJK#`@JY*e|BBesjGOX`*IXB&KHZBcSDFllnSCINH8(yZYxw3<1kV zkC2PE@J4!bUaDtt-px8SVSRN^Vv{e1FY_?-Gkw(ephC5)6Vp510y9ltZ{8sU4J_QYV#DOp(Aj*UB~uJ^i$Tr;G>yl*GmK z^S1keNwg^!)f84PS}y6Hsr68be@MQeq1rvxlIiXEP{mDY<)Q_Z5D6|YhT8>EvCOQi za`$8?h$XXUiw_h~ye;z&BgV0P?V=Cds&ZKT1vVm0vN=VS2%H72Y^O2P*u2l3y_h?- ztF4to?4Y1Rw+RG*bVY=EUaNn2p65AFn^v#1ik>v%i)D5?ZY(h-E>_G#1fR~PP0!vZ zP011%CQmT6P%$(`1DnwgJmUl*PLdquPrIN}BBh<}0WUA@JcARoX+3umGd)}oOx1^> zC|qq-T6tQ*Co1M99P3zLf`)%;3e~X_J$W9K(?tAl-VMnGQ@&9tJ+q;qH57U4jkmIr z3S53A=X<9SRqgEU1SRDSjhn6CID2K8_2`*&7a|b}AImc-s8C+r#0%#>dTF6Fuy`YO zw1C(x54DulPd8V7iC^YabQ6ANTQAZlZR`-*Nrel`VRN#F9ApZc(n&&LK{iyKfBTpr z)_d6Cll_P{E$30HJdc2Pn+#cFIyU5luX-=AW!#M8e%f=ax6b-`0#(3rLOgmQr?1Y= zEun!H$1i9y+-3kqgRMAY$b1@Pf~3LoOyJN;4aNP;C)?us6Zk|EVlH<@B3#`Y7|yP@ zu6ATIR52?6g{;jMvGS&D_JkF!FKv~)A+-i}rMs{A!ET*}n* z>tn7xH4q8y@b<3E>c=B-B>*0a4SYATI3S;r5qM7{x7WJ_aJ6M1S9As{%*;{qDB0#< znt@%Q=!64MwSi66t9%q_WDT}t05vrRsIiq9fVEb22-Q^s?WNnD#@*$*9-PZ3_GJL4 zyFskv7?_a#Enz z)emzF@JBB=hM}Vv1;E=Gy2JUUP8T=yEy-}onw<|=7Ad%AOpQ0ivoxAjhon7*P<5=3p!*+Ff)Twbv4)0IQCYe)1 z5aV`_mkp!+gy$?f;gj4!AI`N$*0GtA*9~ZP_{dKTI+^nm^lX#cILq>I zs;HOAM&{c` zl!i;q8*dkT^YHL-kwPsW4ZN|;G_!K?5Js3RvB_`it2HFEe3Id_79u@gki9pbT~C&{ zVt+6r!E@f zW;F!pn(q+i=wyWkY_{yWou#P}0Qrt2=hi+phS=dTi!6vg)8KD|G^vfMcGX*e0j&e* z=4Y|k?V+X1DC4i~_Jdoki!wq~0<(_nfe7q6QwR}2hPZ(OTU)CVA2&nH>lJcBg%)@6 zJ*&gLjYwF^&C`m6o2$3k#`FpOKtFIzQ+6|6!V@4qHdSA(Qfq)uxDY)xj=PoD4MC?} z@gO$1f4-a#7@J`>ixDr6FOPye*Of;%-6AUI=gN!?$`A?r1Vh)ZAEydoGYPGOwwIIL zKRCqMcdL(H%2I8Wd1kNqa0ANfw5Cqc}Qf4$@_9Ddxa(XaRxHv-%1qtmP z=txGwd0Ur+<~m)d)=gEsG0FGfm+~vYA1{e8xCzs_D=F$N7*``Inn+Gkd3mQ-_RO7n zuKz;(NBo1@72g$aM<5I*4Hk>zrg1eQ0Cv>*8_};t*0d<@Kvk!;fp%{8jdby3dC@?a zv8ScKgRr1j@fj2Gxy&uXg#SdN?ETh4DkkF1+R8R(1YfH3B;?_*~WS zWe=ojfJ8(7m!59rHFsL{jZ#`36Tg<0x(POQot||X7SgXef>Xa;+c)46Zh(!hH*o8_ zg@bws3VMRh`Qd5QU)AKS=UmmO5){jF!@!{`rPz*rIXaWKUIvM=8%u40ip`x% zInti5D}*;4zYH|Mk);km@$Q(L0Gt0(WE9ldqz{zwxFG|lr8=9iX*%Vzlc#DS(hJB* zY!!ui=7+WoMf=vSrcG}Ge$#8(v5osxr)yjE4MyM;z=>0Q43800TvP^5EUA)x=`(QR z(5yRIT*PiG!I$1r^R#4(J_nb z;@fiP5klcW zR#FR5y} zy?V`z&5jL{NAW=(nD#isH1a(#ZNrJS0tP5P)c<>Ya3UK@b!wRF3F}vKl({Dx)s|IO zY$5Oa^F8_a*`5AZ4d3-XFUGLsIQT#m!Khg2poF*D8|r63^wCvkCJ6}L03Bn`+`8|v zYOgC#TrO(;@ExACAEV4Mr(-u45uR#a8Zv+&M5x<$%MuKojJrVFf?q`vb?8dvW^*Mr z3DsnF99HETvj8&rJkY@uHoO#pHIZtB7oN#DUCY#SJ&&$enn%37<2bIvoPFTVP%V?A zsm+i3*)HoqqVE|v2NuxX%OJCIbqOfSNJppEk_70#gIdECIB&XyyPMw-$W~L!_3IiQ z?R@!9xgHl`wpd{j4ki$QzPEMDfw0iZ4D?5QhyhJG91h6ZHD-PI@>^Yi5=6E!8`jMZ5uMT1e}5Z`TK@WoCFX=-e{RH52m)@i8(s z`)`r5Te<|mZPx-ozZpu0?AsOwbf87bylTD>>ApBIb|DI}2};ds5%bn+K&m!pz;mmp z+ppT$gW%X$2co#|IhLD+>Z6w}4d()WLF57*mzRW<*CV7)kL2uG4-hD6I^McSKfcn- zAq1*UVvbi(iGqIyVmecAbq*IXhqDx?YAI>{B*qlc@&s^P5ok+ z_~!+Omn>EkbB-fA*4A@GyU}@p-`T2cUm6;`XaFr>_d?EIAVS0g1}8ViN~S`00^j<8 zC7DVYS_rv+TZpEnC*6%DS9WjyKoqVQv_`V0=G$HHU3+~CD^pAz?c~?-=tA2j-z73w zMw6HTn4AHaTtz}dZ?k6;-x;U!_kFVZHYZf5Fra|&z2_EXoOP4F9DtM^k_4cdr~&4e zt1=ZWhQtVC`)KKgUsGWRf-f$p&tT6yxJ&m$C3nZnR9jUj7Eny|P+AHIrb{#hPV*=v zXYd)6mh}HEEdkwxLJYGnI0|4rDDOap7Yndi3Z=1Djm)?BV^XD$dSyiwPH2#0PLiFq zdFmGRFzMMqDHsjX^gV?MHTc^n*Tqgi#dSF72X%czK>|#D>-(L%-oVs7S7(Cp>}66d zKVB}kltf6DLNKieQr)oz6iYvD-%^HfavlKt-MvDe6B4i)ArydAAi^Qv#Azqu9d4EC zyYyo8z4R>Y0LYq{Ao_8RAAGN2%Gw!#i!Z@rwwJspxeWlg7%i&EOe^m}8q9D4G0s5W zaYfrr;X8V9`+TIMQ0iUWB*ut*YOyP6Fv#slRjvOu38ne9PXEcD^7)zQN&yH-Ja)?2VzloNO|UC4d2 z%Ybd*&g;HsL@U1{l*#Q(S<8FgOr8?Y4lxn<^ynl>RfUza(e#VYmMKG1vM)lM!4vs> zwLP%$rXWTG?N1x_IVQ>dSnp`0Wdi3L?}Wj5S)GmLv_}kFncfWA3pcDcmeY+Aij)YK zk;A^r(C&a29oM-H0yICTi0a)Izz}^LWGOsJg2x>%KPIF=IHp8(i5Np_%00+{J54X9 z%!f}S)p};sE30tdHQoZETBz}EAsHZp?6ES$yxF8Nqm!f`h$QkFEkS8rbSsM0$IOO~ zW5iHq$J~mtY;m*U9S_0nKasP9m^XY0;%{-p%~ zcDmJdKNgBol9>bCznje-D!l{?3PoON61>BwQq`DV3}{VD=l3FX7l+dIVnPey8Dd@@ zJ@49evb+@yqP#C-3C@adTalB!S|;3s#h{RpBfKg8?xf&~pe8)BnOgjv#s@zK}nsG!GP zZ>@~8z(h!Db?#RzyWU<|{;IvL>Q+?hg`0JRR+OOcY^el%iW53(00K?zZrYpL^8w>V z@@n7c-8AJt2GI9P6Txm8^~qikagBdAE_t5&%W>T4GvdlBkW2jt(0DaPVbL0grBD+V z&DOp&^)Mg+c*b$nckocWk>++E#<({7_d$%{H5WO)*`K=NDZ4483cSIqC%-`lG?jQz zUQQ#DkWWYyzV5j}4aIVN`t$IbF!>eeKoPvG()P84d1E>FQX4fsJqN`ec9a6So=81J z5E)P)Gh=-tf%Ugo==)-cybStL8Uk)bkub*Otg7QJ^DXj(d7B}%Ry^(`X5Kh#8H;`Q zsuLpr=5L*P7x5B!^Hr_*lwdICw{2p&SBU>l2S5g6cv#xgw?p1{Ly=RTUfxM91sn2W z8IYfx4>l?@bur9%W7#gRHfD_X8y%co9|mIIY9RN)6uhtK1A61o+o4*gOMo+rdy<{x z2^fF>IkuVz2Qr%n9X^dsTZ_FoAkpXszn zO-HQnD5(MWQz?@w>BUIt>sf@3GoC>*k>Zf~dcrK(9>N=i-h#C{I(5dPM*)dRy!sj| z2uOW*?%Q$#3+D3ln7%*OD-98xncnoGGeRU7*KE~7u3BDh>rZCAbzE5&r8B)_OWg(9 zq1_z$dG6kE@VxfDwj0U|=ahD-LLRFSVFYbpyo|MgcMiMTH~P$M(=5|_^XdY(`Nr}K zV|dXm!o2OU+6**-%`CFv+ls(_S@~4eKLYn1{LUhfMC3)zr8Y(4rg^h<>{g}+V4LAe zgq-h-x>R0(hPEJg(}eh0J&5w8lVmTHKQC6?Dl49KVvaF!8f|_}P~aNkkCI6~jS}U0 zP};C(ly~TvCbD5zw@K>ILrIr;h6HbXVg^rE0_`HH5S0QpFptCBmk4av;w0-I1wn5z z@DJdII(>{*CmXCn%s8@Eqx2y+E#?iVD`cO6(?_;{1B` zh@*aBU3%hT0OAFL;kqUMcS8lloIV3#^!Q|RQ|bGJyJzgUxLB@)FquJHdg^qZ(2qx^ zk4&+a@BT}>vwr~$>H}^EF~q~4bw-^C7shke+UJOh9!y4&fRgZ$>2VE~TBzyox1{4d zu!utShu?^VJor7cF51HNBy(){x8NTLNgUA zPD83~e?8;y>`j-f5S}Lkcf}%7fuItn%8&kjJMye#K@Z?aW}ypKDs!P*H0l6EH7*Dm z9gifIfI3_+R`mstog)DF+(F*~!T{h!IM7%4C~pyJgz1($^pOB^`YM31SA~0bOU_m= z6g7@_$sO)FzA|!m0pFjC_Ji8E>!u^6$3Tz69AGjJtD$?JK!?FYN6-r7a)cEDzz}!r z^xa<9aYlQ&gJ0(PwN98#7y%&j0M@x(t!I_oB3RZbYD_aX5cLvd0&JA$r=-84?jX26 zB{5=Xh^G9S9$oHZkl3zHUY|CAka_Wy`t@2M9DNip14N`a(A)og{OR`7c>y< zlV(`+goUTK05~K1gs8j4PcZwF8ZH)z;O-M@$Cz7;Hpn5sjN!Yb76c@KnAPjU4?uar zfeIEGQkzDF0z6}{5s-LmP`TsaIuc(k;!d#=fXv#RH^ZmY8_2!)CjiT(F9B@tS*BXk z0JT`G0E9ING?gyxS!2qLzlQFE`+$ya5OKOGRNO?eoE>%J33PqT;VeKdXSc>&H63t3Gra%^|E6Qk4lY3Q zlNtbGjhS0}QX%03(B0eaD9jM<91nQty_7o+uG zbsp&zW0TF$-K&5wNgYeJPM?DaDTuHtwyu0bdm9MU z6`w_!>D~8yI@}5EJx7*!Hx&}Y7Y%s=GvTaK9cEyLE-l0(p6ZOrQsn1+isgjofk&{H zw$FhfZIUHdj4G-CyS{}*{8@hT17AAP+id3Yi=HZ-2FQ&Q< zTx+vV_iQa{>Q_ZMrZ9}cz>B1ZAiDkFZYi*Led>l+Eg59ye9Dh4f6SaoN=zk?%4fDO zZx_dKKNMhRw@ycjHB>CWVAEZ?(hV->am^@4ZXyJ6VxSZi9AdR+OrgSgc%2YQ<&Hx^L z@!)5WTs4GCgJ^JLI9eZKWLQWZyz->w-I`a(BlG4YRkSIArCe#q`#` z4Z}y?C9)G`7-g@gSlpXa_tUS*2^=r8s=@w^X^ihg!367szTZVIM!W>qE#(=2uCeuR zEd8IJIk?_ijd$UV0Kr(80In~4gBaY) z<|}~je+~$xZ)aUQCu#U}*c?++yL+TSv*mt!A!zaX3a(x&%~gf^zX1EVD|NXVY^K@- znEqSyMt62mQajKo4L5MYRIKC)MnbX+lb8x1;HU*64TsM^^l(xcYCQVsd9L+PXROnh zV9obfPa(+u=x33j!*Bn9(C7hlJjHTRYO_fd-eG1sA?_}8WJCUMa8gzSLU+uXMY0c$E`$bFU62zaO-_k}oKg!_2&b3aG#*ses*Y~C zo! zvi@shK+_i|`mFrsUH+Drc3%xBDzw*h8h5luKTJw9^z$3E=yW$8Y!+dXx6)R8KKU*f zOw3=k=gTlR-DeUbgYgYSDEw*VxB$%0*7vs)5e9S;SCY0z_YIYqM@sU%LgZ>d8MY4W zs4+lwE%r3o+Cx1fK+N#MWIKo9-cm}ZFec%i)vL-T_#c*13X|*vF3a1p(q3lO z1=Yx6l_JC!D~@L+{opE78@*65@>Uyj!P7&uSgK?nG-TFmjBtM4+xi?W6N(Q5X-WHI zJtxl}V}Ayx(661x|8{N#@p}{Wgzv0pJ-nAK68FiXPfu4g6ZD;vI#K)1shO-#Uv z=?mrsPSrVJim^#dCO#!~AO-EQ7)pil=RpM%!+_64Ad3E-O8dFMQ8@eUe+nu`gk|=J zM$0R*`x^rqPA3PiH9*=LQv*YexLf^(KraCp%I@{n$nKtgmb-xE&X)#qhkCjkiK$b= z<-RUZm*pr^1+IwAyZ|(huYyaV+&n-_t5n*0?rYXho}iT6vlV4|XghTkT&K57Is@+> zh8pw^ZvdXQ2HddIst#mUvR&=QUoHiPRZRe(UCmUj{)FoQ1ZbrpjzRGZZUl zAHHGxvk>@DaP-#s^3u@aZ(A3H`7UP5?$5z7tL1}QYDbcnXqMPviJ>Hyx#9fmv~oajB4PG1_}gBJF#ZL)vz(Mhrr4ZXbkZ%@ z_vcdiqxg9SnoY*zv#DaY+aU-W#Q=2}iI=p=)aGUz-JLaZ8M#{@W8knx5Zn z!ElENGLmz9FZ-W_a*PfnlxA#Y+27XQ+*ESb?NU8;0F8}U=M}{}9s>wK0j^#RjJsnXwAt@@c5kN;FLBd*nF$p6BC;fBMS)=_~tJUm1W3np6vr zfYZA9I9A{|=7=)FkJH`PV(*palXPVY{GZAv3JsL3Wc0L)ftTsO;M6!y0a#jC=6C)4 z;PK7)bGU_E>3@lUi(W0`jf64V>BEp}=u=Z6!DrrklUdjIRc1e>GwDN{?PqbyD^QnS zz_QBcq&kX??ug58Bk}3+ui3*CRw9FA7r`&uM@lY1B!m=az9Iuf@r&XUm%q+F-Vc17 zae+>dGP8=iYyRU+!u(^)7(Oq9dnjWnx1w|_j79i3rWd(ffj2f<@@gA{7zyLSZzGQ( zW|`~O+YpFZPLT;bep>$jZ~#C>tiZi{7Le;pVi&Wxi8m^9^wMYR-ARQDG8oETp;9RuPh~t zD-&WIXjZUvxVYFda}hj_?tUzLuPoH%XbI6a%HQ1zNWk-#3oJ6SH)*nbUn-Sf3>Z(m ziadQ1hs;j6m4|mwDDe{M#dxJ`#)^0yweMwl!z&iJT_Fp4-4C?O1|$zd#F<Egn>FViEDW;m@jkoN=p>xNM(6zJ#iNx!$|)n|N4{#QS0-;uc@^GbESPeVbK*( z>*YPs!HGa!5NicDd*cl{DnFmW2ws8-lhx{ImKlrQUNOdN6ZGAR-nnBej;Lf|TW5!> zpnS=S$r@CGsATo@_s>An?3L1sLh^)*7M(`Nyg(o2LuEHj)$YiaOb^gt=?;DY8cgFM zI+Q(T;LV9+;HWtEfJ;?{FeH+iC`ug&YWD5l9NxOnz@g0Ht&Q+>pjFb`I6f?+u<>s8 znEbzJWoaZMt`7(FZHdQknQf$jYIuVCJh-d;_fMBD5<5Qq@0xI?vzY9-ocQOxm@}Py zr;f-oH~P4H5?~UwZ(7A^?|_mNrth_OSfc)*M?+h00`JZmWpKY+?=LMt&on@+T=4f` zjCdo)x$0I0LiNTael}=1+O;BGPC%WMmyDk&X3~RKUcT_aId(|m#(PRQb6#sRh?V$Qg@HFmwllTuh`IR-@ zPgm({KjqwBt;zIQ4L3haj5B|j`|CBdl$VXgZeK!xu~SB~kdVYcdI`f!p@Fi7)j82q zLi`~_Ua$VQwPj||<^E+-xLGUT=>cCJLp?I$4WYm%KIWO;J}GCC>AaX!K<5OWqv+Z# zD=Wy4V{GZ_u7U%2?i;J~;FdJN?&{lksdnzP=I2{fS38s7jjm5!B9|vzvg8xs+Yq91 z7)12R+IpT)>xQ;*a}K9-GB8$qPM0oia2%M!>)MT!1hC*m+s?ivz-+n=CAXCcx(R$d z!W%*_?H2F%$-2J?ZR>%aHgn^&Z39oMl65=N1_PoM_B@L@$HI5oJevLjAW_GUH%DB* zTB|IeLHzcO2k||AT6!G+c`ahTqc+%pJI@6mb<1`q3mr)bsGCF8=~8`APCoX4#=Q?d zeW}#t(=9^vW=S_S1|0(9;;7Y8;%lR3{JxP$1$C(h~&>W)(tL zKnrF~F@z7y^4_3N<_R9pyUu@_3dhftV3P&0qsi@x#eU#>^Gu$tFXUyw1g83$MNcoV zo$DA2w$ucAj%3&c&RQJ>?z*#mf8;);9au1D0cnTeL1kcX-{(EOw8788_%GgM&VK~v z{F-Aj9E4Dj-q7cYgis30cpfh{1WK3LttiR#_S}(T^CH!w9k4{m#yu8x5)nv?pm2Qm zESU1*|04W#a+*UvD)8{a?FoQNZyJ%%2gv{a>Df*C;)Yeeiz?4jfGS5UKHa6ew%a584uUM?D>69Jx92wGKkQ?l|}kLya7E3#wUk{N&V+x2xFSdgZE_HdNtI= zpDg3``w!aGTSqy9o$1kQ{xgWMeg_?VfW=NW0H(+xhQR29YC>@3k^XU~65t7uw-8o} zgK4U0$5;uo>zI+z>KGfPK*Y>g(!FqhlWno_5hDB$KqibYj~SEu3!y{HW6NK|4R2^n zh$w?m$E#&-ii{a}(_Y|{CeZ1Q|CC*FD%_dA?Jq#L`ZFXJCRkxx_vb z_a*RURmR}QaYP=Y+%Xs_CsoB}mG%@@UKtCY&>4$~u5>I5Wl`$8KV>J=8i4Csm%p6ruj0Xh*4mDBs-1 z)GBSOHN0ntj~$7D^8Y~madnFX&~D_(Dio^^;1778YAJeRA-Q(UY44%3FsL{O{S>4IXw(#RVHa{#Vn57zLx zo{%VjhvwuYPqLSTD8O4~f%^=;WtR>qsmqoJ-mvaJpU zQZ^Qh_iDy%o2H>n<%BR;PzAR4fD_fXtGh-}+Y1Yl$Lc>sG77~Y)BKtU83stTWCK=$ zw#-A&vav@&9#7z(k@{zlC()^mb0eC7d~qR;LVhWEYrWPR&Jy?4{d;_^V9}SWHlWUQ z*{gKoyw=&%246z0znVeE)deIA6&o?R;&rTgpQ)l#enQC&GdyHKsbJe>QyUOCCPF&`CA$zq$dlFQ# z3!vvJMG6!YvZ9WZVHNfwkOhJaM6pQy3IfTuNTM|J1e~(`gg{7{Y6b`(>oRt=5`fN` zv^ax#U-hi*@P}5}eQeJsJP8$}K7ePIf`sDpG_*Wzz%~DZMkT<*cyNpxioNC_UjpEp ziv&NYM?24eJz;J)v-39keTuAW$j=Ar3PTY+;XrYu2F84*T3a zfwusQ6NZ^(dL)$^7WciH_FTdNL>?WES3#w??WpogQ%6TS8KY%j4`y7C*81=4?tzZ} z01n05FarjAurEw%^IPu6vi{pN37g)4fjNM?Y{$mvw$QX)K_Fht7svrU%A)vT+Gv!Y zaqm9&g|SCBL+3IdfrqLQ!h^0GP1Uk{eq{5UdToO;Mz*D!Hy#`<`+g?DU&N;8j4QI0 z*3=NnEu7DKeZOg2diCZwjIGU3h^PzltW1&AEph>)C$W)ppt>nd-k378nMi**Bi5&4 z#kh>%aG_qC(t#b7EQNH2T;FMSpXKY7O}5aXWi^H_in%e7rdhtGpEBRUNWkHb6tYxaD-eBq>zjvkUeKq z3(O3wi&zw2JW)Cw?*$FhmmKOf!$_i9+~c5F$)e;A_`e_pQrp(RBNFU?iT)E*waEO- zskFrKGVtZUybSog@lU&-t|=x2&RY|&&Sxg;a%W8k0F$DzN{*A~A;#PyrVaVkF2&?} znW(wNpQv1EvMrBTL{_fZ6I@^9koidCrY6S2fr?_hl_feG6Mn=l_7s4+J#T5DPBMV{BT8mkEfspycS%wPm zeBJZ}8Rh&AP3-i2U1g-Ju6&T*e!3o0UKpb~`oMxb7IVY-^L&2H^%vQ3LK%hleD}4R zr%%H&#AinfS{Vk|Z9J=66wQI%hHvKepDM81*!%R9l-$xOXKO9S|0ECoz9Y7`f%mW( z1S-r^6b2QS^E@1!nD+LV?2p6!7+8lTSnQ1YGWKor8c^}#bWO_Kzlc< zCtS2@8Ka5W4yNkb1vHruYNV}WK$b{H@;5>nX>EO1;v~d8;*`&Y&i(1?iGAZA!z|dh zG2=>6p?~6diVBb7%>*m%D9kyFM!n2MxP_|_Ga>%8H{g|z$Gari#+?GpH$1wZVfe-q z1S@`tR?n_d)GfEh|3#J9bY*sCVQ0!3QHiyIppeB;Wf9TD zJ86u%NFF9tI}R4h4lqwMeDA<11|Rv*X33p>CMrGE{;podbI}t?_BG7CV{Lj2KTiFo zO?}#KjV}zIejcSVQEOubI8(GuJ9IB$(83){XWQ=H7I}70u^^pm^2k{3PIcW{f+VE?_d%FNW^vFv*Nn8i-BaZ!tnYu}oPou)Gmmq7SLz68krFI|CT+)T1z?{r zFJ$)I280ZvUow1Y%d`yNg;TeP2Vlg!TP4^8FYvwoitnkqda|qdCFxh^(p50;?pi#M zCdc9ZWn;CY(xt2IMG3hIkka1J3RH}%*`7-P5qSkO_d9`GVnGW0v4xK>>(Lak2;4#l zvoGsY%znf+x|2h*N5;FGS$lN~RG7{;YeN@Ct?RSeI0+%sZHmX8xAT-@E4-KRCDTtf zja|m+RzW`f4VBi-YZ*3ryrhcuMcnFo!asuHY0aj;1`&b`pp?&~%-9ICfQG}?gF0YV zjOjP8_|Gh~vHd5j2pRCsPyXy8!IprK(-qN9l>bD!VrdfD`|72jpRW8b@>j2KZ@sZQ zth0E;NV2Kia1pKNiYi4jL(S^L89;A)fWI(~n+vfmMXL2XXW+`sX3#2c+l{37J>aLX zkaKpInbFZP*i4KcdoxU5sj0@JIn=!yk@Z|*4O?y36&g4VsB}pcXyF@V4IP-Bg>p?F zTkup4Dp7oJ?G}5jc`e)gGsI>|E?2SI3UPLe?98%>=@)~$NC|gQR&Cl>$;NFh_k28a zifeq~5Hk&asP$Q}QVVux!(52}%$&v5OP64ae8Y$;fL;P6*&x{X%}214-1OCDTY%wy zgSL9PAG>Zm6ioOO-k@umUzcEcE=Zm~!Z^4B@%n-akcY?2OR0@?w56r6Z~oLDd7bC8 zIhb`Ec=oXPtmTKe8#CZlZv)8#V+vTX$i0oMF=s$GzHqb7>ei_g<5`OjQ9JoWn6Gs? zq?hcoT+psj;pqp*%%NK|X(K1|7`Fb9^fnciDeJzfciPt5UTt|wK*Wn}3MC{ljc?`n zqD_3o^Un4n*NsULUwrAy%`JuU9FmdpG3fn$pOP1au@OKsJmQ$^0hr+q1!je6&{0(o z2-zG%8h6lJDV2Lphb3tJhB+wavEU$6hyzQBIiqmB{zHu5Pua_7Lw429WJM zyvgcl>=dTMw${_qon*my=$YrXwnTSHhE`y0{ywGuSJ?GDVg}G|2j;P36>NQ!6~;9J zd&kY0uTqr-wPg4h{>;JM#cTM@Y`@2&=8~qbikiRUF4Bh-D4Ox*gWOg`32TQp&aULwD4v0clV4*dsBZukPy8<`B%x}Q-?%6&fuat8AAVtlXYE^-#Oh;w~8cu;?r zgW93XR3e9DrMd2rsa2DBuSM^C z!cu%B>bL#c@wY#FGVk=W@>b5h>m|eyqI;d6&A6;!-u$Ev~!eGT1sL4vC9#7cm4Z>7I}iy;tl? zk~PMlt|ksg>3Ujo7PYL2F}ji~HK&!6vrW^yQ@btCZA$JUaSMBQL0_{Ud#ueqz!9c;7l{9K1-1eqLZ&ob>aJho3nVi<5PMV5pEJ00l0Y z$9mM94E0;upRHjSg^oOtcv6NIj%?}ok&fK~oYk?UUUWm8W5d7x@Q1 zic$7sccG%Ww49)!vj>+6ri*=UVI9gbF&3V@RT*te-W`y0ka_ycPBMRUDmo+C%oiHh zyF?|^9t;dOQ1xRS-e1|}w{)aP1H*vhzrgBT>lUV~YVu+G%Sw!F9rEyHm9AiN|1*|CRCXe#m%**KQPERD)XTufU?;6`pIDO7SD;@5XVmI9e zIVap7GVwby2l-&Qu8gbkUs|h?%RV8N5kQ3F2d(={w=jbUOaEoe2a6ZNAr%) z3TR3=F+G5T9hncN@pq$y>m8CQpodd#>Kao_Cc-Vm>yGUqFbRye-?Np7jrDko<<|2k zvV?JNbG)ER4A)5hdt;gy!*wXSu?07G^piGCsW7JF1b?coPkivS++ zDy+P9+QYAlDt?-}RBZ31;Tt<>z7YB6!BD@Q&$V=dNtH42+>niA`Rjmr_P%mGVN8yJ zSKN@pVmh*pk`HGxcf#LLcw3%+q^&v|A#N^s8MKe$dE^c4=9r%{GE=x0lQZwIyt zd)|Uup~jWU?XKzv>~(i;g${IBnH?`{E*#vQcXu}%gX$HHt7nO)cfW6-G4;DjHmgsa z+!-}zgVEOu9Ks4(eOG;pbq@^W@gvBTMp^_f8EY^--mU>M%N7Ut;ZcNXrx&+Kaigfc z%~OYD`IutM_Z7F2@oap?9RAqZ?$H5!apkl2AuPOMbPY++hRK>eMNjf8;x0Lu)cgv9 zG5gXs{I%Vycd9)g!YK|2dkXb7W!%cN^C}5!T98xU1kK>9&eI`_0=Qs$bD~j|)aNXQyYv; zHatWlS8lZ9h%8ZG+HAZ8Gr_dINb?M?`>p9FSNRhyZF4xQ0RH$IH`PlfPw$(@P zXSJP}(8xVtN%4+`k$d*#s{0ifxtM()iPE5UGDsHi4&k%Pim7W|^}c;f4siWJO`}ZI z7ih=*c|W24mB6VzXwC=Dem;YNTJrjFdhs!svX+@?OZhN4VpE!a%-MX_!)gv;^&N_v z-(jtNWixACuiUUGto3AJfA~oTjocN|LM`ra3RT_2T^wSUGx=9fN=vViwpK;6>L0>A zN#`Im&4&_9S3a3NTrzd9buIAv;n=Ixr|HgHWx2S(;I&AmUCsFDm>=uG&#Tn?!U%8c zBF_*LM%;W~U>_k6WE(_9_9%C}}xwdeO*pG}($Ss*uuGS ze=esCkM?tmm&ePy?bEIt#fcp0nj|GGCd8!g?=uS+YL}YhQ=k0vP|^*`$C=1o{4M5bV;_|PelQJU2*tS z9u%0yzmNStJmyecc_cpP#yY%I`j!@Jzn=`8Rzj<+OO$hR96d0HQ@n>#G5gsxWr+G> zj6!hg<#M@~i=@3W2Ty%w?rnN?RZs)&UTg-t7>z6xNd^FE{q$ktpYC~NKvD3E3t-W= z{OysmW9EBTVf;{qPVXFEpl`)$F4UD4{*;Ab{P1s^x+6p+-(f-PRI8!QrB&6{9MpUG zJlkj1rctZYa_*03r!%7nCTony+m$P@&3Pb0Dl1*ZKujXQT2=^f^vAL{nuFN*nYms8 z!m>>)!K>J<7P|vJrhV{p586uEkuwkxJHn%Fb!6yn$6elRzPW7KHjI>8$w;PE(SIxp zR_&+`G_VY;AAxg{ed>Scpb;$gv9$WIp*d}e@8O%nD=oR%#=3fmHo8jcl@ICPfsc2{ zuKu>Pl2H5kokb%NZU64pyC_V|^4CKanH=Ta^P0uFe-uGXu_dY(CLwk{45-|+NbjLL z0VCOX_ZTectOYhUG0QeDJpXb_Ty+3leM9L$(SUrWg4eBx!uH+0)+>B^g1AQdLU+kt zYY%?CB2>`xFP)L1hI6`No(RXpiwBgdXt{nuG#0B+_<94T@w_9Vy~ENraxA*m~372EbAOj z;2=lq#wj&2GNnBStMZ>JuGQ4mWIfU2#yuHl|Bv$JT7C=eVOz@O|JazEkV985WaDP- z)|Nrvr^{u%aK}{-*MNEWN9}IFWTTZiYtN^!+i*u2SdNg8yg(DDB@Lkcn_ru<>HC_T z!hWxfqXi$tdqv=53$^EA{V>S4`BR7}A00+l&n#LF8$r$cwt|txtJPRRLzB!8t~$3* zH`ij7ZA~(_w?1DfN9ADm&reOuKuoNTCeBzJZtnHT$?ur^1ks zM3C#IsM~D+F{LEmO?Ox5wEgTqg)D;+lnq9a4mJRhI3Q(Ql+>ipwn%_uYdNSJ?0S*# zq=Vl!{Z>z@{R}iOov>5+4^fD7S8N<0A$WcFkr)Ka&aCxq`Q&;lC7fx+yN@O!(?${ zph@g|WRL*;&n&S0Wb-{XZ3w{e5j98*;kq$lBUD zn?MMVDOUMXN1#p>1Xez-d7a}Z1ti}g^x(8Q**^^sLj&e!y@Ci8%Sh?ZHbr4u`t^<>P`MZC-^B9L8x<*r{y5lj4Xq75xBm5(DuzrOsi*;Uug$M*;2NtV z4WA*Gny))N15(sau$co z^i#q(;E*4!Vm>24b19W$D;m#R4skXjyJA=HC^rqus!zRz-|b$gjBd{}(7`=XVV{iB)S@_G=hyIJ z3{RT1zGVp3wgr9}xwU&uMA`$W_U21udw444iyF)yNuJ{8;m?sze}o#pwOnjSHI(X{#E(K&d3s8 zg%jM@F}89(1`!h3^P((18oyMnw+9KHOCr#dl>h zj;^H8gs_Xa_3yoE^V4Wgzxn3h?dcbY`1=yd@hNGS{Y0E6G+Y7jM!I3aZrhAC&NZWY z>THBFc1o(ivKqYB)q#txm{T39yK`h*5yM~qK)BORza}0(!R;QET;8gB`Xa6OO~-OVTWZtPw}!j(KugMca@zWFH~8oFu-wXO9o>(X zS}d@g@@eNy7&{RLJgUdg%~u!_1-Hbn<|v&xyrc@S?j!nluM9ctM)ke&^N*6sPZFSb zIwC0BYE&Te0a{8*fKp~Q?M0deC;A1!YATpr3rv^m?~c;b3+C4y>O35fzZLUSa3FHs zc13svD*Pc;LE>!B;>Eme@n8;JN6_qj9K_avv>3+r^1fh;=tuv_4=F~pr21wk>%25bcZ(IJH1Q7>s!O&_<3_v z+ne&{ZV-TL5_Y*EBNH4Iiu4|=x|3;7Tpp(*sYk{2>7#%5>Xpk?6!P^ z9qZh1lUv_%jcAW6_Z`_z^5ROw=s z8?$Kt2r(L0i**%cN|9RtEwj*bMZrUQx5cP(jia1&?0Hx}lz0~2;NNI?a9YP(FaeDn5bTg5#Dj}M{w=;ocpjZ(drWp*luMKi{IX5 zgY|{}nPE>m`B&UeTVXTTc_-@J_apqc=gp9E{t=~qSiiPnG?IUbH2(PLqw4u5xvVA+ zNXu98@+WbnL|z~{=01G2*WgHIt%D0a2@w5~IujZXND{~X^hN2duu(ij(`4-Yq%>T& z7VL`2L-T#L4Wahd3N>cY-*WXK)1HnTI!Adb4lPYf|88mWG$D>v(jYlRWeYwM)mCY( zsF;&0(6`lH8lHcoyCm8%!l~%0Hvg*cHqEgyNKcKoQcZ^_mBnvo)`17=05$@RDly)r z!*k`h&~syv?W*)Q>QjAWcPA4mk|a~@-FPQ`M1Wm>vo@ZB7=wS$yqjbZ zy*Svt`imC_79$IW%N%sG0AY<>xPKb*9?a1GFo)v5p@Fio#TwT*6e=6)PfEdLk<*1) zOpR3j`tU%0gqPtOhH;$tYcXnhKRpInz|b%;5KZL&-)ONVID&1zQt@~>fpg6sv5av| z?cK`1zpw?a#?TI90s2;>h!Eugtq$GD`GYcWg?kjn(-1oNFI!|_N)7a8V_UhO67YnJ z&IO7Y7kIcUUXQr&HWTgT>yEzYqBn|flYLEh@3$_JE>ktFEwrUYs$8#%Rq)<%wbhV6 z_1=}9g+`Tx5C~GS+o*@eb&Q7Ryx#{AU<@z-u%j8R{b&(7g4a!}U*X7Rrxp3KUEEX~ z%`!Xtv5ZeoZLt$9Jgi0dQIjwG-j5|7=tIS~T#TT*hk!#3u~h+p8vpK${oNV+yP^Dl zNkdth-H4V$?8pO;BhT1L0QpYjSq3c?daZuCgpiQq?p?CV zQ2Z<B~1-lkZbnzYNv%W6uOW)hXZ*_|V z!3|w)Rr0T)W&EJ&vc!V9@4>I?BB_M{7ylVjIVMiywFV4Ww%*V4*=fO4^1>j!H5w=XasuJo;j*0#Fg#4@ILw}0hc0cw* zMZNfx-Bl|%_Zz}jRVDuaxaqoN^ZoLfl>-+jESzPfc2L5-XL;n1stAbL!hb@{egm~^ zeLg)I$MV4qZ^9+rZcYLs2gzr0J5pm^!-2s$eXuCz?U$em>5Zx?0Z}u{pv2KcLEbxr z*n5#yeoI_M#R<{qnq%uMjQokh=yda*8>TK&Jo5?s`AVLs@A0YWpMkF8Ij8tOls=$5cd{33;GP(+cQ(k=qV_CBVU9nI!3rY8jKD z^6~_GWX|5GwoV73Wt;m)>UX%QUcJ>QkJvtz_Y-z7!BVL6_p$$n$9$Oh>vOYJSsh>* zVK3_JlSPqce$rYbdIl>Wrgkr~*&Q$^p=-gl(w-o{YjuaHx7*KjnZb)SR_mEld7Piw zvIeR%caQH-*ph->*frX1E1i^WmfnpuZ}YyfVnZskuku6$=eAu^Ot^RAlvjv*FR1O7 zdV%KLtV+7HKWx=WE|vjb9?Xj5{1_Jxp~H!@URvVzb2YqbQTWak5g|wjviH+k4G^Bl z(jhx!cHXajS&;|=&4|b}VCJM7Sz-51v*L?s2HxvZ^;ckeswv*N+L529uJWXts-|d% zqQH3VD7pFX_~Q0?!hBt1`TJ=9<0DD>y`1D17vS%E`1kz$`$_-1iv2%Rq5UTZU)Qob zB1nz(j9m(=sLi!pGf*ado&g6)7bL`da^m`J=(4VO6nY}m^xNy31*cQx!dxIPSH+(% zL45Gu;U0i~^u`WYtOLS}MS|VtA4rWYYE(s3f;^N#yYyc0^?Q2nVn7SFCU{g5#w6Eg zFSxdxr+CA8;Vwgt+z&Dm0p-U($&nKt!ouE`b^M!U(|_{D_mA;2ex$qVWS)REW(_p% zOKUrkY8wjQTX-ew_#Mp`zpLPae6cJl_{ z?9K>LVycqQhE@pZn)4JVFBNX@0{jsx=PlpATbQdS2j9{hcT#_;;tUqq+1*Z`l|2(A zkd_-VQN?vkL{Nxl<1vXl4<8;YtJ}tZJp0xRirdoHIEmYQ)}}{S7bZu+nSA{=<0Agt z?mQ+#uQ^Gr8{Xh2JCl)_;{XnpTE#4in8)&L4wv1ytMT9?ItXAX#S)-RP3XoPs+vD> z(QkzKJ`dVY9722@%UJExDQ%N*4fbvOoPz)_zjlht zc*3iEYjbS|*-jt66kLZ9Z+dhxwKnx`ew#eTUO8D3&juKIh2)EULRFC~mqVc4TR(x& zTf9)CK$P+ia93~q4iF_)oT?hBJxK(bCxeI@_cAmg??*B~w-_;g|NfNRFN;9i&3Ns4 z{gB&=J>Z$xhsSZ>rUCq&flNYYq!JQe{B{!$JcRbv@8JBr-K1u^ChynYy+^Dn^09Gp zHq0bE0?R=TcX9VF<9AN4j>caaEeJ%m$AW)wum&;f|V8;Nu55-q!K_HGQCWHX9< zAuh`*?{2p0^j9FdHF~4494ZS}?lLKG={#%+w2z6g^B7)$uK>Y0Ns~8hf1xwi5=7xM z=8o{+GFF>XPERK_cFy3FRUU{R(JIH0NUjM)jxxkB@yw1QYTO#+teQ8IRYcaNoX|%N ze6H%p80%BoTI5?zCA#<0BB!4%hr)PKwWo)Qw<%I>GzNK;oQ~pEb&29pc3`#2^X~?E zb$(?`?aXk~?fI|gb#%DHC>v65=Toi14d`yYlZA`a)P^3iZ}ELkCE{4C!A(G5-T?bT zOwW7U!WV?`uT^Epv^V$dCXSWj*WFIHMr?8}Z<4IMpYK9)HfU5z<4@%8CiYrWQ^=+5 z{p>g)d>HMqCBI;cB19LEwBDw_%Ad{i8UnI98!|sV4YL~CgeSo`jO7zpCUkahaFs@e zD`HO9>#f7FB-Ihb$n*&Wq}Sm8Rp}OTR$cYGybsM-OPH~mq{E#%pF-@O%jw`5MIr(; zFwBDpi1ba~i&)SVXrq2Q_aW-wR{+=#M;^({7n8!cflvG!q&c33Bwm{kk*{^V=Z@GO zJRs>+ic-T@54@R>$TRNCf#Vi5F3*2|508&fckV4@8Zp~nEm)sNlF9unbO#JamN^yF zv4dRjz90Tm$N%5nmgCl_A|iX)P>CEBV3k-IW_@DCDjswK>!ae>J>|Y~&Vx#SNl73yc&uy@0qi0~8Dg zNO5o~B#vcp`5ioZTdyFPuGO1zBU7i4~G4l}4*Q{^d*Khs7((+b)P>dZ@Pmqe$m_T%G-dcEb-T6gtXxCw~S zly9qC(17j8rAe-MRi-+ba%YzVJV+T^mF+s;5ui(0qA&J`(cg!VmuWhBx ztO1gqAXa&rz5Xd5CNk}iN-`q&lC*RnG%KiUip5)Tt=3pNm8=+|-di8oyiRygXwf|< zDyOJs_fkU_QXO;E?{}6t3iBjFw=9?V@1y-al7G*V|F-AN|6CP|q*M4M*Pqt|{Gfv! zVIf+qxtI4uVk~m zOs5NY2fDM$t_BWOFi1M`4s|C8#oV6DK>!BY$bZx)Vdy~+g{i?lzzCY2o11-IE*?@S zxLSUzEx7WyS1sYy1L`>g@^-hi_paqO8Cg3Cnr$H^wx~eNmA%L(fs#xO=CkPlZ-Du1 z0yQq`OP9k{H{1J1(swMYD7;)Uo}CHdyMK3CMds#!e18SlgQ_4cT+DluYA(vW$L_R% z3!IL6mZ&q-9m?ONFqb1QyosA-t4!tNdk=c}q3OMSb7krILgiZEJc&aU?Zf2b25RVm z@^V!n_|e4PsA{Ze1{ceqI8{g>um2JfjGafFSNb^e zC|Fazi==G$e^YwkVj5x#$N>KbEKk$&+FRH4(2Q4f1WmP&5>>C-$rlX`vj*IFw>2c2 zV9dS6#}9(8Oh_z!Z0UQDCxE9uyrO;@|^T6BDhH;dGwYU8~%^z9&^3CO+cszL$BT;g$!a`RNJ@&b2*?B z&p2^WE!uAMZpV>G4PjW^_Bto1& zhp6*R(OX&VxVw$TZ14V1Lq_dxRjiiJ>&Ef5U1xHXTod$8!t?Zi_;Ur?iTd=y_WjrX z?2ovKFxVk`shDc*A&wO^)X>`tR7t58_~Qg~)Uf)Mn@LRh9@Jg@lDuTv#R+QGWKa*+ zx#)~m?4L0rFzAmzq~m}CE++u@$w8)Q4^*%DD4;jh-p6dCIKTc-+6%rv=qTf7(n!^Q z35iElNr+=Pcy+fitv@bl4&mv|RB&Rv8mz?V#Hjv0vA;*`?>YAW(o-2B<_>a}9W5S%9Q$;y`zV{J%hb25rm@ykJa`PLo7bRN zEj{QS&?FuXN&Y1^bMNhOY@Xh+bALZlqm|V2JSpXl)qW<|4K8Z$@z5}~X^1{*(^Y7Z zV_4~919?kM&=t3F3H`Ze5K2-iuulGENn%Wof__jL>8>+XC?*qGX4&7N*gbP)e4)dT zfZQ;rno(?;sMWVTcI%mnB?DJ5M=jIT(r>q}+*q7}KI~-Mr5eaRl*^Ywxp1Bdm5Akj z{>~1@7tw#&d)J{Wf;JfT>4hMd!l+6q@FMGhj^xDZ5`l1cC-a~r=sT8{hr-OZ^zA<| z;-NM3h}_Yc14`oi|McShs~X??t+0c8hl>N!7No1cECYAaugDx$f{#tgr`!`%K#5uT zEFzZC-OvvLECJZTJrHNqk6WrBm}JJ5anK(`_K%$tFCZDrFys=u5mJ+R=e&U>AvwQOSRBYxU>& z3=9Zi;bcWPaqLGq%LBruN|-IwFG3XHspeg0hrwFmQFWj@>zw1jnw?;>mG=7&%w6w2b-_JxIZ>LjR+Y+PZAm!-w( zW~4SjUpFcn6S%4{G278o@f_Yiuf&}l^|f!7SSoEihW&^f zwQL|zGy{JSPQ>A_My4*Yj+(18OMmg6?yc-1v5c4)oqU-|V9S0a5peHOTg>bNg{62` z5Bzrq1T}T+Y|(O*H+SY4hh>7}YM1)~+9NEZ~^PObgecnsck0SnS zi@oj7TI^}Goz04i3%VvTn)zpgKELT@$g8l#BnR z(wu6#lYi9$=}*C*bj&eUlR`V+w&U@woK6$3&V-G6-sF#qlPnS*g{BJVks24y# z|9BR(*1q6D$!i0y#Eu{wHOM1U#3&}(y`|Ex*@6eB-~_6XZ2o$N?q>R;`-b|jpGV6~a7f=>+?p?b@VlQ(Nh0rfNvqx@d`Fr~oT{=@Fk7K?I3_P)tIi8twDTIYF1XU)+zq;g03Bv@GVj*S>#r%_{6K! z9#HkNS^IGZ;_YkMW*+e8)b$D+S!meAAR#f>(K+YCm!C{cP6s>`$iKX}_!e}G0#bv2 zeU$*&i0iyMTzhZN;T}MUdvA@<8_9=rdn$r-3pX+)BPny_gM7TN} zPWWOl{aX+F3C8>yRW6gZk-yBSwxtpr^xKN4Vh7=XkPUjM&O?C%l# zwc+}2m}B7-+V6sPJxF0uc=fQV@pxqdtq9mfl-)H>@FSaLqw}eHI>%1uJG=avEq%WRrgID0cwSZtG*Ly_;} zK!rlt+#+(+;Wy~ez(6g*5NlJ3z#u76Do3hUyCRP+YJ%V%?slR+`SG7gJA1)Itd*`$ z-dx}uRr$V4vG1u+dpxpK;1L-yMi^kP-S17W77E|;0@E;^qrD;)HGTVVL#`UKfo{3C zEz7+J#SKI?F?W~v#%sDu5Zk~_UtNb7stdUh_ZN*d(vzI0ctr>r^a+8EO`w~pt` zzJ|-8eODM62P>#E<`(Z0-0&JY%)Q&Dm*|uSo$>b?fOvl^AEsH`!~>syDD1!WqaZd2 zxidc2-9d~|ZxXishnk39q5Y(wr{s$%4ETrFkYB$<34JMkBB#55{^=|@gN`&mi2aAY z)*rt^4D*NF?^F1nf4YgfXTRa-e|+PQzl6h+WD&J6Bb5E0KdnMa{@>{+|NJo-Og%;- zu?q&Z*>0hU-(q~9hrvA zK+C1R%L?|VHeft|^~qtj4Gw>Ji>SrJOQVWgCA_HHKp)1rQJ^3g1;*pS2_%jEm7UGj zggd-E;-QD|9gGRKO5qf`(c5nPk6f=2{+UL@&HTxZT*El|!5-X?8R2l>C&w$-=coDx z*By%;SrfWle86`A3wy)o&GH|C$~UvGa+zFev{+J6d*{7@_E82qtiqAt;l7{Xq7lS4y=-NBUn$#veH{;c8sz)Y=(CS$k>*%w zik?MUOiu@HQ3SCw7xpX8)Z2h9&k~pxe6HVkRbG~ z4}n{8ks(AvBWv)cF5th^01r~bI>%jZTbZ7xLW1~Zz%%>g!wdu8UI28!zAYEz`?E+2 zy@0h+$bd=x6uH0gj$hC0HDpOL5@+ZF@!2{q1)sJ2L>#{>xz;e7l|rKYTfyRQH*6r- zq5gJ*FEA8mfCJ`H} z?MC2Kom(@J^J!gy0Q#^Wb>$YZKVX);fr%vv27H25gQM4?Tpr<6Bv*`i&o3aJ>Bd_% znMscIev0*kpjP$HSMc7ezu1_&-p0Sw>#&=5$rzb1u%b>9#O2r$M&TUKfH(A zwc@QPNjgk30-YquTQz2$6`{jRyj0N?yAC|^wy$iFp*g#<0I+ zPo%i%yTWs$+q%RV*gzJ!ej}!c57U5|2K~GunKq;T-N8}RHXM+#2_EitU!fqNUd`rQ z4CyH2{a5MT$dUkgNpv<(KwpU<2?kcK!2-$MFOxhhnJf>W_?`5$*thP=1``J^`Melu zBwZP~6gvL-<&w7lhi3Q0OBu|QW2s>-C{}*ab``oIcn7+Kl8X%9q$`8+Gu==&&Xy2x zYo?U~joVGMC1aq{IXdX?WIy+)d2!4-mR}7Q9NFx?BBZ-1LFlWL`qan?O$i_c#(LKu z=RY`NpocqE7Y1e!!cFm#Mux6%Rb#a?P2OKWDs2=OicIs;w z7<_o#C10eO-E*q-wXEWdJJ`-U`YylYSUsRvgM-Y20y`!4qcL4zn~i1KUr*`prCAHj zkls03wb8a8m2tKYOqVF*BgT2uUu2b!tVx~`-_H^pG z^C2k#*XBoVuUieB;}IXZwWnm>?Jcw;W3nH|_&&r^XrDRWeD*H;aG!1GEm_R zqR6|V&f`E3tmJ=~id-mWDmN!9S9d<0uOyV80P|DhFkz~^;W=p?`9AODaj$bLC5D)x zjd4}qLsgcl{AOti((HRb+9nw5fR(_eV8pq%`Ovg}@!;)xx#>Qm`k}jKN$xN7AjBo# zFu+6HI9d2jdZg{rNar*R%TGgGM0j|{4+{Ihee9*dh0>_zLwM)wSqhVb254BJ-6z^I~!%aD1 z(~o1{-s>;QG`!oH(80x1b)s^$JvV$liVUTV<8C3IgU}+ zonu8^aNaZVoDSy}4^VzLC;j&v<~cZ?JEhMhiju9a<;HxMYN7YKO!RgSuYV`GHvEhq zO3=#RJq!%bv<|8R$XJV_h%A0y*$#>{PB47(0&at_X?=c^^B8CB`i&;)tkvAz?&9(5 zcX&nL_N{&`$tSThs0`whiKbUy4hJ5crwN;q=L=hJJWcH2v{}MBs;T{|q!|UWfF+B2XVUX| z2PU2S+_qv-x6b!oI(pnP!cK8fbfoWx2mZ_1E}+govZk8*aNOthJ7-BrsZr<0%YCnh zk5a6-YTf4UR6ip%9C4m1QLHjh4V=|@)raSN<~laQC8oHdr^@maRSkxH z{C)IwCFB)sD+P=5{zpZdk@eS|k{>}uUf&v1gYxGp$&B(31rTN88dW#_p+j|}I4F^f zd4AbwGeq#y)e6DAIH}9#nNh0#5GOA?ncU#6dPcIUf2jrK66a1Q~ z1>9@2HeZ{NV|s)dbE+Z_D)=0oxkVl;;2L8~GrVHwelzsI3jL_pkUV@RXV08HG^)?I zlRhoCL86^cxQgc8$+iSLgXH7W5yn3Z-G54x2)^lzF!Zp`QGT1nf#Pa7YpUv${{eBOE1yivDcUi?S!?TV#@}f$H^L3BBd>R{exldKD*(0Y#h@0YD zEAfWy&Paho@CyaGrjovJO^I#)yw~tE48CEXe)O3cb3eC=|Lktax1z7JDG_^o+T=q* z`In4#Y5^+TaNiUTV+2&}R{bpYMEq#vGjZ_o2~~ozP3@KUlzu>< z3-uP?QLMO;X&^}{$)HHoM53|X2~QtHmap7hU7y>Qm~O72)ln%};;Vp?41J|$Uha9> z{S3b&)^w-X1)~&LE4oE%4G~H8+%EuaT~Tl1`VAfM(sVT~Gjo=@m!q3GKR15C+~m?@ zUHj|?PfPMSH;Z~%w!W0{m3P_+HNG0%~9FNO?%M3|jO;i1Dv zjGyw<@5mjJ-t>I;4D{W;(A@sD+3b11{h3BqD#_Rjq+N)5uXKeWo%XW2&XcIpb?n}q zUM^ct9z_eY^d#Z=RGtx)O{mfEi2@}@nT)2vo{RlA^Oeube6pUqVG?hcjA3rl7PR@G z1`t0xGNfT_ukl@(v8Fp?>~W=2m+ZEhpTSQbTQ|6rOb{kKtbofKmD5F$_ezzO&OK|C z#Dg4(nFz|G zBm2!PT^uIZ%J*WL6lD+LJ>N{^HEkb%0zQ}Mh-aceN#dWF5z>K$*qq!aD@3K7Q=QqGHqM^TX()boR2eM2*^i`jjzs>MJ0rTKi;KU@m{h6^Bd%arEap?e>-$x=AtdyaYL}sdNli-lTfbtfh2EcuHP(_&?j*brm zOY}47OLix6K<=rBI-s+3QbFf!)H6!QAH>NP<39yGwe4FbOy=lI`hHk@w!WAw5SYq+MK@rtkgl`xHZpU$OjpP~A&ciE zrC%7o-`{?jQobg1?ffKSPwWeV;%$`@>^)I>@NUkXr0 zw!Fd=_w2oWMg6Jjn#zDEpdO@e_}})n>zTq@?%zI<4bYmq(|qqb))I%~lBj`hDW^kQ z%u3O6LSu&UvaRFOo4ZogI%ia$ip5J zpm6g&?1(;p!)Sb?hw{@>AM**S#tlz&=Bui7|3MCohu$AcuU<>sV!x^kcQ|o3l$u(e z)i)ZTPZR5N!#imi^xO<%r+nx)x@_I(y))!1ldkh2Td51V$Cg)YVeUGi24z6@`su{Z zl`Sb+m0CYP8Z^a9UkYCaR>GD?)<}$3esw8BznFC@^S}IMswrMH5Jjpie-fx8 zCG$}=C3c3YPhV)M?SOLb_-<4~{3&+vJ6hcoR@$#8R$HEgV6ro`IuUj%xO<`#iMl|tEDlg6IYb)%G}nnK#S+O+SI4wqHE!Uhi*2V?vdwb zw~K83fykv)Ns-LJQI<8&Wr>-(p+P1%YwwtfwBX)W1<}hL-``vS;FWlTHBWjeQ+2Dt z5+ieiZ*oc#Uxeqr$iU%=c?*;}S$4KPK`l}=n1deVT*UPvHorC&Y^7Y_v#M-Sj(tfu zGx%5;%Q41SjTS?}`O~p(NDTj@29-1HVhh3-5|PyaBe3MC7XwU}gA;3}Kfr{bl?TJx zPh&2j#{44|2n3%{lFKLZ-hXGD{DyjujRBHqfb}1s=wFcJ-{v&<9skZv{QYkUOq}rk z6Sss8tnjy)&`n4Q^q;7x%-=?2fA|}MzkPrnQvLZ>P)NuA6BdS!FY~vBkG#|GOZ)d@ zgBwKq^WXfRxWQX@O@Ov)3m}%203~|d^#w!{H`Rs`v(^d>h_oF5;E*{cPED*wa_@_P zZ)FDzD-2u6q)u34AOgjQ37TV9aoq_*&7$!mhzpj?}{fP$1 zyn@w(32`f0{)Q8TIqF-bSc+Ns0iVcfpf~J+XiY|f$ZNJB7}^zTibuK3`W_iVdSv(W z69E5hg7iOuqQ-T5g#ayKr_NV@pXMe&{k765tpD|B%g~{)Vs~J#SO>7sZ~cI@M!hEj zQQIJ)8j}qYphUK5c9l+02(!23GAK%%0M1a5#&3E5@Te4N3w+IyzZypY`=nyQiudoK zBBKv(X0o+Y`JW$HGYbmVU&ftvfW%O3jw)b1@EjBqMQ1}%eoIi2Z&Bz8I(&Et!cT91 zOkV&2hfkpV-ww!Cd}pm`;4V7cb=ZpYAIJBGj=$Kc`>*5UzJLNq-;NqzB9kD@$r%W> z?YgoWK|EkXKOu*0>%6Wdjo!w?W-mag`zzJ*FZdbEV-WFX5JK*J=W&c3je$w-G%60K z$xpHDhkxH^fF*dZ6E`))|M@D}$o_z$r-5U;I=xzH%Nf90A5>ghU&||U`^!-qe3MzQ zzvk0Ds}E>KN~COn%<)t=;1K-07Hl^dY%3Qd#jVns-K8LNVCyL6UQsBKR^MYj5F*;F z0GD(p*1R4FzJ?OH-9?q;*e2c?MFLJ=EnooFfRDak5{wRe@GKpL0SFoOU>a~oxZNT5 zWPk1`o%@alAU@cdW86XltMP`!j*Kt>{mB+o%zsZJVW5k{J`f@B&ygNLfm*6}+h6}j z`IB#@7e#)^xGW1(RX@loU6;2EsyFYaw*KO;0D0W!?Me{`#G0o$9ODg4ntJ3%rOs7P2wzR_Cai!+dfygI69%T)y!d|vL` z#3qne!4@FYY{0o(0jOICtouvNBb*jHEu-+Zira2XEP4RckB^z-qtK)cBV>$V?a$>P z6tAU8^aupUzv&W%FxJB(@$LFDsLfH<)C5V8AtwdMT!2$GF8lM|Zr$9)0E8&55t;Ou zhn_qwDH{;$>j%GMI1q!kW{Hs`5qX=VS>*R;kqgDURrvg({%8A5LH-Bee)Z7!Lx#9w zPh;us(eTA<>9z&o?G@eu5LSgYnC86GSy7_VC5Eqn7;_mYN`)bi5>P-J3c+;L^eoOD zs}xXY$KT@X1~SjbX17pM zFe)4<>@uUCZ)Fb_#YC4VyK1KC~x(<^LGvXl!=Zb8#$s}iXSh* z!p0GUl%HK+amm&ZNsXvX(rsx^LwOWFzatjnZX;81o73ANVRNmr{wje$R;Q@6M$5g*(*2mz|^SnAE{&ndu38NoO zfj7c$d)IQ$Ez9K72o3xn)&;#Zc<~KIwcGR~o*1LR%wdL5rh@(PWG~}O;J6+MNyokO zU&dyuXxq6Oy>J~6U8#m9E#JcCUY#6Qe?+l2*P}fMy5Btq?XI|s1Hhs#)BFD!o#@PT zdEpjOY@X9bm3s(x6`t<4dT?kn~`DFVYet zA%7rNvN#er2|p8fo+W?SAFG5@*F?c9eYDet?~bhO7(f{Xw)T`qE7DgJuW#Myh3qLL zgL>wI#@UU4vdvSA+^D% zbHXMl_dz#AYsm)C_>7~ZFROuvi(KXXr(kwh=l1vy~ z2;M`5FgzSHr4q($I3eY@il9v@Q|jSZJNT1G!+5I>ULssfry--LDERYpF54qJx|h$7 zGu@9zUAL^VTn;BzroFM74kVSvb*3j$Lah4-wAI}&TJrj!Wg9optK(6s9 zoA8Q0%;JOX&$dThVF9p^zrL1O=ukL>8L8<}8R-7;MWX%#TB&AgUH3ATt(L+VvTibH z_9b%dd37?Ol9H7Zbl#vAJC@Ki_2b&}c{*EPLn-z=S3TN3XpDURC9VH?iTFH%*dR;F z_gsBx%?s4%hJZbJJ`i9RnnqB;!8%}XwDG+7A6FeBbBWGmvOK72{r6o!|CLcBq*IM@ zYycaiGPOn)Ic&h=KY7B<) z6g=l6)4bsR{m7$J0?;`}ZV(cn{NpRv85J>K!tnz%1LiRp1nS=sL;`#I{CX@VlHzJ! z1`1R{IRYa%*zf6PoYCK(?^iH;j?|CY$)LUt?nphWs<)j({7EYU%gucAWk*iVZH zJ1r>C_Ewv;ppNBgFlHsw>_)h}&D8aL^&RVd|%P%h~&SV;husFsy2hF*u6hrphEUzFxnEr>bE%l%Ne3Wz&$D? zKac)BKL6LVkog225<7|KjLv^K105l_$57s1bpILz|MnDKJOU3%iyc{8^xw|F0Pc~< zbXfMEpUeOH<~?{wd5@P|jsM#j6u><)x4wJz$Il4-@V+8=NT0gb8~@jV|M|cFZy=yD z{J((!hQt3o10lip>$D=rjJQi;ZR&)|%$sG7nT->UbF>PFnehsn;ci!lx$kykg`aGv z-e_1#=icW*MR_q%wo<*j$Xe~R$Wo1gLs|`XZC|e@3-ooyK5KD|0Sh8~z|?WuoT?%g z{_9nIK}3|?fBy`gE2L5dCTSi;*)m3G1_kPmET6nGmvJqJr=PcO4_o0{v=7Q=^V26Q%F# zju%V|-M4*_V(OUTf6a*R7KM*~`M5IK^ywtcY6&<#lVHZE}T{a$?7!@+Fb>t!seqK~`VYtL^{bue~c zJs))HJHfV3dXIb*@Q#E{TM_Bg9Gd|}O_!6@&%er6bToptiQ!~}|xq)IZ zshc|{wT{M|dE`@AdtRJ3toG<$oZ>LCX+8`RT)@Uj4K zn~Yc&Bg*SfN0>}v_SWk6xVy!l@oFkErth4tUuih1<%5pKB!sA33IXG^97;*A=bg0| zfO9qrndDs_9d1t5L5Vm^o7s&x*=~uEJEp!Moxpq{lA z#np+v2(hd{MAMhNA7EIx^r!Zu3G>)!`S8xa6dtS-(i%5m;k35r&Hs@OUn?rpsjbLq z3X<`~hO3s+0-Wmz2u=PboB`{$LV$Jq`Fwq=gx{3w0XB~D9U>w+WRJOC%HDy&ua5k$ zRx-WTZeR6+#*;0y^;-7w)jIO7_}=x|oA2OQhNyUr&|coyYiS8%>or9WQ6(#v{$PJv zjjVXpeJ_tUi`s<-zaWLD6aYZPx{|`l2;$1gj67PB3P6>=1$b1d`vwWmAKt-&gR%XZ zQt~wA&BFHBHUYrmq`6m9Qwc1)KDs3qdMRS$gU!|SjQ`cetiIq=+p+*l;w^&(r`oFQ zvSA|fh8+~0vZdGMAGN@KT%IDY2gsVMKe}=EW-BPvjptUw{4Oe#oB3N}*iryYRG4T9ZuX5%Bzt2v zdOo{njfb(JxRrf_M1S$CNzxIV^#mOwrW2iyZF*Bweiy*Ndlw z#XF5+%kig9Cyk4d`q;?UVZ=SWLa9mJ$IUO1P`)3a=Pg|)D~4J%E8Kxuz1%0%GZ5ZnbmWL zsJQpzWx{7BXcO1ieMBwoTH;;G(v&e4OFCb?#Wf>kn93?CvEl>-Oex*~rnzwPfc<#% z8d5yY;#J;^%SaC_EJa&0H#5XmU{sP?1tMLKhH0@HXayX-1}Z7>3%c&+bYe7_RSQUk6#g6 zYejvzZ{myDI!KFKG4yG|Z=%3%G|FdHbRL-pD(6B#?w4d^UlHtCy5q5 zHB_MIJA2^d^%Ylwv3$NFZ95f$o{#+G|DHV*+B5SYeXlNtb++E}B$1tb&f^*LY-8El zFtQ7Cw$o071iPf1@CKCyAUd3h@;^7v!oPL~II|m2>QlrKL(VBcaaU*k&g_mr0_O2F zd)l+oP+DAw?^kF$R%n~9l8Iv0+S9>rH!0Y(pa{p}o`eK+_|~|JWd=1gq&!9&dp!}L ztnN<{=&E?~tux7U^=r;04Iqv>_)vfpH6>}bmTvhri{S_=*iuOifRm;H;dSHZVAi&n z+s10cSN=fG){uHr+>mM>dU+@^PaI@@UU)jS&OyveolA(9B|iZDpIOhF}*6dkDvRIQGSxGzSSEU zUbioQJ`k&0#D+0)-u3T)6?pKgczvb@kJ)$z)Tgq(x^+d-ZcmZFAzEyP`Ux3slTV;g zxtAOk)1JY!6Vb*yDZTv!Kz-qMXfU|ya6bXdY8!>VTDr*4m1j}Iq4O08qZ}2v0wA(G zL=-!pJNZyXu4>q}I!1ve0g&g*37Gji+8l?)l(&mNA%Q5NUa*E=Cl*NMbC?0PvOm3! zwl)FBT6#$}^#QF9BvOW;-X_M&*VYvDUJ*`jFN~k(%hTR7{IJ=K9}~5^1to+6$+hmv z2~W)u(bY3@^ZBgvCDtu4Cms#*0?PB)8%3NdfUce~ZEj9h4aYkzWl`2eL zRqVJKk5+2>Dwv)Pay={=Y*C_|XN%+GV>Mtt=N(AqYx56id)GCzcTx(DURn|t z!-u4SL*qGu=_&5ZNRfpQJsl?&9mt7S8n*;*ejq~j3%=jZt8wQHfLlaf$(a*0D}|kP zQ4s5j9rNlUfo^^qu%XP921;^wTjtTsv_GMaM$>;hQ9I#N0 zw@YH$Evx&VYG%AEd1}2pGa!eu?%;oxb_PXyO^Lh|!a<#1VoM9?2%vR}@#Nccbt-rLI+`2o8jMm_E8ecvYlB;RrMcn*~mhnW*$va?7Hm+EqC zRcTCvIxLL(ERj%ycXPWQ^Rl0bFOJZ;y{z*A_VA%5p6Bevo`bVMVv$k)XZ*AIpggju zVL0EZ?N%T9B~DF=qjdZkf>^ z<`&ZB(DMZkULCc<(O%JpA0z7T;whp06oV;Sl}jVo`@~5z+ZKq-Qb+Ej;k+j-b_~j< z>FU3DbHK{wo}r@$;TL^PHttPJp*&%31=TngZp~HH59x)?EYVFd%34rfNvd=Phadth z%wlK4N$zUD;ML}$Sakr9q2EGKSk&aeXGRW*jUSy?W>8Dy;;B$4X6o7331o>vdC6vM z+Y3b@lyEF8VqyWe*QR$8MpS#7pJp=u!UanYt+%!%#m$|TOMoX{tmWg$q=XS4#bXsNFeJ@~#iv_qhg zx|r#aIDv2m6u!eaJ_%fi#XaW5{6phjtVM)%n`R%WBCN<_Oh00A^$KUV8Jkt2oV6Y; znS7TvPD{ezSCjv4xbd+!l54T93d~QZo0Cr*@@32=UIh~Ea-ZO}i6=V{T?k!B#3|3> zR08vlQ7QdYzfbWi2Es?~_P;(a*b5R%sf)tkrWZfNjWsnF6|oxEBNXN4(PL0bP*lDd zD+#yf6gWyM7`CIeYjrY_%fVj4w7C}wxF4$BU3%{yI8F5fe^yegCJvR4*w^U++IKkOpsj_01^V2wR4`^Ct+hiR!?+Rab31xRBFg}(4( z!2=^2h6jj;5BmdQ(41>44(f!cB1(@tL9NUT%x3R($1gpiJieEpv1Y!gH(v|v&&j{w zGj5BETq$>8-6m_n*%tfxa_A`V==KVqQP@C9HKwnV;If?FrC5<51j7Y+4{hsVp^~EA zmU>wErWG>||2FAQYM6B6b!?3_u#2v^T7kU08}7=PJ9e^*(8^1B{ABsk>;ybuFCR+f z0vUzj=9A~8FyVB0)@L-2CeZU84>CynS(GbZ-hU~Z*%mu&O?Lc{P8i5T($wWHNp}mKl#&6ENk@fhjk9M;e`?ofRhyXUdBOCHzH>XCT3v z>KVR#blc?%F(tO^aSPCdaY4>;qU!gBV1|t+D7S-dG~yB$pE+V@3u?7pUUhBC!8uXF z*UN007i4V^-Q#ppYZ`s+Lvo~Tj&zL<<njfvIT_v1$zsG4+(5xtQOOVYY_>3)gh$_R5_{o z;eA#Oo~&Flf(wK3xtr`Jd_R{i(sm_3(Dqxw1QgJd`93h-jDAdc=%;&J{+NWSYwm>F zoT}SfNyJ+9%h3$FD7si@v=wYM@h2+JSlNJHL!336$*zOMHv+NNQt-^-3Veee3fEP# zWJTee0vaTvoaJUi>-0fC8qDj~AB|D?Po2{n6u(YP+EraWAq^AMz^{CVsx4(+RKABO zZ*bE?$%7v-sv0+oplkHj#}mrfp`q31kT)goQnN^m;ts{TKOwdA_dpQ830dxa(Q)?X zf{@~s;tCwGR+`I{X8@*H_M@4R+nx;Alh&oGsH7Yp^IxVAx<|oD^^&*g z(gH|aO)W8A%f2iq=1ZZcBE(_MiO*7#7G!w{$|$6NshX%kjM*cyFfFR!v1^vRd5=-@ zq~u|BZkr21_*X)-ij9Vfz8)sanhvE2Nhthimbmx?w%$*zze&b9+god(*n(ydGUwhB zcFXGAmkepOX1SXTS+Tm~W8-sg76`@`Yc)_f#<&sr(P=t1seYXL)Sc@jMQ8%ZuHxA6 zJMjS>N5LZ(yttgVgcPPqckcGyrB$yvF_!4rsW&wvKP1Dgr5OJv)V34ubC&Ha?q>(1 z$7O9d)h~A^j3hknoN6^ly%d|gZexDlC1+UK?+6yF7y_A4t>THVRNP#*chUb%V#t{>n)~j zE?n3I5ibekL^B`Jv-Tzkg?ht}Lf+A(3v7A8oH=2^K|gH5o#)N$;YJ9Y)2kiP9u!J$ zeuSLSBNUEb<9X4Za)q@qzmCdLwfWXCU2cDHc2)YbabI+(%$%Ka{d9$mi`?*$Pe{o(hiaJ2e-eNa1pTd(eoMv_1%L zRZIi(!*GcX{T{+#o9)~76O4Sb@A&P`IAj&bzya*&C3N!LG zJaJ_0xz)0mO=YM7j&1K41g9VAI`s(dnkL*NGj~olNkQk7vu{<%721Vulhj&(sqWrg zT9Sd*o)1`XTy4h-^{0t_;a7KxIHjiN143+LEMk*g%kGmD-;MP7YUn<*hIcK@PChtu z9b{`HpOzwOQj<)N38U&vs$bsE#8SylwMY;soOO)i{dnWb>QNgzI~t}zO@X9>yRN2q z-$k#=#J~bN=Y6W$xkU;@F!d{0mzpXmOnSEIf@q6;r_6lSmz?|Ua+AZ@@F!<{EHs?A z#szlLznik?BTNHpgznRu&_50|qgxI~_G_iJPAmAB69{%EkXYwi?coWkml=$4SIu2j zS;TsK&95ze?Wkg+?goKBgOUG^X~7)n&Huk zk4u&P*d9kGMf=FjSI6^l8r>l^qWbyf{xHq>e5#8)3WplOg5E?Yi)rMYNXwj*(p{?k zaZph3@@vX%B(;D>6cVu)4h;}KZ!kcZw%N9l|C%Y3rcpgtCrBcF zQ-V|6JyH*o)M2K>M+u2F100eN=uK0tX7|!RWfODN5Zr@kk65Ei=y#HbsOJnR}U79E_CaB!8oFq?`NlAmFDt+NuZYTmJ0RO3*1 zO2}$L^0w)NWU(g-O~Ch*)fcLSh(UeFk(w+~ zScJ9C?kj@RP?>kz=rjjYhb^*fwRu6F+>7cb!$NHcMkTS3S+ZSre4a02alCq$amAXb z_zmif@RD*Y;(7kv*G4?tt@QiN*qY``><-`2IKISaJwy3x-8hQLLJKtRPtn9xIulQ^{A2z1*zouZz(;d>tK?s2t4DwEePHu% zFgh>p&4-HBH4az7X_m>tzA&a&V#K$fa4_k14SSg=wzcn|Gj69-oVY?c8CNOF&0$hi zlM|_Ta&G=L3VyXxS;44Poe5-l*ImFUU{MQHC+nv$3rBr|!C9E`ffgsOpI9pRW2kPW zgkKFh=c&}GOaw2I*NM~Lyh@MAzN;e202L!neF`OFk1JikPWt81wKx8Q9yFd0_zP?vAgxQ#y{`o|H zPM6{n&-a_^Z_=g^l+un5GP9^8DywyK0i(ICL!mS7*{u9*tB8C#ebgt48ur^!6w3?- z(bLxCsH8xAV_lgGr|~s%{plrYg4ia;{J#&Z1u|IQw$czbG11-| zoJ3A5r>`5vBE=nqNxF3`yG`iFAaN8 zNsZuO$J(f0y_063B{sCprC+#G*mRkN;c4u|h^~vyv6m_H(1fU$1;gt518p|Dj-;kw z(NHk`FEyH(*phCkDtVWmKRu^mxuq?xpE2H;KBWu5fzsevpZy1+ndozoac9c#Jh3d^t z^aYh3lADD*jD)?Q4~voJ5L8fI3&cXz!1q(oAF$pCX?}w94AitRN0<}2FNbfDq`aW2 zkZL(K^?J0~tM&1kcan5BN85{brdPQUOQJX~B0+OBLNClB9BA^vu=3b~$`nI;P^L7l zDS?u&vCHkdv-PnJ0A{S+(OhictR>YEklcR=@Tx$_>k_Vxr(6Y4 zNaFZYh{;^Xd_Lf_Ly(({`y(Y#T(G7T-ts1HSvum~Rw5NYC{KdQ9chkC30gkmekE6E&KB5VVW^&IJY5zvqcU7tCdIyVV4h(}*DjWx1GW1_Q^5dyh5VxIFJ zgOyV(T^}ykT#Q49-`@<2?CxDcPY{HG7_xC`b4Q3OsY5_~6J0Q=9uBp)+*MKsAcM}4YC zT-D07las_>6LaiF@2s0l7N^hhhErSO@_6yG>VCzqzK^vrdpc2A*cJciVLw{6JUIG>T&-<@MK-+rJW z4IrKP+Xg1)^|DP0zU?Rh9aGOXc?>+-zD2sLQd;@My5*<;&%F^(%lfyZYRoxQ>k>a5tSi%Y+^!Z_-%0lM)k0oNiB!}#7 zS1)~V!{r{yzcn8UdZ@(&xdel6PMAfaqL__PS+3nwX)fj89qQkwdj2!SV}snB^neLg z?P;LCQn6sitPrK|m z!dK6l$%4C@+m&ehYEJoXf1&PQXt*;Lyj}%qJTV}Bxb-%(D8D`qherT{-SKSq zZ%ihK4>1;GRws#nKsFzW;$h?QUcue6d`{U*6=|NCg7Nw`utXT5N>M0T&k7_7nyPSd zY?#GE77ZKP;-Y##TPc4(7 z{8<)W$C7!GWb9Y7J+%l1R9g&B2bBb|jdBAc623W) zdA?@`6twd5_0260vlwEIIY+tH>ph-YxPu%t+^HWCS{5p;X}=aDV3vFrs+pYoQTU8N z5W}J!wOUMoksQ5f-~Z!PbaO7BGX2I4Vc*!N`~fDz0Y4OwZuLg3BOA|9Nyn`2gy3^* zjm5t>TMSiPFcO1nPZjf?Sn`SKw0?opTfFT25tx9fT~;mJBfjWN`QyP0I0~A!5P7#V zXF56OxY~0k{ee;a<@_!j@at;%K5bZ7luRpHB@#t%qPmqRqX@6Z;6_sjKE(9&N9@oe zk@j!2?=|E!M4yGd;5vHeM_0`MOLpg-C^xd75z_j&&a?qF0QiH)TrDW`@ zChw!Iin<6s*azdc+wwO*6zp=95ExC8;*bHX?tqx4{@U>&onuV+koK>WN_dvqNgOtu zs_*Wtjl&=^+*ut&K`~t$`pqKV)19w73@qs}{JTWM~#W6xU-#ya?$`4aeI&#Hz@L|{-zmp0$G;WwAzWZ$?sNwH-dxxiNw~$n@xCWa z-y?eAiG0@mtLxtF`U>wKHZQm<-2I9B-L~^|-0)$eL$h$kT~l1YZmub_(F;~A zFs~Axsgge4;9Ztks1yDQ2OLQfz3)o-yK&N$IJ+xW9E>2PH(9}v<6tlFNXNVTTnPTf zvW0|EXS(?XTHmjcPn?zzZIz-S;*=d*PP>2OeWBF=QI*F8yYSgM$))z@n8QYDQC%e9 zXr-*rHhx0nq4Qi*$1sS~rS8(CSG{(h8%=wJi<2XjSDoyB|%ApN3myB^I4 z=T&uXO;&^t#(V{gwb{kbzGru4w!-1KhU^$96=gTSJ`aOE=0!o|<0p<*|LXf7c6qhJ zVRiOVw@HI?tX4yRtl)|JnA6OFeOxCs`|<6(vemVsygeYG*VKv&cz+mO^Yh0G5x_f; z4rU;F=P>7>>82pu8n*R$BKkn%h}|E6vAsYgjIdO=CcN=AFU(@CnuRg?2dSNYS=_yt zjJh{ly_WlI>|wBYKw+`BM#RO0-!^8Pcds^AZ(LdTfOvJe_^4||WA8p+iZ!KbKLGpF zLmB&G15v-l5dJ|E*~&)|U(Z4Q;4oQ|b6oAqeF_glLhXBcXb}o~m1&mmCDM8)ios`o zhtpxEpcRXNLoL`=PHTEG`f)V5PhZ8O`KbJbaG6)c55;XAmuhn$w%j|0>`O5cp^TdZ zxhyCuoAfRtEKPiAjPT6GYQ~VH+x2877I&Ih-bRT zjKw=O6lXGCdDOo*EM|bN@Z$;`TvH1o0l(;_%f77TpVh2MEKNn{B+rwyD15?HZ5`|> z)XI<^z0dLNX*>5Cf}~Venb|WT!8Yylp|diO+6(8e5dY>2{yUi%n-xsNt;X45Jb&gh zkEnrxRncTBnf03o`0sq?$07g-A-P1=^7%8FIM)r_=I0B%^^-r7iL+ZFhTjfZ?!w=+ z!2iYP4w0!K25t6D2lycCpD&OEy1>9D84}~)q`}|ZzQ0fSIRh~Kp8B_WN&S}#bcEpk zbBxc&|70)!+cyt4!H2JPMmf6oXI8sRAasHAJP$j_{``cWLQi;dt~gWuKQ1tv9g7oQ z+}r@EdLWwI`4!kP*J&5%)c_hxHIR(XR@e-^Vb44RzUj^!I)%>x_3oKQ)(UXqcLX9A zXAsM(+PMyi5A1grIv~m9;Mpu>(ha%B0Sov>Ag6Hb+}j4EGGV|X1BthF)qvr`Sail@ z8uv@I?X=8sUe4cmO&u^rra@Nb63{(R=qElJ5yygiYT;3H{^60oXXW)heGUxDY&FYc#Rh(9DP zBC{>7E+u0(d5|eF(exH@6Ng<_znZ=_^8-Qz`=#!fMk-0~Lr!>en0L^s%cBrL{HuZ7 zlPWKt0ms3{XF$(UlP2c+nd}hC=>-fU_{T5r^WDMn^xZjw@efzc%n*QyYa|Xu6+^@$ zh%2)mZvn|czvpTcx~`Aff6bOPqI$w6&*=%6h8%LuVf>*S-Z`kFKoGatkSa7`LF^7F zhxxm=p!5iWKp@Mq<#|W4_96jsb$+rp1Gy`v3Oj7AtEUOst;ORw6a&+{X)gWBFHkJ& z>?>Rj*M_)&k%tBFBf|e2CodQXWcEFP|I0Mwkl)s@@C=HR82PMK2(Tlm@@U>t$ZNq4 zC`f?&wG%-54rkl0%gfMzhw@eTt~zbQ9V@x2rb`Fj&v|c4`WvH1vOGvVUUZxDb+4MR zN;_HHsZSMkvDy^%*v2L2rQ4Nc<5?I3s=~!YZo{>rxjY>nNF!v8M_&(Uggz8Eq>g_~ zdhbbqtqp9K(`r!qs{ZJqIBGUrd%m~A3frZ?u{P6cWhQ~*fDgb|Hd0?pWAFq!L`dZ4bm0tX7*RVL0 z6=WYb1G3wuc0PO_A}Y4KdjZFa3sD3Glm$DRcYO$RcMYgIcXG@~@9TgDJa}ywc^qB0 zrYGjmWS;@%qEYq4)4YOu_Zx3;=p8*g=P`n;2ak6bsTVLk-xKKVpsIL9K{3WSaBy20 zO_-i3$CS&R`fQpvIC}#fNs&KN2-0?Z_z7RHkn@=#@R!9`vtO;j;3>V40SAB&>cJy~ zV5v`lGBtRvDRz{s_Q^E2GGdb=u$)>F%YX5RqHe2o zzQvTMYAu7c33OlDGju`hE33iGP5FT@fTXqpcwa`_ffe8-Ih9_V-v>taqgeE+&iGrQ z#V>!5uxKeEynqPSH?l|-H8Io{`19<}d-2u+fo%N|f!SYyD;R8YKM0Cd?}cHDJ6Q_b zOB{ii6{E8a4>b+#`ec3zP-e^lz51eO>|^Prqm8n`THx3@jHBEZjL!pa?roR$QLFE< zZ#dBAdDlXprqKxa^34$0&L~1vbDK!#D>~-==KI%_ga7v;0hS~gQ3AU18&22p-}72< z>r4=s?Ig;5;cF{{(O(~=CC=UumdGJ6hAjJejM`H|pLnQlg6>-hfc(8V^~$@wkJ~rf zl_;?Mzc86hNUA0?#7NRu!}MU<>A~0T!k8FHa(qIRl`%LKSQOH~R!f;r>W26QQ5<45Nlm>cyrIb*9{Ln6;EiqdF34gRpeJW zi4+)D8$k)IpbVs7@O*f8B!eq=a}sF6ZRIHn3}6r709cv>Sg)WXNQv1ysoz0m6vQ87 z?N#z%s>x!*5A7*=hdR2@5k3a13SXpHCigO-FP-sR$uKIGd&h_#gCscYj*P)$HhF*0 zEZ2Nrb31l)kf}?#`M#WT*Pot$3IUxo(MwpS0_kB=o{dx8uas(puv&83?RwIhf}LhL zg9Q(j$;fQeRt+N1f|lI5;SJRFW*D4Ec|z3W2hF9^`iRAtE9@aVAc@$;TJL$UD8(ZY zRqM972259q0PVP%ez_G5n=l5kPEMZzm&bxn;|%gRn^^AAELKAjz7?@DD)^H%!$Pl= z!EK^qWX^l@Kgi6o+tGJ6TKZr`tnF__%z*}D&VTM;b80Mjt^@RBH)Gt{bwpB@Yg@yy z@NWws=pz;xCx2_{6N@AA0}>BTBZ+)}~B45TYW zYUDplpWeggOx~3OArYd+*WHeB=8PXVx4J}7$+ld>n1^NZ?ROn5@pY9m!% zOruL~RgGhs>ZSAL0|QE4vY;#1ANDG_)~F$Jh%ba{9*`y;5b?)q7|jO0sY`FV|0rWx z1RWk$`gq3%V65Za(jJli;5DVN8{n?KRTms^0t94dNw57}$)5lXLYfAGBS03xPAe#mBRfphaai(qroE0&~2X5C#^!~!)u|*Zpe#)m7|Lvi|=Pm`$>ovaBz1y$HV8A+ay3h3qeB?f&RVo*IyOo zo?l)9$I8yfBfj2o>F)#ycS~Qy%8kZUvuC%J`XCP_o(>@}SV$NUU^;q8NKw1ja z!7s^T2r~ISO*$my_eE=N&zb;?bNAV9w){pr&=$B{+4tB59nsW`%Jo&vl9b*4@5|e* zkZYOzFlv~B$2#3zx?A+uN(4++H4>CVa&lot5U-bvhk(1ARm(HKRv5aYZEMJ&aegDsBHJ-M5FIm|th)xr#;@wYYWd8>dA-Km5&%*s;8Z28!1LBY{`dXVe* zZ*|815UPT@5c9tsyEhe-Go^l#?CF25$AJ2jbL4-V?cc8AMJdb9)wPIg#}eqKh|p`` OkFuhgLZO_=%l{9RSQB^v diff --git a/docs/images/mqc_frip_score_plot.png b/docs/images/mqc_frip_score_plot.png index c1f510e2ac9afb33aa1bd552a5e182a9080ed77e..52ea8ad82aa38257b624492b94cb89bc0342a43a 100755 GIT binary patch literal 26374 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 A<^TWy literal 74548 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 z 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

Inp^Zl6C+{kYBC5a$Mv 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 YH-T)9gX>bCz-ar}4dm@YbGn%NC(rM4hX4Qo literal 113974 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 z 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

oY_y;iWUM^{F&}kBv=*{)KGuueL;> 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 From 9284dded46d02ece5c4a29f5f6e24bdf33927d35 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:47:07 +0100 Subject: [PATCH 211/226] Resize image --- docs/output.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 241f7abe..9c6d8a6d 100755 --- a/docs/output.md +++ b/docs/output.md @@ -223,7 +223,9 @@ This pipeline uses a standardised DESeq2 analysis script to get an idea of the r ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) -![MultiQC - DESeq2 sample similarity plot](images/mqc_deseq2_sample_similarity_plot.png) +

+ MultiQC - DESeq2 sample similarity plot +

By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. From 07b09a8e61f71f3d11068dd5c7275516cca329ad Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:48:03 +0100 Subject: [PATCH 212/226] Resize image --- docs/output.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 9c6d8a6d..ce2063bc 100755 --- a/docs/output.md +++ b/docs/output.md @@ -223,8 +223,8 @@ This pipeline uses a standardised DESeq2 analysis script to get an idea of the r ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png) -

- MultiQC - DESeq2 sample similarity plot +

+ MultiQC - DESeq2 sample similarity plot

By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. From c56c7927368f49399159fc406922c84f2dbf1f5c Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:48:34 +0100 Subject: [PATCH 213/226] Resize image --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index ce2063bc..47edf763 100755 --- a/docs/output.md +++ b/docs/output.md @@ -224,7 +224,7 @@ This pipeline uses a standardised DESeq2 analysis script to get an idea of the r ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png)

- MultiQC - DESeq2 sample similarity plot + MultiQC - DESeq2 sample similarity plot

By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. From 9f1a5fec22e25798e546e6faf27ecc7408941d5b Mon Sep 17 00:00:00 2001 From: drpatelh Date: Tue, 30 Jun 2020 18:49:09 +0100 Subject: [PATCH 214/226] Resize image --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 47edf763..7e89a9df 100755 --- a/docs/output.md +++ b/docs/output.md @@ -224,7 +224,7 @@ This pipeline uses a standardised DESeq2 analysis script to get an idea of the r ![MultiQC - DESeq2 PCA plot](images/mqc_deseq2_pca_plot.png)

- MultiQC - DESeq2 sample similarity plot + MultiQC - DESeq2 sample similarity plot

By default, all possible pairwise comparisons across the groups are performed (as defined in [`design.csv`](usage.md#--design)). The DESeq2 results are generated by the pipeline in various ways. You can load up the results across all of the comparisons in a single spreadsheet, or individual folders will also be created that contain the results specific to a particular comparison. For the latter, additional files will also be generated where the intervals have been pre-filtered based on a couple of standard FDR thresholds. Please see [DESeq2 output](http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#differential-expression-analysis) for a description of the columns generated by DESeq2. From 5e77dd90548d1ad369c0b9d8f5ade522daa8a5b6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 01:14:02 +0100 Subject: [PATCH 215/226] Update MultiQC header files --- assets/multiqc/mlib_deseq2_clustering_header.txt | 4 ++-- assets/multiqc/mlib_deseq2_pca_header.txt | 4 ++-- assets/multiqc/mlib_frip_score_header.txt | 4 ++-- assets/multiqc/mlib_peak_annotation_header.txt | 4 ++-- assets/multiqc/mlib_peak_count_header.txt | 4 ++-- assets/multiqc/mrep_deseq2_clustering_header.txt | 4 ++-- assets/multiqc/mrep_deseq2_pca_header.txt | 4 ++-- assets/multiqc/mrep_frip_score_header.txt | 4 ++-- assets/multiqc/mrep_peak_annotation_header.txt | 4 ++-- assets/multiqc/mrep_peak_count_header.txt | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assets/multiqc/mlib_deseq2_clustering_header.txt b/assets/multiqc/mlib_deseq2_clustering_header.txt index 60237214..be3b8085 100644 --- a/assets/multiqc/mlib_deseq2_clustering_header.txt +++ b/assets/multiqc/mlib_deseq2_clustering_header.txt @@ -1,11 +1,11 @@ #id: 'mlib_deseq2_clustering' -#section_name: 'DESeq2: Sample similarity (merged library)' +#section_name: 'MERGED LIB: DESeq2 sample similarity' #description: "is generated from clustering by Euclidean distances between #
DESeq2 # rlog values for each sample # in the featurecounts_deseq2.r script." #plot_type: 'heatmap' -#anchor: 'nfcore_atacseq-mlib_deseq2_clustering' +#anchor: 'mlib_deseq2_clustering' #pconfig: # title: 'DESeq2: Heatmap of the sample-to-sample distances' # xlab: True diff --git a/assets/multiqc/mlib_deseq2_pca_header.txt b/assets/multiqc/mlib_deseq2_pca_header.txt index 434c305d..ba6be8e2 100644 --- a/assets/multiqc/mlib_deseq2_pca_header.txt +++ b/assets/multiqc/mlib_deseq2_pca_header.txt @@ -1,10 +1,10 @@ #id: 'mlib_deseq2_pca' -#section_name: 'DESeq2: PCA plot (merged library)' +#section_name: 'MERGED LIB: DESeq2 PCA plot' #description: "PCA plot between samples in the experiment. # These values are calculated using DESeq2 # in the featurecounts_deseq2.r script." #plot_type: 'scatter' -#anchor: 'nfcore_atacseq-mlib_deseq2_pca' +#anchor: 'mlib_deseq2_pca' #pconfig: # title: 'DESeq2: Principal component plot' # xlab: PC1 diff --git a/assets/multiqc/mlib_frip_score_header.txt b/assets/multiqc/mlib_frip_score_header.txt index 36fb7e8e..d0edf803 100644 --- a/assets/multiqc/mlib_frip_score_header.txt +++ b/assets/multiqc/mlib_frip_score_header.txt @@ -1,10 +1,10 @@ #id: 'mlib_frip_score' -#section_name: 'MACS2: Peak FRiP score (merged library)' +#section_name: 'MERGED LIB: MACS2 peak FRiP score' #description: "is generated by calculating the fraction of all mapped reads that fall # into the MACS2 called peak regions. A read must overlap a peak by at least 20% to be counted. # See FRiP score." #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mlib_frip_score' +#anchor: 'mlib_frip_score' #pconfig: # title: 'FRiP score' # ylab: 'FRiP score' diff --git a/assets/multiqc/mlib_peak_annotation_header.txt b/assets/multiqc/mlib_peak_annotation_header.txt index 3abac2f0..6f668c31 100644 --- a/assets/multiqc/mlib_peak_annotation_header.txt +++ b/assets/multiqc/mlib_peak_annotation_header.txt @@ -1,9 +1,9 @@ #id: 'mlib_peak_annotation' -#section_name: 'HOMER: Peak annotation (merged library)' +#section_name: 'MERGED LIB: HOMER peak annotation' #description: "is generated by calculating the proportion of peaks assigned to genomic features by # HOMER annotatePeaks.pl." #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mlib_peak_annotation' +#anchor: 'mlib_peak_annotation' #pconfig: # title: 'Peak to feature proportion' # ylab: 'Peak count' diff --git a/assets/multiqc/mlib_peak_count_header.txt b/assets/multiqc/mlib_peak_count_header.txt index 31f03b72..9fd8c830 100644 --- a/assets/multiqc/mlib_peak_count_header.txt +++ b/assets/multiqc/mlib_peak_count_header.txt @@ -1,9 +1,9 @@ #id: 'mlib_peak_count' -#section_name: 'MACS2: Peak count (merged library)' +#section_name: 'MERGED LIB: MACS2 peak count' #description: "is calculated from total number of peaks called by # MACS2" #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mlib_peak_count' +#anchor: 'mlib_peak_count' #pconfig: # title: 'Total peak count' # ylab: 'Peak count' diff --git a/assets/multiqc/mrep_deseq2_clustering_header.txt b/assets/multiqc/mrep_deseq2_clustering_header.txt index b1fdafe9..d36e8eab 100644 --- a/assets/multiqc/mrep_deseq2_clustering_header.txt +++ b/assets/multiqc/mrep_deseq2_clustering_header.txt @@ -1,11 +1,11 @@ #id: 'mrep_deseq2_clustering' -#section_name: 'DESeq2: Sample similarity (merged replicate)' +#section_name: 'MERGED REP: DESeq2 sample similarity' #description: "is generated from clustering by Euclidean distances between # DESeq2 # rlog values for each sample # in the featurecounts_deseq2.r script." #plot_type: 'heatmap' -#anchor: 'nfcore_atacseq-mrep_deseq2_clustering' +#anchor: 'mrep_deseq2_clustering' #pconfig: # title: 'DESeq2: Heatmap of the sample-to-sample distances' # xlab: True diff --git a/assets/multiqc/mrep_deseq2_pca_header.txt b/assets/multiqc/mrep_deseq2_pca_header.txt index 1ba35a93..2f58a377 100644 --- a/assets/multiqc/mrep_deseq2_pca_header.txt +++ b/assets/multiqc/mrep_deseq2_pca_header.txt @@ -1,10 +1,10 @@ #id: 'mrep_deseq2_pca' -#section_name: 'DESeq2: PCA plot (merged replicate)' +#section_name: 'MERGED REP: DESeq2 PCA plot' #description: "PCA plot between samples in the experiment. # These values are calculated using DESeq2 # in the featurecounts_deseq2.r script." #plot_type: 'scatter' -#anchor: 'nfcore_atacseq-mrep_deseq2_pca' +#anchor: 'mrep_deseq2_pca' #pconfig: # title: 'DESeq2: Principal component plot' # xlab: PC1 diff --git a/assets/multiqc/mrep_frip_score_header.txt b/assets/multiqc/mrep_frip_score_header.txt index 92265b06..8a2c5ad1 100644 --- a/assets/multiqc/mrep_frip_score_header.txt +++ b/assets/multiqc/mrep_frip_score_header.txt @@ -1,10 +1,10 @@ #id: 'mrep_frip_score' -#section_name: 'MACS2: Peak FRiP score (merged replicate)' +#section_name: 'MERGED REP: MACS2 peak FRiP score' #description: "is generated by calculating the fraction of all mapped reads that fall # into the MACS2 called peak regions. A read must overlap a peak by at least 20% to be counted. # See FRiP score." #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mrep_frip_score' +#anchor: 'mrep_frip_score' #pconfig: # title: 'FRiP score' # ylab: 'FRiP score' diff --git a/assets/multiqc/mrep_peak_annotation_header.txt b/assets/multiqc/mrep_peak_annotation_header.txt index 4e605e68..d9d0eb03 100644 --- a/assets/multiqc/mrep_peak_annotation_header.txt +++ b/assets/multiqc/mrep_peak_annotation_header.txt @@ -1,9 +1,9 @@ #id: 'mrep_peak_annotation' -#section_name: 'HOMER: Peak annotation (merged replicate)' +#section_name: 'MERGED REP: HOMER peak annotation' #description: "is generated by calculating the proportion of peaks assigned to genomic features by # HOMER annotatePeaks.pl." #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mrep_peak_annotation' +#anchor: 'mrep_peak_annotation' #pconfig: # title: 'Peak to feature proportion' # ylab: 'Peak count' diff --git a/assets/multiqc/mrep_peak_count_header.txt b/assets/multiqc/mrep_peak_count_header.txt index 2d69a0aa..66796ffe 100644 --- a/assets/multiqc/mrep_peak_count_header.txt +++ b/assets/multiqc/mrep_peak_count_header.txt @@ -1,9 +1,9 @@ #id: 'mrep_peak_count' -#section_name: 'MACS2: Peak count (merged replicate)' +#section_name: 'MERGED REP: MACS2 Peak count' #description: "is calculated from total number of peaks called by # MACS2" #plot_type: 'bargraph' -#anchor: 'nfcore_atacseq-mrep_peak_count' +#anchor: 'mrep_peak_count' #pconfig: # title: 'Total peak count' # ylab: 'Peak count' From 7109c10d7a274a7c52fe18c4e3c100741056b7f9 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 01:14:13 +0100 Subject: [PATCH 216/226] Fix Picard version --- bin/scrape_software_versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 022a8758..585d1805 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -13,7 +13,7 @@ 'BEDTools': ['v_bedtools.txt', r"bedtools v(\S+)"], 'BamTools': ['v_bamtools.txt', r"bamtools (\S+)"], 'deepTools': ['v_deeptools.txt', r"plotFingerprint (\S+)"], - 'Picard': ['v_picard.txt', r"([\d\.]+)-SNAPSHOT"], + 'Picard': ['v_picard.txt', r"\n(\S+)"], 'R': ['v_R.txt', r"R version (\S+)"], 'Pysam': ['v_pysam.txt', r"(\S+)"], 'MACS2': ['v_macs2.txt', r"macs2 (\S+)"], From 67e62fcb4331d982db2d08b44b080d17b46548a7 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 01:14:32 +0100 Subject: [PATCH 217/226] TLC for MultiQC --- assets/multiqc_config.yaml | 123 ++++++++++++++++++++----------------- 1 file changed, 68 insertions(+), 55 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 5d07c929..9416fbf1 100755 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -20,100 +20,98 @@ exclude_modules: module_order: - fastqc: - name: 'FastQC (library; raw)' - info: 'This section of the report shows FastQC results before adapter trimming.' + name: 'LIB: FastQC (raw)' + info: 'This section of the report shows FastQC results before adapter trimming for individual libraries.' path_filters: - - '*_fastqc.zip' - path_filters_exclude: - - '*val*_fastqc.zip' - - '*trimmed_fastqc.zip' + - './fastqc/*.zip' - cutadapt: - name: 'cutadapt (library; trimmed)' - info: 'This section of the report shows the length of trimmed reads by cutadapt.' - path_filters: - - '*_trimming_report.txt' + name: 'LIB: Cutadapt (trimmed)' + info: 'This section of the report shows the length of trimmed reads by Cutadapt for individual libraries.' - fastqc: - name: 'FastQC (library; trimmed)' - info: 'This section of the report shows FastQC results after adapter trimming.' + name: 'LIB: FastQC (trimmed)' + info: 'This section of the report shows FastQC results after adapter trimming for individual libraries.' path_filters: - - '*val*_fastqc.zip' - - '*trimmed_fastqc.zip' + - './trimgalore/fastqc/*.zip' - samtools: - name: 'SAMTools (library)' + name: 'LIB: SAMTools' info: 'This section of the report shows SAMTools results for individual libraries.' path_filters: - - '*.Lb.sorted.bam*' + - './alignment/library/*' - samtools: - name: 'SAMTools (merged library; unfiltered)' + name: 'MERGED LIB: SAMTools (unfiltered)' info: 'This section of the report shows SAMTools results after merging libraries and before filtering.' path_filters: - - '*mLb.mkD.sorted.bam*' + - './alignment/mergedLibrary/*.mLb.mkD.sorted.bam*' - preseq: - name: 'Preseq (merged library; unfiltered)' + name: 'MERGED LIB: Preseq (unfiltered)' info: 'This section of the report shows Preseq results after merging libraries and before filtering.' - path_filters: - - '*mLb*' - samtools: - name: 'SAMTools (merged library; filtered)' + name: 'MERGED LIB: SAMTools (filtered)' info: 'This section of the report shows SAMTools results after merging libraries and after filtering.' path_filters: - - '*mLb.clN.sorted.bam*' + - './alignment/mergedLibrary/*.mLb.clN.sorted.bam*' - picard: - name: 'Picard (merged library; filtered)' + name: 'MERGED LIB: Picard' info: 'This section of the report shows picard results after merging libraries and after filtering.' path_filters: - - '*mLb*' + - './alignment/mergedLibrary/picard_metrics/*' - deeptools: - name: 'deepTools' + name: 'MERGED LIB: deepTools' + anchor: 'mlib_deeptools' info: 'This section of the report shows QC plots generated by deepTools.' + - featureCounts: + name: 'MERGED LIB: featureCounts' + anchor: 'mlib_featurecounts' + info: 'This section of the report shows featureCounts results for the number of reads assigned to merged library consensus peaks.' path_filters: - - '*.plot*' + - './macs/mergedLibrary/consensus/*.summary' - samtools: - name: 'SAMTools (merged replicate; filtered)' - info: 'This section of the report shows SAMTools results after merging replicates and before filtering.' + name: 'MERGED REP: SAMTools' + info: 'This section of the report shows SAMTools results after merging replicates and filtering.' path_filters: - - '*mRp.clN*' + - './alignment/mergedReplicate/*' - picard: - name: 'Picard (merged replicate; filtered)' + name: 'MERGED REP: Picard' + anchor: 'mrep_picard' info: 'This section of the report shows picard results after merging libraries and before filtering.' path_filters: - - '*mRp.clN*' + - './alignment/mergedReplicate/*' - featureCounts: - name: 'featureCounts (merged library)' - info: 'This section of the report shows featureCounts results for the number of reads assigned to merged library consensus peaks.' - path_filters: - - '*mLb.clN.featureCounts*' - - featureCounts: - name: 'featureCounts (merged replicate)' + name: 'MERGED REP: featureCounts' + anchor: 'mrep_featurecounts' info: 'This section of the report shows featureCounts results for the number of reads assigned to merged replicate consensus peaks.' path_filters: - - '*mRp.clN.featureCounts*' + - './macs/mergedReplicate/consensus/*.summary' report_section_order: mlib_peak_count: - order: -1000 - mrep_peak_count: - order: -1100 + before: mlib_deeptools mlib_frip_score: - order: -1200 - mrep_frip_score: - order: -1300 + before: mlib_peak_count mlib_peak_annotation: - order: -1400 - mrep_peak_annotation: - order: -1500 + before: mlib_frip_score + mlib_featurecounts: + before: mlib_peak_annotation mlib_deseq2_pca: - order: -1600 - mrep_deseq2_pca: - order: -1700 + before: mlib_featurecounts mlib_deseq2_clustering: - order: -1800 + before: mlib_deseq2_pca + mrep_peak_count: + before: mrep_picard + mrep_frip_score: + before: mrep_peak_count + mrep_peak_annotation: + before: mrep_frip_score + mrep_featurecounts: + before: mrep_peak_annotation + mrep_deseq2_pca: + before: mrep_featurecounts mrep_deseq2_clustering: - order: -1900 + before: mrep_deseq2_pca software_versions: - order: -2000 + order: -1001 nf-core-atacseq-summary: - order: -2100 + order: -1002 custom_plot_config: picard_insert_size: @@ -135,3 +133,18 @@ extra_fn_clean_exts: - 'mLb' - 'mRp' - '_peaks' + +# # Customise the module search patterns to speed up execution time +# # - Skip module sub-tools that we are not interested in +# # - Replace file-content searching with filename pattern searching +# # - Don't add anything that is the same as the MultiQC default +# # See https://multiqc.info/docs/#optimise-file-search-patterns for details +sp: + cutadapt: + fn: '*trimming_report.txt' + preseq: + fn: '*.ccurve.txt' + deeptools/plotFingerprintOutRawCounts: + fn: '*plotFingerprint*' + deeptools/plotProfile: + fn: '*plotProfile*' From 4ca0173d6dd07aaa4c18cf09272d217fdb70b2a0 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 13:09:57 +0100 Subject: [PATCH 218/226] Fix #109 --- main.nf | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/main.nf b/main.nf index 291de879..fede726e 100644 --- a/main.nf +++ b/main.nf @@ -409,7 +409,17 @@ if (!params.bwa_index) { /* * PREPROCESSING: Generate gene BED file */ +// If --gtf is supplied along with --genome +// Make gene bed from supplied --gtf instead of using iGenomes one automatically +def MAKE_BED = false if (!params.gene_bed) { + MAKE_BED = true +} else if (params.genome && params.gtf) { + if (params.genomes[ params.genome ].gtf != params.gtf) { + MAKE_BED = true + } +} +if (MAKE_BED) { process MAKE_GENE_BED { tag "$gtf" label 'process_low' From 6260e65020d7dc2faf2d9cffec4fc737f4a879b4 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 13:19:09 +0100 Subject: [PATCH 219/226] Update CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f5a30d..08123cc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? +* [#109](https://github.com/nf-core/atacseq/issues/109) - Specify custom gtf but gene bed is not generated from that gtf? * [nf-core/chipseq#153](https://github.com/nf-core/chipseq/issues/153) - Add plotHeatmap +* Regenerated screenshots and added collapsible sections for output files in `docs/output.md` * Update template to tools `1.9` * Replace `set` with `tuple` and `file()` with `path()` in all processes * Capitalise process names From 1063986f0163163e8b9b8bccc2b2adfcd255088d Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 13:42:25 +0100 Subject: [PATCH 220/226] Fix #107 --- CHANGELOG.md | 3 +++ docs/usage.md | 10 ++++++++++ main.nf | 8 ++++++++ nextflow.config | 2 ++ 4 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08123cc3..f6f87c76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? +* [#107](https://github.com/nf-core/atacseq/issues/107) - Add options to change MACS2 parameters * [#109](https://github.com/nf-core/atacseq/issues/109) - Specify custom gtf but gene bed is not generated from that gtf? * [nf-core/chipseq#153](https://github.com/nf-core/chipseq/issues/153) - Add plotHeatmap * Regenerated screenshots and added collapsible sections for output files in `docs/output.md` @@ -21,6 +22,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * Replace `set` with `tuple` and `file()` with `path()` in all processes * Capitalise process names * Parameters: + * `--macs_fdr` to provide FDR threshold for MACS2 peak calling + * `--macs_pvalue` to provide p-value threshold for MACS2 peak calling * `--skip_peak_qc` to skip MACS2 peak QC plot generation * `--skip_peak_annotation` to skip annotation of MACS2 and consensus peaks with HOMER * `--skip_consensus_peaks` to skip consensus peak generation diff --git a/docs/usage.md b/docs/usage.md index 41eff287..ec4dbf8e 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -39,6 +39,8 @@ * [Peaks](#peaks) * [`--narrow_peak`](#--narrow_peak) * [`--broad_cutoff`](#--broad_cutoff) + * [`--macs_fdr`](#--macs_fdr) + * [`--macs_pvalue`](#--macs_pvalue) * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) * [`--skip_peak_qc`](#--skip_peak_qc) @@ -388,6 +390,14 @@ MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--br Specifies broad cut-off value for MACS2. Only used when `--narrow_peak` isnt specified (Default: `0.1`). +### `--macs_fdr` + +Minimum FDR (q-value) cutoff for peak detection, `--macs_fdr` and `--macs_pvalue` are mutually exclusive (Default: false). + +### `--macs_pvalue` + +p-value cutoff for peak detection, `--macs_fdr` and `--macs_pvalue` are mutually exclusive (Default: false). If `--macs_pvalue` cutoff is set, q-value will not be calculated and reported as -1 in the final .xls file. + ### `--min_reps_consensus` Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a "reproducible" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded. diff --git a/main.nf b/main.nf index fede726e..0f2e4f34 100644 --- a/main.nf +++ b/main.nf @@ -60,6 +60,8 @@ def helpMessage() { Peaks --narrow_peak [bool] Run MACS2 in narrowPeak mode (Default: false) --broad_cutoff [float] Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified (Default: 0.1) + --macs_fdr [float] Minimum FDR (q-value) cutoff for peak detection, --macs_fdr and --macs_pvalue are mutually exclusive (Default: false) + --macs_pvalue [float] p-value cutoff for peak detection, --macs_fdr and --macs_pvalue are mutually exclusive (Default: false) --min_reps_consensus [int] Number of biological replicates required from a given condition for a peak to contribute to a consensus peak (Default: 1) --save_macs_pileup [bool] Instruct MACS2 to create bedGraph files normalised to signal per million reads (Default: false) --skip_peak_qc [bool] Skip MACS2 peak QC plot generation (Default: false) @@ -241,6 +243,8 @@ summary['MACS2 Genome Size'] = params.macs_gsize ?: 'Not supplied' summary['Min Consensus Reps'] = params.min_reps_consensus if (params.macs_gsize) summary['MACS2 Narrow Peaks'] = params.narrow_peak ? 'Yes' : 'No' if (!params.narrow_peak) summary['MACS2 Broad Cutoff'] = params.broad_cutoff +if (params.macs_fdr) summary['MACS2 FDR'] = params.macs_fdr +if (params.macs_pvalue) summary['MACS2 P-value'] = params.macs_pvalue if (params.skip_trimming) { summary['Trimming Step'] = 'Skipped' } else { @@ -1131,6 +1135,8 @@ process MERGED_LIB_MACS2 { broad = params.narrow_peak ? '' : "--broad --broad-cutoff ${params.broad_cutoff}" format = params.single_end ? 'BAM' : 'BAMPE' pileup = params.save_macs_pileup ? '-B --SPMR' : '' + fdr = params.macs_fdr ? "--qvalue ${params.macs_fdr}" : '' + pvalue = params.macs_pvalue ? "--pvalue ${params.macs_pvalue}" : '' """ macs2 callpeak \\ -t ${bam[0]} \\ @@ -1139,6 +1145,8 @@ process MERGED_LIB_MACS2 { -g $params.macs_gsize \\ -n $prefix \\ $pileup \\ + $fdr \\ + $pvalue \\ --keep-dup all \\ --nomodel diff --git a/nextflow.config b/nextflow.config index aafd8841..4a2e03ce 100644 --- a/nextflow.config +++ b/nextflow.config @@ -39,6 +39,8 @@ params { // Options: Peaks narrow_peak = false broad_cutoff = 0.1 + macs_fdr = false + macs_pvalue = false min_reps_consensus = 1 save_macs_pileup = false skip_peak_qc = false From 335251b140ee9fa7a5fa347d08a34254eb4ee534 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 14:30:26 +0100 Subject: [PATCH 221/226] Fix chipseq#159 --- CHANGELOG.md | 2 ++ docs/usage.md | 39 ++++++++++++++++++++++----------------- main.nf | 4 ++++ nextflow.config | 1 + 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6f87c76..36a10e05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,11 +17,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [#107](https://github.com/nf-core/atacseq/issues/107) - Add options to change MACS2 parameters * [#109](https://github.com/nf-core/atacseq/issues/109) - Specify custom gtf but gene bed is not generated from that gtf? * [nf-core/chipseq#153](https://github.com/nf-core/chipseq/issues/153) - Add plotHeatmap +* [nf-core/chipseq#159](https://github.com/nf-core/chipseq/issues/159) - expose bwa mem -T parameter * Regenerated screenshots and added collapsible sections for output files in `docs/output.md` * Update template to tools `1.9` * Replace `set` with `tuple` and `file()` with `path()` in all processes * Capitalise process names * Parameters: + * `--bwa_min_score` to set minimum alignment score for BWA MEM * `--macs_fdr` to provide FDR threshold for MACS2 peak calling * `--macs_pvalue` to provide p-value threshold for MACS2 peak calling * `--skip_peak_qc` to skip MACS2 peak QC plot generation diff --git a/docs/usage.md b/docs/usage.md index ec4dbf8e..f772ef50 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -31,6 +31,7 @@ * [`--skip_trimming`](#--skip_trimming) * [`--save_trimmed`](#--save_trimmed) * [Alignments](#alignments) + * [`--bwa_min_score`](#--bwa_min_score) * [`--keep_mito`](#--keep_mito) * [`--keep_dups`](#--keep_dups) * [`--keep_multi_map`](#--keep_multi_map) @@ -328,11 +329,11 @@ Name of mitochondrial chomosome in reference assembly. Reads aligning to this co ### `--save_reference` -If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times. +If the BWA index is generated by the pipeline use this parameter to save it to your results folder. These can then be used for future pipeline runs, reducing processing times (Default: false). ### `--igenomes_ignore` -Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`. +Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config` (Default: false). ## Adapter trimming @@ -352,39 +353,43 @@ You can specify custom trimming parameters as follows: ### `--skip_trimming` -Skip the adapter trimming step. Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data. +Skip the adapter trimming step. Use this if your input FastQ files have already been trimmed outside of the workflow or if you're very confident that there is no adapter contamination in your data (Default: false). ### `--save_trimmed` -By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete. +By default, trimmed FastQ files will not be saved to the results directory. Specify this flag (or set to true in your config file) to copy these files to the results directory when complete (Default: false). ## Alignments +### `--bwa_min_score` + +Don’t output BWA MEM alignments with score lower than this parameter (Default: false). + ### `--keep_mito` -Reads mapping to mitochondrial contig are not filtered from alignments. +Reads mapping to mitochondrial contig are not filtered from alignments (Default: false). ### `--keep_dups` -Duplicate reads are not filtered from alignments. +Duplicate reads are not filtered from alignments (Default: false). ### `--keep_multi_map` -Reads mapping to multiple locations in the genome are not filtered from alignments. +Reads mapping to multiple locations in the genome are not filtered from alignments (Default: false). ### `--skip_merge_replicates` -An additional series of steps are performed by the pipeline by merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed. +An additional series of steps are performed by the pipeline by merging the replicates from the same experimental group. This is primarily to increase the sequencing depth in order to perform downstream analyses such as footprinting. Specifying this parameter means that these steps will not be performed (Default: false). ### `--save_align_intermeds` -By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set to true to also save other intermediate BAM files. +By default, intermediate BAM files will not be saved. The final BAM files created after the appropriate filtering step are always saved to limit storage usage. Set to true to also save other intermediate BAM files (Default: false). ## Peaks ### `--narrow_peak` -MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode. +MACS2 is run by default with the [`--broad`](https://github.com/taoliu/MACS#--broad) flag. Specify this flag to call peaks in narrowPeak mode (Default: false). ### `--broad_cutoff` @@ -400,7 +405,7 @@ p-value cutoff for peak detection, `--macs_fdr` and `--macs_pvalue` are mutually ### `--min_reps_consensus` -Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a "reproducible" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded. +Number of biological replicates required from a given condition for a peak to contribute to a consensus peak . If you are confident you have good reproducibility amongst your replicates then you can increase the value of this parameter to create a "reproducible" set of consensus of peaks. For example, a value of 2 will mean peaks that have been called in at least 2 replicates will contribute to the consensus set of peaks, and as such peaks that are unique to a given replicate will be discarded (Default: 1). ```bash -- min_reps_consensus 1 @@ -408,29 +413,29 @@ Number of biological replicates required from a given condition for a peak to co ### `--save_macs_pileup` -Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters. +Instruct MACS2 to create bedGraph files using the `-B --SPMR` parameters (Default: false). ### `--skip_peak_qc` -Skip MACS2 peak QC plot generation. +Skip MACS2 peak QC plot generation (Default: false). ### `--skip_peak_annotation` -Skip annotation of MACS2 and consensus peaks with HOMER. +Skip annotation of MACS2 and consensus peaks with HOMER (Default: false). ### `--skip_consensus_peaks` -Skip consensus peak generation, annotation and counting. +Skip consensus peak generation, annotation and counting (Default: false). ## Differential analysis ### `--deseq2_vst` -Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization). +Use `vst` transformation instead of `rlog` with DESeq2. See [DESeq2 docs](http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#data-transformations-and-visualization) (Default: false). ### `--skip_diff_analysis` -Skip differential accessibility analysis with DESeq2. +Skip differential accessibility analysis with DESeq2 (Default: false). ## Skipping QC steps diff --git a/main.nf b/main.nf index 0f2e4f34..44e4b9b0 100644 --- a/main.nf +++ b/main.nf @@ -51,6 +51,7 @@ def helpMessage() { --save_trimmed [bool] Save the trimmed FastQ files in the results directory (Default: false) Alignments + --bwa_min_score [int] Don’t output BWA MEM alignments with score lower than this parameter (Default: false) --keep_mito [bool] Reads mapping to mitochondrial contig are not filtered from alignments (Default: false) --keep_dups [bool] Duplicate reads are not filtered from alignments (Default: false) --keep_multi_map [bool] Reads mapping to multiple locations are not filtered from alignments (Default: false) @@ -239,6 +240,7 @@ if (params.tss_bed) summary['TSS BED File'] = params.tss_bed if (params.bwa_index) summary['BWA Index'] = params.bwa_index if (params.blacklist) summary['Blacklist BED'] = params.blacklist if (params.mito_name) summary['Mitochondrial Contig'] = params.mito_name +if (params.bwa_min_score) summary['BWA Min Score'] = params.bwa_min_score summary['MACS2 Genome Size'] = params.macs_gsize ?: 'Not supplied' summary['Min Consensus Reps'] = params.min_reps_consensus if (params.macs_gsize) summary['MACS2 Narrow Peaks'] = params.narrow_peak ? 'Yes' : 'No' @@ -637,11 +639,13 @@ process BWA_MEM { if (params.seq_center) { rg = "\'@RG\\tID:${name}\\tSM:${name.split('_')[0..-2].join('_')}\\tPL:ILLUMINA\\tLB:${name}\\tPU:1\\tCN:${params.seq_center}\'" } + score = params.bwa_min_score ? "-T ${params.bwa_min_score}" : '' """ bwa mem \\ -t $task.cpus \\ -M \\ -R $rg \\ + $score \\ ${index}/${bwa_base} \\ $reads \\ | samtools view -@ $task.cpus -b -h -F 0x0100 -O BAM -o ${prefix}.bam - diff --git a/nextflow.config b/nextflow.config index 4a2e03ce..6ebe6d08 100644 --- a/nextflow.config +++ b/nextflow.config @@ -30,6 +30,7 @@ params { save_trimmed = false // Options: Alignments + bwa_min_score = false keep_mito = false keep_dups = false keep_multi_map = false From 328bb7dc2b0ce8be582c8658cc762f9b86c7c4d6 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 14:51:22 +0100 Subject: [PATCH 222/226] Fix markdownlint --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index f772ef50..247b52a0 100755 --- a/docs/usage.md +++ b/docs/usage.md @@ -41,7 +41,7 @@ * [`--narrow_peak`](#--narrow_peak) * [`--broad_cutoff`](#--broad_cutoff) * [`--macs_fdr`](#--macs_fdr) - * [`--macs_pvalue`](#--macs_pvalue) + * [`--macs_pvalue`](#--macs_pvalue) * [`--min_reps_consensus`](#--min_reps_consensus) * [`--save_macs_pileup`](#--save_macs_pileup) * [`--skip_peak_qc`](#--skip_peak_qc) From a7e069b39dbf49230ba80c56b183ec3432cccfc7 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 15:43:09 +0100 Subject: [PATCH 223/226] Change full test genome to hg19 --- conf/test_full.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test_full.config b/conf/test_full.config index e380e9c9..480e040f 100755 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,5 +15,5 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design_full.csv' // Genome references - genome = 'hg38' + genome = 'hg19' } From 49e80e38773fb05eb7358a8205abe9602daa54f3 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 16:05:52 +0100 Subject: [PATCH 224/226] Add params to schema --- nextflow_schema.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index 0a570a76..149930a5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -210,6 +210,11 @@ "description": "Reads mapping to multiple locations are not filtered from alignments.", "fa_icon": "fas fa-cart-arrow-down" }, + "bwa_min_score": { + "type": "integer", + "description": "Don\u2019t output BWA MEM alignments with score lower than this parameter.", + "fa_icon": "fas fa-hand-paper" + }, "skip_merge_replicates": { "type": "boolean", "default": false, @@ -259,6 +264,16 @@ "description": "Specifies broad cutoff value for MACS2. Only used when --narrow_peak isnt specified.", "fa_icon": "fas fa-hand-scissors" }, + "macs_fdr": { + "type": "number", + "description": "Minimum FDR (q-value) cutoff for peak detection, --macs_fdr and --macs_pvalue are mutually exclusive.", + "fa_icon": "fas fa-sort-amount-down" + }, + "macs_pvalue": { + "type": "number", + "description": "p-value cutoff for peak detection, --macs_fdr and --macs_pvalue are mutually exclusive. If --macs_pvalue cutoff is set, q-value will not be calculated and reported as -1 in the final .xls file.", + "fa_icon": "fas fa-sort-amount-down" + }, "min_reps_consensus": { "type": "integer", "default": 1, From 1c395ff3f4f79bc077a094a9ba7791233d5274d0 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 23:09:42 +0100 Subject: [PATCH 225/226] Bump versions --- .github/workflows/ci.yml | 8 ++++---- CHANGELOG.md | 2 +- Dockerfile | 4 ++-- environment.yml | 2 +- nextflow.config | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 675965f5..8a37ba68 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,13 +35,13 @@ jobs: - name: Build new docker image if: env.GIT_DIFF - run: docker build --no-cache . -t nfcore/atacseq:dev + run: docker build --no-cache . -t nfcore/atacseq:1.2.0 - name: Pull docker image if: ${{ !env.GIT_DIFF }} run: | docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 - name: Install Nextflow run: | @@ -75,13 +75,13 @@ jobs: - name: Build new docker image if: env.GIT_DIFF - run: docker build --no-cache . -t nfcore/atacseq:dev + run: docker build --no-cache . -t nfcore/atacseq:1.2.0 - name: Pull docker image if: ${{ !env.GIT_DIFF }} run: | docker pull nfcore/atacseq:dev - docker tag nfcore/atacseq:dev nfcore/atacseq:dev + docker tag nfcore/atacseq:dev nfcore/atacseq:1.2.0 - name: Install Nextflow run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 36a10e05..bf2aad24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [1.2.0] - 2020-06-04 +## [1.2.0] - 2020-07-02 ### `Added` diff --git a/Dockerfile b/Dockerfile index ecae8934..715e6892 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,10 +7,10 @@ COPY environment.yml / RUN conda env create -f /environment.yml && conda clean -a # Add conda installation dir to PATH (instead of doing 'conda activate') -ENV PATH /opt/conda/envs/nf-core-atacseq-1.1.1dev/bin:$PATH +ENV PATH /opt/conda/envs/nf-core-atacseq-1.2.0/bin:$PATH # Dump the details of the installed packages to a file for posterity -RUN conda env export --name nf-core-atacseq-1.1.1dev > nf-core-atacseq-1.1.1dev.yml +RUN conda env export --name nf-core-atacseq-1.2.0 > nf-core-atacseq-1.2.0.yml # Instruct R processes to use these empty files instead of clashing with a local version RUN touch .Rprofile diff --git a/environment.yml b/environment.yml index cadc2140..1fde3ddf 100755 --- a/environment.yml +++ b/environment.yml @@ -1,6 +1,6 @@ # You can use this file to create a conda environment for this pipeline: # conda env create -f environment.yml -name: nf-core-atacseq-1.1.1dev +name: nf-core-atacseq-1.2.0 channels: - conda-forge - bioconda diff --git a/nextflow.config b/nextflow.config index 6ebe6d08..5c08ccbf 100644 --- a/nextflow.config +++ b/nextflow.config @@ -99,7 +99,7 @@ params { // Container slug. Stable releases should specify release tag! // Developmental code should specify :dev -process.container = 'nfcore/atacseq:dev' +process.container = 'nfcore/atacseq:1.2.0' // Load base.config by default for all pipelines includeConfig 'conf/base.config' @@ -172,7 +172,7 @@ manifest { description = 'ATACSeq peak-calling and differential analysis pipeline.' mainScript = 'main.nf' nextflowVersion = '>=19.10.0' - version = '1.1.1dev' + version = '1.2.0' } // Function to ensure that resource requirements don't go beyond From a4751e91f4aa42873b78bc8912b53afcd0318259 Mon Sep 17 00:00:00 2001 From: drpatelh Date: Wed, 1 Jul 2020 23:26:40 +0100 Subject: [PATCH 226/226] Update CHANGELOG --- CHANGELOG.md | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf2aad24..bf724afa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,14 +8,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Added` * [#63](https://github.com/nf-core/atacseq/issues/63) - Added multicore support for Trim Galore! -* [#71](https://github.com/nf-core/atacseq/issues/71) - consensus_peaks.mLb.clN.boolean.intersect.plot.pdf not generated * [#75](https://github.com/nf-core/atacseq/issues/75) - Include gene annotation versions in multiqc report * [#76](https://github.com/nf-core/atacseq/issues/76) - featureCounts coupled to DESeq2 * [#79](https://github.com/nf-core/atacseq/issues/79) - Parallelize DESeq2 * [#80](https://github.com/nf-core/atacseq/pull/80) - Added social preview image * [#97](https://github.com/nf-core/atacseq/issues/97) - PBC1, PBC2 from pipeline? * [#107](https://github.com/nf-core/atacseq/issues/107) - Add options to change MACS2 parameters -* [#109](https://github.com/nf-core/atacseq/issues/109) - Specify custom gtf but gene bed is not generated from that gtf? * [nf-core/chipseq#153](https://github.com/nf-core/chipseq/issues/153) - Add plotHeatmap * [nf-core/chipseq#159](https://github.com/nf-core/chipseq/issues/159) - expose bwa mem -T parameter * Regenerated screenshots and added collapsible sections for output files in `docs/output.md` @@ -34,10 +32,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Fixed` +* [#71](https://github.com/nf-core/atacseq/issues/71) - consensus_peaks.mLb.clN.boolean.intersect.plot.pdf not generated * [#73](https://github.com/nf-core/atacseq/issues/73) - macs_annotatePeaks.mLb.clN.summary.txt file is not created * [#86](https://github.com/nf-core/atacseq/issues/86) - bug in the plot_homer_annotatepeaks.r script * [#102](https://github.com/nf-core/atacseq/issues/102) - Incorrect Group ID assigned by featurecounts_deseq2.r * [#110](https://github.com/nf-core/atacseq/pull/110) - updated AWS test GitHub actions +* [#109](https://github.com/nf-core/atacseq/issues/109) - Specify custom gtf but gene bed is not generated from that gtf? * [nf-core/chipseq#118](https://github.com/nf-core/chipseq/issues/118) - Running on with SGE * [nf-core/chipseq#132](https://github.com/nf-core/chipseq/issues/132) - BigWig Error: sort: cannot create temporary file in '': Read-only file system * [nf-core/chipseq#154](https://github.com/nf-core/chipseq/issues/154) - computeMatrix.val.mat.gz files not zipped @@ -45,39 +45,38 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### `Dependencies` -* Add python `3.7.6` +* Add bioconductor-biocparallel `1.20.0` * Add markdown `3.2.2` -* Add pymdown-extensions `7.1` -* Add pygments `2.6.1` * Add pigz `2.3.4` -* Add r-tidyr `1.1.0` +* Add pygments `2.6.1` +* Add pymdown-extensions `7.1` +* Add python `3.7.6` * Add r-reshape2 `1.4.4` -* Add bioconductor-biocparallel `1.20.0` +* Add r-tidyr `1.1.0` +* Update ataqv `1.0.0` -> `1.1.1` +* Update bedtools `2.27.1` -> `2.29.2` +* Update bioconductor-deseq2 `1.20.0` -> `1.26.0` +* Update bioconductor-vsn `3.46.0` -> `3.54.0` +* Update deeptools `3.2.1` -> `3.4.3` +* Update fastqc `0.11.8` -> `0.11.9` * Update gawk `4.2.1` -> `5.1.0` +* Update homer `4.9.1` -> `4.11` +* Update macs2 `2.1.2` -> `2.2.7.1` +* Update multiqc `1.7` -> `1.8` +* Update picard `2.19.0` -> `2.23.1` +* Update pysam `0.15.2` -> `0.15.3` * Update r-base `3.4.1` -> `3.6.2` -* Update r-optparse `1.6.0` -> `1.6.6` * Update r-ggplot2 `3.1.0` -> `3.3.2` -* Update r-pheatmap `1.0.10` -> `1.0.12` * Update r-lattice `0.20_35` -> `0.20_41` +* Update r-optparse `1.6.0` -> `1.6.6` +* Update r-pheatmap `1.0.10` -> `1.0.12` +* Update r-scales `1.0.0` -> `1.1.1` * Update r-upsetr `1.3.3` -> `1.4.0` -* Update r-scales `1.0.0` -> `1.1.1` * Update r-xfun `0.3` -> `0.15` -* Update fastqc `0.11.8` -> `0.11.9` -* Update trim-galore `0.5.0` -> `0.6.5` * Update samtools `1.9` -> `1.10` -* Update picard `2.19.0` -> `2.23.1` -* Update pysam `0.15.2` -> `0.15.3` -* Update bedtools `2.27.1` -> `2.29.2` -* Update ucsc-bedgraphtobigwig `377` -> `357` -* Update deeptools `3.2.1` -> `3.4.3` -* Update macs2 `2.1.2` -> `2.2.7.1` -* Update homer `4.9.1` -> `4.11` -* Update ataqv `1.0.0` -> `1.1.1` * Update subread `1.6.4` -> `2.0.1` -* Update multiqc `1.7` -> `1.8` -* Update bioconductor-deseq2 `1.20.0` -> `1.26.0` -* Update bioconductor-vsn `3.46.0` -> `3.54.0` -* Remove r-reshape2 `1.4.3` +* Update trim-galore `0.5.0` -> `0.6.5` +* Update ucsc-bedgraphtobigwig `377` -> `357` ## [1.1.0] - 2019-11-05

Fb6F9Dp0 zDCFs6!FfHhwzorZWOlyjC%EdIAmn~Z_nXY3{7(c3cGOd@j;~I`Nb#gW{jcWPew!~a zE6T~UHg`|e4*Xq+=n#X5N==4d^G?vy!ZSElKX>a=HRL<;KU*60$ne zx{Q)XnU(&}n>62f&B3_(zN^F5dn9T;jRt@8_wf1ws_K+^S1DepV0v1vI|gwHVeR)C z6Ci1L?k)ACpl6_iBGy&8R&cqehRSp^=eyFzknwik-M}PXpwfX!0x$g7pa_Yo+;$}) z;rOK1%1BNab5#g>Q@}^a#CtaJb7|5(zUu{U+kaYSJr2_i?((|+&xcYY1=dXpGEVyG zXoQJN+G)j%QqD^#eVFRu%>%0yW_6ilpzx?~uhut6f$|*k}mV9~aQuC}tM{EwEU* z$Oxt;zw2@j$3DhRJI*( z?T}}`Fr{B;@!+eddreA5atdlfI;c!|^{dLB#CQ^7fm_!X_qy0X;#s$9V;9#K^}o`) z;47KH)H*C^Rv2W*%rt8*9BxSwu*tbsDp=~7WQe)r2+yr_!8ze*|Qd zH~~v;JUn69eBR{mx8!z=nf67&33CCIAWJoJ#Bg)8^C~Fv?q^~uTJA&ocIJr`6xx)z z`-YUOM(z^LQJ&crBH!|C8cF4E2%D6vwP~rpeicUifP~Ss!vafd(l4#(Ng-Qua;IGN z9mei>_njP}7zaLdm6(jW=52(CpfGQPXSycN6&3(Yx04-zCTNk}Fe5k5$@J`KFRgQ` zyRh?;WST-KZ z|3u<4ZFIRFrGWvi*b_kyaIKAVh*K#eM`=jU}fK~2X6(t)p{t`@Dbc8lv1OKk3N3+ zS^fB5H?OPY^e^$y__y}DYQXGJ7oV!^ND$At@Z+-k<)k6**UeW&9M55P2A9gb<}xeB z64+kUZAX`d@+%}fwz4RoX)T5m{ercTd1L!Aw*j}iw>GX76=1sfItA(Xq$U;}PP$0uKNU5`ix2A!I ziC3b|@6s36YfV!_ZSzMq71iZ#{o&%O@J!8n6ovaWAB_~4K$$>PGy z#Wp1?3G8dtn6BjG`B3(!A3AB#s|xXa+4(j#D|0ro>B^kDTu1m%<}c#KX3zq{F`GTHj-NU*P3&HGZUaAQ8@b z71TT@KD3dLa)NvFe*YB>roP?)+Z>$LdSXab67Cj$kwqUZ4u%I@3J$i)%;pC19SzS2 z72+|gknq<@S_9?Rk`R_ugA%`MP&l!SMv89RsZIVYaaAvI`|$9U37>)gDMZL>j9AYJ z58(Cm*r};vF${EvX(gU(^#~X&0Uu!Qp{yGXj-Fn}4Yd`Vgc!iWzsbAbwTR*`{62lJ z@^*i5B;n~3bqN)OY}=0D@{6&64AQacrQ1#)5c3XfB#)>fyaO`K<(iU%FIJ7{wICN3 z3-nfh&)4y;wO2nYL;`pvkbKdbi6s3?>APJQil;-Q3#W`9hA!{^GQF6l`p>#*;*Cbev@e~<#nd$aDXIIbj$TsrgbY3{+w`e(XCB>7ptnk z;W|qYeAu|(Owy|86r0TEHkH)f47Xa{1``h`n zOB4~*^{<57urPbF%4cWgxyi!5zJ0By6W1?k?|-`WuLt4cS3=HO+)H?UgFhjqo*`4l z&cM5nU#XL;<&zvec0sR&h;-mv!?Cx%<+dl@VS<_zCDk!Cj^^W1lU8z~HRbxmS<9hF z{Dr)TdhH+d-3Nj$AEEIXkxHNC9y~--g`a@RM+{CHN2Muji1jI>7?S6@X*6XMzFwu) zp@=Llt+yEw=Rq^qLD~tt(|>`8lq{V zx)KJuOVSyfWm6hP*vk8@#(}q8C1TId0d_i&TzZwy7%EYMu?@R| zs63wl0g-5)8) zl#EotC5bG!WD@FX>7zs%M%WU+_LcMW{ z+WC^6451Sve_P2MAye#IganFVXQK2XJ%9TJZPvSJYUeC_A^1~Sfn)Sx=sD}3p(9_8 z6`WY9`CfGy#c_~?(F^q;n8s8dhn|zKAT2Mkc?B4}K=z~1-8Dw+I82Tv7j{yZw6PkFOLRP0g=&tzL3~T~;$hsV>o%;*-C> zUNHbO7tOG`rFkcdSr4_n;bS39M>^s0KNd$WNZTa;5R;!v>=!FdYX5RdZq}*gtV`he zot($4xteTO`+}_Fh_E?OHFF$#kGu5#%1_|a+|f9Df={yA5LYq@*a}{>RSca@(3muf z3li{3N+j{6Ii_7~DZd=f{UFZ})__in3Rh}ynnT4aPK_2q9}yB&sev3K%_-q$M4H3k zM;q$t2->!@#Ux~VH>9Io^D4ZewyI?zc89e|PN{C(4^${&RK;aO#vCtK&l);8p|$eN^jnx^};Uu{8sGCu)dRj zT5J>Fyz^~eN9Qng*TTZGp!LmmLHW3k7G%Mkhd(ni`3CjW0;h)W{QP1Xiw;23-wzL~ zRaIAy=pK5Jp{%>tEDPX_UoH1LunFRyGGU8!*~k)=4xWKb2Phta-eBGZjrg426R#My zP|UNY?NW-L2kZ;5NvIh$r(&>Ovmtk2cF@CFS7Cn@mUS();#OelEpX6 z*2MFtD7ZUa@8Xige2tM0cRn1o?+AQ8SzA=9LjWcYhZ~KDp@9)Ftwi>26<=$g&~nz% z&G^bUxwUSDEs{)n_qLP{4WawsmjeG?`d-et%&ud< z3~VVs!EWb6|1Y5D|34=8f5N5Nz|EJiaK{~pDMR|A4Mj`*kXAjC5T8~IU~Y9Z|HSB& z;7p@vKA(ka?E}0Yn!u>i1pA|B_y(go7MdFhuxJeYYSzg!BM4#O?HeSoVuHO6wz?yP zxuF&fAN*tS9<&@Xb4YJ9IUa=QKhqO->2 z{xo@J8%Oqx*!eaAg3^<_T?<1dP)cU>_?l=2Dx1I)tapGr4y8l8&Vr#r?GEg2=>A&Y z+Ok#jJR+te3uzOr=A37bdOUV4JAhG#T^05n>FdMtks%bTQIZ*DrKWDez^TjX=z38< z4}yH?PVVnPGqz&&>Yg49W9JP;8N`WH4I?~uTP^L_PWqr_Vr(6AL2cZ~388)T)ntiUZ924Esfs}hH+)zw z44OkR^qRQH{u5Y0)Gt1tf<0)BhFWObw~P=jiA;hrTh>bc_b#hL{?w7;EUld==Ik9c z-Ks+?S+C05(BR~sm)W$UG2e>-|x zmpx;6uDQkdK1KR)j{no22lLjBVgE?2pyUDVrdx6LWN^KMy(?Wt5w(kOmIA6hKNk&Q zjR_7f?7e6Q7f_4pfru)qZ;SK z7$k0QVIOO~GA1eUUix3v;s^Xjb72!Pc$7-23Aig*DzRQG8wc({s93Q_rtjKoZg7HR z?>KZr=!T<5x@}=AvM|6~paVte?QlllC_;;lx00VUlZ%;5&@4a&c6JEn{>pirjlz%l z8H+T2R``5F@?Rg|@L7Gapiyum^4XjCN%sAEGK^_50grgMvftk!H)lMVpob)m!4C&Iatv}Mb7=Si)hp=`#umeuef9DRTYwQjHX==;)L3`co5_g$X( z)oX24s}bV6*?;xjwSSpR6$_bfe}mUeZYX-Dey$H2D35z@Y5K2d6Z`BRWo&I;(tn9u z|L=dpnto#v08p^G!1php`%*GM@#4YNyVT#;{=siyZ%@8@_xB+Nq(EaGXH}eiw=?sB SEm!o%ABJ~L^lNWB#QX=WAi+!&lq?w)L?lbjA_YaxIU@!T!2m)5f|O_Bqe)+x^@==l1uD< zefBl(*kz13^;`9{ry&kysZ3ISY5G_9>!|&O%MGxC_t_23-w37od^Z(0iDs!j@LgEm zd1IQmHoTWpwB?!GI4L=#zqe4dxmLJU7O_^`Gk}S{Y*^maP9u$nPxQ}!tlUjvz>iLk zGSwkt3&11zr$4j;@WPnz|KqQuYpn4JxbvIq$Nu?#&@;#iN=g6K=auwqHLK;~N2&hB z4Z(xF|AlyeKj_Df{eQA_x2kKRw2j~_USH36pCM)SDPXwfV!6x9`H<_BgcmB7&ooE^ z8%WAx`H-5GrCwL`=73>-`5dP+?qKU=CGYz~ar1*+57}csv@XdBpCG4car-<_vB)EV ziGI7E7YgdBp68jznnz#B&MVJ?50@9sj-V@MvFQ>0ZiBXAe$lL{JDyq0s2iDUPR%?P z^Vv9;ukE!qRXfwLW}Xs(IGgthseAR0g0mJGw**g^bi>9Dnt7{ZW)l5JD%U#|r|YSu z1e~W^u1Fnjr|c}2jJDk7%DtcXd85~O)TX!}21`$HyUJu=={QuvGIRaA^3`|)wO&^I zfCr=wyic4=#MB_yo~d!kc^3H^(V8GOBk>fEO9Ef(?KS)I*|h1EdTQZ{pQ`LtZJ2o~K1kp1EPG0e9pMLg4dL2L6vNiBeMUD-RoLcV-gpdyKpn zgA$)iFqhR|rE=-EXSn`F724~-SL8G%NR-1-CU8m~E3ygK444E{-pSU=U47%%k$iJ{ zKEJvcccf$*6Bid}U)8_AT|HRC>u>p5G=KV6{QS z#Z|k@Wwv{ZCBi3-ectK%ZgiuI@{6s9Xpk@yaCDS?86dl}$bqyHnw|xa!8-Q1Rl*>)of> zev08?)$-6v-m1pK*V?uILy_64_Hor|a4obuWt7H{nXj|0% z6m~r4eG{h=qe`w%>41!)sOurvBaHVl+Tw7h&3^#l2UKdqyd%Q=z_KU8f>poBa8ih! z&ZJ@3Sg=j_-UqU^YTRD+O~M?jXN|7LDv~>?2{-9bxy1ub@m_P8Y1X}Yo{xmQH*K5; zZA*0Pli;z-KpEa_d1#O1?YbJO?EaA0C;*Sk)65G}*GhW!OMRcvk&UeWLk2D#H#hu! z2H@$jfrO-9zUZo>c|b;_YtIaAmiT6$*@nx&2}P+?Z3D-f#v=2LYPP+l`0r1fP@dwe z@d27Zq=R$ETIw!=^J9YRWyNjFJJ(YR$C$r1EdIi?QBr+?8SxGYY%FK(=^V^s!mKKtJq-FVaJv~+4w_M;;<=#8G~q+lw} z(ow}ze$y?nZm}4kzi`RD1^zvud>97NFYIZH>X36Qt{d@QHgqX7^BB^bcCNuEjRBGk zE^Q$F4-fa2r(Y;uzT&&LX?u4Kw}m@Q>{t-Mo+75@gO=b zst97*OJ~#KIIF4=dKSdg7V(Y`eH9S{OsE%jE1r((z5rYfkU8LwUz(jS|VmPJ#l1g zn}WBpUHsdJ6Ps-hk22g7*!u!(P%(ecx+u>c`4avjZ+iHOE48J4icjv{fT-e`Ss-pP ze^_WyZ7^xvbt=&hEb6Trvl!n2+QWvE#sd7XmV(xD6<3ueuQ=P{cRdYD9R(#zl)jA_ zv+*Y`DWlrTH>W!JD_XD3pIRhz|N8ckkSD7M8m>BX1hGk^QE;+IDdAeTQMOU?v8pO3 z^yKbH4$4@9HS2AjytmJ1ynEAEgI|*^5r3So7}pK_d+&PEl$a`x zYT_HdrBAmW!ta@SZEUx7L__0L@yr|V0sm>cQsycl%-zbR^7+-JbM)E)Q_X94?F!Ud zw;I5ig8}Cem%R15uA{K^S~E%e&VcdZ>PaBYR$q0eV|k*h6#c+`qel444Sl<^hKB`F z#kz&C?nma=9>tft%&O1M&Pi$Kl}Mgy+=5*=u#!uUzJ9nlXn!+bznN1-WSq!(;a#Ip z|DzM%L#b4KU{QuQ%+^6rCH;~Z!Du3}*1|7@I)XTK_c*u3E_G|eO#jStm|*7Y+OF_2 z;`vIqws9;Ro7Ue?CxfNNoQn{D-%(@?jI~?Ojdogfj#C}f%9xtYoV=4p9&ZmRz31em zj0D9vONKor!>98qmfrj4ghvTpXN#evI~~Vl0w-yG#i22$f@DoaEF%2`;_mobA4L$S zP07~kV2_*3);*It^jQ1IWZ!2!1pIAyyi*)3H{N67$%bhnEZ=hacH=W<%xW{Q{dFEp z6S-BEiF%=nK=WneFs$Gb9+!{*{F^S{)kNHWV{7|PJ?o)~3$>NjXRiFpdsX|Z&AZJS z4%h64O69y+8jhLltc%0bo-aLuY_lZ0dIl{Oy69Nh5@iwl=t-}#fI2l|UMoay%G48t zE3#m6txZZ8x7%CYQt7!iho%V0MRaeE;tobPMR*?dSO}iG)s|Bw2K=Y(9=#@Jx~q^0 z6)rr|Hw65J=W;K*e@43;KMh@L)@=3s9+$YcV3Vg)1V^uaV#K6(;gBDz&x#Dc)0a=X z8MP0tCIpXg>45{#Fytzl{=&4MO71iyO3m3s& z-d`j>A#mVM%vvTzR&@WS)ZOas2@3BFSc`$zEHZri<5LC=oEtCC_0AU`FhYYZt(~fT zNa2l4V$GPTEab_17g&ybJwrH|dUSJqTLZdd-=RV90NN2@Q*{0;dh zr_qcoU2WWkF-{Zbc(5hQFOnjjzB|&jWzkMM#`$T~p`J3ur}FC+HT2}+$kWdJD$=b! zGis)}>{(-))4uB+;d$~n+3VA_Bi^}sMeh}zeSJJ{yrlSe#g$seCIlrqaBTz&?91^SIAC)g`s@*M@O5^|pd0Qeoq0l#l{DL!>bH;q?+NoO zrT0pCy?IgnR$5v=8$vM3+s4Cy94io}C?!O3;L#~5iC{=hV=WqIEiZF#14epiEY~lD zAV*}mJgrCcR5OS>ZTuZbl=h@Pi&-K%(#Di>^YU6R&m4X9eB4_7QxbxNUw`!=GJFs^ zI;TZu2WSOG{Pq^zJ{sF$sofVV=pMWvzZ29iRr?O8nUC)q5P4o@-|#)=7aQ$X9XKEeZ;KAx=CWz z`4k1rFjGi%oLzZlLXnPL*c|iL7VMQ@eeY6mw=7?8p`1_U(hMIW~gtHnzp`H~L+4S1`I9 zdZ<(xZ8$snVP5{}W(7Io(6$PuJ)1}#i@Kky8Yksn)o~|3Nn-WWxp1LJZ3m{==w|}_ z=ZrN zP_57Q+Ap0n`kHh=)J=OEuBG`dEjDXcnRk66IBk1P_j}~-0+bM$ZS<5Lirfv8Uf?M< zzgn+XRkRPH^eB4!uI}j&D?@`{q*XP;0ohRmOsU9ruy{<+ibV09zXmIv{7gqgZ4$hv z{bHO==h);pYcV1L*{>M_J3dQkiBLEuaKMJ8F1*LHe_dP&KRTMkO2NDxMWpE6n=#wy zAo3+_6;?FFr&c%~Bz@^f?|H%;A4N{*W&9A{ar0pE`-0eumP$toeEfcB)~4^|my5f|MgvGe7no6wuO#d}KQ=sKs6 zPYpuPBjyZS`%--Di$Yb%|Q z50`s7ay)}UXuM<}&hWS{XXwEE_5oYBpKfiH^6s~MrPfKSUA2q?Y1|G-j^>4Zs9OD} zV=a1&gN3Yn)e{^ja0Q0$!>)^mcR~;_SIf53MH#)09~mrSKt9vqcTovnYiSTGz@^+g z-Bo9wdbck<9F-z);6b@5jrC2{y=bLSdXd2du9dVY!qqJx#@AOV=H7EpgMd3RF`d0u zE^|3-h2k9Tt9dU)OjF0!tIFV#N7JpTN2O*4f^RF*h83;6(H#&mvZoC%g!8+EOnET` zz|4ua6sjZznl-kZtIRQKXy>-Uu4PQdfz@WbkqwQ&;uEBQ>|2ZKyGoPm(+1!e;StOp zXREobjXuQ#h0_(%b^)4pq`S3mFPJP26gBU4+~eo0vrq19$u_B9xD0OhaYQ9t#F#Vf;)|6s+bMtwTu z(1^)tYrePb(Ditp0*Q{;a%G`!ihgDq>l}h1HH~c}Bjs5Z?$(dj�Aqw@fi?z3VNw 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 Ib4q9e0K}%_ga7~l diff --git a/docs/images/mqc_picard_insert_size_plot.png b/docs/images/mqc_picard_insert_size_plot.png index 1ae24bf252a11c94ecaca34b468a4fccbd353811..41ebd21813d0e614bb8a41839f5de6b5aaa79d1f 100755 GIT binary patch literal 59566 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 diff --git a/docs/images/mqc_preseq_plot.png b/docs/images/mqc_preseq_plot.png index f40d18b04b4718e306ca1d12ac2288c663c215d3..c4c98f1703adadda6da42cdec01651feef48db18 100755 GIT binary patch literal 53270 zcmeEuXH--1(`GD)3P=Y*1f)agAV@C;>Ag4Uy-Dvyk&e{R1*C-D2_PK>q)Ma<2uLSX z=@1C)jsD;F?AiUiANK6tbJXOL++Uk{=9y;(qtsMn@g7n>1c5+!@^TOj5C{ta0^Rnx ze;c?Xx*A&r{Bz4)LslA8HA001-rTj3QkDXNYU6RP%&>s>58lY>yMsVP9+*G37OZJ} zKp;f9JVZ*%=k*R6CjfeqeS=ozP0kqbbyJ~T1u5LV&v09+mMssvvH{{{*m^eAP&jv^ z(0bN6hDOiM-?TUOH2O;f&0X(toSrR`T{kw8n!;UXUKzP6U<4lqUFqGM1;GymtMRHc)U z`+DqW?7#23CZK6)iq$K2G5>Xg#1{E58}jeNiI7>$Mu0#B@`W7#r*08EIL&sj5;2_g z2Z6YQ6B~iQFRR4QN)E9-vs?ErcDhaGn)fZM4FeHZqjN!pcGDInSKIyqB@$!}xk2YK z@#r}|uJ$<|{+l5F;|UXH6X%vPY7i*ou?#SG$>E=WP6A~~BOdMfZ-KX8UH>_j2tLiJ z?%izZQTNaBGoZ_(L-GzRJ^mWD{=mfDb#H9gUj{mj|4yQre={$>dT#`(~qTBm%00w zXNX1hR0{#NjaTk|K^JAMThyrH{VNnsIg}olWBM!194qQ7=RDGm|t3UhI;8kqg4jf!<2pkLec1ryxrE6K){ZDQp#X=^i zfzDi>$HVwRrzIk9{Eq;CHTer$}2D0+l&G+ktEJ|rvj@98YWYg!hj{nj%%)R_#5zG}-p*72uV%qK3 zi)fgxW|_|^TF_KpR1Z3)4&2*OykW=<+W2(iZNAy>4Qp~dkE`Yav$M7Kn?3Ru_+vOzm3p*~w2ZO6_I$q8Tto%BP>G?$5M2{-(;X*&)~h>e zeJ;5kQH%K<|BkbRJXVm4S|0HpYPylmXnW+h|<$_>BxchhE2{s6+bzyUcRY4M1LA76z|`A_D#A zGiU-1I#l=J5sx^&o*yXbH=r*~I_Z1gtd}~O1gel9> z>l~aG>`%i->s?4C$Vp5L?FZVzJf;p-bOT>j#p&kyDx(-r-pscU8v(o1H$s+rf5L>H zdpr?tzC6mU2yQu}U!3ul%SpSMpA+`FMl;h)-bmg85hTkQ0^Y3rva;1n+=4rOf94tq z+e-X1jEHkVolbA377qz7BbN5!if#@XicYoXyaR$#l*PHz<}c%eI|qJTA6s<3C~bS` zbr?oN^_ctD!Joy2#Oj>$hx26>GZlD!sT$zgeCWeg za#^%^aj^ny;%N2Nm+NYg#Y+F> zCtF$W_WSb;=mK={qTjh8^R@l-w4iRGqD0a+ESl^7r(+vI)}1D65$&ZXMJ}QTVV*b| zt0G75L>eVdf86fQDDFfb4-hDpc3&RwvzJ_clbAOXzSEaaFdN)#zRqTxH;^U|06t-#$9- zI4v)Rse1IK;-_spaK<8IT-bE0nO)vME+Pi;*9XBVc?HT6 zsX^=Fhrjzg7inl-$_BSn`f_?FXM^ zeyJ&Q4m}^!4ZeY1fp@AV(*`S z)4V*pi3b@otdjtqZ8_xN7E;&ts~ne3Q1_Z|yK8_i=kV>|3BJN&-3od9)XflI<qHHYo;F$uDYs*ipqQ4%ro7kzR*MI@IeaM-r0w_41=b6bqXpJ!q?m9zOMUb ziikg#iO|&|s}kL0D!|8QD*?Df`|gm*uTxb7E==@% zKKK-Gmg!3)ay&ONIJ@oit3%Gd$-aYs4h3&I%`c*@@f_P3aB%Lvks%)fme#bHVc)To3s=Y71Kik6_n#R&Z-HfyL_2V5HBa$W{W;2bE0hs+Q zyn0{ro+VYl!G^@udfFaoyR;dB3^=@4yxQ_P^%LsASH5LD)r;3h!AaMJVjgY?Z}Cpw zmriK!OcmeBH}6k;Kk7my)>Ahks}lOvnz$%tMZT8leI6|j=yc~0e=eSMY-CmVXCUtJ zCjWz@4H+vVwKLTl7D3*bc=#iBpUuU_#ibh;!3XP}x##ab9#T1?xCli7lE_z0=|Qjl z?y-jX=XbwKvBk^`USIxj3(d3GztvD|zuAu?vG*fFY724r)@8owUX#IMo8~@lKcY(Q&nE6bMBi_;X{51~|<2`7w?GamO z-bx=AOTAUV#)|#kIVxrgKO-$_o%0TeyY(-Y`loupwAbeOP!x})W(N0t&gUfNoA#qR ztGJ(pt6ZPg7OR%3GM)L-u?6l%tUjXcUbw?y*26J?RJiC)k*Zdfk6r-lt_EwdM_MA4 zC3UOVk^{-_Ro~9|6>lRuu6u*b$iu=9l&AjfwvOZqK5DQ_-FOV%3)G8a0GvK>yDPD% zxNyI>2wNgQAnl!IC&D-=*}=N&UA!m@x)2{-EDF^d?mKxHI+43}$7X~TV-KVldsu$m z>j#TmvK^-h2v2!$I^4W6>Jlu!KsVufb*CYaxdM@_`I^)F^WAg4KcD<5Jy{!-@dNXW zPz7gvt*1E;YS(1ts*M<3UWof17n(5rm|{cc&DZ?yE)T_j_aRo1Id16LV3GDvsKC0? z@`lX9>*LBhch>L&j}&vs?-<>C?YEPq{FL}w&9*1q%!O`*8&~uwxi2Tky36!>xL8n` zM7nfwLohy^jrXCR_sZUjqqlw(oO4gJ#Ocs08Aa$ybMd|Q?UV{xIg_(z7p2d-qFDg@ zrp9oR1DA`JH|MNK#8sv0jUR6?=W|NvN7FA`S)xbI-4~+Yv}vl-`r10Yezanh7T9fc z(&$zfe{I`Zs+Q2Q=59l0SEJ|NmJ=7^;!vMoMife)WkhKen} z7VtPMb=ifN3z{h|!ew%PUCnknCX+wA;8axT^q!m68R+Fwy%9%E>VQB>_?Wf3hg`%} zU$1Y|$m^csJ$C~oa#m2;tw3Pf^6+}4wPX8jK(y!Qg8)vo_E z(HNA8riC5(;*#bjS|mO~s!qFj;5M%bdQhRhkaxPAA1_vGF7iBQEpL=K*{%*`Ko19t z1GM{MitjY;HG<|W!p~o1LF@;7yB2YyH=pJB`Vz+6;TLhSyC0y83W|=)0!a2v<8EzW zcr@1zYEO%t8Qa@(qub;P`3%vy|77uE*4yyAwh8LA`&OgE_WP3+A&+D1crnj!0n^i+ zXjY+bNw5mkm<9d-o{Xx~obQjL0)lkkd1i60_M?78t~jlDp6*rQH;TFx{CRL1uX2At zUs~{WL+kKZ+Ct;DTtt6*cvX(?3bHR~N#CITYGqEB5_kW)1zDnDxGFkx%rzHeeu?rH zhlyt6x_j>4VI4!vtNpf;x55{%-992^#qNNie-Cv&7B%Qy2n`_u%TyfKUz1i+;Lqo3bu|Jn_>G>7;zIJi#`mfd%8bOLjS8pzv z*ZQ{iFAl*-6I9bi(6!Zmo9Qy5;2Ygy(C4duK|vS2POom}CiL&s7MB~v`DMv9hRVgX zv;GQnkWa9H3TyD6;GM;rEat}QEhp5ejl)_s*UX;**~Z;~z1TdIOD7Q3)YFF~j(R#4 zMb!ll$1HL+7Cc?h_`=iZmH6PZBd0v#1Xfo6Kdr4zTrc29^=EPt9#6ziBviBlE+RVp z506NRtMD@a^wk$2%WwX8$PNN@I()j(#eMRWxx+PLhWmI}BCvtg(kjAtEzN6pHpm6F zPm|((HX+`)=unyL>y%xW*^*%#inNSZ0uGFf|GX{^S2Cw;ddRL*w ziba7O@(}w5J#BKMh1$Q#(+NUxbv6Z{qV^s2P1R{s!+nkCy9dv}{dI-M4JN1y9EqFL z_2V1AE6p*k#s=?s&71GVs(Rwr9}Y|&fIwWKp`lx(*4kfx{!BlP=d&4sruknB16qaY zA&^yXiYSAh2%V_nr6R%5Y zbd1y;xpvn2(z}5AB#c13n5|U9q(Pb-PBds4kI)Q1+kP&_!j&PdN!5 zX2ZZUaD~Xx{rey&lHvdATZI@+21#Qx@{yH`i(IxAW;IRUYOosfd@kpz)qYK`K#Y&X z$=UWClIT|YL#))lZK*?gO=Id}IWC+j!j0lLaol!5Ufxo(%37V@T=Ja9KF+nw^EmP+ zUi_Y@pqD3#mmmMiH6hJXin`_^?57RD%ZCZ;xjVWjy9UU<~o&LNYvJ#iM8Uo|^g*uiy9exj+RW&1;7SJdlgO_8t~ zBktc}(lwW#JJ|`1nd{ZR-tK2LP_unQ<(wEJYw+kPpH}sgU=8?>AHJVqngb%jI1XhE zyczjPbh(GbQk>GPW%>nJ^kIx)gK0P?GHB8%F||tn*%`N=YV}o+U;kMHyUKX#$Vkjq zib9-vC&{gk%)XVFJe!>R)*tVdSlTM@IUY?e?voF=j6%6|7H-~8d$6ntC>Kg;Rf zmhis)qxaN@ZH5syg@$W-5{6AO=5Dm(v&qqY?2=^&hyL+tL_ zPKH0gGe{rrGbQ9-3Em3GD}~jl1Y+zBqVDhpsDTDp}+^+TcqzEyAL z_;{myqLmpO0{q??tUdte+_9RCk<&izO9Gb3_j+#m!|XrwSg$(YV)!RxMtUAB%Kw|< zzw93~Te`nU2E3q6!bCC5_5W}E|DC|7`~T0`1gn{&qY|nwgU@DgXsB2HYBRu9_GR)* zBV8ANH^YX{Q236YrEZLyw$__NVq>}rigTEU*{ z!KWI#2+BA)kHx~gz2&NK@(Guvax2|#_pq%?0g-PK^&itQu}m$;5gbrucBP5^!%gmH zV$@9!FZ}NST}EV`c8WF|GA~br8x$a|32@QriRL1eN}JNEaF3*h5-0DZLs#A?{*F%h+Jar?sVZXl=!yMQO5~Hj%OY@~GN!jd;3?8X#NoDG zTX!BG*i&-3yuO*Nl?7W^^>$}-k9P3M#Xr4Mh_C&70bWxd$J89x7A1NIrL>K};-&@OTT8i0j z=7{H~s1v)xYsTgeku_M7BvBPRIIsB#`&H`w9zq?E&VH25JjX>ZGJHn&d$z8B*W?FW*oEMdQv7h z&H7z|Lm5HgQ7I4NUTJh$e66cH{qtwZ0_JR86&YB^BIGnq+h>`9c?7#DGqB#ET+(Ec z>dw5y=;UjgS|CZwJ6`3vy{gtl>I|&g)39HGHf6^L8LC!6d-VcHK=yv-(sz@>73g>= zeL59UR~Vm_nm*}5mg6%Is&usFq%tY0U^gZ^;{cdJn$+AL`@XTbQ9*@$>Z1GSSBCdF zs@+l-Hag?<&y+1&&U}N3FD_}@RaFAo223`MvabXXUy)yhFPvKTS4rd~G|_1E79QyR z#Qc1AMn>rZ#%gNq-@Ms5Bo#{A+@sh%O)r0BqS!%8e3X3 z_;C^yzC;gL!eFpc-7j`Xg|;FNy4O68I(&peWyJ@dy&^QDSUd}f(N~RRh^8}? z4)F5Y&^Oq={QxdgD4o4!ljAk(wmbX${eCW1{6VscJMV|{M*Ob>_vJ}V~A0MC0`n@dSl*qCaW}`RcqeZ7VM!Z&5 zq5`%~^u>gGIEuUz-kY4nlD3eme^V-^AJ1hxyKLnLB>wN$J%l?CQ>p{@{TD5CFqAC6 zd-OTopz17QP(9k=jgoL8=SLOqNV1$CynG)Tm3(*P&7_hh*<_i+u$anaI#|HjMk1=m z-!X*X_mYROgM$NXaV#qJ7k_}NsK9|NNg zv!0xs_@D0BxwtUf1Dr)N-I`OW)_`~tx3^l&%9-BjR!FnO<>~H+4sb}!pn@0M5W6lPFaYLRFY4~fnZPD@mxS)YI?c}4*wwuFeHK@NPT?$+^)x1*$R6P^Z2W5mcYsY!-#F%w7^lcv=935$#UjM)q-!_QV`^$jq0?AUP;kys z;DiK|osJcaMH7+APDd(E-y#vuMT-v?$dDueGYg=_oTz&e{ST59R%l6NDorh|{#+XS zGAS(zGorZTVn^WqLc3RMb_qZnda^@|CGyP~1M(rgHdeeG5|PS4R!l(iQN_mJUt|S1 zKgnUD#Ap`9j6+icw3dN_7D4BK7}ru}P@(yOB}@Lc>?0iyQgGKVNnpA>PQb(QMgN5O z0k}j!N*Jqk9BPL|eYwJ{rMA4bwzi`q2$3UpmlL2Y%T$9tv&dl$!o-K6TA*Oe$OVvz zI{&l1O2eiy%poMN?s$1`vuXBx%VmYIjfHh6$nf7{MZEPbtgi0t?5zIuNwOV34)6kV zLUq86(n&@y>CH)ieQ|g*jPwv`ogeIu8a)rasHm>KIYy2zqeAg#3k{L^ot^uk_!HfY z0w-#Rf4Xx6&zB;4Jnv&B5JUOo2}~Cw9DHJasD0cnk^HonPT+d8Z=9&q^pS&u$owK# zF~cL-wBu)w;%Qt+$&HOyB9{Ige8}fjlM=dnQ*8LmsjTKCsVo+8V`=$6ckMm$Q*w__ zP8u3YRg3K=%Tkt?i?UJ+VK4>q(o#F`U#|XU&wx$_0^N@)#ow(pT>v}%xbF7B(^w-$ zvxvKJs`#u}Nf%Bhac@~|Q-dT>1mR%|ghsQssaX}T+ZBvRNctlz?o^GsZ+UkGPCc7f zAU|BvmmSM4Pu{B_ikAkoix9ohg@xC~#_cwUoDWX~FWMSzi?{*j;8*^^4t9@Zq2dR`#e3ZtnPeu3gKnV9s z-J0`|iPBZ@G=Mv_On@=Z&dv@G53jFVpWMf&))94T`tYkrw-k98n|c02|6l@>e1d}W zwEV)NxDD2PrryBiiqB8mcc|Kzp`1)vdG81G^zA$9*^r!oltW7$St5f9{M_7}p+X0! z#UF#qh_2O0N3ZFlHPcJp>8-!;bFJ+K)`VGHRyv86tOPbnqy! z5YyA={QNuft!aRRgrxIkYsp9y>%ebnP}sEv4JS^nc}^lzW67nJ$Wfff1-4Jc=u}4) z)NeN)#kNgzauxwAD0_W(Pz~NqA&v2ew-=uQKuARvvR%K_meb~rL5U9e!QVmqPfyPG zH%D~~*f|Y;OORR}*SQam&(f#Cl(K3IyJ+*1waV4Y<@I%#IE!>5c!~cx-7wDexIJ@L zS)>#jE&y;p4E*5_SPh;I9(z+e&|BXbd8O}pq`~oO^r0%<+-QNz1`jen`7Wcdyj(4% z*mKr{cYvcBcdjf6W0W5&|5;?Dlf*zow)TKq=27Q88Ygdr zhYoE-Mq#X~+<}o&JuTyJM-pG^=%k$CrJ|fao~N<6aV0!^8RhnQ9~~^=^|EN=O;kv0 z%g;LGI*IF(+kb~NmYTQ?Kz5N)6b+^{BDB zI8YQ!FedUI7*na{laIMI>9wpHR|TT)Ed(JNmW59;BN>qIYZqt&5bJzccHln|DmK zd#FcwJejE@v5*R&qveGH;U)nvYvhBA8K02mK2qd=7wlz1TtY%K#k^L7cQlDK*rON~Jd*66vyr>Evdd&eyIJ@Q z=Xo9|c{aIn&r0f7rr9i5|M%k`uUoMBPE4GA>690Ed5+83H|}_Whj>Z%(~({4moGdF<$gB z1ozX^CvTclw5;mZU#1h)lrq=xL^ozKo3bkS#u=2nqrkLwBA)z%Yd0#qI3u1m_uaOWF1782n8co{z%cEZtWB$cvur zH)lOG!qbEk*3V{AI|(R2GX3Cj)J|*)I)^@34|x>+n$dlFfVn9pBhpEW$2qb~5byrX zJnZ>1D^ygu>k-^3$}KajnxT@j%opW#vZW0iaa~<~-LEKn*FpUVv##fB%OttC;O^Ge z(K-o4HPtq#xj1yWI{a}jW%-jhLP`u?X;@gSobJwHNcob8zq8(xdLk9U1R0VtOG+n! zg3q*i8F#4Oo?a?BQCF(wXc#vS2b9i%RS&dEmCW3tr;r6O=2xm^boScIi2~1L=6tEX zScwUA&am*G3=?CBle|iCeRK20TWo4IfD`{9lmYMBL>Pry4A!JXwZ2sl3uAL@OUhu; z;i6YT8U~>*+sV)@i0-xV{d)Lkeh1SRV3DCI5&j}5Ovwhr%%LxKj~^r!Ds?vWbyi0Z z*8c$5EpYKko51Oe<*K(rX(56H7COrYCMGw?akp?f1+Ahs-WeO}-6Tdux9UYX6%|e@ z`B=#uB3m~F>1geaNU(voYELprIcuJp-9jEMmL{gBk+8;le*vIGvyKM_k~pArCUyAo zCZ*2$bhsg0T2SpHk+FohrdE+!KAk~OPsi%S1l*9FVr+ML_#^V{@_e23U}k4rT%1%U zPRoeCAbYS2Y6rk`rP%eQUwXp3`#?1)1o=;u5b@gi2_y}EcR}gnfIKp((r~SG^`+QqQ0T~93QExP~a5kEqwe-O^QCOKgv_vUyO?J3IS+0Rn%rI!# zDkysMVASiG!??yOiUg)+^$Xi#QuDa%uu|T4>_|*MQu=!UX2twZ`2_`a zwY32eEQDfx;(HzGgBTPoL0!ts7`bi!VBte;$iAxfWEu1cy`a@bF@F5|6ApR$0?nVF zcAk{_*lQDMR16-?kUP2!W|X^)4qDpH1q`}FiAWJ310ij7%3u%#LkiymnW8HoK|p{_ zFF2kVd|&T4pp%d2M9a1~J0ugQzKN7h`TF&pOtUXmcNBo={hM0@BO`8Lv%x}v>vMtY z9=*clZs7+!+{-JT%@f=`7KIwdpHbkC(vtB@5r?cG z3TK1i&l+(0lwcP!`D(orV%%X1G(0&1_iRc5lph76;xfr!rjf3o==zYL`md!ChyiNn zkPKMG`?7iI$4oRLht_&#Bmv<3vjS_LO}~<6L_S*%5N%(8!@{sMS+ochp)#>RQpr%L zx8`W2bMY71i7I9y23Wg{Fky$-*3q#-qXh7b8X+dWkw!Q}l%v(Ul7zOrqM~6#4a1x% zn{pHE*W-aYrg%1Ah4V1B{IforkApj$>RuRTCX+9u=iE~_*y*60YJJh?SP|Em-66M70GJWLmVZ6tlA0&dA|m$!C=YWV`TB9 z3Wqi;J9~*-11yVuZCz{I_TBevZm(V;zZoIF-qH>ix_mX6ST({hw)(kCdV?T%;D8PE zWWX(NkO9ER-p+RzhTe z43j8@6@F!VWQ#nz#r;>oNS}AEuB@yqFLwYmns|_D(0C)3@=vnD4@T;Bq~B&#bPeZ_ z*Voth;p4bSLQo|5qc{Q|1qOseN^cd(H`71+Jy>8Fc=K!r2)+?0dL#y5! zJcb|#Ctg5Fhs;|P4Cl^cQyxUQrNl!Q*o~{XZ46}bkn@6H7b`?tpGuC$YX#gJA3M2Y z>Wt~8NQpEkT*L(=%TlLX+}N8Dv(f9cCvRzrs+6WCP$7`!!S6G^Fl3{7DC4-}_dObc zM<3qL+-2|rF%}wpU<^}N(eC+1lY0P9&V&(hYYZr;3toe|e!T>IrwkC(u9f^N35x>4z z_0yD&o-a$>#pRE|iZa9rEV@zB#0lvoylc{=S#=O0Ay%mo9nmMjgYK(iq@b?%e}T#z z+L)vd23mE_S+&3*4=YJou1sZc^_riHHPO=74?{CWQxn9viL7bVj)$}% zmxzq=LoR$Cbt?@F(8x-t$OKtM@&4^$3-MLnp`HbB#*Lz104?E&Pg zu3l{S7qr6(nIW=n%QqQdCn7ufBD(&g(oj6esM1h97b`I{v&H-%X^ldtcL0f#JU*U% zheAH}%{$T?E6IEhnLsLa^OESGyu(5bQZ$4#eByQ&dvwt3*x&w?=H`Zyy@T+}d>+H6 zpxc06$_@S+uM4U9s$ebumrNEvebj(2=bP;_@AiFATl~vlzyI!5{clJOU740O9A7TC z%&7BOyk^FP8foCAYO~*W2q`G?86X`AoBTQ`T#9jP9J`Qy+3lXadocDhMJF z`-^;;B|sgCpjt`CFzeSX{?dzva-B*eYXvZvMUOiZ`aCm1oL|6es}05eqWTtCK`?=; z8Zzr498yvA{wr>BkP64H1c-nuKe-VoZx)uW0*k=q643m|j3(ju&KA1dv3sQC)bR_FBMh0uK(v3MrI5(cn)qrBLK<^aR|DPbYQc z*B=A*D!27As*l;t0#rf72|?Hd<3M&s39z7}cNpN>1c1OvAj|I|=!;P6yfK}j`kHT25MSvrynV+oAhx)Z!T^1;ipyNMxkSEFCuSJt3on&~SJB zNT`&sC|sQAZ75ZPkyfKZIX1Q1PuI_{-m}koOZnz!je>*I9!=kkQuJ6ae1 zsce&I$jNN^s$&6 zWf z*4%9svGS+NP~Ep$Y;27lMe>U1*ngS0XLDf#t=ty+_~{xB#X}JhycM&A<8@{(GRn9H zk|cl%5Rd|VGUoczsr$>kzUtv6WaFcKsYYUFlZCd5GXC#6mh!Am6!`JtGpVL0u%$L* zbRaefC{xNJvI?jba}?>2lI|_gaQJ++IT7*tb^VXM>YK&)6<}5(K@#+{#-CA z)XInKbTdQMuQ@Ww1{ZDisbm96C8Of6C`Klo_;x6R*#eW8@$e_87DzY2wZuB+)sZbJ-1R9FknsqxbF+{TA2VZvBg^QRVEUVO z-9WO)pRH6g^5EU+@ZMDeA&o@uI|JELdHTu^!YG&mX$Xcwfa)*3uw6_)eNO`M2Lx>j zE76w-D%%owLs2~8Ac|<-w=&|~KIY`Ak_GP>uj_TMcu7=WYtAo68Bbv69cH?Fs#Zx9 z1_mKlBf@1nY<+ltU*3X@jAV;oDy(ogT3KxB{p}O2fy6lHKS9 z;Sd$cIJ;aGRtZ8U5guqGi^)OyRUmsn-jaMbJ)VQX?M@oW_xykBlz?jIzdcpCMHnK) zJbXKq*Q&)yKgxIH7+aamkX0FBU~J^);OFf8PRO6#b=eVC$Ny~7UQ0o@Xpw;byJ^@h zFd$u$_QI{K@49RyR-5N1%b|L<(tcY1oYbOg|4y(9oXz{wQ!nHhPd=IH-h<*0E0sO` zhr!tOE{$&2(J0!;12eD!a?peFov{C_duxwA$va}v=>g_p=9=5sFW*apzRI5;@8T|hncdwZkq^V;J*j7xn7;wOab2xh`;n<&KcGV$c*L(zV+R5X{D`kMdl{V$~pI%drlH5%n42g{0bZ+Q9iE+r4#B<&@c?Ec*^ z(Y=5In`2wgWX+^V{!Pgt-=kdo4v2Ok{X20J1HuSE1S0WdgDXg3uH1m`g!rd}L*k1l zaqWWb_3H7MHcBrJJ28XT?)bR1G0Cn#HJ$;_Sv3RF8l*fDobL@x&iX z+(zwe?M%2>v!frA#Zr@<^weIYCexdg7a!P}n*RRPe6-*0y?nR^)~zy1;hew@(jZpe zCQqF=AL5d$Ba6?_tUhCYbPqk3##8R=Ar*JblbTXxv>L~#>Z+wIYx4Dz$kO14_uxAZ zUhch*2_)Xo#~J%J_T7SFz4jNBr+&1C+vy!UFqIccsi~6R)9B`>AsBP{rK+%010XL;#_OT}&Dh#sRur2i~NsIKYy^#z5~j0((y*}%KX|J93_K>dYPH(FU*yir_z2uyrQQ+&?jO5ep*|G zVCwd@nDFfuD|M!=waxGx0)fucn=w*;-(M+zYI3r6pCXccHg@i`zI$X3#32nNZ%)B# zS1P8iFIu2cjczq#Q(nS7{VC5WF2E1Tb=Ju_Hr?I2X!7+NL(R3p#XvY0LmQgo>2D4*47qA*Db+{bhSxAHUe~H4uOZ24;TSK;`IZ7GFAYvoeeq3Y#X*C~8q*vd7e%YFNj;WXbEX{=mE!j;QT2|-08B3= zj!-upg^LX5r_}8fRzM*QMqwX-wJB+MjHQ|y%OnEbm)ya?u(PuUNbee;ikaoKHOCJc zzB@|CaE6`zSM*-O+LDoO zd-*#U8fFpIebk}x84@%|T_^jMT3;i|%ILs9>Ic&e{4M*WnXZm>ypH!o$_Mf?pB0G#D=`StWZ;-eTVgh;3{-!n;gqIL8{L$xA_=BX5wAL>poEE4Zs{toW>u&gPn-bH4)qX4F&E)j-{!D#wb8|C5 zL&a`$TTGDU(ONk3@qGZS`t#$jbYAxw8nVf%0p@a8IFX43Q>=3v3Xh$+Lr|?@ZZ`h$`fwDlgA$VSHRp>^Hbzg ztCZLb4=5~$POX3v-#vi2x`r=(mb@F5TmwyEN=Zq#@EWcZm==JvY2-lt+*N|C45m2N zhb!Kit(g9PI$&;=V5grUI;}H9RVbbw*%&JHQA}#066kfIfiOEE16=!(!@2xU@H{(y z{CHCvhxvaPAo^|0>`N7RY^n;zDVjct)~`!>gwFhajHUGaQc`a*CwZXgtS9emgNQu( zR`Qb7fN**%RI(p)(z*XKn$;hEizhDuN=6H6oxiTnMehJQQH~$JY0|Q=*#qX+`eq|~ zDaJMIV#VC7T5Y^xBebJr9_w5ECr4vAVpB{nR^kO+W8HKCrq8mUpC9 zEtP(hNwzpdp}GKK*0TDi&3pmc{I6vGE*@w#E%2N3Y0P(IHNV3j5=GDeN(MwlAzyp$ zJ)%^(Ua;olw&gaS*%>|}6~lzbHikJCg9@oJI)m;>6WD-r1_2AcyKt*g)dWQQsiJ~C zpNy7YcDjGY{pCN1Yc}c#d(4wn18?j=f5CQZbi49#sPU2E$4;S4W{%a3g}J$_y$IC> z9N%H?opcjcR3iBBE3FRJEl`Mjw9YJDqG3d)@MKoLaPBuc(0$AQZprEDp4lb)AkD0T zhhk>W$oN*5R5=}n}GKMeZBa2@!X8$A-RAu1n@z4Q&ag_*A=nfPp4ju7#0gw_H?v! z+K(08!w+OU^Npgc4WF31I%6y~4x*HwOPlsi zfvuI59Hzl)9itklP&bF51CI6Bt7oBhKbuzMc}sm{EWyNH_hyoaod&)gQZ+b-l>+8$ z>LtVBMEE6|(`l6GF_7R(PQ3H&TcZ^5SIO~s@`gllr-B%GuwjLbcu?D9r-W^oP=PRq zjkeC0cRZSdAG+E_zYS_wl(r=ax#sr{o7*JZ*O&IVXSd=AsNrN}_W+~$Nt6wjd8Gen znx8-5>!%_PnZcm^=X2?EwE_GD8`nnlqwcVMT+y7oPeVep|9x4s#T4jP;oMyBQmT z$BOZZ3`GnkzR^-cz)p!Tpnha0ub!sh0R6ZEW(8_iVU%?xvZF8{KWTX%fTO3A&gaZy zQ!&E9CJ(>6gFhB;!ovwxl&dYnZ&Ma{&1(L4a>43KfRLL2l%tq)eDYzv#aDQd7S9A8 z+I^5tQRJxSjb`k*OI9mkD`UM^wpwAN`&+3;PlHxCR65q=0pDxFdPf|-Slri`wmaaL zIzwhGo92La06-%A*NqaXI^x_U@PV<2GK?y&YP`7jZYl`;9)3HOaj&p25mYPp0xi`8 z95P58km!af|Mnpo{_E|fzICv^(`*J)x9tyJsQk&I)jUCke)Wv!w@#ZdmGM?7UB&Ix z!LbLIp#TsNR|Ai@%ja&V7}ESXD1G7fumjLW3Ahr2z0@y4D|Tj;M<_&VgB}qiP3>6l zVHDXjM$3b2*K*Ptb}#0PP?DN{wA8aR?6CUu3?HB|P!iB+xgGvCiM-?Fyk)Mu$(ss5 z1>l7IPr`sYkfGt4Pj9D;Tm?ay!uRIq9D1wX`ybfmoL1p<4CAMlq!(RA-yJF3LZu}j2)2~j*UkYX>|R=OFDbK5u>L%s_jTY z>=YYj!oRB`>4oz#^S-#JTL4?=(a0k%zGsmaD-&y?Ztz}Z zJEEqLDRWSXwJDu%%7#1z4|~smS0|Mcppdt4^p3}!5Jpc@ohPvu{s&uc8CKQzMU4Vt z5GvhBNO}%Px1e-)oC8WX5)w*-2uL@F203&$2+}2uq%=yWh;-j|^!LB_eV^z0_(eaQ zz4zK{%{k_rV~pKb84DW#VV#3@L|zZ$hbATVrv1@C!&*yXN>!$(PJMTG)GpgMD zlpp)-DRGE5xq{91ER84aQ!9k%p#-d&B(pGXr#%|2O-4MV>vJ)*6PwQV5~QP!w%l1n zuk8zI03MqP^T6A=rw337(6{mMkZ+-I2+IbRZ+%&9?eY21wj^5+E9h2Ntp@^Hy0zH0 z@DGMQGw4jB-loJe^*H7nM3Q=;dX)~Nh1ng73{;Ui9r6YaH!j`tdHM73E{GTXPBGZr zic*`>o8r&F`)kz%naXPVNLC|QWjksP=3E-FMPj%Bu-{^pg^H7tla^MzJLW)oY~G#O z`1eq-McuQ5*3>hbo3F?6RPHLkI`I(l8p&PMpW2uY!}M&QIh9}2+FoLhp%|{_pjGY5 zGTrQT0kBE1E=Q<%SmWRTk2ZUaCOdCJeDXwAQYITg#R5*!SKH{MSxpEDl% z%=^r~&C>S`M|TWHbct-4s06GXYH0L~8!S+9C`gn>w|F>iK%wrv3NeWGHlcHP;T+T? zj_wfvD3NA4YlT{qNtABFM(ve+RkT0o>7vUq=f;Ya>e9-6b42tWz{gQSk%2;%Trd(z z`bT5?f62z?fmO35huF8LAVdNBbQKC4t?xga`!g|`r&h)stL13zg@1s0gR0>luIvhZpQr3D+LBU*N?#e`S5qZqNl9oF&MU@5rBznz5n zI>;!%JiF)K9)}6I&snSpLOX^iv$hHz+=hZ*+Go_YQutKQrf7%0Rt|U$+FDw>bM-(V zK`#^5Xe%bX!yRRodx8z1uBgKgwhVtp-Vsfc-emE1uAgCg72^3KG7H}Zu<5{AK1Jn- z>E|n|_Rg|;zJj4YKLB5>s#%>)%(k8Wli-xeh5sZ#^AP`2qF~8LAtd>5|RXO117R)CGH4 zsLP>byj9XPL0t15IwO>M>+ZrR0ZA{mQ@6X#BoP4u4;=I@VqJf*q8JprLYew*{*)0t zZGG?~ck@o|8Dv}?Pki|idEys9oVK+sITV(2a^kka$?XQLe)Gyxe*m_mD|GT53#6Wf zMEP#}|Cg8Khjh*5wIZD{n4q8<-u*5u*+cO9o`PFMqj(VNkvNzGk|M+2Hs$HNVS3KK zmXjS+lI_>B7a^#WCmdki3U7;ol`EdB+WUdM+#dJRQ2DWSn{&_v0C*4Xq`K?X^ifQM z$6-N$$5D^O4FrV@@!BErTG&J{e3EmqkQ~t5sLF~9aK()9C18DyF(IR?a&=p*ApAqI z@S;z(LNR3}%$vO#6tUop=TwsS@B$Jw2&&{KY$E-~MQ#ik{r)?H%Y{WnAP&IW#1Tn} z?z4dI_WM(VvaAi!C<)(UdQ1ux)Ce@l!RUWU6-t23w>F7Lg~b^?iCr%*&ja=T0ND*I zgT$3LGdc$TO+(Cv0yJNXAMq-oUweDsD9HgjIpuw;n~4EDVA3ldvisW{Xua&s));?uaf=oYV}=C=cSS8-+-Kv-RB4 z5rfNFqDk$PnYNj^>Xj_Pr+OwY%#vVyDTsn%OrX_RW>G$K$(`{2Sd^L zkMAiTScBA2n}kYNWf6~~4lpR}=RT`7p<`fCSIW}h!`T@4u&D)TPf(Bpyso3k*Kd#( z#ZW-4sL;GB^8JQ|6AHFokWI4`qjw2^^MSm18M3qGdpAGfeug-KB|Db64oEGn+>S}J z7@ai$tnu;i0GK=W9Mfk63qCWW9O^H1j>lXOoJ*lFi5)7kGufin<1=MzG29c(?xI&E zFfv9!vN@4V)Eh7c;HKjxQ~as_<7+L3DvqqqveeF&_->0Y;hilFm`=AqWGX<>6aEhA zPW~3Bv`^?l`Sy;%OBk&YAPN`foh<&tu$VS@4G`WQ0lg6*2nU`Px9o>2Fv+W!C*L>| zWKeaA31x2Hp##MvI!7K}O{)x%IEh-fo zh#EALkc9K28T@^cKPZ(|J+T!%lizsi+9PL!xi^dbCn*OwK&2a7>#{uwf*nB(tznOG z1w#*(LO@P&r^sLwBbf7q^D3mjOG%AQu_R%p04G3>yo;V9AeCQQs*%1){`=B13Z{7s zv^BOeir7RsMR3#(+4#`0Ebx8(7bQFGK-?y-32wHefS!8V-tg2X9MVC0ksyFT#i z&`V0Y7QV|;lOS+=90_g-NvDVN{&u5Dtlk<5o(K3#1fB6&q)+p8gr0r)P|sRWgw4G0 zSrH7a?}cXBteno45;EUKRaLV1(NR)*PqO1H0FIGtuk4E<{}k5ck%byKoHPUigtWOs zj&J`Bri8UBC}-x_WBjD=cUlTS!NswmGS#mH7vh;Rx#P%x#wIf4xX+(EFMbRAF#Wb7 zFR!XjrfEdblkU0d=*ZaPCIj$~H)oD}KR&q=20krm*;S~U&t1So^`@Y2zj*Z{*e*`? zoJ8HqN20oZZV0*lW~+b`n+L$Pmpb`_ttcgggF8-$2j)4}$ zVfxIe+;(m28}sVDk5dS5X>ns}T*w0EAC z`5$+!{pI@3TN-{_!_lI5NNw;R!|Ms|URu(JJ zD1u!61Bh(xc0efvLjL?OfTDIw*kuxQ6qH{yZ`LNqZTdrvS9agux{H#CG>OlsXM!`m z|0rA=+=8+|h?Fu6Hie6JkKM92_?Cr2@PtpUORNs6+uw}Ms;W$it847xn%1N2;SF zXTQI>zrmsn6iidzjL$bKCE$iDr~WyoIUP`3w%v}&Bdk0<#Li(#wuZt%7>P#=#9@{V zvm&q=OA2^O3UKFHI#~b}Ew&L`#d(5J|N8>BDt)&HeX%HHA1110?84PP=%Lxel@oK82Fd+@qQVNFSCqQ|}{DWkDK+y!0HWN>5 zjM_Apa7Q57{?ILbI?g|}e1a+sczYuo3D^Ok{z^0=a)KdU>M`M#Vr{z$| zs_`Hij}v>XJkwycKqZIjiWomyvmmHj}cEv|a_@d03c=Z}zn1Gf|LsegO zZDoI|d5Zv zzhe@RLZa)?suU&JTwGj?jd6_O zYyqwzT~LegS(f_s=35Ymx~h$wLockmLAHaq5S2nQ+P*zsUJa zwzoQRUxH2|7 zH*OuM*wOH)XVOjPJ>j;G`VQ}AVX{l@udohCB#DAVukjlBP#*a$eR(WCE5mR}!(_?8 z5d%m|=Q-O7#r>ony}=LIV1)M*gm0NbXhyRzvvgSNm|zL2NKUPD?JXrT5P&d~X4PTe zf1i3uf#?JO2L2SQ?%|t=JL77V$UpFbhN^(ds3t1WUD%<2^h8=6;}|c7!cd1Z0>L!w>y9NV zsrkBR+*h6Zs8B6ektWUGaw2IYhR~}bc=&m2NTbN6o)SKC<-A zonZJS^)Y#mcp09r+;8U-$wnr##xiDBtrEo%^Q?`)?ADBCBbkQDrI-y#=5u#KN5TPm z#_zw=n3o<1qX)0TIuqk8xbB_~GqcK~%eIa`HZKxK4UP;&-7ojQik;LC$H(t`*c5}l zc4S=xxQnaP*?&p9W08}{yT>@c(6i-pqiySkSX2&22kg~rwqd>soqN90DFWNVkIdYc z&1)E>AY%J1zH1v@`=Zod!x7$-y}0*-CK6INnA^`y8D9^#9oBzjkHo!LqeZuoz9jAI zH0L6K5^~<{6ZLcH8(9An^_c_&ww^h}n~AXg+sNF1YU2ON)XgJrPW3_=Uuagwp}J5} zRDIa%78&!D^rrY1DIXDWwF&IrdBXcmrF2K{KZ5Z6oW$^vdL6At;7|k*US_p@WH1va z^>7#Rm}rPGtYPMkPTwd}4pQdu>hR8z#uy^sH+W8H1CY)_l3_SE`ZB;{!7p-4jlF@+ zV~rGvAo~emtB_;If_sO><*qF+D`+483~M2#>jxmKniY~N5dda-3v5s9>p93AXaO29 zW#){!o!DVcuehHUEB-E0e6cYrK4Zh8b4YT1XeMB}LN=#VPG+(EahgpRt8b?m{l0xE zR$}0(PTT;A!j|Jv-(y2Af^v<(<0Qe?4g)S-yQ=n=FCT5jEqq#V-6nUDr`Zb6!0E6U zhjg8<%*@8v0Lub!*jU{9qmNXs(-8TxCm$zc%h5(^ye@zoLmG*gcDb~zH_5-+adqj< z?p_R}sXS!=a+cQKg^EZ3)Y5|HgvgQhGYq`p@xL00^!aDY6D;Y$RR<1lBAYQ7h0sHq zZJA;2;y-&ESH)6YdY)eYekf^7M~^k7y1b}lBHzb<-V~l3?Mh0IzWGMjL%OVpe?h#H z=Gm`px|nE|pn_@?R#c&A-e`KC4_wDQ6sFMbOUBOIy%S3NI~c;3LJx(@E5t|+As6m` zN3|M$=-qulB?8)4n|#haj?lWDS6@|I3+g7iNbXdk?VA-3zl)Dd1iFjOs^w>*x`9g? z8C(x7xmDS>DhWygm@6qm$DoM5mq#j*);XZ*PV@Bn9r^L@1 zk8eYiN2EuUBeavaZrX`%aLockR1eWZybrNfnVsTQq=J3M!c|ncz7Wa*tae?+(dm}`vegCr3((+65tDC~;l>)@%7>YGlC0E< zY^^N0#y6k9;|T9A>-t(++S%o%GoE9RRB5s-+d~qR=S0dhD|@=2V6X+c^)O2q4*%>qrt}r3Z*flnm#h-{l!N<-B8^%%Ri!mC&CMg&||2t6%-AkSO%P{>EeJ>FX!T=zE zf{K;dA(-N(7d7E5)Y9HGX*VXR=yC&4q#X;s@RsRx$6jCCkiB1y-V`1A)Xy!%J})wl z$t+?}ag&-##7*kzRteujsZeG5ss60{(G#SZmI2J7p{{r-p7IJP{Lvl_FM#Z0$zOi0 zIoF9$RUqI^n2(@q*?A1hQ*3?Cpl>bVNBqIR=Y?PV`+;4MMgTiimg+B0SJOTSEOhx_ zo0^P^x%Icd<_aDebt~p2g38+cY*oj=`;2&#e$ld^!hC{hJ)YSu;WQ8z-g&nuz&9yt zP-UMYg{ww{u}IP&9C<%0jk1ds-Gs=NK|WhvP27Sd>_srIJO_dUwBohK?nP4xQ2hV=@>sHG|?Jsi&QGM7kV{whbA@Qr7_(poz6;LG1W7;}a9W zV53kbksSRy?!0y^ml3A|s0H#(t!#wTk}V4>Oy@InHwY^M&7f4P?9%DQS;k9kaT3Ga zV6$G)cvcPAudFpz(LvFDF+nNHFvs@TbV)vGcvN~tYi!K8E0WNb4BLgJYACN;vgQ6) zX3k*q_rW)nlo@xZz@{)|#K$i;WH6LbY_*O~+)cxpVj?W&163s(meoB>kcox}`qP7T z%_FL2y&AQK;Mq7wEIYgs=hJmHy>6gdMAg``w5I6hA*q=?gQC{KeVTgS)!sB^=W(A0 zHQ3#csZLyVT@RZ?W}@O)$E1;%P${EF@^PCIgc)3f8KqR4Bl#zYRPrT_R|G=rYBO(v zcM%35wt!Km*dH<~r?Z5Q1Lw7`e9-mGK{<{Nk=%%TK{Q}FL;uj`O%Jt11e%7PDLzQh zf3jrWz8W81nivjcEj-W-Vdy@5l3-K&?Cjl(7Sgn*JUk-I=NX>Obqy-i#SnSh^gm~T zTM6cp9C$4=!w;y19G5#;&&r$vIKJaji!D5HM1YZuuU;yl6Zc&m?aPAfrQeC+AZKvZ zY=7mJ>Vm+Ma5*C<-+9Y79$i?9B+O`IyoS6_0_6yss@aS`VR7kderx-Ybh)&E|a9z2*^%;xL2Qx9loX0kpKH618 zfAmnI<8gYm6lsC1^I4E+Ks2V3f~OzZ{6%9+@H@P$EKfQKBa1w{i<Z(FX-Z@}zh2JNq%*fY??!gp9w)1vt`}sU&x)CqZt4XIf~b43hi` z)Eex^4KhT%gwBgirBj>%Dm>RE$fyAOxwB=VW`b4&h>CQ*uW%C!7we226H(4i^PX4ETr;S}}Z?xK*x zj}os7Fafu}`dUebK+M!aw-55d-h5yS`XTDd+(raL$CRD935UJGFL#n`sCj3p1A$*zI?+Z+%d8 z8?0|&{!TM0+H(5Hd*rui>&dM#lp@k%7_>F?wYv?}l@b6=a-+w07;_E`9cL#QQL{@A zu?I5W0g>Y&m8(L-Jpn{lRP1Ix{Niiz=*icW)w1MvToacH7q|D*h}8T?=uXi(dyy6# zB`i8v8dO>Zryp5o&eJz>(}?Gvjb|$+HUE}un7os=LHX9)t}ocTGPrrcG<}^(6fPGz zJI(F>3XCB%;|7+H1~>Q&*ZUuDe&aJmq8(^dkCHG(;&qt2&~r3M4ym$F7PNir;WB2o zRcl`2JTs{M9T3QTKa!`|3hVOvH}KQy=;+wG|6{+z-fP?Es_f>d4^jr4VRWCh$2q@p zq`4Y1+|Fp46fDy<(y!}|Ng@}(-rU>s*)EarI1zn!ewgH$wR$}+o>2h}H0?hsBrY-Q ze?ZxIJyS^g?2U_>x>R~_)NQBmgH)r_?!<#eBg^OYkI1%LtT!HhQDp@Bv1CX>{uBv$ zj5@*VKa#`}-T{B0fmGWYQTnTztA&?kZ@2p57haszMPyNvu6~WxiA!&$efFv$zh_X1 zzrW=pG@c#m*#6~hoA?>^@8w6$B0|XPQOAb{6Q*NKs#X!`z5#LXOfB3G5*#$t;#3Kl;TK*!kF%wuz;UlQ}t zIcxlrmAJtWBU*9JSWEtvH(u7B8}lsWXS8=NRm61g0e-)`yZcavSc~!PgRR_O<9D(0 z7F0GI!s>pnm`0Yo6szoc*vcyM zkxk@7=;*o(lT#`ZxPSIJw4WMq%hpK*?$2KPFTD5P5AGi=Im}#;46ubVTfM&A;~2OT z>Wo}qd7V`+cc-jk@GJ{w9D){v;#@he+RKQCD$guYdJYh6Ztt*-7!&O&c7FNE;;!Ks zUoF+2(%Hwr>zQ;$gNJ5xZ;GedJ*UPxo)lN2^t=lH+E)Q12!RKAOgH zO%5C(`mqNlx)8{)Paj;~PcZ}*0=ug#8-dPInz98NmAl`H3ArsjL(H(kx5%#J5`_$5IGqrgb2?h<$R zM2zJixBFF#dB!duc{lXNtrQLK9oQ{BZC^88xM|p3^VswYLf(lYaf}-u6Q9|#Ei>}} z{}IjQ^za0Mv(^0PH;=jB(`jwDC=Rulx=skTYdM?JIsPg@%77a@SieCHQgU$01u zXV-gV&U(1jR&bjkFC!G9X|Y%+^Sn4&yAVmKPATjWCzXy=QpUffky}eK?Q^~(WcKt= zBXuIuK)0C27daRazH>-;RX&9|9~WDnkba8GIili0P35$?9xrKY@!S7R@NhN(Q$2<+ z1K`RL$gwE#h&J&>GkW2B&Csi%tn7NejC}=sbNKQYVYY&v2y3w8=GaO0#rQS10VZ&= z3#h)0KRPwV!n7>X=_hpWuy^E1>}rAwy-$Wc>maYFE-M4j}!3KbH!u+hfAsMt&-@%LJ+ z0nn>Ad7RiySDJxE*Q>MBisZmgu-Q4C<-c}4l}=QW_`kBWSE!(giG2ESL?-1bW1gM< zvAcWkC$3?2mH`es76tuo5{pg@x4mJ(3VHZVq3C@%AeGG#tBNmtxwE;svl}ei64|3s z9Uw})z$WH2Yk2cz$v77{Wba0Rin#Pv913H-5{Pi3EJ3j*U(U-LW~8-| zFA%dZF#Y{7h3{v;9Rpr|G+u`zC_(W(Iv_6l7%^8~x8P8}vbfEVnGy(wxndVP3%Bk* z$ekktWdcCs*?VLZgF}s~&89w^eF_NYBU$o(^;fU!Yo_}A=mxOWO1T!Um#51_GRX?G z@EM;lH^#=XzLqEX>%c;lo{D@5yp=L>-TuVM9{t$}Rn5kUPT5Ex`KpE!*{t%_VyxVI z@V8AOfNP=#$ z_To$|fUsaUtWH~;gzTfR`gX}y2zDF%%|Y~1&hh2`B6AlEG234}&@2_lvif9{rub{9 zcAPftk<~pp*5GMIV?@ZcmY2}Mic+u6ir5*AHdh>LLVl1@wNtYwu#zH(R*%EtCfXEl zApTwInqGhC@QvwcDTu2l~LRrZ!dG znCktZabG0~aPUH~KA%Y|*gERl%BMFcnsp-1hWZM>A0%uE2X-owm@gWyv4o4IKls$E zsDm2&=qE_|+*NHY&FEED8(ACCegeq1N%X+82JI#{y+=EXg*EtPS~lp`p1(7$f3S)y zZIGmiemS{2mQ-Iz=+zV~N=3&HJYU+va@pD_f=qev(G%&~0;^s(LMB?QWDN%B#SwY~ z%e!|>v_qG3Q}mzexrusR?%e>o;Y8P@9;q%_zu!Ie55#QhSXB>Y4N3{Rm_GSxJ&6t1 z^pw|JlkShyj^fIt3`Xv5jIie_hN@L3Ri3NIk)?h_+Ru*UF`OToGGVJg7Y>vT8JW*T zsrl~TLNgyK28{ksMV@GwOMh)8x3{(uCkPbFe?sd@6!z^YMoFvYGIU`nsd+R$vw961 zDva@85BjT(!N6sy65}B7k7;+MVKPvnF=Ver$UM;<>BAixR!`E+MrI(9yce=%qcyG) zRQoFGafD@|tlUhiNpXh^$0kH2m!=NmF4JtseD3!{(}M2{p99c4N^tcOreIvzi~)xI z)4W+$3M?r5(eGVCWwwK8euQeFhl^HDPE~{52AyZ1BMVylhW6BDY@{9VOMap4@3?2A zRbjepw#5A>38g#A)M7-tprLH^WQAdMF8c$q+3OO}NH}yR2Bv{c@-)UFeWn%#m|>br zrQ0&wzeWPHgVf_TnOSEd9#t{(jF23%)I6yYBQtA9V_X^(ZW|@^`iXU47?_vv*;s|P zq3na5T&fAtjcBd0GQnBc_92VXpSbwZ0Y9_}ybOhxK7Asptv;0*}jaWKXlp5*I!c{SuE9Nuf`{5cl%_d7e&c-%bNwBGv zLQOf1O%z({B-3IfW8fj~4ot{&03}P{+tk!&(8mLEFeFLSvi+Cj#f=m4AxAwWd87Ax zcC-M0T)GzdaE8uWyWOm<+Q&tbRsjM5Xp?Pzpq9AzLa&bMTKiM}Z3w*qb zEH=wlHgRN9#TUU>-83iPR-=u0h4#sXgwxbmuX$PNpO2iJO2Q-UZb$O{k~HuqXd`Di zw-rABls&~Qj~JpxLlaLd`P+^t}Y>daOkE!lJ{D|feqmgMjv$(3>Ua< zE&>h5JJVl4{%Z??Uw{6zG#r{xaI!-t&ap86oL*mz<~FCO2_xIPKtE#6JnbTtq}Lab zz(}J>Y)KrV6a3;jo^|Y@MztWTTzc-Kk}nq8*6P*z>Ao&3_^($+CVy=}RI9J4F@SX@ zy_xhF0xNf=5^=9J8|5Qa^-_ZP$jlpq5evw#EUrin5a^$S{-rUj^cvf%)XqxSc z*GuN8v#JFHMSf12#q$)=qM9>BK}EH-%$_eElJF4iaDvs!xEHU4Beh+SCCkB@Pa~T{ zWgz0w`ZaU@B;eDKNc+iA5}@l72YTAM&u>gnoK3MvkQ2&Urp12Zy|hhp+RG_A$s?M~ zU0J34dZX!9^ZE3*c$qOty@_RJjtH|{)7Q%^C0#5h|B|`;amnk%Ws*aHeQ^}an*6jd$?pVpM>*XUd!TGcL9R}0Z*diG(mWl#ppE|?YTci!R_ zWCmAR95#6VBoE^faF^KrmBeNHD1>n&*+Nseu*Qf505V%$aGOB}*=*0D^w!b-^{-_W zTd#iXzO#YCPx43*%;9_LyS@Fw<*pMKU7>de9eGSpSc+#+-`wnS*OOMIbeEr*LK<)s?~bTp1gU{J+r0a)L9wXc(g)k1xSD&2EjmR}W|(|ra|V_5Xd$!dZDdDG5e zhOfugnwig&0+Eas)j9P6u63(v`NR%w0-PsOg~p3x)Q5=KEadgar!IFxuN!ek9PW3-uuRH6gc}+m!8=(&b^i@fJKLD z5Bz~n6x8SA!UTT?Yqsy)lCOe2aXK)sdnuKIA ziIj)_{OK>dKCbg{pM84%nu3B)Pq!ZusZ~s(BvHH4xng~Ib z*%xPTL%LW&BibLZSPh$jKco3HP+(J1P^@{5FJ)B4As9eYTfJVBO?QM(XkGtH#owUi z`a!}#_dEq+U7ec=w4wJ`C(Uk~?-NxpUXBtE_ryy^mk>cUhC6bJOZ=zrGX#E@w&)H? z%m)siNJ+-a95K-S(R0$Afr8+PBNMKd5 zQyvOHrSn{`_a2<#L~7-y1QzFF)+gqOfQ}MNIz36)(JQse_~5)!2Ge-Uwmwst(hcSk zs(J^yR3x$OeB~5&b?IlA7oOU6K?tJ6Ujj>29XM`Dc8^(iSRP%8YV>RP5$6S=e8ByI zjMgw$;D05=Jwz3i*upvLJ^YNn`j<5}KUQ7VH>%I_bYjjWBH!Lo`phBA`burRM3ywx z3a25T2b203dM8FyTt#<;}GxDv&0AoxX>wpTr zTL_<^6!g&O4se!zE(s!HRTjYhzrOslni8u6Hv@8)y*>3!RffutBN*MaTrxe&m5Z43$4hbp9dHs_Q zS9|`T7CX+6Rno+d4(US)uogpgN4~p*daSfG=hZdW1N@5NQgBhg#9m2qGWwyVhjzrIjBAJ+8KN|SbVW1RE z4IHusdRRVNec6@7oK|L;>P3~Mp9LzVAipyEA9o~tbg_w->Iyj*5b!Fbr|`+0yyo7R zPKGvkcM`=vIyrijL(Jl7TpyX3LGKmB5a3M%IP25E^hQ$8#KZ)oi0i8he!IE+M}t_I z>s3K?pTViMI14(v9!G*Iz{gxPqvdyNA4SDTJx9mqOlWv12#Y@dba=D{b{@j}HG`K~;aSr$hm5c1I?K&nui080W~ z&p}$RAD18!vH;@k|4`WW9BYQ$(+7O1fNOhp%mq=B7{S+WMBdlmFTSrn{DH9QwFRf1 zT6~6XTM~d>Ht2v-bE`qYbt0v2)<-Ed?Z}ZH{tyqN2S@Z?n_uGT}{}g`0vY57> z4hho96?-j3Qye7viQ@#Kr=GB#;@inYdjuzw%nWHhu~1*O3f2TKd<_d6ISqUv3*cCD z1nSM^o3CP^L`D@XtI%f!n=+8X>zDe1mbL#tT(e7NfRY6FiwD{wDIfeIYST;`9f7(( zLSGP;&y*vn-Wz z*ZnE|eh5&TN;-cG`1XQr!`%rOBL(cWFfj(Rg{+4CC`oTMkT63z85N*>y|WY2WW!ShQ|FKJnRd= zj?QaGeGB9bkie*p9W-4Ff;s68h$nw`syw_L5p4_y6(NOL#6@=p5$(9kft4#;ORPhC ziNn#PTm6aZn$eiM{~1X>5n*F8J#Vnnw_OQ^B=Z9W-3uEw3M2~CR+PF z6Y3b;=Srv=dEq{sui-^PPyiq=nmO=k@IdHYOE0Q&{@G^-R{2YS?{jrRUf{s65mvm= ztxSHeMgrsCAse`(qV0RQ>QA&+j8Lwfi1F2#ZnG>wF-iU?Q5e40bE986`j$_s7<3Q9 zq>S&X2CC`b$p$tc;6CmE2|R-qgMCncnrj8ua!k(v`G#JO>*>CzJT_S`JXs{C)OcZ#_9wi@uk-%Dlm879 zD9(HZfT6o23Y{srl#iUtI`+VC6$+&s zO>wvvIzz8nJ^(8pun36q=Bxs^z|{;8Gwbp!rOwG*PJndUKelA!%X{{o2?#$Rr)*Wx z-UF(CG>#0Af}+O(iqzo3!YS~(DPe4>K}-;M{$FwybHky)gx4a91#jum+_&yJX+XG*Tl&zPc_da|#HOXqu)nZF2be?bx z3Uxs!MwJJ#i3iB{EX~t1oPUsXQZ3(y;EZxtzcyYXlURoBOI?lqID5ULp7uKOyY0)GQ;2HE>wDk zr7~83!wLnS6Do%L3a|+MM!W_wmOk~7Sf5<%VKoSV zI4BXt*p_SqC6az8|5T9bTM{@qh{cNP z%Vn-Y|Ca-Rt(Y5Qs=t)y#tDzX&L%#aI5JQQtRL`nay2uO4g}E=DAJW*jm-E-mM<-m zWDje*&wclhP6OTzo!RkA*^Xe^J`9r`K}7>p5!gBoK9lsHjw9q50DF5ajvK!-ufoMH z7u$~SYmw^l&8HeGC=;z8bdD2{u<2uIw-T89L~Y;_xIpNDs5${S=;%CYF8?+_5B-Ab=N zp^>Kc?xuWu2k?+3(no5yZrOvnB^u-tXAi&Z(Ei7c?MTsk{=nM`NgOWzeYjADVwj!IWM7xf2o;@WVSY9Dv{w3100=|b5Pt%K z0=$VfkR@WLE$kbV0|tYaJO8p`j}>HU3yAyiVVPkoT4tZsxj};CId;?{`4fY_Fgar$s1&Xd4=X$ z-{1>+Q#BQrcB=-N0p}7c~VuzYWb7P;VXY16Z}*f>PiO>h4lJXf1eM zTXYugZ7ZqJrQTne^F8By`eBudi#Jn~z+!&HgH2^Q;m?j&8Kh5BIs_Fq)W8vzZ$x?q z#eM_&UZ6_Xi{`(}dK>y8<-4asc^jNr0$>Ys zvNJulu<%H@hE4RbE?@;}myn&8>G=Heyn=a2Z(jDo#d)xMvtT48a!{B#_{))}D6po@ z0A1?Hlj?cq3}=9X1;w1DA}SZO1OsF#IW5Ur0^lIIND^leLwcv+A!ae?_$$2Xfd#v^D-rN2!_^HO?zD@x@W6NSCGX=G19T= zD8M9pkj*kOlvfc>CI;S;+2;Adqfp(a!iDlHVq8Uo#%+iL2!cW7hKZ1;#Tgov4 z3Iepm4)7WUoR-FaH0zunKGs!d`gG5;D%+BbclQaxXOcWX&VLFbhZjj{FCWzIJQ{0>?5Vshoqzo1@suF`YdXwsCFYoBGB-Kl+l3r3Bxk zRrM$Y#QAsmQ1qWR&Pv&^A0O_Bv3-SneEM>Ono4u=CqA(Ap-jGeu}Hq@o z;3Jx)*$*FDf9knADXf7Y>ariA2QQH#;4%T*$_(lyw^_!D6?*svghXitP8;UR7_d#cdfMao7Puwshvm!PoA<@jhxJPl|pduWmxr zP5CTO=xRr3LJ${8MTuKG2^}C{g zimezVBQ%QP?M3jd_Jzd1e_mNrH7+ItRQoOh*AY# zkp>R?17A99SV+9iU*7{X$-7oKw5YkB!3)$}j|6;vOSnNAeAY0}mb$NUUch7J!bi~X zTV(ru%ki(DTErENGlCoAv)M#hqmaXM*`est{<4~yv$%?EIFuJ>RXP)hIs+!#@M7(1 z{JWyuV>`aRGg=9o8Y>o^1Y==Rrg*hh)JroY0Y{}0*qU5joXqYX=S#7PmPiy7m^4v) zKo;!l#cE_zKP%>nX)T;95885mag_Ck{;K7_%3GiyEqSw2d^%=13Bv5PLI6p&#cSQl zl@0|&F>4=%dV{~+;iF>}ST%cQbakJyM42oM1LW8HgI&3fOyz%9_jWd$@5`w_t+yWT z%++&S6Y7Bh`rL_pM%65vT`Ym#*n_L{G1jx0AcP5VQKVMMqJzR@U}d6S1R>NEU&DTJ zSa-tH>_<&)En$M!7$Il4*;ou?eK$^NdI!jBK%4~ROuFq{hHRg$xdLQ?SqYu?Jrq(5 z;sx^(O)yEi(BBk(W34)un|pZpX!?lX#QZ7GxpycR=(pP#Ro*EVooh248?mN3HAg9Z;Ji z*FovB#(&YpGsiFn^SSWxUfP0#t1Q}|!e;vZTp;qghgjzD=oEZLO6(K+j)hbIMq15- z$C>o}dtfPFLk(2T1*u;XDa6za#5BysztymaVU~M?nSg6Xa{6AhepiXxY1-v-%eAxh`_C>(ig$J9y^oG-D!8%vEqh|LMr(f5e*ah* zq2K&VEK2GS+biFa$75&LH(cC!Y8Q6?=Rgi?T}D_AWz2y#AP26J2d)Ba z*uhKwDrxU>uf>_N8lTOFy-eio*LfPHf>6VaV254A4>bT?W$?9>?NU>S( zCk5JUdR~_*>{*sbtUKa7EM0UROO~n$dB+ehBN1F=bPbFZ)$%+LW<^omd`3fnb#Dm;Lu_oZ#6aU-RinNOYjw`7g+S zIEM2+Tg+1Gs0mALT1_*UU+smbl5Fc~yU~bwie;^KOH@r&ntK}g5 z;RMm(WDsIx+d^jc|0(V(!=miIetB#~L_&}j5CLIG=~5bLkS?Wb=%GVVx}=8gZfO`w zq?;k7yM~5=5eArZgU|n*_dVCSu5-Sf``bO&Jv-K3d+oJX{MOZCvz^m5V#rIG_img` zg>K!aiEUez+UC2zmK%s(&80dD_Z^fDsbq*71+zC5c11Z3TJmv?tc&b$PiivIGh16- zml0*de6RV~Y;J37Yia3@gi8SgJUCCf9I!1+;etjM6)6Z_QfFz+@`EPU6XiRqnM_T@ zWq;fi^QkCt`;`3?pdg5~+40@-c`^5BSQ{czDyrI=*A4DBmR$4A1|yk)6i_+KvD1g_IBz+FA zEn2am&(LL0Ajp#fso*dZ371uuvOaTp%59YhLf|%=vAW#XGgTsU`-;p@JnK8M70Bxb zo`ZMOzI-;4S=TA+z~Tkp9U?+429ILgP=TZkyr7BOwLW!=rE5tx3V8I&Y!faL`fN_; zIG38x@b-R;oOXQ+eMXk8pj+guUR239=2IYh{7YTXganHfd@BZtA}GB+8|bHlg-n>= zJi4CaTQ-1>==O?@Zb=Y;ZMW^SiCOu?)uQRNw&@l3B)gC;(#$*y7fU z0d=4Pfb4uF>iJ&Vrm44Msm<`76Jv4)fVI<6v!6*?x=A^7&IC>R6O1c2-x|FU5FddOqHH|Z$e9Z*Elo{& zO%ZpzWcq$JpW+bfvrtBt(Mj28+wW$PWexMcWPPrZ=s)K1b!kkxw=A^p6qV>6Fn&%d zqnvmaerqx}d4g^W#+})|`eiJNljzuE{m|vT=Id+ufE6hLa6mp#!zdeco$wWrD`hZZ zXpcMZei%D*J`^GqK30|G;IHap7yp<8NEZd3rw@U3xB4&DMn|()EwpAG5k|xYvfSO6 z@>yv)Ypv#q3t|^r2HBcdbPW4pg7xuh$fUjFu68i6ND!B+N4_fqQ1$?!P*wlE#tDGrJkZUnE1f?D>H*jnm`|N_ml6S$iLZ+u zbYfUquCW;8pR73y0BHOQ7;xjJaQ)E6gcsr(sh>fGrHStbnP3ZzGtRn;){_W@$5jhLOBQDrsh7$6Vvq|X1 zmzhk&6b?6cN0QK(<@pA6Q;B9sx9!02wph(V7!eQ3!-Svg(Ydg;-8-^Ad^Y1xZk#uC zV*%+UOi8@v%s&w3vW)yNIsS~4oWe3iw$D*M#R@UzPIRU$JBr;)+Z7_;6^!5x$w4@ciIbx9*RNl{*-Ue$ z6tLD*rC^wDy{>-+V0-bVSia(*0PN>!mlv==?Fj?-?F`NqBIS@#Yaj*Dr+kqq?do^Q zRAiX8WLX-8_qJ5286}DEITFAc0)$UXeXmuD6-H+tA7rT&C0qyIN?4fpGVcO)NsNu8 zs5r4T{HgT|G3b-VQw{+nMZXHfXBtxu+Qyt~A`Fy|V6vDBGlu;LC%g@`VxV32 zWABUQ+~^>*%|8)Bw|o!p(@jJxaB~3HY$?2SyBxRz%99VkxuP~;M?RhhRAi;o9cNTf zwX~_LZUZ25p__%$0T54{eqGtP&JYQcT?26{qx_=FlKlVlg!KSH4^d5Pl6`QUKhzC z#>o6S=84cV_7(miH>w`Duq8vYyo}1@O!w@lW6}keh$4Lh@TQu*zwB+XbWa%&h`?uw$CcF?~+g% zZbo#`yqK$DU2_`Kza&meeIwu7o9h&HV(e@D*!i$?+%HMLnyW|61U}HADXgh+21-#U zD)(j3-WEZhL8K<758rkfq+P9*Olkwv)%aj=me+#mL&u3*9uAvNdbHVIn%nJbNNT51 zkdZ!THML)}>R{F(f(Syo;QRCE8xha+NV#)T75Y55$}Y}kf1y+>(P1**t^wt+o=Poy z+^!NlIWKh#ltFq6UyGWz8!)F?wrhYi@_57Li zFwXGNjFUh%WWlnKEL~!nh9*Pdgj10f{3RQ3tpip=#K0@$-G>f1|tq@m1)yI zYRu1d0st`rN&8LTxo{dz0z`}Zcr&yZ84I?;i7V^mCPsTK%v7x}B_WT>G?)7So?C%Z zK%sy@LI5z05Ij++Jcbmne|@xvJS0q#p7?{jvo%6gHdH18-4w3AVnP6Ktl6M{v#e49 zRipq!4S*JoAwA20`)pj5(}hMZ2M$V7^jBKpq=s;##r22)(>GtaZPm8W*7{ZnQE$uEP_e^k* zn^yJ7X=wWvOZkn|=;t3HYL5mW)UF{Rfs&pHqGQWD&X^5bSjTe4gSe{4IHAeEH-ryI zeh5kee5C@AigL1P2i`bL zB|C6;Or%CJQUb^{eIR7ijfze#4rogXWPwQ=FbBmA?=3a{WN(=e?+2w1w2(>uRS)ZE zgE~2T5~#9GLJn)Uf@&oQ56wnxhiLuVh8vIvQV!sU+5(vtn5#ppVU-_Dh5O&ZH(H?!7;Sr$CUImh^AGu9w ziJ(`N%x_{rwI3?G0Z>37mg5<)6mR|;Ag*8Q)UJ(tb1mR#v0w+pDIeRQid>TKL6%%;P(MXMYw1jNHmn zxerL<1olekNdvcmYk_OJ7&)c3bDw;Kbt=#r5Hv-mfPsh6q%AS~sCw(W3nfKOrCK*w zN5%<-T!*(_6Y{60B;c7)Q&+FCU+Fx^x^~x|h#)bC2S20cIZ;k~wRQJ%+O}nKv2m}~ z5^*);O0#b+>+#)MsZ{-E@SnFZOU!f$JoAbJ!byhPJg=1dZ_Z|*=IIM(AZB`o5aA^a zC<(b69;GhGg*k|w1nQyvpHrazp~1xm2`&FRoW9|o-9cV^1gs~IpEL^_k8Ute+Ywp0 z|3Vi`8Qx;)xRKmgRDcSKy;D*er@uAO;C+}HKFQ(lkrPe!@ZtU}rUyr-@RjmNW}lY# zRxf5P>=yWeO*7=cNFuH##z}WT`kA~K;dPiH7M3qH_?@*qe~O~uVS6}*z!*9R2&6{q z?^f5skOHYg(-o3bm$QhZ)#>OT-}-NsVA@Y(IvNb{Ac`#7A zUl5PX0BNB|3Qo8NGzhn)&j>GP>HEi3KU0p~4xn9dc1P80k#Co(CkB?uxr-qlS zu0V7YRIi(_ytSP@9M+4~>L72BUS)7myed+)t6n}$lc#!t6e9f``V^YcIcu?{W~q8p9+SW+?HJgXu4pTqDU4Wg6VK%%70Ey$=#N&Y6ATD(V zx(E2LCecBB^l6g+4FN|1*)j#-O97$Zte1t@6m>xOUW?~C>}&@zZqvGH5)Wun%jiZYbOAD{ zz0l4l4Br9BSJWFm+g(9t^cwB*>X3v)2xi8Bm?%4F=5yzHX(+kJ`NdQ%FwtGc1Z;Ve zTDnP&%*2WP8+Rsn1+DhpoE;lX&Cj8CIjWQK*f6c?z&Cj<_SQxVB=K-tli?eo_N-T zySFvV3Jc)xm&ux;)NW>RMGfEVxj`3$GYNx4VY6#hZi_A@D2FJrau(VcL|u2?+~)+b zX#pjbEe$| z`u?sR9I&Ho0-My}tXHEM)wDll{RLYNaKmi)_%xw^^MO%H0ep;yEf^mtOCN#l0lWL< zPB%P_s@`tN=Lu1ZNItY_Rp-8l<7mgP;5+}01wd+i7Xu{0UzbOT(*iK0e^zw>fi~xH z8n(ia4>Ll@J>R>r259TWy^M@6OGb(_C2F7c!j#m3D04YES)*( z{>w>~K)5sf#|>^xC*bV4_JK%WTbhkptT4#>4RO?P$4jFT49by5jTK+6I;CzvY(#=gx6XDR0f0@u|}G^ z)wQS|fgOh9UhYb@pVVc1iJTDf@!a@{S$XZfkdw<+Q~?u#?M!bj>;5J4+hS^P>tjnB zoB2BXEccZXAeE@OQojOx5YHLmn>^<30G%Ft{nuadYRfiaOEw?Im&+6z97h0T>s|t*&&5o9W8gY{b#^g*(Bn*f8|(a{1^p9YDUXVVZ5wb z9jaxeX|w~bE*(&ulaD%N3VWJNOf=4Vmjy19pzna5nnx#ZaHASy<$*+lRBJlO-PQ}}lvSoT1CAm`p0aarE3 zRWq>L>%2VX5CY8?pX;E2w4HQcq{oaVeA-vj2~ama@m>wjh{fhEclc|Ril}m;Q=Yx8 z3Y1*{{B65H!J9H5e8c;6<+MY-1y8vz?Atd^Tug`S7{?pC-RhJD?=>^r6jmZ-S>U8T z-e$epH7Ip;Jrr4h>dKD&WooOjnvV!^AP)l{V5yp^F~4_%HmFL>{CPRd+@wiyTrP`Onq>HGz zWqlGWKTd7v6HdH*E15|;dfm()pP2^YP2NJz)|I<8hhh&zzRTBwjqlvs`TRw}i0|z! z-fyn7L-{x)5B$HsrBtbWIrW3{V&tY`SX}#Oh8RFnj<%Z>cYlvt-6&+z>n3tlcKqvDkLE5;s++j#cOwdf?G+bXhBjF05t*sG7?e-*VJ|FOImcuv6t&-c zctkc>A6fR~h9bRRNc5z zF41w`&VU9V-sUl|UoIE8;>@@?+u!ohPT$fHaNfx;D443Uh~}U5Fi$_pFoU*KY5^;F z6f}Ln!-8H?#r109Os}QXX1i>on#aGI*}n3hx4W6JNjOy8ZenJJ?2%t-!yb&wYGP-4 zt`-%U$HIs7=WoJP+3$Pud!9F9{>-FwEx5Ocrl_!cr`y1{a6OkP-P>+ds2I+3@H_6N zrY6}q7PY?4T=^vZ8GF|eRt)3{t%pEfjdoIC5aT8Hr>_p1exm6+i&WRuP8Vu-5)}u| zzSWRlQw?h^#9Qb4K!neQkzEuD_+X4kbE-$}g zj&>)W`J9(ron;W)K6gDxZiURfgVY&b{4`+2X%|5+?(|ev(cO&d?W;@>+bm$`ix4{f zU2gQX<#JCoZ4Wxm_?6)P#GF&z*4Ij;E$)E8@g}C;t79&1E|>1Qpc59>U|`MLzz)Nf ztCKQ>cHr7)*}baNFlk2l6z50H=8) zgOXg*k|D^Si|t=d(spe5cxB5*jv}|DFsKrEp^WND%-?Qs7G8=@pO&D3eX;ZtzMex* zHN~TYTkUDHl@SPwNw6?ulyP%H2?5xZXm+0|qZ+@9%MK8|#JsUdxP(W}! z6xXxZ1+>!#*_#6k%i(QRj@<6=a$3SibK0nm;p3rH_Nz9Ww2Q?Sxr7t-v_GfAbfe)m z7e^YxT$mO2_c!CY>Bt;d8-VAUGS_>h%s|O@rVF&PiWhC4vQCD3BR*Ulg;Y`A%=U$k zxK6Kvt?m9uj;z@DQac@$h(qg@M_F=Rvl*1X30OpwZR4^4kGGoQjR6PiNUSPn$9lTT z0`bj)j0N3pr9lP2BJ;6Q@yn)Ys=_fLLq4B6q)I1mjsmRDjd);2fmn?D!P>b15A!y< zx7@PnWEiLNern@!b7BGK$;}lEEBz@j3~3+CBDMiK?_e=0GYfj@coKw~9K7fO`RDe!Y78E1e_KSS+*-ob zPnh^-mZ48GK}Msvl%B2|ur$v+)1Ny8sIxNf-HQ4+1OSc=JU_dsr#bGGoWY}UuNJR< zf4ObzrIZmq&%51C;4&{I^;ZalJ^`8;NTd=vtKRplx9o|HF1v{5cVF2d5Yaw+@mEe_ zN#ekv>?Q*dsg0-xgTx=^a6YDeB`K;0@@P27C+n{p11syRdEf6t!)<6vKx$f}Yftiw zZP|04gSX(toG{_7+GEUYX)^SQJOYI?K~aG@YmXG`9a*Kz=gNPOBW@N0gywZ=(d8os;-=IS)5Q z77p(=BOhOP^pg?bf~rfMndvf5%oQ!Yq6iwcJ(%Q*>=7U>8hrHp`1&KPp9R3~`F7b1 z8PM~=9JIQ`@YODOkM~Dg?O&Oiti3S;@@j#HS0b<`rf{LQ^vu@h4{C3>ECqE^=4IMC zmgaLN5KBN$`k%%erxzE~&xiKr8mufWkupY!BNK$OFRNSas&c5aarl(DI}J;Mxt|Bu zh=aCPU5#`n{C!W#e;=iDo5xv)aM8u|-wjI}j89C1Y z8~xo}yb}GJ@7>11ks4k2j+r1)<_dbsnfxwQ|L-g16Q3hXg-L8JWph-g6PJ6=ZZWJgqfqd9r!_LU^C=jr2nFSm7bvh*GWBwPMkHJyW{ z`B=48?l=9=qtNF*+brCyMQ+_tFI_rDxk_ToT;oK($E8?T%2|-H!H~eCpq%V5Ds`W31y+tcvf@Fo{CzgJ)UBSxP6Qj&cLEorSJsA$1u?-LyDk zKqYYCN#6t-rmOGL$Dw=rIG>;)U`$>awiE5!$`@57rTkK2%1DkQ&{f_PQ8gU(J-f=q zyfT{Rx5~!>D8cQn7E}PZffBQpJfq>g?Ju$LXXI<=4c}lX$^Cf+?|uk+DC=%S2M^63 z{unamvUxB#j&VJOOyd9Bb$l$GC#c=bf7;4u03taihIUZ;xJm5Wjy#=S*Gz%0OQWH~ zv*kPKBdgotA!0 zyB%AF6?9LQ6O8<^AKA(y$zm8j{70rKJehs)xdipSdpTeJ*?J7e=6;kz)VD&P{cweD z5Mq$8F=(F`f>{jt61^;<;A~)5ftF3)S;@9v%~e!Lj!|%^K(DT*JNb6K#2hHZ6b1LJ z3?*?6JhwNK)ac#99wzxjh{qI}EJ{VwIHGUmJvS9K*eq@Or_)$c2PrMDf?TGFB592i z%mUdqdzeeo#S!`Jh`4LEe?AEE^puds~l`L8azaRK`#2%n~|(A z{A_K`((An+XYi)&xzs=5X}o87JWq5TT9GnijYn-vwv>-Q$d@K^_dJ*SklhZi;XpAaw4tHrRE3JN(dm)Y>P2(zwr*r;++8G>Z*@t>d%X-29cev@pz8j2oW3 z>Dj>JbU2kqpmWl8I+%L4p&(Rb=*#{jEgl|w1f%yOHH;KGlzjK*$@_7A5*os=ar!W) zk}u}4)Av70`GDC`^U_QoXM9ZF5njIQ zn4QAS%bR~y2?W(ACX#yL{~e8kiKGT_G`==5VxA~8|C(Vg`z9L)XDwCE!YY_9YWgGZ z^vGhBudz-sV@4fw{H{hwG`VeP-}%QM!bCchV*y~TjPhM=_kxeveCou*_W~Rg*O#RE z%nHiWXW)Dt6(-v6aum9w`lEo1A@dCShvJ3<5a`tTSn>VCu}BS`PJz%*VwPx5(<#)n zn9YN|9%jc`2gwDjjk}zjXM`Mmp>5%-sxO3ALp!-_g_8etB-gHco7gm(wCo&*qWyZf zM`dmDAHkdm4{`ct%leH{%yR3Y`~oOrC?B2ca>KJhq<(_Rj4h)G=}Z)*gP5J-dWNe& zoS0Fosz+R{@yz#S<0&(Av9E#}wJgUZka87GxS}_&Ju=&u=hY{LWZBQKgSPjiMq0R~ z!u1`*)RYcc`~)IJ+- zIag>N6?c$Ngf|F{>T>kz*ci*0k~p#^pXU;-^z5Zt7>@DrJQ7l?q;q7gC7O22t^lV3 z%|h2s!DdtPpd3d@H|FHM1n8Qy79n_v+{Dz$?_OJ$q{YmO``fhcu55LJ`0rogL%WTF zJt~ZKGHIU|@T`xOJYXzQV0!A?`uU};Ij2$Td#MJ(C$S$H*a^8-3ckRkHC0YEGnZLb zC%)l_KZj2!y~O`cK*pKb;_JZ?A@%;jJzo{6%z@eb>{%8+(Y&2~PB*5yF%y|r^!PnW z?GJ1NfK%A2r|RLIuTfFv@@4w-uL6D*+)`Q{n~R|dEA^q1K8z>Z>k%Zfjb%u#$z-zK zec<=2Q`){S@2&d)$zvC2q43Q4jOf3njQuGkuvx3JGgceCR7Z=AwOyM_lJTRriY#G5T(I+0rZ9n6a1A zh=J+E6Dk@qz@)&&E2T2MMooMhWlR|n^Xi9aQytSTMJJ*or`}m+%fzWQheej7JoO;T zNpeVi|Cwn|zfzI@dCn8ZljV^{<8pSD*;Q9Tl6td0u*mC~CUh;A6g=ZucY>?oN(1ro zM%i_1sxO+>L#^i59hT$l=H1=(4wA|48t}g{TJv8^C0oWM|7lYx%kmIxFK$}*_o&cS zIL&P7o1qNT4N(FJP(QmC%d#>0K4o;bQIWKXP%>EQMGz;xrFgbAaZ6` z$3iFefp~!J?y5FoXO^=>a8I1}vw5F+Por-L$Ln2Xj=p@4id9N<@>?Y#JY9@9iHc(0 z*zp&4k|;~rLtLOV8;zB}HjYE1vU$Zf(@~#jwma*0C|H!VqTB>k{D-4{xRtDG(JBKvCPt#rei86isH|xJIq~a=`pB+GhY#*N#mO9D z1Pj=FlyPEA97YqfYXP4;-t=yqck0cHeu(_;KRdwXkg3LQrMM}%%ChgBolJPvv-jPi zJ_UZ=?UW{rfN!q(u8EPXXz*_btysCoj4AqxZa_O@`YlOc{U?0KVs=-~S}w#u9!Td8_? zQ0Z&rQ2DuWBRjOzPZ;Jq?O38dq>3gmJe%LT&s|^K8FYxF3UA9&hBM7KG){mv$-DGFREGj3=X>d!6Sbl(OdGNc4}4l28wd}6@8^88%&$tQbIylf zkS50|eCUH(+>PT$8BZHLFBX3;bc|v~syFXeFpECVv9ln0#!H7zvnlrNBcuJNG6B{# z3mi)2u1UyOmzK`KJP9N9qyJ@zD^>b*0427#iF^Ir!tcB5C>L<~jwf>?XC%&XYdea! z0Qg^~raGVX@hPlG9av=t_rI&GPg}H~y?l%B%~+H*C&zS7SkjP-8;W+Vm{;+1iDO`! zWS5<1HaaX!Kp8qyYcz+bdaGyT#WubjJPGWJ`z0~>UUw+|5!aCnd9aa}bX6!(#bg1# zfG(%XwLd7?-ENnOI+4u5{6kF{S5mV7KAb$F0Qb|tlep)^G#n+u&q$1>xp+1YTvt>3 zS0dkITgI*}A3m`vf=8*?74${P71OIlE76f2nzDX35ZU{eCh8uoDA83y5+k8XwfedG3=L*U($@OQ;~r$ZHsuu zoQ#xF#(M!j{p#2XFvdYF#8e)+Yifw%HEvlBoxHV7ynVa7D!K#X^1VkcgUi%={8P3) zndVx1ex>!Fn3AxK80Ke|CN>2~ z;Zya->eU8h%T7I*hj}Pr-CMG+2!z6L2pz7KP_zkFg!CgF;%c7_vU|q4_`K;|Iafb* zaf9zljGTF}WG=t`SeKe40Y5rqNpoCcu8E$L&2Zqxyd4W9^S6_xDvU^B zI~iZ-Fn~zmU7t~&P=zV-yPk7@7_}d#Y;HXjV>H9h4%fI^)6hX@Z>`fQ{cjG!YSmm? zQKo!ZdOmODbEIgKfWVte9yz`AD3NqEzfase8V`CsqUXI#Jx4+{FL)?bKM{WWO)R208P zLjs=v??1h@Ssf1xlLrU0bKi;rmv?s7S%;o=V?c2$&DMDp>_bA7hen^`P|n(C75G#y zXO_vNKpR+CCIQ#;GYUAR+%_a!=;@QF01?GOzqKziNC_o}X~tN->^bc0{LL8Teg^^F z2}(&!yN4C?&-HyOl%jR592#S;>6I3m-IcWMEBV^2LuDo1m;qdb|Hb?Rc8zp~|B|C? z`(4CX8`xT@=YfQdwqf6KfBmhmx*6wzW78whHs=SidWHG$!%u zeP--)TCAUdc@_(cfi;u=ZSYj6=+yI&>cX~6Eh(6P$OMPPMtQ45p>Jq2WqGo?{ZI1h z@s#pv5ABq-ut{A(M^5sIbg(18)@dgfl%guPymSKGwFa&rRJgBG9LubdkY2?_vi)N+ zl`RkZ$qe@_OLoLZ$=oTGT(Aha>7e$ivPj-iF-46+G*@U^M;IS zP_T3f`=uXuogh&WE@FURB}{qs&+7tZ+5ABj2Xnhfxi?_FOc3!yh9I?a%`D- z`Lyvkgk}+;1rcX^ad=%HcFQ?8WgHST!TsCQPaV}!;SYrZaOes7Wef7V)#uCb@8pVp zx1+$IlJ~D8W=ZS2bp)~(lRvYsza98Sv_)Bd3q;Vbr|Lov{XPO}bO8S`67UVF4Ym^_ z+69HpsJJae?hQ|(-&+T4Q8H4CI;7GOlz+er_Ky{h2AwZ;uf_8dcPM?$sZX8{?c0sF z9B7WQL!@g@d)_rGy3bzV3Yx*fa+Lt~#pjAhYgs4h*7LwaU#fho;-RB}OQkm_Duqpv zuk}(5s;u_mMh{vS$xozinqsbvf9 z34Bokzb*QZ$#I&)UhSXUQ}U2biEMDOQd*Z zxRBvw*%CYC4=o|ymr(J-f^cScJBXzrf$ltmdjiFDYvDvdpx8pwbVw!MeVLjL?w51( za4{TZxK$at*7d`*N3*Id1LUwHL$KMzXh#7ys!Ols{BFPA^lN$D#8e4)Ofu3;QK184FbSNAwd+F!I#7NxP|W(Q z1^{C82Hd?^Z%N?7D^ZBsS&Y=ylj3N3 zzxS-`Dp^ut$h1)#Tq5#v$wo%-LujK+h{rlcXBr{pr^>0xYd@lt#Q2YOvL$!h)EFi0 z#B~O0=*pjoi86kX7Po{GjSIJ}W;~2vVINQ-RBh$$gS!ak)_i>(km-KElO{fP^MNGd zA+P`!F8|$x51d)gQ~%7{X&^#mb7ZgWQS0KP_B+N|dGaI7O!Wp7+3IHaPSE)sd%CPqg)RTHa(jrFlzsTMdC(;JPE`vgAlRYyZEQ?)oFm{vW))BR)`gbu}{QqybVcxKsiMh|mI@EAQaef^$8aM#5hxs)(j z{6>`iv=O!y)jUw7nvlctquFYHptIQj%r-H^gPVmYqyU3FJyl2()=T^Ase3;p?AF&u zAncr^m16Y%Br~M_pc!P9_Gfe{i(=?vJ@yJAG5(Au@kfDJ&WCRjzNy3$!dFSe9pA!J zw0%>752qkIzncfcQ=~RP{4T*nKEu%8I(W@W240pUgSSW6EfAs*MsP(sOR6hRx;$Qi zGooc=s^&cB%Ry+06%{7p;Sx3-TG6wvl9tbHVhOaJrd-?hn>hq`!E3FFv+z|jYVcFJ z8v>?}c%Gl^s`)5);$l`9EYPtpRI4aEdMqjBF!DvHd5o+ zc*yG*`3e{m!I;7d=2yBThG374TNJXW(37^cv1KuhU5h>-rs#;7(~+~{0m9ypd>-M;0?U)@d@VBEwV z42x=(t)8YzDLOvFzS1X6rF>DI%5P=wFZeUhqpjSBW~%o zr)T=me#_R2DX%hNl&6M?d3;^}5Aq{ROlx!R7Q!+tKAfHFKRWGm0#kimy{RU?xg0B? zZ847?JvJYkg`%0_XpbkSGO?VqZN%E4D|9o#h2lkI$~_WgXB;u-Omj!adQmWKJh!c= zg@S(l%8sPFR1H-XWkV3P6mU`scV|z(m8fF_Pi@YrVpND8Izn!JGy^`s9g;ni}!oHfDu0lSeyt^TfF| zG)rKnHt2B0Y+xQ^+Atvl9`9*ly(-t+|5bCIiMR@1AeA+D%=>U(MfKimGb&;3sR`Lq zC9d?wKb`Hv94As8h4b-*+PT$&Dz$46h)(;D6Z$HBhm%<3^RE-(7UMb2GQ`aMF1<01 z#C|6f8eu~&Cj!CqZ9qpPln ze0?_td)|_64IwzTVz!)|%f4bimFm@Fd{uAD8KvD>uAHxOg?qjiQLu25=aGN?UJ(N$0-<GaUQn3W-vz$a4MOm2Mp{_wwC6KoaN|I@8f4i(EStv?jFq_?6|Lz{7#nSRsi z%&(MS;fIy~`EK8=$;yC>;`&F+%?|P0^nc;Trsn^ zJon2Nv#Iv1NXjIsQF_o5CMfS$7%d`du0EGg1ljg+VDB&O5|J^10Gp-QRvsM8y^8j=QwxR z$L%B1q!4G?WgZj#BppSk!3v*}aBhW{jWNIXoDuAq1?#W9yvcTD zr%^a7cX4KBCdL#`z4Ns`Vphl1bEdz`x$>vlfa9AM*Vzyz2w`($LUDlKG9bTs&}*{e zy&r`?R8fi;(Wg3niTvI|y?%TSH5iuBtM22{;h)A#rFm z^5)V|<$OJRBI9?=FW)JIfrIZ&9VvCBKTPN+cJM5QmVrgl2QHxB@56_UW<(w;2&PS0 zcDJ>S6wma%$(CRH{@hvMK-M=l0|SHJJ?aOosbuxJp{kjX9bB$+kC=26$z<~MR9;Q- zL|X6=#RZp}>r5T$Hg$38G51Na6M!DAR`Ta0jt(dGvGAK&wO(H2U_=}-atx=Nrfm}J zzue%_i3fY=d$5=H+VR?j#-QcCyE7Y$tuAt1KO2Qz_MNzKZK=~SVT=j#T9RcxD^|h2 zTwjaz@=PJgv8W5-@RQ7Y4;#8dzkT80^^+;@UgR^U`Kogf8)AiBh65Hk84+P~Ov&3$ z;VBN*|Cv%*X1cxpW6T}9h@MHeVlFle1#boVG;qp%X`3yZNImxXGrI5eeC-bIQkUAmGq)@ca3me}>Xy>4Ur+R8%3=V@7(wabOfpoT*&= z?1m5Z9O-*=x1yn4IAA^$nUIj|NBN;z=(ofnAlVc|!CRKy`DSueVu)?A+>^6ae&yBr zgt1N<3R0rSc*;mgq@tranN=;i43*^1W9<&v7BdtZPr529}*b}VsC-5sb|{5e!6mRH$v z$oKo6lD_d|7w3{eZ_`Tin?aT*Bx*Ja*0bi}@>`uXT62$vc2vRghpekSs41unAM?2& z&2L{kTD|5X9}MN~)0WNX8-KL9*||K)8p1$%bFl(fh?wEqi?enbH%1ERb4#Ig^~*k3)7ga zn1Z+5ikHXlSX(4a+l-3!W~O+icy+r8Z*0wNZRUx_>91y>e>^?HJG1NI+T1gw-+a8p5j5uSP{ zaklMktQrxQaWM}M#wu>!dt=WWcy{>a<1=Qq=}MZsYA!W2?>8e?;74(X9vuWb6O%Kd z!{^ZOD?|5AzAc45?G&>e^y(?n%TklNNRMAFez9w`w;V)+walpF(F%doQjN@b zCX8oLtwkUO&L5BMP*sJyK|U@KJU?Ib81EHyskC0401-EOsEoEU9E>F4$kX6-X0Q81 z=$Ty9TgPQOy?eN4);v)m(C7#Yg@l?XPUEUm_&^efkAWqhu__nq%NMb&?g)ZhLar&9^qYKV@O=Ou(}_h zBIp^7wVC%R!Cf9hlXVp918O?fXtmYA%arc!6R9OT>bzRNN-s~Y8Ho%sXp$nAtgovI z2W?351vAPFdOpW@w6(nu)$-DN|3F~_3somoY(!oS?4sCGk(Lx~QmA;%hWpCl^Rk60 z(BqOV>Z+kHnD_&CFRGGiBsp6R@0?O1@nD-WxCyv=JyiSyoDxqjv*M=+Uvs%gl{X`v zhqYv=q_oZ37cX9H$+eV!&(r+lZQ+(~9{H$NQxU?aBx;ga}IB z#*i^Lo?Ly*S4MQ5>_E-V<6e`NPDU8j<==b{k&)M$i+vDwgXQ{Dqzc4hw)7iUNy|<_ z#}TH}aDGu+wtlsp$q+W){m^TqD%MCe+Ab7MW#iA!hvvr^xT@@LkO+oZsTm-vVu@#6JE`l646{wqhTrpFeydFqa@0~L&XbqnM zB}C}w(@G&-iD?Qe+m%;arcya0g7~Nc%}U;3=xR$&-D1FThvUZES%D{m ztfZ01rjcTZlw@?H%&u4tOy}G+VGXHH|7%rtVTaX@J%PR)3S2Q46BqXmtl}ZA?b(=5 zo%Nc036VCqiq25d`D#pXU|+_zFVm}Dt*v-0_+6JHghA>i{8EHl5JhFNE@Oz3MKd2E zYrqnR%MBo+CqskE6Kmo}*3rQ*VF^lhlyqURYk7K%5aGnqdXqBTWpTX4V~gj^cgRld zel^C-umRgvgGQLuTVp$mHGYH4>gW^r8ZL z6Y73{j}^A#x%BC&I9L;w4TNuE&dSObYVB-PFu@^+07|L~{B@rR4{OeZ}g)HRSLB-`x#d_##8E zq?ODF;qnL2uZ0ZCt^y9|p}ZR#Twh<( z?WRr-H?}%2)|KhuhD}QZ3BrvN&oNtEyvvi^L#jy~ylY?2?LYNn$1|$XdmN@?2{lr9 z9KQRCw$PJGx11aM9WQS*i{(kOFg|T0b!OV)g&N*+td}3zfsGH_7wlA*ev-r(PgP<` ze(m6g@?(sU=h@G^Lq`h_+rq{_pju;b&9O~^VROld=*8%+ETId%me=O;h9-?v4@cnK zB_-dV?H#e$;^TNFnWN39tf?HOQZZ7f%yJ}2d`exD5z#w$Yd%#939CbX&al#|s*|kJ zC7DV|n&+Y*%|xct5mz8qk|usJb(7&WTeLYXu>&VA9T~>nQ;fx>KZc)4{Jnqxq>6dSF5pytCQ9n1?qx~?FI6Xe7B-U3>s}od&5JY_}Rb9$a z&TSdNZ(P-@AHuu5zTY>4S_Zq|!I|>{6Lm;yz`!;uO+qR)R;nIChZ>qS@J{lHb_Q=NI^YZk)hhS%-$wNWeUu%3fvdio?KxG_rPyzG*{8HqJeM_$X4 zGxu2H`c^5{9 zlNg^@an)1_giO6n6t>?P{BDoBq*TPpR<44kiIY}fg=EVKlhyGO&h_#z(ukx@i_8g^ z$<%QCI~%!L{r4@s`L~kA)wPO>&YSgqdvr3@HM&o#P$Nyj@#J~Q!48?V9?4TVhkmHf z2a=?w`hj_haSs+?dRb1wj%Xo?+78c;R-_f9i5@otT2_YIVp7tN-^ZzNid}kjdDw6+ zdjuESzRWIG+mRoRw^uVQ9RaA%U2#Bwx<=7j+UFY?Hoz=MJxN{MKXovXgE>?3BVD zLCjU*ZcAmd1lQGyn|PTz(Bsw7U-9ZW-7_9-RLUpA*(--kk$02A3IXaT=(F%F zdtvpjkb0i2jR@tP)Q2MSm-TEu0({dYDQ`e(nB5`i=1Z%}M;sV+N%I`z~OH&@#`7P-~~pNwZQT;bKN zR=EL>hnUjIxwBkf`AM?}J`q)vJZL6vr?{^!^^c56|E>zb;U%Y9Q9v{+Y zo{qIW%U*WPG3YV77xD4sT|=YMBat0946PwF+q|g5ftnQY`m7IDsVZ@N-Y(0V`2Qgw)eC zGT*c{|HZ)h$?P=g9ImA1hh}a%jT*n*gkswti*(WxLl|>z# z1uV5dcss1nDTlYP@k85TMSpJ-nn6>zP`q+p#YfnFC^zcy4bB{94DY8-Lk+RoHBmdc zG+e$x#E9V-WWD@Q(5f|z@=z@k79R#HH#u4hL6l&~<9&D2oQgFp&bJ;%kQ^wgi?9uz z{kYK+Pcxd+o0~OCuu0x{_s_A8Y{XG`(3%6M_F)6=6FIXJzfb+^GU^vmGnnN?8b@bW zSDDt*6M!(E@(qWd-ElhQ!u~Hi#p1vocWqc`&BKInpO%n*gXLZqC?OhN#{{id41GGI zuw*a(gC9188G>r4RKF6XkfeNvQ|SOsyXz!?xSXEB<6l z;1N20Id&#ai?RFCT;(_FkS*pX5sC_fJ$P1K#_ZF^sz5 zXLD}+$o7F=UOMbixXym5miqm<&NT5Ymjl(f-ODbNm9ii961~T%-}UnP$V$<}dJu_v zmvpFe2ElX8J5JL+9rF3&cE&=()$IXDM=82U0`7GOn?+=5N?ub(r;66OCkKI9p7}~U zJ_d&HRHHLPtDR+cx0#{)%mtz#)J398R`-<2Ayi~uG^o{a57%*%tu1@*rUj0NF)E(W zNp*bx{{6W;Gg46JezR7MEGeebEWSxNLj+>{GgdSO!a=1>CA=Ua2w#G?Xj;530!i`c z2VVqmev5}QHZK{8?wvYD4n&bf6nO}k;CSJ_-B!o-wb11KaQij4l|i3@20@oEOT%Ya zjI3*7m8Sqv*99-K!_=+RY*Hln`RKU@Em|tjV;Nk)cXK$2E@_*abT!2Gr;Ws!h{ju;&T7$(9Ps47W}8 znr^a=2nV^|t<4ohAMPamv4oOXFBq=LcWo?T&_2vwQs^KxeGL#;$tpZr*hey9_@`HM zkMWOteK2e6VbzGXDl#l|;Lu)gUokye+u_?;XxcL#DX@ZHtAtwZJwUa}Jp`||>`HRT zwM&xT&mq_;89Y?!JL}pmprM|6vR4N0GdJYipTW&t=p@Z-RL-TP3|A~NQbk_Dd3NY_ zC5B~Lg)iOHT7MfLOp}84>dKbdwjWv1A(NJ;EVue;^1Zs|8Ie%FqIA{oO;#vo z59%4TJ|@Zgdz0?8Cxtk8T~izsH>u^l9LaP&g1_1_5!buH>Rw}B%xv_NY9%U?DCdQ% zaE!<^89OUGx_unwR@Nrc=EAr*;XCb2Zn-v@kUmP@%qiS2QA-6BX)?m}^r=&>FwJk# zYl{;V5K%Y_Zd4=sJB_C?9#=OiB(q8z@rM~0d=HvCB@%s*>f70xD}ZvqB%SS@R_NVr z5xDU^F)dA)q7Ncpk#a9%JkvFrMZ2y|Z-Qk|pXAI!UN8-B>L%6Q^llybY0-+#=B8f& z?HRA}?AEHI^uShlD$a?qdtvP3;EOka;V7NzUOG!bo7_$DN*auW=5+=bSGfi}w+sAX z*cC2ZG8|NaZ)(@|imz6@`R*a+5IAeK8e(a77}3Hc)%88&0PZC%^KfMFyu|i@l8Nb& zmdnmHM(QS&XLBzIHUcAe(c?`H2hFWPRUSt zpY%^ALS8i$XFQB*!amO*>an^vUeexL2z`5#<;sW3_2J;HD)y|UY6nMR-OgE`$9%@~ zs&nbHeR%@7G&m&@vgzE>nih6Skw-yn9>OK0UPC&emGnIcual-Q7rx2vrip^ofC&kTD+E_WbxH!6c0leCa2 zY7Eiod@~L>IHx2(v{R;5PkWV+d(&YpSa0EA++kI-yu)yH%;^IYVy_@Li_nd3Q+?ExE9=eb)^VxpfKcS4RMv?; z3EIIjm|v_jR%Q4w``g-z?pz{Hn)fF5Zeq|TZz(ln=Zt;ap^HnG)UBTi)46ug8%zM}3PKZIE$^p)l~K|9D%1Q_qCo{GnO~O;Mo!$htqo7@>Oi zm7CfpTnsT+lRryIE#rA!?L+TS`&t5yTWivHzK(V9M2?Wv;`tH#MH@rG?9C+@WAgNcqy2jfebJc9&SZlkE8~nwV7S)g^@4L^uUu zgp;7C`h$>s$*YJ^I3Z*B0wgbth7TKny286|YBuV=PfI7>}o_67D~?U3!2I)F&jPzSHna;!&MlBqOkV;!6YpiuR!l3*-*7ht}lB~N=kKc zXdawz70%P(QKtRrKr2I~bo3;(4U2py*?**VfeW&iM|v{6I`t6(P4Z}O>%3r$tJjiG z=czt^!QffxkAOe40EaUtpUD;D5;(RVm6|#wJ%x7JFvw2)f7RphZ1c`H)y^mv|s(;V{B`aqTZSOPZ}Rg;^Rj77-qZ)nzNNF9Acs6w)+!kU5%Qp7Nm6Emv*)$v&MH* zx~5CPM$o$vBwU&tF;}_9VTrI$h`tp|ueRxR&pV7zqTC{BVraWW-~EGu2|St5i1fhB znPdB8iw2S%zp-;mACK*Va3Z)wR4V%2(b zrWk!a-e*bGIMIOTCv{@VHLT<&tSo>1X@N56(F>+B_0SUs-9JQur=V{1KrijJvWdSa z+ocWTq!m_tN=0Vp+&r0yJ-&j)@zppwWHPzmimcfs`(6M-W=_wwtc418UgWrTiU zIp};h9{6MS zNbQ}!)*}Q5w#ZU2p8X}`2-T){z6ZIJ7{n?kE(C4dTL&GPBq5^9aJ4sRs1J-Ariibz~3F!U(GDgQVl;vQLDIIu7fgaPNGy3x^_f|tArLf*aB z-C63f^V;=KfAy=H^ua1m2c9+K`}H`#FZ9dWN?AZ~;llK9pZrg7@#}oWoY?6 zK&rX9*|9E+#rxB_#@;*0PUFR0kWl{MkiUig$33q931eb7M+{> zIk#d~F8SQ82RUWqNz!!k{&FDDAc*VsgNWk<+TWT#C;{LRW7en){ z(f5xBFX~+WdF5kEi<4YDQ*p9Obsu?Z$_cPVB^FhFeXlNh+*m=?Y>i0-=cmg1H^}>( ztu=ATDVhedkJz%<&!}(W=H-%NOa$M>@%L4V(%TB1zyAnzWu~so34abn9ExBNoOOvmkn}v)ue*f^?spIwa;;fYtyc`h5NltowCkWc_it zkliUqxy4TxasbHn{%|}&GQwo@A-&gQ7d5P>F4QF{H4juEZ|G=CmtLl~Xe-z>^HgkY zt~)LLX!jloWi7sE-LE~Mu6?&tTdw+ZR>Jo%c5&CncCR0P^z5H})>`GwExZO9ND#bN zvg`})!FC0PNI8Fzl@ZcAoLFCA`>lAu*~3|G4)luK#~Befb&_*_h4;Vhi-;f#rq=!| zHUMM zTv1L!U$F3Kkt(K=@p%O~TbtnEIsq}$1Ar3(m+Adz<4t&n>q{rkZ|?Kl6qz-=OsBpIQbN1Bv{bj$+UKzk3HrLrRzSh}1^? zOqV>aBcHlN0cgfM5WTSq8u&9zuK>q6+z=yF(Y&YARD-n9*+v6oh(};9T^&-kX`H06 z-wES_M6cV~XZqP*6)cYj9{m~6zfu*zm$IC*?EI6eeVRqHODDr{1S&|eU#eCi1tT#M zmGfcp0J`LE#Zz62Bm+WFcOD(nc|t^fqvo5`AE#&%Rqo*w$Gad2Ek-|^w zjUB7--^O028+(CZunUE~XWyHvfoqDwG{v1-*d5etHC!EN9!t2Qa%A|ZW=5<)p}OGH zI-^2>%j)P-BDI)gF`1q&)McJ&`k8Qz=L?-0;<(;rii3{ zsjqr{c1lHwiLkuL9xAro%Ky(J%0|q*%&W*E?jE6BV^;||O~EW^4fBp4(+@=*G9pJH zok98Qfn`lVL+zVy(m$`!7be^mBl1{buUDWi18K)l@kj9r*+Ys|`c;*kB;dn>!P8|Y z{^`X137}GXF@eH~QS!^D3qBGI^DOX=KRaPMeL%D5KyQoDGlk{YI{6}M2u4;$Ss0MA zbxMGOMf?so;lYEQm%iTLcLUFai-bEnJ9m~`lPAUiiO5uUPVyy-!VC*jav5sKlw5~8 zF=Yud%qQ^lW2iQ}Sovil@R+LiB{ID`G(r3^tV^bbV|8B6s`6UmL`X|2oWM8~_E7x4 z8s|uA6jfLB{sCFnbbMx%bimavKswxI74mF@Cfjx?YK_sekmJVc&t>2t6-uJr&~Ts~ zkN>x@Z%fP=1)5Ij?cJ8>lMnlTPqE ztTv;}eFnQa#XiOYvY^emih`ILuBn+)M5)aSR6{lK%h-ObLr?DPFfRjk7ga}*_FW}+ zsLEePNRx(@JmUg5K*xRyF$k2|^j5T#+3NRfS^HqPq8;@nu^$L8Kf`^n1vf}MGGAO( zeFB6G#h9TSkKxz(eCOJkPCI4IJM>@B zTq%V2XC(-F^7w5LD$)AwO$Dt8DY6F&$;iqnaN8lTs+j#zVV<8#iXRz^Ffr*btYJDT zb$JVjQ_N#A8LE-xqCRQCn`P@b>_f=2FxBYZBFpd1_p5JePUwkrp)~n@hCn@4N}K{* zp^Nvc0~hYR^t*+PjAxR}*^jY51HUh73zITlnH~IAU6#*80C}#l@O;*TxvDX4&}~RS za{lqKe?GfN4DdDPI5cy7LP7-@eOUEDVN*8tKG2&!F^$&w`cy?k%GprWlTs0N5cfcz zZE1PHrJ@{o;Bu=JZez79S$zd!+iW&jAAoIbrgrt%c{og`IvnuQBn2*Ge=5#zs$B13;47FK06Nuz){bF>knb`-xm{?3m&FCY&!NIH>3YIP7gT4 zlLdFz|5_dp?RbKR>EOK`{BNH<0amklkr4h1KL0|De_a2y7iZv9XcAuk4T8{%;Haw}t=Wq5t#3|I1$Z<2#cV=_BE5 zqdi_Mk62y+nF?B%Q{_Ee3qd{)|CiwwAp@&KCY%PpZkGhc-5OafeVSl0_Q3zkN{{Xy zHloVdcdP&QW~FsLj0B$eU`)|?rqEbC9cO7|<3+l2+zZBRblolg+`mOsNk*-82M7j% zfOjPr-VeJP!V5Xdx~<)6dR+_PoD=BVC0=G}+!j>)E;&Q5Ff)-h1>)f{aQM~a<%FiM zH=Uke!t}bA^P6nW*ToNHXM6R{CQKf5Mg}IT?1!FY-5z9$Q?j$e<^W)}+@UG4=k`yH zzoGj!0VX{v3~PuygXf}5`@YpMS3(YyWRD@^B{!=Ik9B%nxdaNShDR3}!6MqqnCX3L zfWRs^!63k$mLwY>Elpt$srXy%Clb!YNxoiWd)H#KylGJV)K8rqcT;(fRm2L!?HKqN3C)aANqgrU)S}c4fFq471U$bNPGz>s)$zhEfY4c+1jvLvX$xYOq_wgb zu;a{Z;4evA?yS6~L+N`z&J2*`G%rw!{T2YBeZ1B8uT}ppU_>NCN0t;L45<6MmlRpx zCKQRh!gn+`F^2f~``$ALPgR3zA>e57wwu^0TWxNvb>~?sKKWbuV=EL|OAgL0u(w8b zX(jVEmwEW{OX1P_Ht?bOx{QO#;jd4E0w7h`pT5Kt6RYLvKIg7FdVvj2{1@z*Qr|x} zHgulle4l}NATB@(nMWv?jrcmutj=*2)CfFkTw$P~@YD_klvWRb5w@&{?xo8E)oIGU z(2Bo2`I@CjI2>L#8N7tm*wQQN0)eGpBXyDP6f<{VDv zWteIfOBTRIcH?oTp?J)~VP4Xf$v3;=p^I!plh&jQ^vEWpF+xWtbm~DGRPpP8jgjlD za=Y-?mAKJB8n9bDw;FoE zoPaZ3wN9JV32t7%k1hOV;PX(TJH!e^Kdn%Bpzl>`_7e=wT^?^llL+kbz6UxI-m7h; zx9KN6hoyRx>Hs5k1|Z8?IQDeDWGh|eg3)m+Aje#CYtlNrB;tv zv}M0CSA2aSXf}p~68HbL2qBmfo&jeGr`1DYUPv@ke*t;P+1mz=G+lGiz5Y!j!~l-E z+rJBh4>B`%qA8vIsOLK+CiVsl2exp@jxY?^W<}R4TyFep>eF^d=#3?O^Q8HACLCHZ zT;p`MORIG0CGEZ;P+s=0@B2>u=MlZ8uVjsMAXG2t?5BawSgn=S)mxNf!W_wsJb-*_ z17fT`FgoK11~7_S(iDdw?Ceg!WsB(y0}#*?AvfW0q&(Q6WgtfDe|B7xU|Qmwd-4-~ zlnRAH;T>y${N88dFJ`#x8@SZ6G!PiPwjj}2VJRKJeHPn^t_RVmeIOV)(Q)m@#s)k_ z%47V7|K{3+R-i+?gr)P29&ih%Hre&={3|fh|0QxI^u~QSNEd>5+)JkYqt8cm&wvTuoK8KqC3+7K zt&`>)NL|VYtaA^Y(p(2@7@@j)h)aG+cfcN>lXRN@jLB_7Gq(u#TppDiFa$O`M?!0P z)OCU>z2VbDJy~xsgVOipzy(Jz8B|CIfg{%&4buw&o!Sp(I^)|0=n5`6b$l1hEs7hF zdVoZsnLf4o*?08ONfSVEkn(wmg8_>zvkLU_&8aSYLJNTKk}TJPx4`7+O~4dOeC60_ z1eoIZl;F*^b9sgn9c~HY<{BZ$Hki%PKmC1sy;`BQ8X+KvTI$-^86sE^j7y=sFa}b9 z_H^nq2F7lU;=8H74XHs?J37dlNe}08Km6i>${`lGyx$TL%vBYN?l1q@AV{Al$)}IJ z!OyMz1YCbVpy}s|(`4Ol!lXLEpWUVl(4D|Q2Ax=!q*dTb=@THN9(p`su|5;Mu;A_^ z1gQ%HBPeI3^fv*+ZLTA5#w9P~7keDxb~45D89Q;~7tTMS{`;W+!H%)sh>*FRWekzJt=i5j8sxAnMVTtqUuE(pH% zmetfbEp-X6q4^@^EjZQZFTmAPy!-9M4fJI@QJM*N8gNHU0F`k1t&MP z%B)j@nfrB8&3ejg<)Su;rzR^#4rgaS;yaNtfj$oH)Q>Q9y^(nS{cO!v5PdFJ=-x=^ z83jwH>>2nTY5PvhodNQyoDP_+n4we5!z4g48^}vr*WbT0@F&3>Cq87LB5V~cDDzoM z-QXIUc)DNL<1S0UAN+E6rSD?>M%h;*HcyjK`gAYL4~{>#H?(_SQ;vo8MGt=CA(_R~ zcR#CqOsQycuUS{fVaH4je-!98drM|rDt_SA<8C>{UV-+y;jJceD&6tOC*=^EaWtpB zpXCw8XY*k8(7Xb$Z8vwyZmw_M`-7L}))QvqeTaPVqBnxyqIYx=j_eL&VV?%VvwT2E z2O^zlE8yhX^Oyf0($e}wA0Ttc>F}TvFy7S3?21FCkoWXSEGEL)VEc=FOistraay!o zS)hIx6#m_`1<_LJ4l|E|=xcqWvCTs&MsTs8&+&g~0fuWzqzGM&G_3i_FII;yKn@mF z(Z|zAcH!Df1!A_oatFK0XLMR>z$lWPPXYn)=3IPZ12B#*{3FvfTbt6})4lNAYa}lC z2h@XE+_Zigo<6=(+;=CrY%;w40Tp3ao`ya_oqYUsz%FS7j7;9e=M*QIgON z&1#^OoT!8UKg@R7#^0FjB57{o`T2g=Ys_*fA$-pF#*l_)HA~kQU*pqXHtBI+>{fU-q71hvkJMD3(Xi9^RVC4nF6UEK7F)r#uL0UE=};CEfzA_m7daU6H=Qzz;&^l5*~3hWL7x@HID#p_RdlDn8JH?FXx`3#wn2p-LKVyF%TEK zUtD?FDx5=1Ow7EfNBh#uZLril`K2~hW}}(u1g3SLKvo?(OCr1cp_7 zvDy5L2-ejzb!R;NLeqk%AK)k)WQjiN4`#H9q-2I)#Vja7m|1ub*a8h@WL|E8O_%7= zJqXl|#uysfY~AZNKSfst$6k7O;R9cRFn61k_ARNq$@Po-_;>SO{oryfeX*7Y|@2? zq%SfuQGXOu@Am2rLxl~n^*C#5c(c*Ps>i44W%CDNh2Di9#>j%>m%JUp%LFd0gl>;# zioVbbUuep>GiL8y-KwzOTk7`BEbTO!#n?{QJ{2=D>BB(-~Brn?`V?3`o}f{G4&-*w>btFK9I zQz8B&%&uVeXFdQlYrT8#)SqQ zSE7*m>HX#WPS3#4uP%;fceCh>7%~~iqT>jtpMXfNfY)|%SZI9>f14Ln3Xq~CT!{uc zc}1qqW$&eu4M}Sw7%bL}*PyGb%Nx8UqM{a$+G8Awatd5Ury80h>V8eFFRHI^u&g(* zLT$YH5W{vmy0#MwGjGZhefwwbNk7WIiVevvhYnW52O&YZIQ@t&0EZ?A-W*+Yb4j@| zQZYs;zU^BTSVH)WTk`TvfuF&b_-Z=jlo!{D4;A@fjxZaEUF>>c#JdyBo4DbBj(z`L zI=6aag5Kr?x&oVSz>crXRlD1P_a_vAvI9Sv@ngRnfhCuV8udoWiW59-<(p&As8%p>boXI1f)UxD2n1Xeek;QXdF?Lba zKG89FUMAiL?{UW-2aqyZ0QLQ~r@-c;S@6LeZCQ}2(dN5|Dm34*|DaBGXDYcu(^c@E zRKysknA0nWEXEBgVhw-D9i>|IC`1Jlh4Lz{L=Od07?JDcl?t;`d#v6c*Ki7_ll|53 z$9!kpVQV`<1HnX3hn7VjI@bxNKBw1CTC9dfSu;iF(~IdT#{AmrAVcylFYrzP6FWOQ z(lX?UK^1-Gqx_H_crAw)Y__mDquL&t8TNWa_o(*_f7$tryxtC9o@=58BwsIXNJS_9 zge;J`e?@S^xX-ZInw-<^GQqLI+R*j|vx60l5s!JTs=zFRvyB?(u>VKlCk$fZVuF8V z9*}y)*leNc0y*nLaLO33Xqr^-ZF6gQE}H55ZrezvH+((i_|!5CdU9%^zo8a7s0^5B zEB5s*Fu1z>=|XESkWfscdF=&W31r}#q5IX=RBfRd#Xa@`kXRljtXqXZCVm+HU03Rb ziU{RPN9QFic&8iaa!g?Ge(xbfPctpf0H8dW9&oAgYUzCZ_^}h{dwTQUZcqA08$xT$ z%jMC1L%F+PWSa4n3K7&NgW_f1pWP|Z3PINK$E*Gw{wsNg+H`4I!^`nZ9k){w2=eS# zv==={>-GXk=rx;#Aq;D-M1I)R}XCz|T;^ zUbg)5C~Sx^<#yT2{Y=&TNSFAbB)CDizm&MU%xfQhu}>}>xBx3ua2|$Glon)9G`11@ z;!QQ7!NS*9YElO!I`3+P@ct&ubW|tuKdt{(z`6S49ek;GuBF zzzC$5iTDdC(AUL3C^!&Tb1Q0RWds-Dr7r@q#^fEthuf%x{)b zNf5G%WF*a)qsUNxgM6r!pn{gR5RdI+Y|x_{i+B@#7tQ!nFK}+5aF`U__tvcy16D=^ z&V75lLL@G(R(|EnEief~1n;xx19&2#O~LWc&eH26ZN&6u`|Jc`bK?k8p|fL1#tL3Z zN{)L5Am6ZNT&LX-CRvo1g%&kpdF1A zp#AjXbmKN7=*mQ|9_a9t{!WqsFzcebO>xqR8kK$XE!}}$bcpdHM#~GX;W*9nOv&`V z0r@I#p0S^C85EPGL-BxZ#&BPIo->)HzUJk4liS+DDkbYom&E;nm zf&GvV4nwH7_&k^-7*G>*x=lx)po{;pg)^8E=dJy2?DyeS%4B-l(w*I+;n_Mqpl6Ou z67)wMZ|gq{*DLwbz`IfS%+g0nv$dpNNdg*tp=g-vwcJC%i6w z%*#i1xD~$A4fZbQc#H4$twmhFKUMD+^7<^tl){U%W}BT;2ne&dWLK1MB8z;$}U z7)gm-KMZ#+MR$8>Y8H&~mBnzKXhR%Ey1dNA2G#M>`k}9(t{Dc^l+(=~T?VrbPxEli zACj`QLy%IjVeEAC^&{w&UzE6%%D-+=%TAP*7ll!dbn%5}rT8 z1||9dBI*3`k8Z$&L%mO(1usPD*&^4oOE^XvwjTe(mM2(%LYl{@uYmkrr^H<@Juf%2 z&u`)WbUv=u=i`*qhlPealf!55Z$K!Iw(eT^v=r3b9fvDTqw0>8VuQqA33L`|p{X`x zA<#bl*Tzs0vr*zb(!~@1L3OsJGRMPBX9^o?ak-WC z`kaK9T)nA>{Jbsj=neQ8ZUa3V*JjJi!$`zW(}LHZp-=|`P6NNuWpu)DW$M#mxTXtG zt9oyKa)wMCLn+cB%^#jzLBb!Fd=l&JV!@fC>macckM^O zw>o!Iz4quwXo5(Wds3awcJ-&!g7*8J?QsA=N6pOkms$Njun)yYc8I|ZQROP>Ok$Si zSGS-;g+@&6elQzclD%tQfY@|_yNzN5e9&DBPrJ%xsfEG@QP&9tya$pO_?^5IrSv64 zKTn``8H3XKwk{Wa#;Z^!l+Fijf;y@X)Iv^=&lKCbB(zethX+MMLJ}kP7-7Hqkvwaa zk4u_OwAh~*F{FC5kQ@Y(vnxbHioPPm*F=K>6k0TV03Q^5i)-4GlVp$Z-3hIP2<*V7 zUiC#knB1JZZ;-RDsuI#wKJ{(IG6^G${(ExwcRd4g+^1>!4~J1gr}65V_-%(N$OjE!1QXB(MHZ(n59|?)7aO zBUBClL^2e&-$??zE@HVgL~Of1aKmbgwo(!)9Mnsn2E7CnnFG^uvVU}f3QzA=vl=sG z^W^N&)MO*bt!c_Qxa97wU0aTcJ^vIPU$#PV`Ex<(XVfAe=Cq7=`@jMzn3 zvnrQ5P0*m$C$S(1yI&Sss`nkME*;Sa?DCMiDM=bs9^MrzF=YG(~@f-kRuNja(8`ypq z?fv>9yN$4uet;J4FjTcdN*YJ@A0{ayEhj-Mz})?dMzH*?CG=hbng%!Qsi@TmmZV8c z+XWlIyfB8cvn{(p)pwJwX-vNb;SiGR1eKWe^AlPH^2@zhw}y`SL~O$yB|i2}Er~Zt zE7=urrd@=BRb`t#l#Lul<4%7XH!h5Zle<* zj2G5)v*92|5LCg-7_lmBKSl81=KFnC5iZSp=%JIqZ&V#nMn}cqEofHYJlyNHl;D5( z>&pH-^tPdiuu0%q`AO3zAp=MI(%H=?`{S23r`r^m&kGqK2~Q``RJ(|pdw5!rnl7(X zzpxmsDAuPaC+`^pJ|~S~;_p(9P_Dxxh7bdi7u*!8U zoYkIEaF7tRkKO6^u6Bkb`(WzZ!kXzI^*1y!Q0CKixdr|`?!=`qi3#Sd*FyV{^pFD* zg}5n)hb6G@;<=Ol@ZmFgCC5KbwdAd46E!m6Mn?z2a8|)k#5((wsK+Z?fXFKO|9-g; zr7)&RNsE$z(_e}FwV<3HoIY3yf#>A?C#6;5wHCN*}O0=(Ne7TSq2#23QZ}EPgC{-h? z`uXHvLD2BI&cx<52v*=N4u_LVh99zs;8%t>=k2;w{1h~+1nWFZ=tsJU1qy`{g10t{ z8wCD8+TJ=U%6DxWW`>~!1`sen5T#})gAgPIm6DvHk(BOII;9j88A_0l9J-_g0SN&m zr9ncG2I*3GuN(b6@AJpEzJI>;tu=e^wbzol@44cP<2=sev>Ew*uvJ*{qOGLx&lwS@ z=;1HrPX5*RSC&m}kt9eQa&fTL)4d0{oVm9514<80G*k!6bFhb|gCB%E2Sx0jLj0gJpJ$*a*&;11ElU8Q zN*k!N)dM-fT_9M-agi_5=C9jNbAvpya#|-U&nh550*f!p*zjDwU8dPXJDQIwz~hZl zQOYM8#VBQxXM%wPC%|6J{ze7WjAy$dPmNA-VP41C3 zxse$LhlSf($?oDotRHh&JeDQk>1(@IhPv8~B(Gx@S~;j-%%BHTZl$ zer(4W|4YCui{W4J1riBwzS;@!3UC);M@5|J8xtdK`XwAnv~YO*g&cU>8YYVlJT6P` z5B~%`LF7^4ibkdLVQMyPmnUL!T732OJOQbzBOp^z9sAdagZGufXh9uzkZ8j@(5VW8 zDy!f|)Y0Cr?2H(MmoHyK7in_?xT6nO9S@mr@p6e;Ss{fLI58 ziIDNXToHQTdHVY~ot?slIR~E0A0(SfPz67ihz@Sqcc#MevN;6AN05^-0`ekw zF1J63=35Pj1nB zM-Zd){9N2GU)zLQDUN2m<{?JzDW<%0z+v;!sI~z;HYDU$o@psig{epaXFXrdg$=S} zZbXn+D?k|j=p zsO66+W!Uxr>^pO>uvRf1Ulq}Lf#OPm3Axd2w}xn`BU*5{ANE9^(u-+n6K-0?Ky4U8 zp4*lH+!>}F3w;ij2K=o1T4@ah%^-yxjS!Z|=tLQOKC{ZQYwf=nj4>`md_wu3_tX*L zf$IQR9A{1)+yyz1X5`MCx{p-4Owae(67X3qcN3 zDdgg0Y7P(&ST-$|I}?T8L&Jt@>0txsn@X1EiI+iXtUcC;#*!bH*3~(Arxa-a1K~h_ zs~o)XIDn|2mKm(3X6*DE+ke3Y9FEQ*21X~FgyXhgiC%!s`?U)t4%a>xcp1YvO<&0p zHRu^mox}3touqL9E4zy~#+aL%-luQ7*=Xdl(-c$-p1-Jt>((%Th#0E^J96afs}D&Y zl|(c`8mWwikJFhQ8)3WCLDX!2(|xHixbI-2Sq||}DwKNwX4uZpswRuw>LCe<@@OtKk^JB=k1Vo{x zwJ0^SpmaXiL4$I{Ckyjn>J8a?`_odQX4^8uue`%w^?mLa^N|T_7Xz#UhZ6*B4D4t` z#l->*oz`){0?h-^e^y4D1hi~%wjjV=J&$abOvakaCAgUVB?JOVF>$MC?wusCa?$+A0vmssP;|;(0!! z=b+n@wnb)Xora}!{R5di0sm}be5Zn6!i5BZan!}9x9C-kF(;Rvpb7K6(Tgt~Y}_NK zCf*n5<1m6k`2`#K_(FB&V9Z}q!&RtrGK}`L*=kkR=x}?{9klz70tCYWpchu0T3^gh zQ=^J(Dg2)T@PuOxb+^F+92$=IzzlAF{m8acsP2XfL@ASLKBjlbO;S)EvLM0|J*!eF zSTDa|^cVZdgSf(|c3-fnrxq0aR|OqJ^U=FDXR2j|bCk@-&1FU_d9DglW-I3lQc(Mu)Qh|&5W7V`q@=lD)I%hxBqQ41lLe7QtJh0qm z6(bD)*S-X}v#B06#bd?nuuf@Q$9*`)lbZSj1_~ZxTFhPpnwLG#s`A#LR`a#Et!o6r8@Xi0drKKWtl*+GH zs8<34+=B({1q&QfW8ki@xl|!}?jTIV;Jkn{rcpK<{_c8I0C^mR}{Ve{e#hIu_> z$li6s=ff zq0q`SnW>nr9><|s-Qf=kfMp~PwN8ze6v^59S1O#9NA8_j_UD?Jh)Jay`ReH7 zq^v-)JBWGyWr)tE;?g5G3;^C!X%qUNm(W4CItzTS&Y@8?5A?k>0YE_aqJWVdesK$tf$kiXKMI>6HTGd}*k(Z1>d2m(ND!gCjZ z&al6F&fP@bmX)*5qYE0|v!&N4g~vPt}BylYrr&8sLs_~H)5;LcV%zF!762p zc2x3|<#^VHt7)fuz6|Nm3#7A93CVz%1#}<`reER|2H%>ZYy_&;?|@NkItDPrI2mVh z@2Gw1sYIt}uoNmCho#b#M9bta1b}O`$Jx5*F9!e)4H&&)0=>T)Fvd3|+#sH#XmI1L`D9Z_6CG;VatGu;_b{(nj#FdIBV~y@9{6Mbr2flh zK4JDb?aCcjslqe&*YVp^L{Y#Hq^N*z+7fqJ12#>RLjNT7KQ4g36i|w$XJoAVxvG(^ zRBHEbG@EdOz6!D(u2SH(yff)+k5f`XD^q9o<2MX|Iy63C-LAT5(LafJe=D}JC5I5$ z!$C~m0}?ayMymZAUwAM3OTC7&w)5hg5C^WG4ywzA z5B{@AR($EcCB30h)*wvrtoDxmit%7lJ|Vt#Y5vi&L4k#uef2uSDS{-+FvEVpzwz~n(`F-*gjJ7OZ=m8^jfsJY zodWDvp}-)4PVXPu4%tc&EcT)ng_}vRzBnmCV-@$@nc9cU0*Q^C#mHRlfI&%iKf`Q7 zj-$+xOJG|`wLpxeuM+jwv!DKb6Opyn1M075r2+AB&t7b6yU~a`--;g1lhW9^R}w*C z|Hyn!5UZwRTHd+MS=p!nej;80U_udzR0&~Xr;Z^JFl{u%|)~Z@)p3m|t*`udS)-(*TOS&P6ub`!wAyrBd9rWB?u>$oU zLlKf6T&F8`jcBP0H9;PTudoJePc2lA$4j?SlLS3!fvSqDYrD+GL9T@Pfxna6jxqJM z+9#Ku*B8*9$CoH@mZ+bgrfgG=G2vn5l+bGJf@^Jea^{o+%WC{TjKP0k&6SxyBS^>+ zvR(^#N`!egE6FkrA~m*(2$^hd|D}h5h0Y;INwxz!Mn;1p?I`|q5;}m91>xJc0}jYi z;{Qf@W%s}ud%Ypjg0g`ME&-rAeo@pl7a})fb#xXRuAf>d8KgFL6;*gv7f`EPB#o-z z%hyd3=${?Ag%($A2H-t-aYL-pgLtRwq$(S(Xe+{Y1f^-99Am}a@WIP0k-cQTUZadsvwNZ@YDFs@|Q=se( zI|ChMDROv+kZBJH_LplX`Ndo<1s$wXzUWSz)3&lUDhp~v>0CRNBShYZn5XoDyHGr< zt1}IW?h{hq?u8nWj{rqZ_h2O%nw()db^3i5u}c?9^Tz2#D86j1oug~g#e&nZHv%!hwR$r^QaP716;qI9o-LXR> zfFpo2^lrmbphVpglaNZc7Z(_S!%`F+bJx6h)`;S}c3MGAdEifAGj~N2v@Y7VMvSlz zK(f!wpy%(4A>fGqPeZ-ifM>1S^3S+;Q|9po1r-&pxOn+?KcEz5xAZly2t_A(%FuV-ghxU)Rm1GR*TtyRCBn=h`#cYaR1u?m8)s^SmFWB;ER zlWYjfZ{27p8@$S=dSlKsAE2*;z5?QF4?xhWkHZD#PxQxB1G+usOtP8@vDTRc$> zM9NRMtqV%}Qw8f<*Eunjncq4)u_HWM=9SIcQypjE`Tqi~g=DZ1kFZ)=^UZn9%`y;; zHKTzH8V51;`=_w-)c<=+{@wX%Fr7k)MRr)_Auxx(VZWJ30iZxRpsUxOtUg3V z;vf@L4PCIRszy*7TpCy-(#^7DxGYUT(9}WSM!0Q_pQ2=?U`L7}W z`-$Z9CIY~+94Z41?~*@vmh?r}`m+=P7vB?a8!XiY2NMB4O!O39sJU@^tDv;>^&FN) z)6u*OulG}D^qGNA;pS87HGx=P-859e*Dh3|RRGALK}o5z7w;Fnk0!!u2_v!*SUPRD z1mW#&vDEWGWLjvhe>VYm( zTQI9Yc~F(Vemh1Sa3+iVo@bxzqyB&C`lu(;=TzHn{7eMhmgmb zKB{DPsSN73fGp9~D{0(;=;N)@*K8vtC8)I`>$alB0E2f&<`Z_~ABh(qP;5UR1}03K zEdZy~*=b{Y7%y1^#g|Ht&Yt}-GA*rpxg=7Ly(IJT;CaFhrf9oUBP5zi0E-7%>& z7*W7-Hh2uU6aUYm0I<~VBOsPn@x))y;oJMi(YW>hij8p;Kd{9m?|Zs<*8lMHuKT%s zH?%W2F~nB29%A?McM2N>N*{f9q8@vCkw^cHjf>x>(nL&+(0u5=Pi|oRSY64tA>Fs> ziz>qt`{H>FyxpZw=pU7LI@{XIInOWmXEhPWCQvR+84(`7-dUqR@wU6)m3O*S*IEBj zJs&MmXQ6U=t0wv(HP-3|KqM^!BxQqZgiI$sEcdxt)hoZAlzVVYt6}CZo;*TQQ5ehJn85YYNKBZi#50KR`PIQke1tM}6^owB*{A>|2K0pcSYu zTlw_@AY)}fOx@*rc35PH07FUj?O!kNU2^J}xSpuA9r^ILjG1jI*E`=oo}}7k4)h%U z1f+jIkJ-}3Jzi9dyK6KvQns+gRrRGLDi~Ot9SO;A(ov(VtRLsYu1d;p?{M>`*lO{y zv0K||CiE#kS(FXZsN)uwHv|ibfSfzjU@9!J6;EqN#WKB!J zAu+Cqd`cl4I(W5}o%H&(T=+DYj&P@MF1j6*-cX&hkYP&_Fb<^H`WQ+b>CMHx@EhP3 zS%6|1mHi+^fr5d@@#q;a`Fu3Z-OXnyG}nm5-i(aKzIt^B1Rfv8ZvnzB9Aqlw>CcGD z0e?~}c?R$b-Syb2pKLvXrp1IH+XIu;VUZu#Mll>AZDNM)_Ci!O^D1k)q_D1G2gT1M zFfkZI=ji!GefKjG(54}~5Z;Syxy(s-4kQuF;!b zNY4CbA3&V)-ZY{--+fqDE~oJ+2TL6Q!sUE18(j6D%CDdMvCfF2CVEW_LlVG{VfW$4 zlCWUKu&#*_A3=+5CWQwN)_k;MmbtjO!!LO*TvmHG&qI4lQYX($Kuk=}%#52RJo6b3 zgO5nsYATw3JI|OXm0^nn-@fbNBGk6GrDg&(y?rW=RCmoQh zAqMRlsmBLBelm>_pB#K_Q5Q&m?a_M(&z%wGyVeF?hafh-N*b9Ofho<*9%!}A|jMOPP-3)}1R)WR^UZ2prbIDYonp_sto5F=cw zY~uONy-3+_BXp8k+%`$x!z7jPQ(lr#zaev zv$lNQ)9T=Vf1|sbHU|S*;S8Y_E*)1QeHjg0U$S!Jw4CD@PeLxj;{qAaXh=0u2AFrn zkH_Bh+Tf20w1sBUL?gTce!2CE ztnr8pjWpV^1j5q`*+_H8&20xRYhb_(vWmN3zVL2$J^V(aDS|9HJFQ=7O%Fv`t}`Kw z{eXOb|8NJVWhf7F?>AlK$+ucZHIk)UbuzEg&=S-e@(n5_x1) z>fd@~KJ&c1IgUq1#+%CByEN!o7sV5)M)hBT#^j{cmm8-{_1@XiM5)YEWe^ZUzoJhm z&E?2`rebNN`p)jTK7F=NeECn`GH;LiMylvwSIS~qPz*(}wFTf<=BAehSz8yD=`(Yh zW!kK=2OP+AQEZ1ZaRdQ_DCLdJ#gC2NODK!P9JQ>kPU_vWv$MM-U0`tJt9n@)u##W7 zBx}Ea8Q7hrly5bV-G|XKm@9*O{Q0il0D_{_qUu?4(I=ak$k^L%=YIormoP}C&wPM*PB5v6%ObzdDE6WF8fh^ z2y~FRWfl$^Vl*hhuE$fH?z*_wZWxcm+H8k;4G*m;WWl9w(*5FoF`1i_X*H*&!&aT2 zm9l^D&r2$6LG*faJ70dx#8sNcqO0C1Q$$`-^b}Zz+3V6-gysPX^2V2-BibSatJ^oD zr5w8|-PtGJ>PJoHD%D6HoA!EHC)jwHRt(QnN4cr#PVcl!@4*n;xvBlar0MC2^8o;& z!O*B!QP?-21acF=_)hnz3?v<=3FNcfqQ+l{!knu<0oWABFEXcHo z%%DF}6=gEOzIAzZUw&USQuDaBpjwZ$u0WL`cbn|*0>}!(9E$Ql1+s*h3XUaJE!HW2 z3IS#pL|wT`7h0rOZ)?Aw?QepHy|HB`x1v%Wa5iw>pcI6F z(iw!T9s)lu*OXP;u$*MY-kD*Ch27~b#O5Pw%F4<-hiAP}-#$W$hhnK>8(?wP#V?9=X`k8panVwAFTRgsrN*uF% z;S(vnr4wY}eGRpF&JQ5=y%NQqJ3khi{|v^qab)*IehdIxdkN;Q=fvtI7EhYQV@Ule zVC688j@!xG=_{hl#cF!~h&RK=Xe*qrmAW^T2kmEo)n^E^4~Sr)q`TeqLOh zLyIr_Wz)!hU>3Nyi*}cCHzEO%ce4}6wmTh6{d3e0Z_!85~ceOjp zgoH*cX+)@9(qf~%FQwIla$eubLW-dQlum;0x7aw=^z``d-stSibl9p z^9aZXmxPLTS$`$%E-fP|x#DfGNY{M()Q>U2V?^e(`#Hlkopm(QZ?~2hhseC>{PKn7 zq__L+`}dmOo5crv9|c*Bc3wPk3Z1+^{?6`-`>oR4RvBsv3H`D7l$6y?rRvyUfLc$( zN5&AXjhLNwr;_y;-h4A`MiUm4ShF29sn6r=B=Y{pGw1i=oUq7wN2}?vN}ELxG0++> z{hkG#S0SKRZ%qi{3rOK6#XOG^zdX8}@tj#KZbUj;_Wi7vCvAzgzbVbLhf7c|D>Wyn z_RJx+&Br8!z+$8{tTpkmGka^P^P^HPz1$ro_{Yz{FM(+FAuhZ`lz%V4YXLb0=lL_|Ej z#{>qH((K(YxeP7X-%pqkoP)y6c1n4O8kJXZzJO!z zFLj1COxCG$RIqi?tI#_C*Rlk**WbVVw-Eq^q zdh$FwnVNocyCmD7ApK`fLKr&XW+}tJ@EWqPv@ppDEC`+M+OpPtc!E{8N{h9~`az=@ zNMBbl;+Ez5gIf9QBz&e!UE$0Y6l^y7!Mi69SM2c&F%o|sj_#qETe;_B8XPT@4;qes z>BC^?+sRIh|7$5Pz$fH;%bbHUY|)d|YHYFM>XTR=U8nt8Qey`zt>0&=ZKg+V2R+OR zSgBAK?Y*YT&Hb4W+J`Apk@(#jihFx@awisdk~dRRzT=Q3fgfq|Pi?9c0yH}L^#M&h zRPCG7ZT8ni#JbadH8T(63)JVx?daCDsk^k^b$KP(Vh3`z;KvO&_SMLn^;((r%sE&Y zbxSeRNB2|Y(2EjxnzSLHcXm{4{Fc}w>*nU>x}>SMZc#m{fy`;%3zTUjXR(&au`QFs-fa4!Jt3{QnU+mF>H{H01KW7EZWf7x3smNHRnOG-~ zg4jJ0aeGeX)=$-t!-+M8qs}hHRy%fKOzxilPLLu29P9YRL=alsU*U~_OnwhY=-p6$ zE%Y3W-J2e$OgIBYR|;gVtJZ0|&oN({%mcqYRpVDcTq%5&cDAwGc!jC6$n5O)u$p|- z8wKZAxv6SsuW-pHST4%g)(A52x7QR{X_+*EK=Rd&YwWnKjbaUT_1s*`$IoJ-*G;7x zBi84m2SDVNt7Oz1OtuYb3H_kGS_$Mhs!xQg#lclpq7l%^H9fK~^Hr6fRQ>|gteKOp z$mZW)y1Ec;IcG!aWvUVCs5AIgH+Sc8RYv>zh~SGmBiEo?#L7S>8z?o$?M1$pr|tbc zHiZlxcl|*E5%iO!IZIsTAE0=7vz|RWV{K)1x&D$L4Y{Zp4=LQ~zLXPJotjGc_ei-0 z956;~_YY9I@|Raabiy+$T++^htP9tQ|NNyj3xHSQnugZ0Rz|Y#xknJ-Z3ReknPd3K zG|kO-%OvvNs~oxsbcYF=M1rJu#Pf{^CHN<2X{zVq^cKKR%?6F@&*S(EF35?sV?mzC z_L3l;%((%l&sE2P{&=ZVqA;0jH0@CBH+^BOJJq&uu(+QkTj@vqvOoTSJ4bx#(lq*%YL_ga=cw$3F%;8p3OKI~jJYMr{#9u7SrSjyD&?SjOo ztRQxFcA7G@EoAQT;AF9lM|2_PWJcY--zA#?K2U1s%2SOBd|o9=Vm+6JM|&~E(Okgt z?8DG-uzIX%3@~@KTOPm4DYSSmPthXqFRrvvCX-4vHltyuSq1nv1aP&x{#^)Ow6JRX z?gh42ty^o)J?qA;t#4VC-N1-v6=z_cswuv8i3#f>RCJCp+v`4$eg1s4B@n0H7jb7~ zl@DEK8FKnVRkjtI+}JnSp-^HrQ|}UbsHTr)GLT z&x)(y#s;dxsO5V$i`#uiO@R!Oo99IX+Q1tFc`yD<`U zrCf6>pgr?TC?z`c>sQSfnZC$~r#lC3TP}@guP$9FGfMqtAp;nfu-1I6OV!HO%TB^O zixsoo&^4c_=={>xu|`IB`Zh?o`@E)4agYLSjtp}GUrjEP*g;lirm9-sFR7>?8);TH zGAWSywg)Ohks&I;v^}aXj#tles6eOGQ#Kh`A66;2{-sY%E6f)?9vg6{i##;bV|Nyo zrhi(TfiuiWcY5MU9%>oV9e{d|tY#-|fx+Z6o!6EaJ8z>@_)vK({8T01!&rNPQDHD7 zKDF0Z0-#RW(}b|7=H~?neE9g-VuBnzs-Mi&wjcwt5Cv7xi`EzER87_h*a_Vm7>dksD#h{>G{p3VuD zar>DQ3G~zjc2!+n1u>7cOkm4iL2dUhU;u3JfOAAT>gh=4ZohHJG7*-RuQ;^*5R#2eDS zGUZ=!^nt$n1)!yo-O|!xDM7VM1&$H{?BQnNnXT;5dZpfetG5PUR@nw3{60N*48tDW zp$oq=a%%u};|{ut-J2OYM4w9Q9*SJgn+Vq=RcenUg*QP5;xSJtEfhUGW_JXL_5jd9 zm4Z5(7XVB|XbElJ<$$%eM`c)B+?T5U=NH*!M(GsDn-%0~3nZo-Fs@UxOkP&3@uU}A zFBA`J^9YR@*kmyeKC-r4Qmv4PCwXuiofvU%sl(`3Lqi79HQ;Yqf0B-bOP6-DjO zySW{;aL#Lnn8e0KNo##j^>0mLP4g!}@DRNaAc9^Q&JKAf9UUFBO5MEl^nlH+EkXm@ zVPM2%X#%=e>pFDR7R9GJb8}iYT3e#f%I=Rw9<&>;=w0~S?9|$gu2JiK$Qd}|LsJN{ z@D|C~GiJKn>A|;Hk$#BkA3fJ@8_?#Xo>A4hpdjyG>{NCJIQrCEn$jsDRf_{qMg^R zOsX?qPkbH6DhuVsOBS*GQ{`fXJjg<`4ih-Aq*nqQ<9?@4P_JJim1TjEYWMAZE-?k6 z1J_m7kSb6ZS#|{_@4GW(CFWqKTMM#MWgV$K#CKE}|ZLXnuZnGj$^78w`km z5}Ghl0M0$DskmD_ym#q0AfHqKrZiutN!&Oy4EVi=~$ID^2WvyF92m?GSyu5nY=nEAjxLNnZk{fS5u! zdB~CV#%$}&$G?oER{$EGUhlQnpR4vZH#0LB%G!aNX9kEjlKHBq13%?NFhjB5>8Is( zK#>8ZO!cfv^vB$)c|8M>Yd@M+l5H>p{SRI*e~EA|^d>X4NVoRj1*fN_2wel~Q;0%B zZ+MTD$=omIwe|ilRlbQ#BWk@e*eS9|} zABL4lyFZi5$-!#)M$b6%t82xarb{Jct~kqe5AYPlu>5nU&NDJpZx%0$BS z-( z8{a)o4>?5ukm`;Z8z0Ym|Nb`5-bZC%hh*+Zg*&!_O>xM&_>d_{8Tqo9J+SqbyiB!v zjLn?QxuaZ~Dbd0+#LAz#pM`)R0e%HZm9DU~-A;x7`t>Xdb>V?JnUPUl`yjN)z488d z_z+Nv;BYR2cmbv804BkcQ}<|1Lla1f-XLCPOcmw|4z zqw!7K^IpJKy#UdaS>cERNNdBD7^3x?`_y{l`2uUK$eOJL*KUfRcl{Q^{?Mh+nRqGp zee5Kbxbt)GtO4YrSm85Byy`BaG&PeREI@=k4e!4L#>&5>x^$cCdP#qO|9uoovVbvs z^6~fQ_0gH-DM1~c}O;aCZ$z}76B+Uv) z;J&mkn!nck;6Iz?7bSyH>l5hg=%6V=ojz0bHMDM^W)F>$N{fv>djT-c7H(RWk1l|! zVpO+Q4v+9cgt%SFu2UO)rDRXVJ5ceZbe3d=i%PY>B~;MHE(u!oe! z$6v@}l~i+QNdWtaya4A>T^-j_Nmj#vfwB@o=d%rUMV~smxCBduc;kC--zgvm|4JW@ zC)Wmm+cps3835VdkQW|^r4InPB2Pa9H8p88=&dp!0|i3+%kGeQ^_R+|J9o=D)AIHP zP=npGx=*us)OIYz`i*p(Tnj`^618gln}z!%>=y&0a*ywm`1m%WTF|$uaNuZS1|N;7 z*>UhO#$Hq}qK_vt0pAxK?Qf89csEQFB*QYfCKi|y;$Xbd%N9|v2G(@IV8l@M%n9C$ zVoINw(4R$0wKw^NIZW2#APorx6&0=5jBBT5wK4=~h`0}gm*~tvAM`q7&FR*^l#{ZX zi3maQQBUYQWMj)coH~a20vlpU6>6|6?_|z-nbp4?QC^{OjMr$*0FRD8cFJR6!Zfi( zxPkk{_FPJqRQn|{(GfVC;OdgCDg$zrYp`>nzzT)&!7o2Ie{;lb&EPlVQ6+Zl6=(-fs2CA)Bd^`Ql{}9@i+;5`hx^d%XitmqW#;3?4 z7w0b^O&==pXItZNa@{xQH``}m8%W7uf+6UK6W9hs*?LiBf7F`?fzG|vvW~Ml9WoU% z;b}~~ATE4QM~ce_$XO!L?BYY981U6+UdW+O?;Alt17yAdAdU0@7K-}$-8*DtWErdP zuNr}pUq1*HS<6bH+90TrV*alF| z`?Y{OBUQd88A-a41>*`Rnq+YO%^$G_@mo?eQnbz}1om0RMiV1tJZ~s2A);%d)f@O|C^UYu}C^?|TSzETr%H z&w-=$_hS;`uRarTqli|4JkZ_t;Urd{LpuS-<>d!bAHG0JW#%%MnnpOD$kL z$T2og0fGLp5vHM`L1@4Lg}LB_iqL?&SqoGJ@^W*-7Y&q#m$u0--MX z+p_<&_(&w;E3$|RWOBTekH!Wk9`KkvxtMI1)neBgu##+tsre$yWAx;rXZ_vk0_|!U zMrrRW{{CKYbu!jSj5=qdl#aX(CRqiec~j}8-OT&HmX{#l7ZQ4jogqCdFkGUAcRp)I zzHxTy1aQR`@^apgQ=gwWjn}g92K|&-t?xD24(!bGHu05ksVK_H+%Trcc9& zo&1O4WsN{cR1e!&3+766*a{8Yp%y>8pH~XPX#!G2B7p}raGNZ4Qw=F?&o46m7%XK1 zakgw)U1{RyVl3%AE~jZ`rKz)86l8$BV2t;M0&f-ONnQZ*Q`9;P$qI_|XMsjZx@UcAb0ZtEoXrVuWJ0l~D= zYb!&w;6}*Yf#*ZvoqsA~sK`K(QQr|ZH$Sfd2u};S5ddZYzTn-RLNlG308ybe(n!bF zbda*}RODw(E=!NtwXz4kqIh1Gg79(DyZl1DdYu{@DFIJM<|iu>9I&Knmo)zik*FY# z!ZdvxD)~F0wzk$1^rC8Fv3CKHN>fAQP9!6LHkg7$9$*86!((5(U`^J&^YlzORoMtT z@GTR_>e&eN!WZGGOrVX@3m98;!t-s?(yUB~W^Vlh+D^mdS674cW0J2HpY!f`*Li$xp?fJKJq>smP{4e-WgUd|K$zuh#JG_%GE59U zbGE2j$??ynSGHVrhB-7DgPAf{c5ZkwCQQGJsMBH~!QN**Yl4f_V#mQ`3e@)n1Sp|z z%y{O%1ZUVX$r%KLPeZnrfTkhH9Oa9L=}x-jot&;gXd^VX#oV&g0Qi~5tiOP458eC$ zq`XjJJ&1oSa=n`rewiKlUnaxhx7tsnbN{n6lX@a}iz%hY! zzPhoaeVLW0z{P&>Tm4aPRu+5O+gp*CPx<7eoO}@eACSw2q=92KX+A!Jz@x?hDQRh# zppZ~M7HTbO|>U4gJhe$Du@Cs$Vm}(7g<~IT#pw<*r1IFehJV7f#$YC zusSA@jZpLi;txjiAbpA4LAG*^cW(q9&@sTtL(pre1d+mtbzbgOjs-=oqcvUhYVJE# z<-)<`hUs^kN2N2(q#Pw44$M%b^V@2jyqZ64Ql@~Ml;!X5tY$@GVap(_qCAIUqJmv% zfvlf2n~~7#MNkK$Gav!%i9^=H2y-b`U(yOKTlTI9>Uz;4IDHYopm-LF-<_@DI!5gyILh&FpLdVB_3^?F*pNh$;lQfZ^?pL7O>)Sc$gZM(@O z-n4w1J2r(`>)TVq;`B{*LhxXs6vUuct0U+#6bUU@A5l{V1$y6N($Y=`*S{xNsxe$j zo2USI0HWUn)fX?Hx?`~F{!-gC3loNSerlm^lWUoMedYU8b|WZ;QiA2hR-s62%2wh2 z{F|rz=79=#MqP-Pg2%zpI)e=3fa}Ax4eB)z1?Ad})cvoMLE6F%>MndLb0*x#8K+5e1d1oidkL~4byevVuUX@X zv6%5w(6y_rWE_>~?Bd$g_H;*zbpa8mL!J;5!-GJ{7hI6=K9`l9P3+U7eR@H`nYjv} z$X|TWPdfbs2m7z8q7&cf&FNILvHh8F`Qxtd)G&A`{s=EQHsf}pP)8=@^T?1`p zRbAmTGXYDPW~#_Q09W5PfQ{<3QsqlcV6w7IgN@j46@VZ)uvD(#KOi>(z=rD2$mve6 z$^(e2Agr7!kph?u0idSQNC{&o8gUvdbqc*F5k4Oqo(vG5?4C2YA9{;!7id07^gvXBQc=FQg9S|j|R(E`|svr*LW6; z7uue)eGg2OpwLRTVh_&uyiu7X?s4+n8_J+BcqF|!BiggZwZ>8H_FDd(5;A?I?~g*; z=33BPk&Hct=L5UQMQD**7$DTcua-80!q~RnAHevs7Xu&@?cjH$R}0x}ko|rAuToE_IH$0zf^ zft)PzD*8@@kEdAz6C6HqzL!sXG-&7`^aEj*|8dMmx4*~fG$9amoc3?u@^EwO1MmzW zEkr;n91smf4)m$SzL>86QaL8&6PSm=g>j5`$yFB&Jv!|37v$wCG zRvZJ;XdeSX4J!aT$EK#L?Ck7h_OZUdmFr)stx5A@nFpZvVnwt$xFc6Ssz+1(M(GB; ztCxzwb^)g+>R?tj?2YDw&~b*M>hiRlfa}t!muNUb{R!&wwR7?L`E(f=J-yctJ)B&% zN{vE_{C$mE zRt)*?K>Q56P?@&fr9J=a(yh@XbV2u}P$U%;*xeW@zo)SVtupizm}6v%;NMs3yUS{g z;OTC_7ZzrL{z#s&bKv}dikXyu7xC8SrtJAGFvMFKh=7CzXv~nZP7}gjh47$-RK4V~ z+9PB5ZtGPSdD9e$B=}4Mk1TNX2&$Zk2`0a|rho6jimXIr+->v(&hLq zTt)s0C71_0(b|m%z}o@tAr2TdK*hpqm&~S~l9wQ}{GKlCF{}#&jsVGhc-Z52e8(2| zlgj86|3ccsnbMA+?7YHiz!Ee8%ruCvk-+iD7ZjFzmF27yTKXK-HQ$t+nTbZ7FbQ+w z_v`UvGA#DD*v^f!Izpebt61O@_!869or6*(4!GHI{ z7mB410dsW8t!r{}5(Fq-^Pqho6wJM1lZ*;i1n1=MCze)~w%7i>C&ywNBU)EI4}w;3 zh;oO?N3`GqZ5DPa;^rN>MbB`wio>`aQ;47kGIhad-d)-&K1=Y|U~>UsSN}@K85z0p zo9E8BuGP%bQfTY)+MYzD8J`0G;GgZ^_a_`Xt(~?gRc^CjeQrHLmrWA2!SI_iV6^<##n?F)U%CGWq68M(VXe4ATe_tvO&&i~kz^v7>} zMust)r2%bW1_P-OsIZ)RRvIN%HblYD5EfrtoKtGrzAHUAIw}u1W^aKgTDrLp;)CqS z1=5!50Z<9(c>Uyr`;<2DSpQYf zsE6k3dUCDvi(`f}okqXj$E~zoySzq%w(Yb-yOw=9opc^jRgwr zpfW%^U6jM({R;+-sJl8WD98t!=~cVeSnC`#oQwt`hkOrgwd0%E9+6^onYOKF{A_&}icJVLXlRSK>c#!tp-eYA%+V5z5Y5}m~7^8Sj;Sf^6fb47z6c<-o zX698;#!r9t?3wBm?Q)RRCsN0nw8c@3nb^eA?j;46qNQlp-qVn1=~lb~ihlcNwaH9G z(5Mc0U%N{^;?}{2vE&(VjXoJZPtbn6{!J8L^iBS?klp3((oHw1l1<#XpMO*T;2;7D zmC(8*FNf9#T=%L5j-w906_Z(LRvn%6Q2aC;_{<#pXpL5pN~G_BJo9AiNFTdz_mwXb z+`jiemQ2qXeKVXydbr>G@#9A?7)rqIl?#OtFR$FQ1WIsaEXr zT`1oCR^2jS;J!@}^XLcC?j4pl`@?9igc)2sI5^Ze zHzyC}b5`SE&?TAONJ+r%`jpCwrm5G_s70#s6lgAx&l#vGXgzPba&@%MgCFq3HsUw> z`_+>KZQ^D>By4><0i2)k%3?re9gXP*t-O)ISzr0NRnEuFy|MTVP(rL}s{t8(p^1bg z6HHc&FnlscFIW}m734pKunpDi*q%U{z`7$uicTn7`JV!KZzQ;$Xaxca^i_ zyDyGhYk_NF?@Dwe1$$FOE1p>lpI2D;CCBAX$tD>i$KQ2E+;4o1oLh;CL3dC%qA&5Y zIQH}1T@BgfoP-UTv=NPmh^%oh`Ep%|E z#-?0+M#h8u1BSRUD%Q}IXe)i+yvIe$5r2cAx1v5^3Ky$e{tu+OFO}hg0rq?HGhSDw^9IEnWJ{8b}Jyk zUP=MKR_vXB?~4BZChNT^YTu84!-$po1;Po|U5FsL7K=qvS) z)O%GqhG*sEQ0zVZ@l?0Yo!3eD2E$6VnfjrRyVD;aL(Y0^)=olU{EawX@ERdQ6H^E$ z!^bzCOWcQGyubno(Ih~IVZigTs2D<)elK6G`=s3%(+2*J;t7a%<>K2zC>T4PaR{Do zSHwO%o`l8<)JMtPU|=Qz$pDyoCEN}QVl9|@0X6g?sDcS74a+b=H9=z9LY5lL@W;}+5fDN;FK`8?+u>e zS(DfYjOIQt-PZEw=fupu>UYhLU_XI<<8-Q$ahLu*O(Lo4E#k*9W-D}A%Bk@;7`tE! z6`k}EJPfZPt$jcV&j6gwM)Rqa2@{fG01r**UDyYDOHUgPeqOw6O?gfrt!D@n0Js!l zW0RxjH-3XY&Nyh?i3PJ^>iP{pOEy$fb&dgZ1j50vh+2uQQS;_z*3{5RGw1V?G5)Q9 zu|}hF)wJ~UB3F(cm{hGejg7f3Cm z-(+SA3#-aZ4%=6a3)&*x^hFbEi7lSo?hbdSv=htCn!HDMyZe0dn6d@s5(mKLAH3=B z-R%jt-m@0(mRG9iOBk@z^b}Q7kC|sGur!JmCw^cwTr{bvQU2O}6;C7Seg5v-00o7J z#m_g|HJmoMI=k17PIMXyLTdg+&-c=lU1F4yUYUGnPI9*%WLgt%5l$kkmz2!D#nW)9 z6^>kMc{m?)`&Gx)%`7nI({N))HOg&ys1NYk zF9)Ard-h2NS59aHqL0&&8E^fs_!!V;YO|VD#l9{1@t9bGbBa?~SWD!?d&<+EuKT1m zd3kw!8d=4XpgS=(F77TUZeI5R>IptAH`^l(!K}ft3M;xv*8yc$z$*8wuexefifn^3 z#FI#X5g&YsdcWVF)^DHjGPG&~M3cU=iou5DH9`C#pWeG?zQ$}pDh)d=@5diI}YuLK}6v=og_lBrs-z#Fn zV-~0?Lq##Z7Cirl0vacBh0v?orIxLdn_H80O}L`aCx3V1<()<~{|NVM3K{rvcJ-P6 z!`OevQ~m#M;5b4?WRnoGXUN_h;@IQZ2bmGF_a0?rWN*sedmNic$jpwi$qFIc_i^g| z`uu)>eQ)2}?cDmS^7J^5=Y3rF>$>g{787o+8j*c6*DBbFrb@YQ^L~W04p^}>8tjgX z+D4B|N<&2Qn*E-2K41B2wX3!$-%2s{&gNF!n=Ds z0pOKpkt)-$&w-Ci#R7Ho|3x7dOetVJ=;7(Skm+LGzd)Pa|w7-Dt>RYpZ17lfr@XHYl>OC=^p~Q6o8%?Xf z5lM3m198tk;aSr%i)ohArw2X%)1IXnUs0VWw2}e#@3i6H!J|}{s#ImGsf?2Z;}5Yn zPv`a@y6TD8*B5-3**Q%WqaS`^YvXTII^%fy`V&4F>M^}~pi5A>@~2|mAt*yoH*(4C zW_d`eNXq2JbFRN=Yiyu-IKtdPJ157Z<(EHI2Ym1ct72Z!Zs@C_Z%0J9-rUfcQ{olv z6+yhjV#N<{SBpMRJJ1{Y7*^3vE!HaCFwtewVQZyNqUI|OlX*;RB!;UU`mmn{UuczY|BB@v3guom!~UY$fUUIzh}LnxOqW#|mv?Ok$!1`0=%lx`(j<5hzG8`zr_v1V3R7 zy+q+2kB3BM9!1}Nu^rsu7YSL(@jOjG39i<>@&|Wfw?9I840NTJdU3_u zc5kNlTC`%3KI=);G$mv-J-pqjzB6c6gJrGOj8v98nmBDtA$7Mth5^)inHoSj)*)0a zbSLT;dGVd7I)qS&QpugD-&I0)hjj0f;p$OMj4;Mh^#lOI0Jejs7o)Y8(@$pfa>w?* z=KG*2DJRCtH+quU1G^c6q)YH8;T#d0U%y-Og=oVX67`k`b&wd38AK7 ze6~>ZlIOwSM!riNRgKYSd?oH^v47D|w@P*Fx75`{jh5}T@u21xsI`excAfr653Ca_>t%{ISPT%o zlkDSS={I#%Lz^yzm2Dx*cd#5U9uOkLQuZ7-NN~-JZa(X48_}Hq6U~`nE*!=wu?l~L zmbv|Ci1;g*<3QW<688wHYZP*cs%sJoiISZLn{Rh`z&W+)xwfpuD{X;V=`?bBF6ggX zZb&?hE+>TAWS4gJNQMS*_|F^7D%6RVc3VJ$q_G`^iuMi?ID|1=r9*(LxBuD*0n|Sg zAGE8db|s#|BUVenYgnhDk(d47DdBEYFs_tZ+WrDx0CGye zo%%>!kJc3FSiH7*KUeaRje?yf|KAmOFrl$FJZqq^fyR^pMN^6l`r74xy3OzcT2of9 zx+ly;SO=nCe&}YJ^cQqe&=O#ym$M7TorFLE%h^)Yc|F*<2M}fn3&0dZ{7q?{V_!k= zciu``Be|XoqIvPNo!XUJDR*7Pf*=;$dwVWD+aQGi>SA9}f_N}-l={_6nwaj5%g0Zj z*@o|bD`)9nV0q?|c;=-xhL|WKidac(a+YAlg8w{!!Yzax!sgqtkQHr=WGPYI8(G|G zw40k?H?2wSqrW$r#s88Fxjv#>*lU!{Xulu+djXHja-rGjF#wCl!Cnv+PR?kguQ8p% zp@};mFE6sEbHz?g`6ue@MLiG`a?PT)(zMB1z0Ow+Kb==X_DE4n=0yb-$&XWwygRI$0({MLHd&A&dH zhj+;j2Du!rjsy6uk(l==Xz@Gk=4vI-$Zlz(^f>AP)A>%%M}Dy+f}?B3&G@=vP&nsc zAKC*2;EK^M+bR$M3Vn-OMA9Hv{^+Bu5V)32u|c@VhVr}5wRbgFJC&7wBl2jYOgRd9 zi1(9OZlvlB!u}@!T!6n@gfA?|4UvFd->y74Gwb+49Iw5c(^oB6EY+ZAIqctiyJ@|0>NwZ&y3-1^V|85Cu+ZJfrMm{8&lgPRfckln3`AFdi z$C4Fkrwhm?ZXPZ@aT&lSEtVZzyXg7@h!Yat<7jMXx-1@t3=ua8IZUB_73S|8C zfTC;seIK3UhQ2kt<7@@j8!U9|Ikjs8-Qu+42&t&RYkX>`mzS3e!%7?bNa)4fsK5OA z`Kf^(4F`qO()mc1sGR&H7#GV8Q0GKQB1qnaG4yv!@A_uBSj!C5^!<4*&Bnu{v5@k+ zM{l#A4KEB!~)BB_$rl0E1eCw6y)0pkaLJuyS-FI#`G^9!jya7lwi{9`u(%T zwzX?c4OV{=rJB*APwmTjW6EZ^(CW(x9)jhaZ3)o@!0e`VM2lhc)oezXcTB#ov|3J$ zOr%5PQ;F{WD!G~V0l-ZDN)@Pq{kN8}RsWwXl(%9H>uGQU9RCMx`RX<;Gpin}3 zOZaqwHSsuXhqc(}5g4o7M6CeYIm9adsTj82)n(??@uZeoSahl&YLsAiK`6iwV;t?O zJ$va1?l!s5ifqD#@4L$$n#3a@@mabeS*qbiM#(I~c~n)04B#4Z;TeI>90>)}UuFG9 zAbG`Ki_|{|dVzh!4J=QS)KH#kEOaos_^#d1_={fU6}T88Y)uLxUOw0RdQA#x}6A)iH$3NEOIB>nl>vW zk;1qh6{+p6nP+de#b(*%<)D>`=0)wtpp4B! z8wTM~$T4#WP57xkWj26`s?3+yfwNMi!R)LMC?VDemo$yswVZ#l3%>0_334Qg!?jT} z7J5Sj?Z8t?I{oxO7m$5{Cq^rhw2n59TSv6$4=1W*ljM2Vx9yMj7mh7B(j2AxwQLdQ zbN);U$JBbfw4gxlkbZ%OKwl@)={cDAONC>55*N}l8bTvjNM9r;R;3o~mVB@DvqcoO zC7yH(ukUC@|2hZZW+BKCXhU6r9qPo|z^VJ-K6*LWBdCCms52bmF=6d^M6C)4F9a;8 z{Ri$2B;5g@OarBaus(;??`&o(dE?u7P&#K}xO^pgF}+2CrMv7IPUwA~3vZzf5%0cR zd|L7}P81Wmi1yBs^!zvzCJcJ{A(;3>-ygm`OC(l~Byr6unxgxnpAdp&k9lI49{ok%VwF z4Mypc4K*NovUm9L#5M7BKwR7xj)zu?tLOW|-2h2J6si(}%-J?Xs`^t=8WE(^j%4E-)=!G*ATm&U0U17drdg9TI@%^+!4vZq^59cJub?B+%` zFqa?-zP6tg%wUb%u7q0fQY=&v&UQPwRRg`^PRE))s8p~_@1K6{0`&R}bbQzOhmlm< z*b=cMGl>k!!pVoinAy+LpD?ylYewWmg|Hc+B_)a{B`VL~oI9%ZZ8X^%WwC*AO*4JW z$A1L-Uc8`~Xqbin`W^a&G6Epgp!J~J<1nc4TxZRNS0bl+4+XM6yk`0{V&!fm-5i;% z8`sBn89O{Vy@4>yUyV3>grZ;F0$j(DO2T6*GEpQG@d2s_qn{t7)Io56DQ<7$TUfhr zVW?ix6PA0e2e)Ll*6N7FKLy8$=S~O{XyfhOk4Z?@D6Og7R!BE;3=BRWQvOGzkfWO3 zcLj#VS2EYUwikGNZYnmja#P$nEUak|8d4zNTkXFfRG=+Kn+DkD!zaPO>g;YCCK-6A z!e60fw$Fg&$do*05Z{olpRzK!?Eoy+@!gtsD*#R{R1=lMO}F>OVnMQpjKHon{=~52 zzsM0634=PvFYM2N2>d$QUK=sIb|^+rDRWdD(pcPy)baKOleS=D?rE6PAst#YH?;E; zPY~>zQS}EdCN%lx_(>J*(RLhqC%zZ8F_JFg*xH|S0A;W;;x3Z@0@hYgJoyTCs4^|_ zS0jhJzQjvL?O>s24r+kPhYR+eRVGY0P>xrkGHG;3({ z`pxq#!;qw$)X!!O2>4&NQBFD(2rZ>WnaObQQ5EY;i}iqI$t4NrcB*w>4;XXu`=_ zyPRnWtk6dGS^1SNUvKTg&zs+>g=^3IgDq*V%UKcq8x+Yjs^p}+#cSF3fSRP65fHf8 zn+^MIkwIulGzd6zX8~OXRPtgxb_=jiGJfGM;Se~|0^=GEk$dif{H@MTt1YFH6VmLZ zYF@*Lblqh6>$m%SrE4O%R{1aGKEb?xHq9A$nr;)#wl>A+R2j1a+4NIg-q(2SyPS9s ztX3j3Ac@>2a3p`*(V1s#$F#7|Iv`9MwUT)3Dpz9SlOdi^${fN*#l;4)!aLFR*}m9C zZOV~6WM_!Q4ir<*`=T>|My*(}%eFxiG;Gw8{+WQ8Ve=)G$JXKQpBU%A{Fp&~U5D3o zJKLbR($UE}N_XM!e42z)w~%td-{h*q}3-gQjC{{&??OQ)~>4ICO7s&*BNi3*gj7Zy_xB=UcU5j_R9%zo#s<1l;kEK-bvW z;p$Idy@c_Q;2C^fLn;bTXGLdhUmtdmYt|z42MxYMw0^}bQCjlKTt%PSA)|pP2 za8SJ^rk&gSE3}ExW)g$4(-VC}{ErcUm1Dy*q!)mbW49p%dmkRSt4L#j-W5^+PSyg# zEr3=)RkO^w300I56~QgNoj+$cc<+*XF^Vr5{s`@^ckmdZzA83>O&Oo9#5{*2l12%k zMe~E66v7t!{HLQv->9IdDkV9x{WLH%v>AwJblsk0g(@iI0)Y;4VA0zPS?&>W-6E*z zvaFkf%#DI+r<{Bq4;RfneC)q$TdY_2xkfz=hskHAx{2Y(H!1csLm0RhJD_;crcBIU zBFi(967?Wk3p`z*g13pk4j1AE@*>ZBfXsSKa=z?2}+1o5@?7P+L0!U+HloL5M4hc}Q?+FW0pJOvxDTCR?U7Txcdzl$337pmF- z7HS0`vi6UD?N$VLB^Vlb`{f)cR(=BeFs$tsJ&s1~aQu)e-=)*Im`Zk#earaAlQ97` z;(aP=&UqUbE#F z!nnaJRafdfVi2w#!TTYYqye0hvVX7ik!#rd4mU{oF99L(&@^p7w67Z5Y^Ax3^DO z=TRW+a;Z)Izvk`qBriUDJ{!XyU$LmX$l3aN`n!CixeCePzW+Xi zjnm^;N#-%p)gdxiWg(S8z+=(|;0>`KJaqdM-e|0duKG-rpC|LOoKS_bsQmdeCL+!1b-f}V0n(`Diif|6fG zjn6t?!|HX}0cm_l|KSG?1N-krNRj~X-)m%{M=eUCS576dMxSImalu!N&A7*Q|5u8m zR+fnJVt@K)_ici?d3@X&Hj+E^FqUF76;K+#LcTzN|3gFg-5>0o_Tr>lBk;)nSP%-f z6{BRc{8z|jNo}4|@`|@YL2A!8I%p%@AEHe+6e%$qR*V(a1$J}vx$U$++7C#NW&00< zIdl$Vr^;qnKA?<437M25ozO<;r{0f*^uQWAi@ur^$BbI~?`GGw7QbE5a{c}Flg%4v z4~J5k8n)R{sZ}l^aW@nj&Dsz@b|C!%M^%e_L}Q;l{`u2w7&_9;a=zkDGiR`cIV%C0YVuId>PqBUlKNx{HdZcN;-`!=l)DU+6 zONND4pQ)XdCRBwL5W z%8T+UWdzJ2-vKCvlGCV04bY0PXb->)ImDrP8522NKn@lOs~_9ZnIVOV`ZYoG>}>ER zz<+-J-4&WH{0>QsiQLwjwB2`4V|F7y*5;ZWo0Ts6F08s>IkqS@0^9nIX(Eb+PbCxw zFaijeMTET|ZRrQD{IpB6i)uLP_X`xlG$lvx&vB_!6H?!{%&CxmPz4fLXojH-7ziwv z%Dj;z?KpQ-0?!tQOk*orPK{Fl-6?5o)WOmRnK*xDhgDQG1JEuMi*o!$Y#Oj?@dh3S z%1Hy)MdeJPca08GTytL-x1fHfV&vW8>*_Dtur2jD{?_Rx|{#!b%AWYvloo2_1f*x zONJHG6Izc;moJ4Ah4-qhwdpe0(mU*H09!qXmKcnUEpqk11Jm+iaTvFyX8Rr~u8cBg zd(!g?gu#pDyWESDlt(M*N7|fe(#!8b5!XJG6WoAvx*hA@yttW zAG#)@1K=Lbsx!Mv1%eG7eU}QYkZA0!Z%JikA&>c|&@ELx0ZJ@a-}(?BFlxrLRRh5B zgpoIwy#rk=-JTJb&`Vb~JgCQBBD*dZDASokfh&6N3n|iZpF}8n3b%Z?9TzHhI{SE=|iAt#!wW+edXQ&kn-e*Pq|S6zaa;-G4h@XX&-37K;U+|b1^8y=om zqzYzje~QT?g%$bY+cW_(V$CT7P|Y-3#v`fGxEmW=A7b2f#v2hllWrU5!i{3-0 z?KEfNEmOF4+CQhgTM8J|o=mjPr7;3?N+`n0*OTv;FiK^Md&>T%Z9+9Y{{9n zXz%yu^uP+F*MoEmW7Y$nJ!G8?+8%kn&2s(w4_?39->=IUS%ft-G}OEP)I@^!5KOZF zlsadSE(^Nf?4*-GRI+0!FFr>GR~#DF*AAF$M>)wNlwZkp-|SuwrqB1w7}#?kgO3#z zO^VK?NVz9sUG!7vdNBc3ZV)K3iDgLNl-{k|c@)Za`$O!VhFf`rUD57(z~Zxq5h4q> zb2~fmr`NCJnJiIkgw@51dcUJSVf;2@`Q#B243eUi!2(oio)EA`lw z;aYaw(tN4W3jgz-P%P;;_TU?bPzC|Y$XCDW2})Mc)M%5k<=keu>cawT8T!F`rUK>mEtoo{z4s z4lE^t%OgS9{If7)3+bes<_+A+GJmXP960)vm+`o(t~-o+-1=$81Bx2LLr_RV zAvca1H-zGYHl<&U^GQk-_JqakFSR|K6M1tvBx!ov3>ti9&sqif+5!Oc!dm=mawf;eS&^A^62sO$% zu`C_x8=@{#cNEBZj?4{^=^)=MsejGQhxm9RgEmhd8Vuw;I8zB!iV8T+dlYe123E@V z|8jGDzD9JQ!+SQhFn8?UL(o)NhHSe`lA)McWhi}gdygFKTzs~!-bXzB9sG1~*om~4 zK1I{hVB9sRH~!4g(C4g>~)qpE!5m0+p3b zNLIyo;dk(m7-dS8Z11%Cy0IcONsN^2gZj?#Z!863;txnRG_qY=8Ik=fPg!CQLKY`!*4eCs zmNC9^-RkE8_N8`V>y%_Rs-_1O5lj{0U1R&)~a4>CIeYzV_ zZ#$dDb@ykDQaVv`MIuL|r2xB=>4;!z;Vw$~9N*#{EatBVd`jmiKixuu-l<}>(b!_=e$sE65= z^8DrPbE*aql_Oc{GQ`XbAKj*8qv1NFq%Uni0cre08fk*dA8XbBmj$t&`91oLziaE}^Am-!|Qp zkP_4v{FZ}j3UeZ-gea&ZMIsAR$}uCQQoLord3gjQVD&88|l93J{x#%3XJocZ{PWf@a*NxxL7W#!RNi=r? zsfNwr30c%}VHFg7=AiE@9*j-3Ww(W=Yds#hsB?oK4!enWX&;$(51)lk`AyPPjs(MK z@0h`8j~zMxCD(dj?oP_7hI0u5#TKLE@s`Fs5I(|z#Z4|z0lJ99y!3`Hd$@A41oPG; z^SG$BU&`qko{R9Dhdf2t??JCFH^y6{Gfk#&b$74qcOoHuC3iCQfdaS1sPB1!&l|mh z#KbExvNF488O5#7ih(Vji1HD+cPi@tpV*mp5b5f7bT@o2L`sYZxq=OeTIPa+PhWVLLSiW0xpdq6%PUS1~s6Wgy+Bi@blS0#JFB095L zHp_wzmSt@AE6#pRDGmJDDdnI4pSY4?lIkLfgC|W*`f7vbz z@U^^;VgEuAj{+(6*$SK_rmQUz3f;cq#GSG5HJ^zh-UfUG$uC zWGyHfp8lOu5M5q%2+kxKSJAl}sfZ0Ve0g$&jnN@H(gYj}bb%}U-wNJIdY>trx4X;h zjdPf3OW8#I1DRYiUD7C+S4)q&gLvUgG8DDd8*Tc|Uf$B_KKQ14}l;!W1N-e@h z5HJpdpZt}JA|IU!^_rhOQ9^CF6Q%f7GN=CfHO@GW8H}TiPUz0RTi*<>9FCyV!hInB zeuV~bvZr9wzudBtV{K`9-cH7K52;lBQl+il|B0GQ@Ec!#oJ8vJq6A}zcb0r2Zp_fv zKWU?tWk|TgIpcC{)upHqYZKOnH_`;~M8>J9z2Ba$T*R5Ymb?J(L31U3n@bMazV~?! zJmGl;JWR7|NnE?XGH|yXrX z+?-vZu*=4=MDppWJ3s;>SNlWr0ND2=2pGns?04S!w;T3#^p`SI8lXK8 z#0Q2lqB2M;=vh94xEI(3>j)TX5E#v`OskNTzA_=He}zkSRV~vUNgrk4E*D`(UuH^x z)f$hIj-o$s3LnKL=1tp^Oi;8M@T(kRPt82>7#Z6*_1f=WsplE@eoIATT-H{(7Qj9f zTGrrxUBRH@c(4>i!Dq$L)6>&-R&aJZ4aqF!&_g)eMpVWhOD17bko0Ry>C);@Xz{d^ zGKf!|lm^D*P$XbwL39Un3Cn_CT2s1^R)v043`AD|pDsGoSX{lMfKR%WMiD@=EAu5y z#U2G`#6)vQZMqt8|Db3SigjO%e|%J3AACsi^m|3yc!P zxpuMl{Zt=^36|YysZEF+hn3@O;dC3CFZ_gCLNV^WRm^_{o2m@U`|n9@&}c}jad2=B zw#%wYwP_WxZNIk(R~olR<^tUkD!h?irlg=3SsY{37)nKF4eOqfU_gVUva7qIy#$9R=?}GRnqlxX&Jm zLG;{RJW8p6GRls=p+53M+2ypOEjC?r_L6%qh)T^u3|P7&hvm=&oi*aU@K+2iFZ%n^ zXvblNrGfNDJfvf=c&cY;3{uF?lx$ZXTC(Sy0?sl}Etx(^Ogl9ou3o!b@zc`NE2eLp zMP8La^tLyF;+P!pe`ImkD2ti+%RNhpUJZ zF5Ax4lEzgvrc=~`9bJ((I#aH9lZq->^boeqBd$_^;5vP-U8SiNd@X~19zALQeg@d9 zhXqa#Ih}czm>Bx(kzf5)TO)coP)$lrV3Tv`scYFaTsQ zyic~J%};H8@%9PI)3*$}Nc0)s>AXfU=ii_0ED|WVlYHf?Bd3Q*$N#*=cI(e9M*a6k zOYPAvX`sIR^!CBld;>eu2~!1ax;y0VA@F8scVD=trieUNW7Vz)onfLTUUQZST)7H+vw;(Gc za{y+X=Mrw&;ER*u3j$OIsT=&QvG*YxJiB_==tpE#vd;&lqr%uO;fjMxscTOdKA~rv zkcONlmDSRggd`dMwvzTdxbgOX=*C#`8%Sh67OEKT${R&EG7{#0kY>!3EjMmwBwUjmMWs1uViT4&$A*Ka%qANlY?QoyfXc`E@D} zbd$3R>&!e9qrJEIt31!1TVi^M!N~7;oN{eVPqLFr@$DQ?c1Gw_7+lO^x4X2$Du@)i z2c!S6z213H!q!rHTzJ^RUdKm0MrunX`@a{aLk+wz(^F--u;VF!SP&8t1_4d(3c!QT z4*MVRycnas0u}~mz%o!nT|L+T2CT4p00d+)INBYz^`2-%#Ueq+$F5IpG&kNKf4nc5 ztC1%U%Sq&GR?c0s6R9_?N0ZU@=PbmUK{G)T^=u7=sL_+E_G;~IEu=7pVKe3n5>LKi!{rRZXJ@`oDeg-}zEeOr2ek<36jOIQaI=e?@&`3}PdUgBEB89fMVI{Qx1> zD?kV}+oIz%J%W6XR3TfLD)4?cJL^ZwyDg}Vt1!59HsVG|Zez?dmaX9fqSRpV;tvCF zZ%jZpDbvKTmorLZ!-?!94P&1%k&^4)cCN8>&23L()kBOdn&m%42lw4|)z6XbzpKrM zMnhg5YHee~+Pk@N`Kz-(iCtH_H>ulH%GLEL5fKqG2?e6uR!Xf~|BCFV3t}S%8>BSG zb&0|lOFms+{;4|3%E7n%z|4v5z_jT&>?YM-d6s!!!}sD_4X^DLQ+?9 zcf@hEbGlIh>OM*NmI-X?+mh#h5AK6zOlNv7Zb=gdQmYNx%bChPU_Lum3S-X{a_aec zNVSBChB*Ih*fCJ5f7$UZ;lOLNV?9bw=>bXJsauY5h;PNhe7!(%qIBMPz|AUp7`tGb z@Ix)_;~JvzLH$)X!t!3nEErmu=Q9wk9MUV4!laV$DRy(RJzxyO%l~3I_!F$O=~}5n z#t10dN=TFC5Lw&#MusP#>bE<``nR)+TJ1e-#p`N1#NIw@EWNismk||hSX)7VB$(&U z*^>kzQIhL6Zufq&0$shksl8lN3k?b@TDCJV{n#aM8Jr}cDrZoGPzVf8idqu-m$g8Y z$rVAyZD9WNeuGaj{ket)VZgg7<+s#|T^`t1AQ!%vt)`Qak#Rg+k%RRHRR9NSzL&R4 z+2iZ}y3?iipo6&(c*G`bedCq<-UycNic_CejudPHZD*Ta+Z8rMtBCtHgsw|rfs2Sm zxKj;=?KGh-vkN z_feTp=*~96TC2e^IsUCVw4C>Pl>?2i94*6L=VxF!!4`-3Df53}+3|JYGmLWJ&^)(L z1~DAqt_HCMHievYMidvb)Z2fXPWxTM{V#vXqX`P^N#7hrleMcojrjP9=1!u1YyLg_ zmk%RVYb-zQ6`oo`@jDa-YA9YlL1(Ed3;i~H`Ens%*DcQxcCu3pO-vf-heFDVrF0nG zPXwTRqcV`PmEV_%FV^kMLzC)yXLJ6R6v#3UjyxJ0VF<8a193G12tC1qFJmb{k7>AP z{^;KcGGncA8gGu3!!jdnRdu)bvPHAm z`C7G<$db_}h^+_usJ~unrV0hjTQ!{h1N03{z1h@LcP8yf$}@ZVM*i<&PAPQlU~mYx zhU*0Y%_`Vp_z)n+2udeMTjUcITcSJve)oF=N>Y?vBjhPpcN&^%`c@G?L?fWgb}6kc z4B9rx&C)>et>R@k^uh6Za#mI}pglaFt6dj}ea>rL)IY@u(d0RpjMi3Y=)#pt{x$eL zBm6#;<##QPs)a#r)FT>3Jw*f43zbJ@ne3{=Bm|V$@UL8^Nm51CHGF@+5^!6j@CXjD zQI&+k|4ae6?x6GbvXehBOzCf7cT3FDo>|aa7Vq-Y>do+doKGzse^!iKiBGQIN4(#9 zVC@jOH_95qw7i`cJ6%lT{xZ5JNtjft52SHO*TlT?6q?FA9fSTF6AUz1IY}{kS;h^l zMLq%xE1KT;|1L4|rImPW3YOPB0=;=CUlMM6ypSLW+olO!fKZ7f1X4FGx<6!v@u3Z2&IliF>p)=~+qwG`h@*&gI%XU7GK@&2YC{!yS{pl4t}2UL+yWAA0h+q_(& zZUh|`x`4R&HRv+vA3wem6cqGgzMd8MC&U6~fT$Z+$;jz?ipfe(7%ss_p9svY>57Ly zhJ(^>{EBDh=hvbdr&W1Iw2k$3I(m9Ept33L$+*&2N@x!NHGb(1kT#K!``81-VYb#X zYWoO?iGndoz8BQ9s?DeYLlm2~p6rutg}{=517&ycw`??ov<=))BlI>(?pi>-o8 zs+n8vBJ{@B!2SS;E<_2asLIk6MrHBCUSg}@=rhmu!%q(hcvRnR$q^7Q{{#T5R`3M3{~_)IXm!&^8r}B{>}IP` zF+-$bmWfqhy52u3d0Rg13mo-xzb;-BXrVU(kQ=v0Yh*fC`py-wVifW@Ex-5;ba}Df zCsZl4RV=3bHWTQ8j`3mmdeDIPSHsI07E_xRnEM5A9-Z9Gg_Y@Si{C|GI5ME8{zF&| zvpGZ?uA0d4XhuQg@ZkVkm+eJkyBuPiK*p6T6Bqm?F8(#C-e{X|f>mEHK zEpHeb6G@fuqqHsSPtwLy<`gQvD$i8J%TIxk{-|W-Jg_S0(q#54cOAzD@wWg|$4QV% z^?#)dIAmjKWIZ-nqQx&89u=kaL0vEPoEw(TT>bSBI0|=zccx+@*=i)yrtvjI7)%~~ z*r1B&>|eR3fTedA;0E!S^X2VgVe;q;V2|&TCqm)iar~mcjQ=${3 zqql|}so3@LS7;Y+1Jcjp49GyoOSG6@AaD}`8GRBzbEoOjTb1(@4&NNc2Cx)L-kd#t zT)l9pe(j4NVU);AsF}V9{{(E5_P5`%C8Ke_VjTMp)k{6rKINKW$Pf zqT2RB;^)Yq`6q_QY{OzvW+h~vHxCo7lCS&uDx#Cn8sg0)|1U(DfK9omO6Y_>D!uf1 z<5&@=HOcXtTnF(n9$RB{U^ISbZ@z&qL+3*sguQHL(tunU6fe6QYQ;8ByOPbQ;lMd#~6<$!if#LJrwlhV zl!C|efc74>h(f`;nb$fLj&~%tRaa%YSdAvGvCcg>IX^HEsXz^A8=umgK)>92s0^LW ze}9&8%NJa$`uLzI0jtHAq{Yl$!mOu)VJxtxSX6x>mlS8GKd*N-w{dk1NU#2v&)ebx zUl8xxf&Op7D{eboi9RLU?^K`BNYNs^9_));0(<3ZSeH`$9fR$=_o%n@w95g2<+HtUkN_ z$FwW31H&BJgB3Na1ZY9`{rv|OU*;c2Gg3?yQgpW%22UO)i0m%lEwDT#uL=%^I(hui ztbeg#xH2_Yw^?o0cPS9Y9>nLo#%&wzm_+PIt?MeuHopBvO6mF6Y23DoW{eL?8M%sz zR5D7ePem^kr>wJO#?~K?Sr@5W7v6hloLCQX0a%zx#k|7_dwGR02`Ua&lOQDv% zPL1OJo8SRsqJ%^!!ZZE_y$zVAX`qdOCNvy`(QjtYRyY}L{LQv*zVMB*9Dw}*-+NbmhF3YO;36`XFG3p?g?C9&EW+|!f4dG2I z?93}w5VIP@n?P;KFJ3N;&?<{G70(7$c=?V`6;W0BIoy6eK6=r|g;RizHROIw#T#$J zCb83ny065Cy zftS-9mh#+F4=W0=_7@PuV38_JCKJo~)IbhZNt2VY^os?hiBqPhcLW8UNr5dL1_vj1 z)#)i=Ky%QYyKLM7CFp}2G-&k3mYppmpZV34TC}-|3ZWsg#Ioaj`^mI){<@l$2VW2} zQ7Q~gf@Yt)S|nCI80lNFbT#2)I%Rl0N$ekzN^DI5t`VVYH$uolT;3tAC|~MgtRqc_ zWjBxb;t4Oscr7p7^u#9t6p;TufjPtn#eoHVLPof^U{AHp&%%<})cmL#1jICgTkZMt z_eXt1Rm@ri9fR~5>k%rfAsQMQgO8P>6fBND6OBK+H(${(*pu2IQJC0m0uBRN4N+m6 zGsTvJ#_Tz;|4zr?IQ$Vm_CUTF?Fg2KvEpJlmkg*D>KZu2s50DQ3<; z8XeX?ob^bg~z9sYR_y|7`@;Oi5z5Jdd}1luvU? z-eBO z9_S!pI)*-3#H|i@p3|8Cxi}@e2^99o0j?7dTz5#er znYfbo^L3_dtrc-b8tvLm0Jtv$5q|a0AjXx&1T_il5*!v9oyJfR!bzm@e4o@t-E{9u zC9$SnA0@Ho&?-pN>`@mHH#cDxuq}?c+;1J_nvY}+r8gb$m-FPKxR=Uj9YaLNxS~Y= znW0^s5~Dobzrv_WfcUdX2R3L)8>Ol%v>y3>WqN?k(@l{;g_+m!B^7jqpuoT%ho|B(%@-eK@^e0-d3#TE=F{7=MK45pUczJG?X1`Q5DHSf4ozA!dw zE2pq5ct9>1|NnbKRFEf=%xzNHOQu*?$2gyO9iLPcN~9Q(pe^Ci1oqyq&rNpt`IMoh zv6jB*4JV`kj`qsgI)0a@eL$zf+4vZC3vq1)#&p2`12i7&(gQk4-5@wfYhp2?sn9p= z@+TA}VQEdHOA^K~l&Y{HBE~Eu$?9O1j({c3hURc_{8K?y)g9UuKf)vcY)>7VHs?O&=9+IPz7KN(|024l$(_d2Q$*_?i~uhE z2KSR0uZnf!mUy+ojk))#y#Y(qeYduy0#vmW;@*iwRaXTFdV{{ZjKwVM>D8ita1v23 z&#zfV6yyfHn6J($EZ3=CoHG4)X=qWSk^Oqatn=kw(<)eFAl)e;5+c$iH4F^~-HjkEN{YlFEm9%_ z3=PsCp>%g6A>APPKjXdkHNJl>*SolDy^CR;%h1_Bah=@>aWG5LK1vOPAc{yesRtd#8E7*fZKkwD5TzW1rK3m_$Xtq{hN8>iA?0sZxE}EH{DVg5Lc%Y(j z!8p}CC|yZ}B2VAUsF4Sr!d1EKFH9j{qQ7uzPSpF}Yu2g*7NWVRCX$l6xv$ySm2wZi zerg#}O2m?U9AE^{Tj_!?U%u>qYJR8Kzne*v{;@t&D-=t+!p@LMBH@r>f$2n{pNvCR zpM;DIzQX;{fz>k9ebVt&qVW<8$DjV?SSTaBvoFz)$y@pin282yDctyc8k+j_=bDv$ zxCAqOA+hN-rb1-czd&pu|6nNX4pefkcEG{435hrSk~iaePb$W|6lS7ntayjtxUt27!leU(JvFP$_!y5Ue9$48i_h znZAc{QB_*xhgIliu7?oc!p@itl91~e@Y-~T(vRWx6^&8lcKq$1ToL<%QUV0`KfnlKFK260o?-ZS{tv@4OIx*hSf37arPmW;UpN?D0-vWD zPQ0f@DiES=DXbBtZ9$`MzNX5mCvvF=u`+2b;=jkiqH*=A6vKP#ahVWpdZVKM9YFBT z4{{=(G7xcE0D=JvriZLIyBPSqhvhI4+GVoO06O&!5XnGg*bi3vK66&JrQ|#n4~Zt? zlYMbh0gj8052=3|re4iPQaGO&t#}MZiLlQpH8T+UH&+_s^|fr}I>lJ968gJsjAwN- zkl@RFqZIRSc=lAQg|8fq^E<;we+{}F;MCl%EY8e~QR{gi1q#l*lMus7hx;3l<~*Rw zYtdyFRYXf5-BBDaWiko5!a^UPxhfy4*8<+c6vUwK5>bgSp;-%$O0G$DL$^dWb2Oabv1%qOJ0km~|yv02t7 zV=T8m`qS%?WZBADnvMC!_xFQx-82AF(hVT4e*PEU|3jF-54j-#DCH#dW(-xp8{`lQ z2_P!^@c1^QJO*I{4rrZ{Bt44EEUc$C_|sIi`_a^A50mBcX82xT#UtApuc%&ngAiyo zGxG+>SWc2>U<~g#jD;=g4W1KX?zwZ!DbgdT%U=3Nw9CL948`T9emKvX#SRIxw<|gi zNm3T>ZTy?1fyc;iga{;ROj=G(PK5wsGQF_ng2{*XSG#;qr!QTBEtG8qQ!$`)p=I)C z-=KT5KLT257Bp?IB^_5Op4NXNLV?jEUYE)@yrj9x**VT+=r9nsMmi6xI5h;=1_|i> z4;1ta?SI$w?oKo89M#0VmLt#cqa;JNubq&t<6W2z(?|dAV_iPM-e=v^_kRHzskdew zQQ-6M7wanl$Aax4s{(>}NAcnjX#Z`~qDHT>fBXzQd&^}^l`loIP9JJip5NM?HZtcc z3WmNrqR2@vAbQds`api7l!>bPNRLv(t7HatY`|quiDhZ|ArJM&I}XAEy)vusJ`F7=K7x;OY{mVN=u&W`@npp zU&_(_daUXhW+A9?GkuHxU|&12HDjvc5EhCsn<&+cj}>s#eIK35>o@W7 zVQbDiAKgI>3#oR+Z+zoF4LwkQUH}G@`gbK&=mgQh9svimP>|-{eYwaap1f0rbB&j^ zFE^tIQ-*`<2&!J{)bzrTY$615wQSq;U+5ZH+ih#0-YBfue_Y8$v@M6K;kXab#8x2Y zjR2O=1GJGVhquRw5JGNLejQ)kXQOBcc~?7fG0hCQ8rvbdq-Gl!5B!JtEx1_4+90g*~T-&_7O#;P?PlcSM@NM*mpv^Bv2qC+h-TW^6+pi+e*6=U38%h z4Q)Z*QO7bvTjCP3U+L}}KNhUP96!M)t$41j$O@8Orgwj{)g7CM46&Y2c2DfR1ZB%gElx!yE(kcZ z6ciNNMWw{+&z#ndH1wL zG4Sy)w`CwKDZVVs!&D$n#^Tw77?;M1X}uRWMcs6#RG&YmHtURk`RyB{{b)g#xB=_k zh{1rs_BT`N#Ks&urB>D}Xxap&58>?TusT!P6I~I{@H3HLD|XE5Pf1ePyeF%trF8=p z6*U&~b%{!i+D{Hb!#nIzB7{Vxxxo1J*o|}j8O5Mt)8W*~>70IyT7?>?SnfOCCjxjh zV!hUg;RN=8{jz?a2<{MVX5vG$6hZ>ZtiP8*7r6{SIGOB{kCe3Gp#}cN=nntuessAAN`GVx#L3yY^OR^K@z27#x8alT%&Cj&=ah@XjP1* z5q(nbt3YLN+X4>*Km38gQ?*YXWgz;FB$b()n=h1&EKMkrDT6u;;Nj^Ic$|^DIr9TI z1wwG0y&~8G#tV92@_>vOkV~DDVUdN;@Ad1o@}ni*uJnVYroIMXCC+lsJ2}u|2XyO= z`HKbG%ayi~#*8RGU!r4x|MI!5>s*Q@i>ktsBCUOOagrYjCv9ld%0C~rCh+0QV*=?& z?zs??HY+=Ozj6%oW}*&YGt)u@OC zF)nQp3egVD|7#Xxc&^QYkKYz|l}Hsnrb_NN6yQ|&-W(%cjj78Uh~Muzzm2R}a$5C}{< zEaV6J$~;mV4I*yWir zBMZy3eT_`d*^g8oM^h?PWQ@kF!^?|(Aw-Xu(qU(TO$M)yDAnpI_IJE>#Cz%3+`u#R zzkj`o$bAC`xX9<+vj&VtX}=7O0Nd${R9}(Ds91==pn?@FoQi>rdWhVRZ^W z#1!kNM```Y(8pG;92>0|7%jwV%pnv=cjfxSoJd)|6ZZ9Vs|PKa=lK<+3!wbgW=Z^~ zbo$8xBbS(tH429C!LAfc6RzV<8cmqZ0pUUd|BW+oc&5WB{0 zR1*x2I|HcyaOCFHz*n%R=XF_83zk2h_S%|zTYr`%Y}>`)MYzN6++B^u&dRGllL!LS zvuvm~<&Bs_FnLLT@onrN4X_iFfopS#H$h2Fr%#0DE2cJqv+QcMHWtXRB zJK%B#=b=2RkCX}M_Elb9oSuIZD4_iu=K-U9=a(jDFJp95)X2~Eok0l!B2gH(De!1y zPbcesNO_{DdmS{fR4LKKsu2ZLON+cJynVg*f9SWYE*R7+`%*s}2(M*z&B(?HKzSbp z9!=ERVC{pXQwGA+KaM^wlHM1+Pj5bvE)$k~v*`l)=g;z?9yY_xZg0sgZ1Xo70Y<~P z$>P#i#lW$#u{Sv!JJrR*VwU{{f+}k1`R(l3Zs}}ZSxPSL;o_`l{wksjg_dM1iEf9Z z%OSYGFvS0=Treyb8?-@%=W}<5TsAu|7Yw}KaXeH-t&_QRIVkfKz?zM)ehjAF+;oqF ze;EUJ41RJ23k&3~+48I^Dv$r0Qw<+aXC}@z))>ljh?%+DCKl_rX+}qd&X*Rm2k3Q< zx)!CR*^j+VheXu7aLfNnM;X-;klDJ?&q#U90RnSDeesQ#R7~(s9>^~3XV5LGeo65G6W0fIuH1lZR=v8(92MN)dAuON7zF#j&4R}+ESUb=Avilf>4q&jUP zTPAhr>%?Qd@5C=9NAhlWjoxgW@A+SY1>^!^Qhum$a)r+7MB5Kh&AXEufq<;SO+E= zsEsLFvLfLPV|bjmWoviae_XPkr-vBLN~-~Qnot6($cO(n}OO?kXpnE4T*SAnIBzz~Ix{mD%SweXZwBw=MdN;1ZU|m3(rOrA38L&yTr0h`zODp)$1fYHKz!t%Ce+A_uuU=AOFf_gbuT}Bo z#=UaeFw&lBgczbmp{5x6sE|3MpgG`|qERe3~peC-nFn_X)FyZAB@Hgis_+_4K&eYQa z0r+Py2m=00a4TUt)dRMDT4a?0P_f60xtw8N;NK2qk&N#ruXf^cKz-)6Y#W$~H*N)L zGxl*npS@y7SxlB?CvCYT@@gxHE#Mkq(beBxLBH!Dt4C3a-yAQ)1p|z^t6aVZ0Q&48 zCZBT$A{%3}7?oC(;nAI!Drsu0>Ny_Li8Wdg1DnrnSF>lKhwo0fN04C`F4nu<`+H zU3yz5tzmF9x~I5Hu@6e*jP~07^w0 znB{Vo8VC>>4GbBOnOSMnAobQDcs)Ik073ITJKoEnpik#@rC88BRuAH8;y!JGr|zek zi!XlvAi&-PzSscaIRm5Q?<*_gnf0V@0Mm0raD#p6W^+AE0bvaArzYStRGi}C4`hCF z>$FqUp?X0afYQi4u1N8nn)K#>T!3PwQV5=S9FYr<=^AY$sb?7el600oA+!YqmNx=Rk}mg zj$TT5c|QxDdJ_ot76yJ(zxEHA;nrh&l=(sQ^g_XJm<7V$>!G2c!0eCb7B_cyz5R<1 z$Yl2}Du91D6x?rJjGYeoO;i9F-QTqfZWNTx zxwKA%_GypD7yn+5OKvc#fxK*YaTsm_k>zQE*x7NbrrZt6%i}y)xHvyu@W-UdNvUYo z1n;m%xF6RJyJ(T1-Rb8CUwU|2`biSxdsz7=o~VRC9}h}c4^uyV`c#Kk5tL+OCB`n+ zgMi|S|4=F6ckMar@S8{qIH#ca)Y9*t*s3- z)Bwx6YEdznuwb0>Zk4HuaZ={DGl?5FC(sngN=L|T7p;Xm&VRLtzzz^2!GN0Yvy-^s z0bD}^PHv&#(RmLDF`&{fosp3nCqnE}%Frz>8c#&jdWVx{dcqtH20PdHXE)a}MZ_K@mpQD9YjE z<~^xF0R5-5$wfp)H=CWSxl zLz)nAnja*|{+&4s3Km zOK=RRj`xr(C33#UU}ADvIL2;DO#GHsGkl7}Z6P&9zspCBoI3o3=K^PBRptru$+8Nx z)uZBd^6)5oW@I~FijGUhEv2gZ8ePwwqRbe;KH{Gy9Nw>l53Rw=2%&ldXn|4$qopOG zl{h&wlhAvplfu6}Utq5VQE+sOyu~M}u{~)0f#3MTx34kBTfUcJAdEko!7v<+V%S-Y zE~1O$?veJn|8Z;`h&mK&a$hsE1%gj*1==0X?6+8z;3no3tDi2;hmEF|G-f+6;kx5~ zfAzXGwJbL`ZCK!bVllL>V>$Wvy=F8?xq{AFhX;;-7usuTkpRGS%s{dR0Tph^ae9)k zKIex1%vewz+mcii+ipAYJghdh5y`7K+5d=zi|b4Q_t4+?I`MJ~=h|p8Ltih-)PoZS z1E^PSgH=8=t7SlYY^|mF+bzGVzo(dB)02@nkciQ`3Tj!Z-?3539Y<968Sjdo5`rD8 zt`97ZTXI_oDJ?Pcu=rA?c9TVB*$q%*eV%Q+YPiHbgr)*Rw^h+tdjY5V)cyupx|~}D zWD7KY>k}|_|AFpw>yPEFR0Rp`+WMVn5O7~%$2Y^hBrdR8n@~$)UWnaAy;o)l&9DqS z)WBF+SlFI)z73D%w;(D&UK@}HqlelSI?7r{^@S7+4A#BwWkFW>~+ANo-|H}*iJz#3*XsjlXdrt}^Q6(OlbSI1C zp3DM|bMF(*ckAca*d5cLkZ}=@c_Z%W5fK9Y{+%LT&|0X!UsZS8rK~;eYudTw1^4Lg zC!)Z^>Qy|zfnOOoT5;F|sxB9s7=APN6?>QfC5R+EKEk)tg&W8F=5JiqOuNs~-4hcCWy42Mm8mi5GR30PT>@LvZob*|DgRSWBZ*z#KNbcyL}tM~fziJs?Ao+OJ<{BgDiS-}Aj3{47)^0OxdGY({8 zm{o46>*!b5wSb}O3;LK>3in(j3cR;PJZZ+P>yDD|36RS9~KNPytIm}0RyOTky+@_7LZkb0ySe+`R6N@YA%!$&O)=Gejnm1Yg|@T zlDW@h&=+sGSN&M-j}6}@0nL}^i`kVAiE&h5 zcNcVC+LKojHEpyR%ppXQc+BDs`_WsLK~L$GBH4b28v~h4o6vh!R|XE8lSTABwLd<0 zmKrQ-_s(N`q8tbsl0x3lAPLyO(=6Rw^Fv+}Jac48+6>HVp<}5B*CQM1djtUP1VlWu zjYWiZBJV&`+yfR9^F+wl!s4d#I|=+i%xK zX&;Cp(=#$4fc;y~p+F`UUyob8SFS6wI`Tc>MnTQolV_&YKS7y;pWu?+e-0(1*3 zm~PDvMNdKd9QVvhMN_PVICI?jg@nIH2EN+ss@qcCX}{?MecWHit(s74nfydS6llKaQ=Jj2H8E3BkdwizgfzsX%l&v9|F$%nEkBp5?W6t7;*ay@00V~s`qh#8 zXBMLaf|$(2^+#V)^UY5C1j8B+xt|mYmkq9;Zidzn)x$@OlI$N1Z-&pn*bLQxzEGtf zeJl4i9>5!F14<@@?$5Q`vWgJ?8Bv(Qfwmg3-OFQ4^KSs0s}O8r<}?scC_TN(!?<>G z1)BYCKA`<5w4+F0VD#Lv98z)!lG3~T)zJcg<6foa(#qaoM|a-aH%k2SN`^T~wX-V@ zbTjiS5kX3a`W`BeSHIeqlY0`$zR?56(5&3eU7I!gwIs-ba0DFs z-2gvcx(FwBac|8PQN($5cxRwEuaXAfDpea9>jH=7wlw>REebpw@#Znd=G!RpWe zGaOgu17r~9VFa-wausBCDZPv@1z)Va2M?*-`7I&1kOEI~{Ul@0eE`9$X=nrhL5D$& z2cfag52lmD0|}n=vvdv4F>jKa!uGPrH~9nC>LiUl+0lI;|7R_YUl-OgWcF^o{Tl3n z3~Hcl4Jw0p@l%;3vkic{65-#}3cByhXUTK721Di}m4A}~Jny^X;x6$w$v>{oE&n8t zl!ysry{G5KEzMy?AZ3{P0i8YEY~wH; zSxoY>+6X*8aP-+(4SkrEw$f`AyA=PyDUOz#744)MgaSO2fG(ATbJQ!>f1@-YmqG0b z_}C$GD{g7jX(f~PST>#Fr`StfNw1J&YK zgD@a~bY?Qn7s|$|+F!c!JKP0shomUDq2szmEJ(2$(VcTmy6MwZ{#IMVz<5sQ$gJ}X zjQNgvZ98H_|G;ft>tP$*9d?1zYhabFhw^HLqzz$asWNlI95%SnE2s-z58jDUqP$lZ zJic3bk@Lz^P%?zXz& z4Ty!gdXu2CRnyW!`xpw!K4Cm^-YcH9(~k>4t@A*mSv6JcV>c;)7Qx78JSrjO^FL%? z4uH8idb8YWh#ib;k~#PRqEsO8BIoKTypBCPU-r1B!M>{a9KkN^8(hWS^(j34f%PpTXgOsN$JgJSWqdYIRteNf zf`$u#Cs_38GX^;x2GEdddyD&=-SN5jVP3X`Yz(KULM7f}+1S?}kOH$4q+f@CMXzLv z5}N1_q>c;Gy_N&HQJ5%T834jt-x7hY(o(J4M&jxNlnz3}i%IDQEyu#e*C{K{o+2pX zJ1Sb9JZm;7*=mtqg8_mE#vOb|P!tgKz=6?SNfEsfkS3Bndi2O_hOBXQU~Owos*fV9 z3}7qdMn`lr1-u>%WI?Z>8ONi{Nt~dcL@?-z%21H(WBY&VB4o;V#o&_@I#LV@TiFA{ zlC@puJq#wSU&gx1FR>20L&ixb+GR8!V9Tp#=3sJ4b0fnpusmK z`Z8W&9|>%DV7|ubmB?YxQgs*KANp!Y#n*z?nMlpaDqIl_&MFo{UhXg_MJ?`mqyB7> zrw?JQ`yy1@`y5EFwCdA<$nO8>vw*~LXik(LTc=nqG$3J z_H|{f$`3;`$&TpKHs{mHw)M%?^5ukwe_;WdZnkCa9Rsp zg9fg}*>kYw+&GHll$k2j_)t-0*43s{>zNPPv6`3O>oIxMfKQD-8Mfg6itA)eDX=$x zg+_p_NSV*gQm)|y96GhS7>C%kb0D4@c1C#xK{`SRzH7Qml@)^i)o zYe)ygQMVBxY#sU+A%0BX{pnXBhm(LJ+)~mb0oUM`xiL|0ONGwq?qfB@3w`v6?k*VV z)UVodq>{cZHg(Mqr@8L7Onm7hCVHoKjfX0>GLt$6{L@4}GBqbHg&NXA4n{S4r54zA zCswao9BIAQ3HQGbbgZB1R&gBP-FANZ-KThk7UD#;$+;TY+pnLV_<`bXiI3Va+n`7l zQPr6;{Ig>C!5i9pSm+TOm$kEea5zkVJ9wH;NDI@vKq9;P9wh~>_kPsw3=u82R~H!Twhwi4E2o6=wRZ|= zcP=ues~obkMHoNd32H;nqx2Cns!xvJxrej~iPa8?-E&dus`NiPG;GVn-_qBjo*d4* zckSi0qBpEomByHsD^WkR>#&>7-fga_Wwho~UZLMdg)AhCCTds#(XtG@j=@TM&IEs+rYqQ5m?*L)WAF6w%E%o1V~ z8WN(Oo>+E>@IA)`6liU!1T3=>vo0x5&%0mL}ZZ0-N) z-vcHU2=U23!~g`95J9|ygagcA7y!W+#(;N!~k{AZ2 z%pCXlUOYg7drDMu_pk@p7#L6o1P0O_Eq*!eTnrMxiwzCL)hO=WUvVcdHiwS|hX+q= zPuntd)(Lw^l2^@qPp*8dR1^C8b?f>VPhtp^EL3%2VC}NVYH+%7^d^9DPgB*aF#-=8 zj;Gtx#BT{Ge$Fofy@>y^fPa1%6a(K(7pgbK|a8`Y5DR~ur&W&1_i!! zZ}7GD4RuXvxgCCDzTp@Z_G@veT@9I_^s;3T&g700qO#U@PjwdVDc^i5wMaz{fcX#tqG-(IzLVN zAgo{>GETI`wv!e;`1v=%671SLU^H(^&%G=3l;Cc?G9v1X|yRWLumSUO0?F$~`d zaY{AoIQR?17kdCeWc1Bl+}h*&A#Jf(GSR3O`3YkACx;tw`cih`k0&f2pC3&+Uq`YT z|57ReZ@%3BNtNd2;`&&#LqqKAeq<9>Dfc}F?kwE8#c0v8pxNaDT5l7E)x~~HDJq0e zko8i7+!{sKeZDzlQQi7Rq1awyd4-jakA%dJZ^Yp@MTegxO#t|S>hS!9qyC6ae7P@? zC>qOJD{PC4SuYawZC~|~r#-6&T~%<8WP#q~VlF)h@WzX#)AQBrwcfK#vQAH8>) zXRnVpUac%?(ot9E!nq0i4ZZk@WJsc{Eiv2ygNjJG^fLP|7_HjlqN-fT?kl2E?OgL* zgh4rTF%sEPfb;Z##YB0&-hJhftn~M6Wd-vSw;`z1{7HS9a)ZauLr0aV6&zOUE;!@YNU{nH~*@Um?uCfU!iP@`oWjIS=6iG(aL5| z@1{%cSfsn~dVryN1rCGsi#1+b#Z1llA>e7X4cIzd4Ny|VdKTU_#3{k!g9>Q@M7<2Y z1oR|RUBKe#Bbe?b57SecCG~-(XkLzyvZ_Wa{-}6#$6%kfr4hu!fR12-vlT-S}3_0M|9q9LO!-mzg#n7 za?&7pr&f#QhCP#JhF?qlb9SOHog9r#v7Du%o&@e&5BUO}@7ACX3$g8K#F+7-<$Qqy zVPh8oXkdcOr6HVRK;R;V?LRI+y97tpkK_FlFM$5GJ~mRIxUthtFlzvN&_$K^@->ld zRzJG!u|Z#2EoGXs;$Nr&C6HF*Hh>w}g}`)3z-Ck}YiG>ru?u&dcK<(WA-qwb7HV#7 zWsj0SD`+ORTIx)&m_Cc+E5?$2>~VpV3q`W-&_%~qXUIk7BBDcCr8HWYW!L!&oJ^%O zo8$5r0<=JGrU!j-hp?LF**C(HXU$vkHAT%2l+Xk|lC$>d5fL&=B}vB&eO#z4PU1qb z1{|tIvsvaXt^o{yJRF;kTa$qYLCMWnX8WtN$83q9*=Y?CQONbA2;SSa@5JgP^aQT= zKc@lQ)smizYoN&0+B4v;3yv%}@34a1H&&wH1dWI|?)XPEEoP{sYV`?XCq}lRMIP&006YX^$|ihN>8QIt;Pt!6%OZp?1>LycQPPGsB!paqyWpnKK!W=Cm`B0}seTDcsOQ)dx!p=J zaQKrtWv6R6Fzh+p3`cs22-|Z5fy+k?jEbj-#>IJ;Ft+DxroHM_Y20^F?$^>hkjyz~ z|JXfA_EYQd`)lqejKsquDw@Qj{HUFN_~-or9!Peep36<*U1mYKPJFy!?+a(w0_+r$%d_Qs);7Y-1Bd-36!E1y z-X*R)RP;r;EnEYKfcuxN65^8NQO06V1xRBhcdP-^y?u+_0J>)x+Z|Am#7%w!6_6ZO zVq`@{xlVs4m?F~`AoKuVIA)|(B?e$+fXWpd8mb|KkvWQ_u$AGvJmBH8eJJjYA0w0} zE!|zVOM&ass55jHXITwQ4CxU-k|LOI#j~4h*}*&-T}x>h)W*4_DB#jy==u`;AEu~{ z23}51etlGBV#9*wn$qBMU)Xus<*(Z^tpadS_nGVNa;OmcZNNHybauS6GWqFt9jNu$ zyB0fV&&hBKmmGv>j&1N04Nn?vR#=K2I279%{5YbiyoZWiK}D_l4j4k|mMqNzRCT_IoZmgOk+tj7<4^e6xSqRKl|q00 zEpL(h3?{Nh+c$pI*alTD*uWn_&}y2y4!S4NBRz22l02b!dR?AuRiO1%mt36hL+h6N za`Qt9=M~5N?t$nM#@p3M7^}%%TM~`aTBXh9zPm5y9ooM>B@+3KGsxO(WBf=_fsUXR zWUhQRqr6;G@X6(rsgXC&HqDhMk0ru`&=>bYwuVIWS#B9a4mqXvBQr$LH z=2^FYlUetnY(7nVXEk!q?6KTeW&oJpY4E%MKBJF+R7s`#W_;;dI&ph0?y&u4AdjE^ z|4EQnnLs4;{NdzAwC#nO@Qg_(K00W)O_T3wk9Nskc2HSEo60M&IZ7?}y}+}wm)c-1 zW6jk$-m+x{8Z!t%Yxk%9G=rw7ps##zTG4d%k1&h8pKt)0e^PwC@UuaIZfyE~-v$Hp zRa-lcR*UI~;CkV#N3~V(hpZ@GiO8) z;$c~pA&k11`bS^~k}D+Xr|jh9nTIdKo0you_;~U!BMWVj$R5~`Tk}7+z8o?G?}|8G zu&5QXvi*4Hc>Bc(FXdI6%@*x%kTubHzO%(@hxBj3Ejsps);!1qpJJcE_<0hy)8$HH zDRd&{Tk~Jx#s@skakR$Vk=mzNoFKv0%vQdSFsj`K?l%xBzp#A<0-CcQe3)N-`P&{~%CnU?2Qn>^v9GBVnU7flb~`ErIs_Ah5sBl|LI$Bmd+ z{yHPu<{+$}{cw9$t|y0VA|8WblfYA~-%5$DlZU+pG+YIL7^(b(BQU{S?Xrz2oUacB z<%9}A1OYK)e64eQL)H+m58mBDJ7L^XcFl98C8GI@ebB&y?3#VGUdUExh;BgIumQka zT3Q;+x4ViF_+F3K@}QRT9~abxXb;%27Q>{Z|Cr840al<_O(>fPtLm3wxs@~W1gLd$ zq_!fvH~L7(hfBE2`9$0wS;QgTvjF}agw!<-IT_{GK>;I+TtsYglLjCY$j3hZ z;Jbhjp-SsZ-SDvMiVbOneMU@1BB50{ij)xz&2&Rf*OO!aeCxrHph6yrjn-#I^^9r& zLg}0UTcc;Yw4vvXD2*={WiWd7B&#v~v$a}mRbTE1Nk+lhE<@{sKl(qQj~Nd-#Mh0l zyk$XgCm02z3}50?y#$esfr+W*reQ|__+uAW2^i2TO^pGw=-7e%aohTslRu7lwlj>{?TRp-j{UaqrJ zD9pAVw0yeI_GO-4^e2!#!pf&MId#ilN~aP%hL(RE=8TM46fOI|&*&ZQ?b|SSbd{<$ zf)=I3dIXtFq#73#bU6NXX2E|V*(Ipp##Wjp3N2qB@1Av%q!1Fl$Y?K=xZaV36SkM`539sYA zDK9B$EbU>U1RjUp>j!n+SLCucK#kl8r04FeMuPu9P&HCDj|XAC_13Ac|2#YmN6196 zR&?RDLYgdA9%%GccYj;(?-@=T%cAWZHXsz%{$Uhic?z088S3HFtEuc^&^fNvv_0Y- z(kLjsk-|3^T|+-ET=ts&qbN}O#;S|rICI4f_pRk-BLdg{I%049kX^s){%FtR8^CC0 zeLPwTYT!QWzQ(3{sTJ&gXz&1Gf0VWyRcq$#OEG|ZO2znbE25Hz`et-qm?}t9jd++O zjahnaBoKrMyKnQY1uX<99qH&nw^%I&P>Ekv!fvzt&+hquoV8x$izcMHE`w?$H@k+Y zm#wgy>MeZq;0$!Uv2bvlI%xL76#2IHl%+2{?#mcMY%CvfZ95LUU)7(gdT9dOjkHHV zIf6fsEv|lXJEUe+gahUN`=xmZ5I1k;-tJt8f-+HjWS#s(o+VPj&Y38L2ve0*L$o2K zTBLQ!FaBI_WUu}i2yMyct%QuTBxqn>WB?!x&w}|ljhE(I5)B#bheCe!-zB9KB&GZa zJbC(=ZoQb+l8mK?pxsxOMj=!yY=nfSLDl90G-NDM`@JwNX>SR-Nb&efO5xDW?7j2q zsY+TmbB|FeuU&q&87S=4-f7RwB4Tg0q#V!NXl5EMe9b7>GdR`S=fU(S`P4IFF>gM& zvinpO^y&#l0v-aiAzmXr6Q6m`L2xhM+G=lxr?P%;5c~3Y!&2yVRXZzNWX2VAR!I~b zH9yoFY2Zf_XA}$_A(lmKwl@c;MAy(UG2w4kfU5zf1mo_A0WAeMs8x-9Vw^Tz>Nx8QpCUl(=Rv}a5aism`y8bV#0O3 zXwy0qVl2w+Ga5y%V?r8-XE9c-Ypc-HJ#@yuhXSW{sS3MVR|bR>15VC1`+>HwIa+Fm z<%D2$9{L+XDF1Hz=#pXC)f)J?@6-4)*ZGT|-}=ALzk+U{>xUA@QNg{oRE!Fo9b15u zsnDbm)n#LRi1{G7YENPwF(nsSh8xAecHg~w!siDc;wj6)C6)MAWbpF&fWgBi4vJ^4 zo0GnBwh1_h#8Y=knfg^BHv5;V(cMxTG#5YSh^J{&8%g+GtZ1ZvE&D%zfG$hJ6^=EV zXJ$B0LmGgex;ju3e(OpitFWIb|2n?`f7txEr^RC*Nc$R(E_J^c4A(|~46JavA*sVh zyT3`ZQaT6Y989fr#d&k%ZT2-ICaQ)H+SeO|p>d@Y4;BCZumoZgKbXip8Wn#VGC;Y* zlej!{MpE&KSyVgs4|pb3nt*CP$Jd6o>2liMq3(cA#X-ziq-=9&)*t;1!z;POwFrtm z5x_>zsN2k8K=kY9OhIK0gN8dx86N&x&wtO>Z{IAT0kDe+DJesVnEDI&OuJ+j-esEf zFIn8EAr0zIild!QO}@~hP)pHGhW&Yw(wU<1E6WaQBsTbVCg3*$|F|ce@jTT0$XoQH zd1@fyAqA)2)#7OqGOOhy)IWZwB+4?_)5Yhutwfr)22e{5TW3$Yut99ay2$M76JAPS@9obN*oUmi^zZmrIx)&nAnxCHR zt==e_<`#&*OAg~e3u_vOyCN|5yCR=I6UQ&0 zV?a=I)$sp_yRS;o>2Nvg|JT}4LqK53D97uN@xR0dV=!=mtX|R|72RQPNyWpH@}*Lo zl%*!77f5+$PcOrD6u0+V&WKXB8-#`L)<=^qcAQWoJDnZd7y6uIv{5{RP3vQrwwpAY zcpTq*!iIbFR}_~-VIcq~0WG4LzN$hJ2$%T04sF88`A~s*Xa_-SP_;sQ84t!m;J znN$4kB8g1w*UKEQs>+a}>DB`{*QIfFuSo@<_?Od-Nr zTY={Zv;RnHy)658P$>Wrtm9xjR?vygAIvVeb>|K_@FA{rm_u!9$}rXT>&0*hP$0m#P zR(svTLHAng_B~t|!6V;({rLq{0dtA&$6%Gf!LmNa?Lj7wKQE~y$_M0ya#3kTt&Z_S zgMw4s3>x@-MNj15@YLzSMwpELoXsYY#Te(6o}sU%1V&$}Fl$p4iY~vvo9{5%kcY*t zbXcx-SK#SQ-Sqe~qJZB`0)BU?N?Sm6nBNO1qGmUAXlN+=+R`T%^b}#P+jlOcQ;T(= znQZN_od<8Bd#e&&`zwTuHB}ee?36x+Uke5>-c5^zH0NvjW#0K*wZ|2xeS}W)-)a8$ z!y3lW$xTGOaEs4w@Y3DV#JnyiA=x8XPiJovZigV>y3)xrq@Z$>TCDJj)3@zjZ|1q7 zkP;RGiR|P=iJW@KwihYanQ=F%eF8V@0EVVL^7*3Lkq|@8H^$}E$LS9HYe&)~wi zC(=%hMLi_x&AuiiQh8Ibhgy)ebH326G8)e7>5418!%I75zR>0y$W>iFDvXSjjgZ|R zH!ZJ-hYkDLd-yht@amKx1Q4o!AFeSv@H~pfKEua(njz^4zRW+*e~!K=i=JRlJ_oGE z(V@L`Yn}4vTcL>&k?+3v^Q|}QSwYy?up5Q`dE-Gnal^#Vl0D(ak(kjl+pC6WqAH?b|x8>E!!&aCG1Uk(hfpE${UnE~uo@>(39Vkkd_p z=&f}gN0;BV(6r==7<9SbTHey0dOw#i(g{JzSE*Y50{T7AeGyWO^4#iR))PuvA>p3+ z=gFKM2TzkhwYRP)3vs3M@--YX?(lElo=VHe&@nPL&r^bhA~z6|jHv4`=X)a2X8KNE z&{fU1VzjCsJ|E8z!==ywF*A#6=_tEY%~`>`ixXN znk=@%NZ(F^j3yA1RPr@74H%sH;Uf5IUv>WrXdR7@)%fgfqc}`+QnFoN(QIjBsiqT0 zNsZ*W_YxvM4`m>Sj+f%*!@my=H#dk#EmZMC&fNaRrXBRagPB7+uOW=5&cbo-!)DF( znUc4C&j$DdpOjWybMs;1X@7g5`3~G;U%h>XrncBuk^hgo_m1cKefx)PA(TQ0m1Gkc z8ChlTy=P>Pgvbu5?41=^*?aGiGLmGIRb=m#@#c5D>vMg-*Twh#UH9Yu^Zt*Ahu1h? z=Xs3h@jRYKW327T^0~r@9vg{oZ^*f^OGSn56d~jnBVNAMXoy_mqg|dtA>H7$3*4^iQDv&q24hf_-2+ew0^7 zgX6d~h>yf1=6lmNM$D46RLhpwJKj`m2`*BP1*|vjQCuy(n@4GkOWfw&us_f*qE&`i zY4%n8wQ_BS;ds*jdwG7f7q;qlu5B+@{saR%!K<;%sfF%H3xb`3QPc@FgNlPFf&Y1T z*#F;U;A^^-^H?o4p^1oyyaXlz%m#+|&QeLrbkVRgBVoSU`CaqzXn(W*IGU2cX9*8( zlXm-=rI^H9bvX%l(0XRAjeB?U#-#>prN7^!Way2>Cyd@HXgO@XQ)91U~w}3I*L=HdU9jqGnGK zD$HI61B2hLGey0s<9aGMN;D7OF1S3KHH_an z=wHSv#Lc&MyZ1Ku^a=hh4&Qu?lZ$B)7i~j9`L@LqPDbhzAx^=v))Z+Dr*)%jjw@ez zBt1Mn_=Scw29mlT)jJ-#-g0{<^EJWcW7qBe&N4aUt3=#Ev&JiNFJ^H5d!&ur*G+FA z^4rD39ab`gIn9!?vJaq+8Ggr1zLZwWVdf(1+Xi1ME7BVh%Fk`RY!(eqc%CcL4^uQU zzwu?74b61@Y53%XAZuP@eAy{)L}Y^VO_8T=eB0=By z-;9jW$NMJ38U`>FF%ImMWMx9`#MNpkh1D}2Lwpew8fRtlJ`7#tA-kLT)|Q$SP)bAE|XxQ>hUF&WAeZ- ztQSi<(Ytwm75jW+Wi^=-ob&(K^aL!MobJfeX2K3O$LjcTUOgoyFzH^x1Tf>};o>X2 z4kk6UBUi}+?$NEL&BafK@o(SxGeL( zLZ-QG#z`W`6~?x;&%7AyO;nOY6wKvoK+d9s)`eWA$vW3dn7Eg3YrTfUw9y@7&iPMl zFl^`fN<-zjDKyGFk-emlFEuUBi-5gz!T_XT%2*3ZFCz*xs;SLI!o`2D@UkV~|s zdBV~<^XX$HjCv1wUI{K2`8H`7c=%tW5l?|ZFP4|ppN-|!vr7s(T||ae!!~w4+IJ1I z-^TO(o*NW;oYPO`%R?Y2hf+i8-sNm}wKmS7=fAiBGYMELUsYVBP9L=k$Qxl_ZhwS| zXd4^K(@Gm`<|wCpE!|X-7W(x`whrbB#};gt?>-oJ=Wxpvev>X&v|e7?JZkaVPO)suTFBB zUy^(4cltnc+ya!bWSBLs0vD2h8RL zstT74V`Pv0${m+=L)9$B=7_GUHo%XPnzj z-!AbX**(C+1`Q1$A-$(C9ItmHHSj`|;}+cXW7ICoI#`1@%rRVq!2|5)tY_TeH*ph_ zo51#0s<74~7J$BHQA}yJ`fVamB(^H3@1OHJ+Q2qhj7v_YW>nA1I==Vh*LesR-xu(L zh`GzNXNzBGQOA%p`u7USslX8jWU~dvtvz1&M!Pc!ba06V_x;cMIzmm1%IW9CL#b>w zuT;k*^4$8>X!rS{w`t6fVZdLD6{NkF1G#uj57A#_&~a7iTtFeqr&)&=fi*()Oa7HI zgq0nsD;;wcG!{KUoS1uzBPfE?i2U3Odzt?;ECj=BBI=Dgc(Q(cw55=zTdj;K3c^$$ zLWPds*#1#-KvK(*+{?5#Wh+3pMXJsKciI;qv_ZDT1#)4NXW$wy3R1XwU&Um*r(+P!NaOcs7d6 z7}!dGVkY$z;7-j?PP$)vhpDM7P9}15jzvB1P45qB^Ib>?)9j~Ps+?EI(V3YVr6AM` z{Z4nI*YlI5FU?Q@r-<;D*+q2@++4)3X8zdN)vcM|@8{nfI{D4An$8YPb`T#i1VM1P>?l4|reSQ75c|_bDGttc7 z^-#gD$@T#jAdc;LO@?Sb8Yb?Q&)JgoDi+JpvT%abi7Y90T z;O{G!)0fM&UAVngWJy`);)vTHo0`RMeNbEW^9$3C6BIg&<`uAA8}Vb|!O}eGiwc)+ zXlPhGNdo1caTKe`1`p`pj_E*=IMl^Uzj-a9SNWhh!jnc^LLyfCtkJ(22euIf`x zYf^8y$3jh&Eh@fuuoBr`a*Oe4yAb!)&hi~o9NAtqaf!B&dV4Ce^>)L9RQAO#52+yx z#goOnt5@SF0`N&+l;mJcgoS5G${}WQkzW3Sg?2 z!z(h`9s>GT|Ko$S&t(ryAG>PF$aXTSkVB!vau0=xq9%Am#{GDIj4$z@ZY82J?pr!w^>+M9)?PCP34N| z%55AvQ@Nu4KFPM8{+1Q?2~w8Uww#d`(vP19>l96V?;gIN*fS$SkWv{r^4 z+M02c@WYc1a@`ovtKTU!p=7p_FqHD94J_-5l87T30?ka?Y`MayBJsg(V{goM<9&_; zX>lXyG#HsL>q90{v-9UoZeUTV!J<`7BybWCkZ9xT;LTcOYPh*F~2Z+>H3T z&_-(T0gtUN%y#IT0lEwtGeaSUou{YgZ;-;gwi9;IfaAGrCTZtK6guX}Bem;|u7g~#Q zB({xDe+%&0X+K);t(ZEHv{fUBwfubh_cLqN8(7gt!=P%$Qq3;u5)IK{*k!XK{#GWL z?JB}Ee(t_EsyY@LGfw)=q7DeoKxrW1SH90^0?MS@+C9}gO(i`M61~P}J2~3eQqP$Y za&DIlA%g*v7~pu=4D`gz%y%8e>m~Gc$C>qrB9o4Ynv047gw!7)T*x9xh!vaLsRVuo z*KqLv{&sgv8;i*hVYjj|(oD<4GD#vNwpT&f8PTiW z(a~Y)7+W{3n8~1?qbjw+HW$r zG6%0P0yxGUL0Q-0Pwvv*IOpB#KlW1_5j^wS?0m?^q`?&r9fJ0+9zN4*FNV*c*0^`Q zA%PYS7Cr!hUdQh1MxUXfM@>?-#?fMYh<3hLTvbYQ3tGGGPn_4x(_}A~tn_F0(fO|CohvhF0{lwZ_wpu|ac zcX#i1q84yTX(`~DxUDMcKCwqYH9I@-ZV zE+db9H-^=kd%k$%%xASnCS~672e*78t5?d0^zQ?=+p)GowMFRUNTohlp@jy=$7I@B z>%zSqP7z*7@%vKe%Al)_Yg1YjAE#Qo!aAFR%oL2|VS9g5Fa^&K7};dWzB4st*k5Qs z4M~PLsZS^nLrtS^FG0S-_#jump3ej$j&?d)w@=lZ7B$h&5JH*XP%Of~LS{&|rnbQH zU9eF3smt~obizij3BKR!4gv=x9 z@Dcf&w@Ox7ig-B)=A4tbYU~f=VhdVp9nuLT2kUcO>lw(0Y%RIsaSL~^u%fZiZDbD- z>SvsnIMVWPI9&>W_@@09tkDQYcbB5@rI(&ZmnW@XiT4cPT|8>CpWdb2iEk?Ooz~Wp zqHr)Wp9{^yGI25GA|pJ5abqJf?iBo1CG5Y26O%XSuC$E#Utn>MX?GP179p1zv=HMklM`71F;Rv#qw0>&1K#BrF~!(0sC z7KKrwU~>M-)L(IFHHCC82gXKi6)vMa>-oObm8AERcRliR1X`JLtE%ptHh*_t!P?VV z(3AAJV$9@6KrH=duqU*NEZ{Z(34&my!SAgV{!rB@1Y9BYkBKMz(;N>ce%~QES>)}= zk-k$`@;Z=T<#bGW3GzvY)Q`qWlm=6v@k_6iisA0z@fb>gQ0CVl=7aLsEt?SWS|=H$ zQBfIM4t^hhAbwD2RO@aYb8sn#WCl6rpTmf3jm!<3ASpBb+?@g`pL;#R9?1P0*o+T=dEMPC$rOf3_hV5+#*#eb{3S?|u z@4Rtq^$a_M6+n_MG4hB3`}0091T+=E3CPQpG2?+1l2fP`&>1Vgfcs`@A+S1su_zlXmFnUeZOqeop@&{Ac2Lmm8tZ>cc0Txkgh6VyMf%yxuym_-Qka`N>^`d zuZ)>1hSAO@T>q8tv}h&uSYh4#9kn1O-$!esWPRS3A8b^dSJ!3I& z@0P+7n%Ulq8NZI%Kc8F9^VMQsbS5~oH+n-?_^~zB8r`xm# zL_~w3ksrEJ8qOD9E!o$iKW!e{(ZHB#d3UPRgf>B{4UK=ybvuJPAV;S{Yyc?nk%pbb z?^g({3s1&Hw0P;a|)qs7dEZtTye8d?6jTx zx7F12fu5CA5cJ4W&cH*R{?w(3$yqrqk<%Y3#T!|tTqeET?%f2Kvtpgg zo?iVx)?T`}FkvHsK1 z-D5B5&g6eX7r~eD*>uE1MH%Tfc9*r5$0`XY{Bx(5zoDC#d!>os{NnT?=wMrh%h`2H zfBfBRkicy8qk;j-B#nV}Ruu2?A3gNlR6b+WzQWnQTH~sDSAzIuXy_-1CpL@&G}e>l zczP|S+5T9b@0WZsip|=cTz-WpsbCAO{>H>5hOv@Ke`|gL&1V0glT!&@N;sOVXBJnu z0{lrQx21kNF($VJ5Nmq5{gRJlH0uA`rpos1nXr5bP4~C!9NGw)_)cdp!WGDpJ;@{e z55$;1lGCSzm{{NSz4mVpKkAv!t@qEJ`Y;u_zAn>Ly_UK${{Dnp8!;1U74B%?&}??q zb@uf=f2Y(_IHAvHWa^i9E%d1lDw#+0!$E1)5Wb8%FEyNj1PIR z@Gaxp6)Q-rZFQmKX7j<{lbpNv@h zrtzp}g)pHLOhK^VN9jgV|IDdUpw5yVm&(V8j2@rx-KnQT#jUCUV>D!IF!<#K8nP4& z$LVXX2Ag%wOz>tY$&Kv^wQ*vT?E$;{4z0EJm*qX5Ub++@FDfkTErO#A$)FM9?lp$h zibnHxU3hkq+^eBfEm~x2az3Jdb$a2)HTSzNSw_`FKf{VFFDo0bU2#vER;%Eo zW;=7R-z8+5720Z0UQnI^5HaNwMh_*j3)gKa1x_Xu`t6ydj(xa9Kw=(XPTC z=Ux_{@C&F3Og_gPTu;OLV|9ez{K60xiw-vrz2@KZmC`&^C(Z4x;BvB@jZ%2#!7tl8 zz@o@ccr$wr;(boyCj|xc2j%4D>?NN}%J|Ih9$4xJFiO7uEu@POMExn@Wuut#Ungrw z0LeA^aHwTquYbk`(ofw$`sMWNTETgjTmWh-eljOtw=r!JRDIZQzpZvmG|Y3r{NFaQ zBc_yKHHj4V9L43&G(}gA;zQBgpP1_T0FmYI0gJIrovfMce}2UG^Yd$(6hhgW zNDjV58oIz52JwTz;pO|*@6zb&Dse&5a+87jkT{{-KSe1u~h&%p`RKx zg?>LB-H~?Ca|uJuU%0Jl4FB*7{_VqU>0x`|QzWTX$WOJ5-%Na4fjVuryF?JxtI>#$ z`(c3p(}t+9Mt>o7fuPFtz#mRVv)Iw7CxnuG&Z}~#&G_Z7$YX4l;!Wl=IVkaN=G1miI5Or|C=mPBypI*VagG_QvEm_R<#XoK z#bI1HJrKt7Dm^UD8lkyBK@kY2r@b*i{~2k<=FE_u%afIFcQp|x+O7>bB(`49X0H)d z%1Ke^BdG_!I^UvgF`jlw!l6le_qsL1BK}GNF|{x^>l#>p4C)-k)Ti^l2Ey( zax!+yY3DQ`4RzoEc>4RJ$kK=_#@TmG2P^7KfSXQ~rB};MaP_YD!Zcgjla8Dkg(2~% zmO(n5<63(+#nltmQ7X4jQ|6PuXr{?@eKOBJ)SsG43_iOn;~eQ-=jAKNI^g#P-p2($ zFZ_0O&6O70CvC|gw3~{nr~P_Z{#JbQ?)=|a)6o-S@Kgc>#(v5W>3H)*G_M}w)**Js zK%j?uU44IUT`ga|riIx~i3B_Ksj+o(;q+5Skx?Fk7(1L~?eP^I7yYC&n_?;zX$Z=U zv{;rfiHL|ULVWQ)wI|D-XEP$9F)K6{@MA64Y~6HDU-J9yFWxOk3j(YDbe<}Y=Jc`; zE5RA3+;Fw{L{w$ZgYya71OLP=R;g6@qS{?D53b5_ob4||1V*H!s8WwlF2~zlb%ZqD z;!J*I3TC<5y064|5SRI62ZOv&-^Bh+P(#g=L+*oskJo4qN}A2wf2NeTd`~{JCSk~k zj_k=#CDvQl(h7fkJbL~Wd&rS1vR9+ein_VVIAhus@lqt%!_wJT!{3X<^(i}ndcc{h zOerG2QVy@?6*rtK6dvVuHWyVT8=iME%;CTO!%k~C9LvqBV?Dh9icKrX+)gjDv?Uue zD5Rk?mf9`nB-pm07_0V4uk$YT8H+2ti!9`LKGE-O#uzPM^!MzbGS|%VD=?wZ!A!xF zZ{nxjNdDHDy7D*lAW%mq`Pb9#eU$F_FD}5puKRC#+#R%~$`$dhmj~@@v3T$K34B7| zlgeX}irJUz(a(gN*mIKFm_0om9iie5OTahu`0lEPebM~l1_!sb&WmQ^rJtqb-D=qc zT$>-C@XC`#g#}jdOZpaHIelEFVqo3AmyBpxTzpxxbs+;6^E&%JPDnX*kTL51g?-tJ zsyW5oC@%vmN z)V6dNPHtlQCR+t26BIPN!J2K6cRwBzx*$e=bmyS6))L!A!((K{TGQxXAM3xonKum* z82O-X6j!2Z*!81P>B&CPa*ZpF7-H)N^EK*i2?JLWX2MC5w34#(0=#E79rPT*CMx;< z+O5XhJE(zgZzA+uaCJs*aPvGdlFe3t&Ae-M- z@<`fnd`zXtajVd!)S5D?Lq~Y;mk8m>(Yh6X$dbOPbS(DSki0}5ssw{0o1Y18uJ4`b zwS5yTeE4}9-(0EcJPFsr3!MRXrLwO$zsnIs5RDV4YLob%-jZON{%~9fZLb%ZwV!u9 zwzyL8L9nUiWkHro4S^^*CB{&_L*Oqn+S36*QwK7%bVV=u9fQMc@r|<3IxZBniti3Q zK4%+^FTC+WUw5yQLvZy>CVjam7d%((=GKo9+ON0D1O^`@eax~9-ca8eJZI^O#cOaJ z1Fx%rzRq`Mv3z8aUj^fBdBCk(w~QfG9)=0Zwi9(Yr^qkw51}*d4+j)<{6IvLUbE=h z;$VK@qwe_Tu`&McY8ce)4M@O`<&jdCqu=bCzq$iKH6#@(5sQs1Bk9YHC&#rwqu+rbG2+S$S-#i<8-(EL^PbnPwfD?s`%6ciN3 zt09?uLGAe)73!g4(E4%V@@2nVjlv%QXf8HFi6_K;e>1MW!qZzVUGicO)xFUfb_W(- zJ6YMFRt!xxfAyxa%tD%;rVBF#1LM{n)o0)=*w-OQrgy@q5!Bl?%git4sAfM$MaP;K zml|*MqBii@A)c9pI?@%;C6KFpfb7|?di+!MTqd=E)D>V5ab6Yjyb7c|u?G+Q`2H8} zNMoZG4og!6M`t@5uU)ZmTM!l9yOF&~uh15MJf!L*0Xy1KC^QRl{LoU}{|&kmvjk_h z1uE{{5C}!BEdvz<_c5SO-vY3!Qi?FDZ|>@FF*>v)Ad3+owNsd(b7MqdcWoe-w57Eb ze>Zxo%SlvJbRA~&a+r}Mev6a{ee|Bl5>*}QYyFN7 za5`=>->HyG7Ni9ELAAeZ541dAx-}COye*FZ@Nnj6TufIUQO89ac}HuB;Dy9`ONz@Z zV9Oi?h)GENObZnheJAR_4&1T~H}U@`UPdrXi#7%Y6PK-Sp5TH~F0(IJkv%LR5OF_W zyZl>y1&N{5gi#47<4y&P8iaoK2lMUBaCe4JQBQPM6?pAvk{s(lQpbAhb?oZ6X6wGO4rIeD zv0>Ub5#F7{w`ks)n5fv>-$r)Sr5zp}ZS@S-J}t!Uym^}f`s|RBuuwswNV-wwwrBhK z?L7)8H;KbMb7q47&VZn|dImHzjrkJSc#B3==iX-5 zZ{foHjXuUTHZX44=DBRkvZ}pfdg7G7>o_!8L|tpuRV!W(50*x0qlSm2SrH*SClC|V z6v0(w!jktnq$!@uiUe8!%^>&DI*}f1E^)?)!O$#`td(^ICC_`>mA3g9Fb_F%@KZ#2 zorxS9l&rosyWqqUPZ3(j+GtniTsbV(;i~LXi$M&{#`m)@eehh4>0afCestm#msuty zcExbSj~x-2$mfI$){eUxOI=zTcfw;&uU!Y#6rTxfSQ=dvSJ8y)9OcaCIF+QH;agS! z0qOwsD+VB7|BWRWVZ&9872_vI#8(e&0+(rj(r@`MkI6NO45eIYUADHiT0u${H9H{a zcf>^#j(SDz|E~`z;Qm_?Q#x~k!)0lZrTuaX$P2gYVDycZapm89(+Q6suSa_~qLS(_ zHvr^RKEcw-H6ROIabXsIP-y1{&+$mjo0i{-ra(u#K z;jLp=SXCC*_J<&b^|VL1mO74?;#U@J%Z-JcD@mT_AC#QbsJlI?;67i(!DK$YQ8Ir3 zbVDbVrES8#35?+!H6}->j*s6t2DQ22I@eO|^ZF$ILzAp}HGYqOeth>os{1d&YNi2S z2c+;#o4b!waqGT~DTg*ic$BZp4c0~QTUg9YH4U5r#F=L z7AhLy(G~GV3=?bjdMv>iY_M6A<}wp<&KPuTtSLIFF-Ul?@er1}pBgz7Qp-?pVw5f| z2})=K(X=QLVqbwY*Pnn1t5nDoo~Jkm;4ElE$zgcbL$`RNmO z$(KQ-{?_o$M+&P2B;7uvTQfgT#C#__kT4z=!5K7AcG8GbT!=F&W^X@K$tX=a8n7dWN2PVYIqwUd4w+^y+v;C)#o!(XT4PMnq1sd{34}8kWx&S=)8q;R{2tb0O%z!u)ywF0UTBfr5P*F5e_>6wXXycv244 zXucx&nCLtNfsfSTk(k4ERv_ogk57osID^4MjQ0hZ5$=x$(VpcQ!(VM_|6ly?XA2qk z=@v|A2qpoG-3Gcj;XHQws`=W)Fpf*<#Ae~YQPitkw{F$d)m?zbb5K-GflyprVe9|K zQLhw>r4n!{Vtgtri~@qDg#}iYfx*FT(5)7hm>8s-AwAtnC{#92{++=M135z23$bLd zpr7|QXwPmI9Ne8g+*^AH0}_y+7F^03I9;i-aUAC3HC!#w4x5u#?lC-y2qu06LH=Fv zxd-!5{8pbdTd)BE(KcY<53o8|KbxdcS9{CPgt|}(r~3{vdWhA3hGR2U!Nu^<=8#`y zvZ5kyc`RfLAEvShBKd}kX4ywU%s^L-Z{Zz7jOaH;t{*4XBls8?q!6pszl!r-C+qPVHADm}1sJokkp|!GSftE8lA_shEgQ!0 zW$9Lz6j;MTgD&t7NV(LTqcMaaDNsA{fRXCN%Sg%UoD;1Qt+9ao@kv#(ZR)U_*Ps$x z+VMjl#>ypo?8dD=f!8a`Gd*ngu!Dihi-NZZ!8%YhA8*eqm01nR2Xpju@B2T6?vM6JIzp2V5!DyH2X~FE z_7n;?N6{nPg&>v44G+ldtTpK%LN;n3#I(iFu{Uvy|Rih&I(76?T_D~+2hthgft6UJ3Y1UM9*7kts~qT z`5Mm8ht4cvOG(O*aQ@v}B(w5?3^c{#Thh{$h=*LweojZ0Z*0prO_%Kc9OS98u}_dB z{Y0xzA(SAbNCh9jZ%E%w&g0gJLBj-;3jG2CD3;mg!ngeW{IU!Rx^0LIA-bRtdwp4{ zFDJc@NHl$-z@V|<3msts$M;0k7~YZP6Wt{yNr-}BleM**YVN*25|Ip zlA}1con4KCgTr|Dk+*4u zj#izoz_oI_Nqx+@Zv^n=?vNR3jU9jKugqs*I;?2ZW0rXum0ZrTqeiuE+MgTbDaY32 zka<{o&x@`Xjd>!uwCwN(Ev*>Bz0XrY?w*bz#5*9P%>YXHFCjxRoqwuewPsUsMCt2s z*Xl5oCh;E4-%ZOWI?1Jmg{2wtosU(y;-AFu7WLrV=Qv-;y5AWzdRnresw5mW#VDy} zqS29EztL!NnNd}eCt6DUA#^8Dz<4s{wD-z(qjMZBA}!h5+&D!?2*mYw0YMWB!^Jcp z+#dex0@!Rgf(H7=ls!Txbt7onV*#c~u`p9DJKTe#g>5I(qky_1 zp3(1*L1l4mk6q&@^Pp8>G+lhSxU$xG^0Dy*VW&2;U~RDaVFuGpu5h!){T*`O3w<7cmbe#R9mH*ZIb>C#%HrX z+cxKV#;|kCDAZ4|cUnrpIZon2aMqW`|7*=$yuKVaSS`O6I{uw@uumuCHrw{#izBR-bC96PnsWMT zt1{I@z`nKlnrGa^4w)gZ!%~&x2ngb*4Som@(0QnWVXB83m%u`Ju-RnyXQf_}k?}sX zreHVr(+(6yW3ma?)QX&g2_HN)jj~qA9D77;WY!SioXQ~<-Kq;Z71l~L4boBc@AxYP zro2GD+w$h?pj!{UXWt}gCOo3eh+IG+y4i8SOjOn>8e8%u%r6SK0P4g=6@*>JZ5%{W zgPl;@awf-c^$pL%qw^`isLkYN2#jj|CdiB$!*%$6?*gGu*oEq>Xt znOPj7mJYU6jy6S6aGhF1Ye;9Z!uIX>%eTrq%IY%E*}9UqRQU0WHEWYY%wcK07u__1 z*X=OBIM>2MSfBo8<66frS@6Y1hkMuEVw*InV>mVhKbzfm+XKrP@*T}qksF~XC4N6+ zqOAJlpEd-!*P29*7Eks~yRYCBefGx~jk=6z_lyf8;Yp9GSJp#7#*K;MC;f6eH8Y`2y zQD&T)?ZYAr&5Gr%142on?T&fTeX2pPv6Kq=mfE$3T=7Eorp{5pWPNW_8?SK8fTRpN zv-G?efTPE>#>`Zb$927DnfJ`xPUKq-pX~0A^=m|C`*Lt-d4_aRhm@HzCN2nm7POv( zospZc*s9Dr5%83}?u}2+i`~`y7ejOBm_Jz(#xe(2H?DUbXp|7du!tKorgX?VqGaW zX-NjWNS(2O?%*cqP_i-^HpYnYq^>Z*h~e_kKS7nsRE4lkv))4SIkT%xl{E*ZocO)Y z_6J%&UjXLqd;my>^f>aPvXJ?hF7yytT!-(v@_r!+-ZXlmIKQQG%_k${!HfMpN0CmzGP`!3YS5-)pR{CXxc=>7$c znXaq)Jyfz_N1!D|S{Ygpny@wezJVNO66p*RB3fWTtlC!-YkX!cFKN&4FpAPV8`_i3 z=Y1u%(O1o^`#i&A7!;wQq@HC*&JtQN7Ypr>qjr!v@q{z|eOuF&TxcBNXma?mhL+#c z8E=WqfN2)<7Fv-*PymYSt$t$0Y4Po5u%E12)Re^FPWaA{tW8PG3oZ{$anPD=tQJf@ zK$UW9eFUoAU(+NAcf=LRcIfSzBVsAqKf?3#H&k=|iKG_BzG>vMSUqEDZb&LeaOR>h z^A@IkPhLUr;~d)W?ipz@ZM{$Sd|p<6G(jhXT~2Cko>9Cz=PbTzQ*nTFK!=B6^@ZkA z)D`JLb%ZAxuX$UGx%1@H*&dtEa`v+92C5tXAe5 zO%=TiR*d+NT^F|Dauj;kct!)vxUp>0fI4vi`h8G`8`R>k-T!J$Dw>%CSN* zvx$h%-uOan9KsX_f#3ObmXPak5&Ypu<`Z@CxoyCNxWwzEPq=q}%9fpMCgv-4C zUlX%D1Y^s4(}kq%8GOtahm5<}97|Zkw!5L-H`|E?-rpev*_%>dCY%}n%+-}lRo(3{ zgIk;J9uByi^27H}Z5|RzYX81P<1u53RpJ>Yn>4^30`|hwhPA1r0+Ez$r=z2eJU@YC z_uRm>l#VB_?DONS^^mRj3{umj<;*QTY945mNzo!f({MU=I#9gD z+0RfrM!RMd8Z;W_EiJCn;aeA^-Vx0dyUNMIWdW(1Bm&xV>NDk&UPGdK{r2q(n~TP- zPrd`HJfgrUqaEP_7-WJk+@VeJCqzygs*&%%JW=yvSWO)ZwA->1kzmE5^&zB+&Yc z<7dUB@c-fhcvZ};-Ta7*q3?XV-zRj7n_C?b!r0iTo~?{IF)<-d7-q_-@3z7Zog`TlVT#`O!h97S|2AU zJ0Z&bmWXd1!W6m;EiYQ^n~Fa7{)5In&G;BSJpx)(s!QY@KUSNYn;EYLzI>@@CtqrE zhs3bsaS7H}YOka4UrxDy7I;#SNWa6J1n2%NcKJ3sPN-#nmJh%m*Cj%(THu<=QOEes zUY9$l3(AXFk`jtdQPI~7dxmQbhcL10&qn;H-O`U9f#Ff|OJ~tr>kHV#3XcQOVtXU# zQ8N;m`BvTL-!R0ZT7{U^bx6gHmj?3}^zR>QUQ;P6>qchE2gppBd8MKz(rPI;zBWE+ zJys}a!S2rraSzpeLAZ(^7Nw0tKsf&$@iivH%-d8(?rq?IC>R4X>K6c;*7BW~PB%dO z1)7GD%3v&9u4fsufBv3;tmX4ED4Y`T`KKgqC<7I#ivF4E)2x}le}||IrR!I^!1ez? z61be=%>q^F5#`9av$PLnxxT0xO3w+An|}YHOb36jK*~}5|NfKmhzB(R9E29|S(9T-# zVrxVyVzdETWDm{c?wcKS>$|%j0kyCZGwO9M>62MxcJf-ti2Yh&qodXU9jL~D{XkLs z2DE|P3+!B`=O@cmaE|F75V&I*8xipw4$VbmD_Q`+f|M{}Mps;+?I&^anme7Sd#McFW$eW1MIYnr7A#J9YYft7eUZ@#SqML2T%B5GK84{(D*nu zlNfjJRXuv%=a|X2pZJZvO%+1h+a+Za@AhVTJt(RWMDqNh0_jgc$(I7ctb8@b?tDngOE6MsEUw8VckTPH1f&D2IC5yMv&97+UB8b;mZ8|SOAC>sJ4=v@ z41U)JeVGFT@EE-f9&Ul7-J=KAqh(S9ef^SOL3_av*#|2)bWoDFMz<4Nw6!_gwRot~ zkPM8Nm!SWVt@Ld4(aL2}m}@^nUcx;FNAvn#_58f~PCeraG@bI6S@elV%Z!;kmip|Z@7BMF{rCTHJXvWCS(_rT4*--_$Gic4xF$vXIS$T+86OF%8?+Z9uqPoq&lU5b zoe9VMOgkJtb>qej(P|6ALtVWMd0ID9h#M4IzL!deuD9W4{e6=2$afB_QA zR?blMc7Oq%?Y^KVTs@%5sih)?hF_g2(A05a;s#pls^;%(lnY^678a3kd$EHc?-c!(pjO7JW9CNl(`SNI&W90s^I$b>uvQd3j= zcWC`03#B|}rh!0lkW(=Fs0)ROW;Qxt1#}DPW0B>`-B>=rO~v;~A^I9%cT%)irjU6O zm7*BZJ1L8)3H$fYSVusP9}X4hEslPBMD+Ys>5xunO%XtpImQvpn}mp`p>lGSS*$Z2=Tz3fc!TGzUG`UX{8Re*E+)_nOk`;&JP+b z7S+ied)3wuhbxH;fk9L&QiDpwjuQ?m?Qo3eZP!f`HBuJ$Xt%WQUbAj0U+CCgea#%` zEG9!7M_TwfP)fKwmUxB;Oh$Iuv`d5i)5`98@(*v0gCR`co7QU~Ho%>1qdeSj}9R`!giU+sf*GGn|^prNG z+)W42r#{e{Bv94WT077rI zyDLn=a2$%Q?C#K+GkNd@1~z6>#9j9Z5O9=k8f^6P;;ND2*1^;yV<@~zBN7=U)pYh@;e(_g;qbz)XAd~E#ksRXF=#j#Wm5V4`fPFT3bw@?+YMrnjedW^0?gHU}dS}vW^HTs+ezGdv zrAMlfo55ZJHpA-hV&30Yv@#nB%XMUNvA=Z(CLubdmBP6q zGHgd%1IU+YOhq9&l0kM;@s`SunQ5Id4syc`!O%nnQ68Mw8B_yt>G>h4=frU}G&FZj za$>Cyocg`a4cZyv6x^))N;nI->gYc0Oay~MHYpV;DbDSg>#6{;a!41^zVjRIV9$P! zC$)ZkI;LMOVZt;Qg(+<|8rx>XOX#C=KO~@$o@jUq!!VW7;h}bM* zduP5FuCL6x5WvwXmg(4Wt8dSQGpN|9!sK$0Un&Q#j3}E0x{mzy{)4BB;Y!M^IN>Hy z;k2kRySoa!@(0gl+4?3;9>fNfMFQ5&y&Vyx7^)yrjVKXRq&Ec-0To1P(gog%-gnQr4U1k z!SG1rEue)NdD=}wmUQQ9_B+RURyp*5Ac8a>Y)ud!W;}Y_;T!hQ zXK!xD=dp9i8Hp(48bmC3%#{t2EP}>tFPssH6B`d0KUUdBaYDv2bJAt$Ne?%jCy^-C#`y)2uR! z3%G@ovU3VTUFwxenR@2kAG;aU7fluM7ew^T<-;>M4ICw6M$S0}D~=Uz_UCC@NQ84- z5F3ITG#e=gk>m7m(c5vomWJ~4hshdSImtYY71E(Gjf85B!Az8cD-0X($*hJHr}tT2 zEdDq`Emd64+A=)z(RYYhL0*UJugK0}|h(TcexPK1-4U9kHd5hAb(<+PECA39YkGpcQjAq5fxw_;ZiEv$wkSCXBr~E7r%KJ} zNph^lKwb_#q^A=OB42=EXCJDj9NgNJtJ3r$)e@rpM0w>gsfiY^YV zpr77#;lKtIY1l}Xyd~@*-=)2X%Mpe!oh-7zSsit6!5;&YU_R_qthHZE^JAEPz-`ff z9DF_m?P``3QdMT=h&oD}8eI4^ZJ}@%_-Ud*dK7LPkdXC)#OuBzwTn2bR2;^UAGGBj za~!;G5)@l48twwa_HsQ-iL}-AgDDZ+qv3U3?oE#QFTNE@wcCF7?WX2j%w=D2Wdxln zE)A}c$uOKm9y zdGX9>hZq%c`aYO^I!2_RO{3omUbp_b97qFwI_~bwjhT?@rwX%3H94uYKF#MIIU{Bi zIh1JzEqe`VTj`QB6B-)bn~9K@@H!TQDcL_H7k20N<9o1l#P-HbRj~dw#@dkk_iO(o z%R=CS5cs8GYI-`U`{5`DH+uEwd8179UoMu>5gn1Q=!w6lljs?8ZET6cwD&nUed6et zocJVViXZk8!-fbIrWx$KBa?SX=d{F@B3;jjTJET4@OD#M7OimxVV8^UTte>~wMayj zp>S4(5=&516Y)v(ZDGC>yV{NBS3;yilDalaKZ~3ibT6G^^>&9y5)JhdmGIRf`Gr*h z;_$i@4pCbPIZ)*h<0R1=}q$=#U_&HZm#}$ zH%BS;l7lW@kh?;U?LvFbdqKW*Md_g?beR#S$fr(p5@5^R*HT;>OySo%s^2r>Y+>!( zu`#Dl1w~)C`^eq>adbrWIX$&h`U}oni)Ov960RZpTbt3t3{5`qkFw!)b^!|<`cXLI z7PuJu6izt8@o>-HOJtvcHIq zh;5ZEP=%$76P;Tt^sE_Ao_SX6f*tf~y$m=cyl8x?;3!78 zzIZg?u}b-rQc`bGTb{qvYDC#q;8KeOJF7eXoNQ7%y9k5h2FAeKBd%S{gt3w9890*e z4%1an(%ovmVpMD-6z}gS@?j5)krj1;_h69<2Oq zO7L+2;Nj$w-qTjUF=Q?KZ*78Fh$%p*eQ*g!>a=}$C3j93J(ld=Jh8XlF6TDk^O@?l z0M@4MdbKP$nc9$EDqbeyWLMW1SME#S`jGwWve%ix>I84KuU}4ceeR2PA|`9@Rn$&D zd+cT)H18Ym@#(w9^sO#6XCkftUBIjQNyH|PnFufZxWXgnBWy5ZpiP%C*?N z-f;72NrTzVCQ^!}`g z8-vux!yZJk3g(%(xN!!P?5iJz1bP&kY(L5l8&Ag+s!tVkvkT%{Iy49xK*Uc=E*EDz zEqPD!tVU>ozTfs{FNPSTHwpU~MauDI8x!rGC}DPQM_iW7e?G$k-%jL%#A~v+)kU0? zT|?8CWUwfr>DlO``AHzHY>L8NS1d|EG1`dGaBeGw_dI@}6}0{BtF^WD6i695Xcc6x zCI#`x1{FP`9r|styI}TW6vve`n&C+Xs3Bn85eSNKi*ifWKnkC_eTw&Vc=yid;*j%U z#FL)1H$J`$l%F9&B>RKk>zTvFmIj+Q<4YZq&2BU2rYB$;R$@R5uoaM7?72mTbaU_6 z>6{kze4PoeyAZH7u|Gm`EPn7QHm)=besZ@H*RS&f=)I$zk*9^tW>Yu{UNn0Qiyp1_8nzc6i`l_nx$<4M z3d$9F7C$1c-^jVWFfUz_$D-K7Y4=La2KVF^lzV8CaP3ci7TJ64rD@;LRXiI|o4oh$ zd4{@k5HNVpZ{MO-v_Gshcr8ZG9(*q5GTQsJkjZ6HgTS~0HtDZ;C!rKv?5%J~+0Bvb zRkgJ@N+TPXnAKOcJ@f2Ep1+(RU=jG^61Pj8PoR>yYq8bk6LXGpaig!Q8c8K#kLr|r zsOD+JdW0BR81Gy&oa?q`t=2PV>}PDChlS(rRGjrFtY@Q5bw&jWo%@_Eu3nNzn78f> zZn0@_j?GpnfbzU}2z2Nv-;&6iGO;WlCUt|?FRurKq7M=S5m}xpI$krfyBe@XS6M(1 zD~TgeJBAVzwqS5E>5iO^R|=3IYStN@VEwg@uGqT{l6ttw2gRF{2%a?6RomELu!u>^ z0w}>R3??-Xpay&I50}q<>~otCBe?PS>fn5!kbZ>?XM6Y)m4nRvDCw1r+n1eY*iOFK zj>`MF&GZ3+o%SA8a{GzMej1^QV^qS&d?Et1OI?ISM%1!yjn;U&yRUYY=2=(zwB?cQ zE;{M3q`Ag&BUojO(rfN{`=7++YnDfN{wKA$P4`4Q|V$lmZP|~_qgTn>iAI8`!&DU+J$nKmZUQ22cGiqVz+Ak zjjGBej}^O68&#-i;D?|+DQuE2{g`%IhhiC8nW*T9H4iL#D*qa`xd;{B%-iQw6Iood zmc9IiG+RW<9%e+VWJ1N%lKn*as=7a!g@+fTeNc(_1TU_JdiF0?j(k8^WUG1MDZ&^i z1j6wDG&(+|_tXARtk9oGYT`Au+q6@@{Tg5C$A7QLzZ!4~MFy_UkUQ6$k2gIRFG+g! zAq65SZs&DPxNf}`3cEgX_U$9@yZH)kNv8lK`eFWJI_2$`5Y)nTcxNFc#=k`JFHHSw z1ucNcnpzw3vj3XXzt;rZj6lJhd92VEb^m1^e;LW2gA9W0fGF7%APb!a)n+R@H<)}? zW~11qKxI*g7p2vCjp!{!W#v}DgWW&vH++$!u>XE-=Mt0Fk83x8N9NwU?DXr*yejYS znH1ak%mCM^FJKssHQB%F?v6hAVJO=%518}k&`$;A9Z?1c&JO9y{nw5FwN3x_%fngi ztazE$p3TpL2(_%&Z*H(+MZ6eorGDxYFzvrxg(kP2^1ch*_maK7w6rwUD^|RGc(85X z3}|^}8&jA;Qe^cU`*6|~Ub%We(0v2=BrS<=rP4%A+UBK4Y=MGcIvoKTZ$sGOZaJ67!g-v_ z?Bg3NcH6+I+2)k2F}707W};r-_lR(uqHy+syKG9jdFlhA$Gxy)MYv9FkwJet?tgdW zUxU=d<}v?%FTyh7$J|LNr+_iA^WqzJJ)V3RhI94A++N?JUk9gl$U}m z1XW*w1g_mpK*@W~7`Je^xw&~2kb}~gLAj)`@1M(s{@5Ao%w?7ch6;Uj{0ff7+b}$c zs(d$+ik9R!3<5rcXZpw(3L16Ai`r z^Vr9s9s8h+H26hs(@faWG^J`ylm5$)q3ouXXxAcGjH~I$oHFJ;6j89ft7HjX0rqa+ z_|643tmydFwy(;?HMDm@2G$#WW}!JyS~f?+E^!Si#b#ho&vvTK+v#0-;dSdTQ?Uh( zM3j7)5;bSqN=@6hb#;j=t2aktK#`TtBC&*u{ZEt7MpnV4XaM;QwF5@A+R1flik)ENg!Xz}@%Aa2>wPEbns zKpEM3cXODAXEr5+*v>w*c)}n!A@%!n#c-F9oSc#r4VW8LI*OxM_f{$-wiKSpoSR{R z6Ut3dahN;o`P1f)4yANbgh*wI=p+G`uNBsr9fo@5pFt`a8v|LTD>Ch?$g`k+G~%r* z$RM;kcE)w+KF<9r<188YqS7dEHvH@SOsHu5vdwtS{Pp0m3iZ_fZ8ddsUEiuE`TAxm8556AHgN-hE z{^;spiC*Ve?kMTSgO#|iFEOFA;TH7Lwvzv0ihh};LZe$f{3Qv5KqP-RPx(8qna*k3 zkj+ue0~yge^xM1N%!yIgD;3+6#=$woBw7${($ z0*k*;#$OWW*A@O7?H-RYT1wMU%>nze3W2D@kptTS<_}kn`$etA^|MnqcA)_%}hV9fchnRAfkCQhtgUyBOP8*nQv;M!8N5?ARmHE7%!LF{pf6_UiGCn#!-Ub>q zHrhRK?c*u7y!ox=Q!B_a7&_t&k5J45QP(g2z_}Iml%7U_Ft zV^{c$RTnZMAd;%L=hYYUm2|Ga>&4FtDCfv)QHz*bvy;mgDD!3izvs&&NQ%9M;x)}* zN>F%xjpE`!#`oj`(tszMi^I<^7O78iNtTzza>rl(u+dZHl%z^tQ-D80H|aw8)Nc;x z%L>_u|495?BB-Wy1k71Tpa6uSejQkx0Mn>tIEFCH`r!K$ZV8_x6+~g`XNjS&53fvq zh-M4niX(m4Knu(pozY0DMGe`qx&3DY*{_o^|Mo8mkwk$>IpP zebyrx925P)5!wzeR5S#ybM!^OPB)G{Zd30V?Pf^L*O0yil;>Vk*~62AK_k`-HkJD| zX~_}PmLeWYc7KOT|GFR0p(bSL_z4mSV>;&r6IrwiPH>+$2Q!U{TYXdK5Sh(IU|7;m zmEpc82A8Q&XaeO}vMryTo)KVnWR}=yT#2CSoI4)B4yTiFEDIko4cpNMSpxvxSOzThkYC7JV3Z!G9i+AVeM@_%~et*MBW8g0ps2 zwtnOmEL<7LJhr!jwk^kbO^mk zuR$QRKwvHbfA2dpe|>Ase1FYdi^a_?C+F<5&)(1T>=XYFvXZxMP~IRQAh;#<_KgAo z!Idrof{QNKE&^Bj85YBUe;4c(BwrI0c2O+@A1<4`l6gfyP!dXXq<01QeBJh~x;+8G zJ%`i33zNpQE(8Q8nNn|FDYLDFOG+0mo zsUI2~d*hZ@=~Yp$TA(&IRW#~WGI~VYuns3Py;ZI(U->Epe|9}3{ zX7O=6mqT|{ONd-h->{?>tzZkYuC370E$NMZoB4Xgt&-~m1hRB*Km^{N-?7go-4@a` z7E?^>80zM-YH8J#G{GbRT7gdl`ExsUAGk@eYwo|#rA%C7D__YSmKx6^U!x4zKs82f zXuJ!!LU4%;7}2B2fdpsT26Uyb&MneoY&~lA%ii(+lBm&@DO`7Iy#|@!70HiS9Jam^ zeH>q6fC)K4IS=hnEgq=UZJS$OyXo}ghF5{;Du@clt+~&LZIx4%a6hhiLuUV#Fxxw$>~yT%J5JN#T`rum5_yX-BLsJqvT5 zip;26TN~zhPENJxOiM7G@fhd@CJu*%|u)i$xh>J8s}iO zob+vtbF&d>_z)a&@UhJk>G<`D0m%LCC0l{Xv*=Pv0U^6{%DqlZ0No4%c8mn&SYX6jHLK!D0 z>b2j!5u?g`bqD&^w)Np&3d=Df*o$ey!P8^29$S0R6v0h!;MXb&10b9jQaP(WA6ge$c&Y(0cU>ygq&E_d~BrL;EsMs_QCVSWE#~ zhsfU8%mk%L^JV8FnMOU{3NMF(3dp?I1O&ZiZ-ZO^CQF-(GwAe$h^?tzv)*5qnPHeX zg#Vhj?%VsT_TJu#Ah9-&+wPUU2K~utT@TmIZgkyZmtd!&bddecrig5Wrf zt1)Yok6*2RtL-7eGFGs9&m>@Zi)=$k)!nDA_DPP{4v)=#y(iZOs4zs!W@X1`5*lKY z8eK#IZ#~*CX|3Vq{jNHdF{5R*U$7q%=h3go(n)-GyncarM#6K*<%NJKwqk=^=Zjon zey|Kiffhadc1JRF>c!z_!IKaAlLms52gG(x>w;uGLebLJywD1Q1$a4)je9}T zU65&BS7|vm{-jQc@CtGvmX^|o%Np!XaIO*M+h0Q~$%mXPkK0Tt?~5Gv|Fpz;ynDhH z@0{yWwvAv!yQCj!1k%)ZnKtAZYC9byr36qyW^{HslI04vy4{yVX+a&*y(ahF7QXJW zW0!?;w-8@L>&7<8rh68<$9MCT(*IycI7XkHk-Fc90V?_swbl`7&k6d&Kx zw%ftKC;HJXt18m#_@nq<=~rkf1$ghsr#t%Hl>1Vvec2jT)uz2e(92!U*c8>B;tJ<* zl1-(-JW)S+UxI7Ju5%^_u&71Lrm;Y2QJtN9(-c?1@{OnCU2d zHtFdZt&?Ei>byv$;kKqdUcxP%>TYU=>TvTqPVVn?W3`y{+0%r1u~Th5m+Bi`44@_! zI!rF(0=$T41PU9Xt=lNVF7C%7_R6P1wRW(~nG<=TN7^-q)w_|3U95Hd8WHbwj;nrF zRd&CAsN*tM-PhCX<~e!%-l#jt^^o1u5xJCN4j?C7=xIXn+HHdi?JVff;3O(tW1!-V0+$B9-FKzNZ5ukbr1~UP$YRk0k1_gH8YIb8bcl)Es0NW)wxk03%w zrtE9BV~@Kx;(M1@{^SXL$>I9CEx8P*(|9eYiWzDPAGH0 z)#XarNpbR`Q+GpI=_C8#^W&{DR_MR=W!%yi=R+&1|&6lKM8p@8qP`mmhTfo*Nj> zv2mZLhopX4`@DumU3fRxLDZa>5Xut}3&Q$mVx_CrxNh^yCkQEe1*>lNeiL4>laom0 zH~HpLw&E{{_Oug^-nf?5(W_*2^wujJ($w**zHe2wjrHgteT*?+$VG14d1HbY2UAMe z>``=f=zKWiye)A3D`eYqYr$_Q6>`sEh@_~nXc;BCoUEpWbVC}bOV78m+k|sAa%3Y{ zyP>NSCTZ{61?1|kE3b>Z=FwYn%Ch-2+Kou$SD)R1-hR@$MBD?jLM`Z}(qeu|IXj$) zEKl6xiwLpl`(U>0J0r7T#xKeKp`HJbwAN+#1TvM}=u%O>K)xNrRx?pDHUt_<)hjKl zxyjh_tv)rQx7O_hkyM0_+HOAUkft57>JwKmD+6@wZfA0s}$*73- z3c(NmR{#!Nl4K@XbYHCA({}qX<)=D&u=R7XCLg`IuDP?qPFn*SjB!MhV3Ca^j|^k% zF__mZMuy*xv(g9oo~Z0`^z|->c5^U430}8+W`4V{l22&?baJq^-oK_WJG$uQuuUJ^ zQNIxulUF~N#~t&)Fi7a>7QfJ9hZ|=8fdXo!Lb)$V(#sA>S2P^Dv5=ca36;)iNG?MQ zN)U}tmZZ8imNc^}sUHn!4JGsL3Ce*A{Nx6?Iy=CV9((qZ))P_RX4JSAsJg#^uU_|lHzJ5hh(@AZ)T1O$wP z0FwXSI8xSdkSFfEROBsIl>dx(aUfw{wDuq(5q-FxlH_*Wts|;lZ#_}7M}sgw_r6!;Xqh!+WtLdSZFka@tDkKAU z9(N`AKfzQ+F@^{u_E#M|G|KFT~#MQ5Z=c8 zJUlt9-#a!hzhSL;{M#ORxJ^9Hk+##lwEC^9b}^;esjYFv-%V$&x}c+Eysl?-5$*2j z!L&VSaM>_meygC^0NFgqMiKtU-Nk? z%iJKYB9TU=_TYRoFSFW1# zZ~wmCzWEu>?b801_*ThS&h?nolkyL=9x9UsR=?zfm%XV%=&meX=sjq2CX2Qxkqf8z%>^ zg=um}T;2)>8$91UdX1CUI4+aa&Iw<*uk8|-ky(_ANLy*=T?%c@h*ams?hxs<2{s-0yltv{QK~|S)X+vlN>CSn=YBJBXPkcMYhzJXu}cJ0cY)m1hm z%kQV_%$4<;d5cwju5TZfH&R`>dC+ePm_6qjVl6N-pLcGlBynw=>_F|46i}(8B2^ea z_E*I9uFF7Jws~eA)Yt*He@b2e8%rM^gBMP;Q#|MV*31G|Faj zUR4V+?D5qNryh5EggtjZY2on=CGxI<(o|?b#ySEyCB@u$k-YDX*#L^kZizAG-m-YDS}}iY3+U(EWRMxWK7{ zW#oo+?j}XiD>3f8l!Fab`o$#4MlZ9}lb=bR%fiGRCDM5*NAr0Lop+qg0V1a1*(D4I zpuS2Orj1eMODS5-;ly>Fy@->@EB|D>2bLp@-RmD<5W@L5Zdy2<7;;fZI6ZO z8)h@>q9<8*o2lU)WsA$|flsv{ZArhTQ1!>G`hz0&trP5pJiF3;jo=i>l4|B||Hi=q zwXe02AkbGWv|`yD=&F*4@plY@Mn|v4lfd+@cM>az4IEq;_f#3B+!Ls7)a@EsXDc-b-1)|$$8qI z`}4z4)M|E=$kIV=k%>Al?x>e&ojZ`m_1P}dK1^jP^k>}|=Fv?8+k2)7l?JW1?XDBN z)V#dvobSHA?7LCD(@tc(%2sRk2igr{&JER?D6Gar`<~3}Z-2S!)%a1eEK3|Vbr8zZ zjWVG*{>@k4u&<5#Ld&|04doRo=AHGJjuyLYO1}^csoC~j+9F0| zAFM^(@;$1h!C(r%U@N>l_iI~lT!%A>G%na=tEQ0JndOLKet@;x+-v1MPOCd)yf^+g z-?MY=Vd`WLW#S5|GjO2Db@`8=!D2HFSsJ!Kd!zncBWO|EaWS%pVoziBnt;8X{mf|8I=tN>&bQ&}Li|JnIphPN1B7a!QIqbZ)bNa& z>Z4>6+7}yavphx1yQscHE`y+cYi?`rO~;)%mW>!^uhe>%9^%ENy+6IyFKrs69I?=G z-1hn(=+!*l`=YpMc&FUrI7{Q<-&D~8($sGGor919t^NZd4X@*akCNL>T&uB1FB=z@ zbhxy*RqOgU#oac8iD-}4BW_Jtd)lNZ+}@j*nDs$zJ5T9ZH@bd29I{`O{4+{M>?wJX z0IMun^EmJ%4+bkO{apu$uQe8Gkg4%he2%ZzA)~40N!v3?m#Z=eRY%Yk)vi}3xHcZ` zFUIy4Tp^JC65{an${RqR{Sh{+bJ&&09kCtrlc-G{i0@B;BuPL($ThW( zsZzalu$%93Jb9>H*j9rZ+M``%&>-+OIMpHv2yPlP$9nFCC{;`>Ue)jU{?*BD~80gmjO#%A1sutoXK8%ilZnjT*&EEcPxL{XmPr5h5vB!^xKiu0sZp0+~lAUt{T+ zCo5@ntq=}vqL|4jZ!%CBTX{KI$HeK^gT)xm4=TI4M9%uK8f(f1qIId0e3>S&c0 zKjLBIEAzOFf3nAh&|pBJ6r0!8>pvzev6aufOlQHLW7wO1Z_n{-GYJ3Ccb!{5a}cYW zEfO4s9M)~MwPP8%bIwFJ12et`1{ONC8lMUL*w#mufvZ|77_}0MKQkeSS1ItofEcF~ zz9^Fs1960cUhnL7D8KdQfjbBUD!GJj+SdH7l$4aLYzQ@#HZVYP=SO|Kv=IXIELa{f zlw_d%?dzu4XZLR)B=Ap9E9t|>44}Ur4#)?F7rZ4R^Xh&tg9(V{HhDm8e7M23QZ$( ztYPLtX(q2GqGb=TIvTHM474Mc*0_;ldNxj+p)LEPQ}-qyApbzPckwa) z)ccb^0IN@rN7jB|{0YI#xBqwP|5@VyU!RZ|d{F>{J!4^E;o&HbVg(nUdU6rVvzk$> zo3-0@T1w>u1|dYGY}#tNx9Qtz^Os6yh9A_hsh&A>vox>@!=R+yrL6&jNk$B;kcG!P zaZxUS?gGBVNoU^D z6G~_~Fte%DD#3x?v~DXq^t-|W1QY3ukk{mjZRuBP(&5aG=Zn#LY3-%qi&jTRv&ESN zo$}%Go{DnQri~85+OxKBM$?rD&_QzVwLQ1>Hvh@3L5+QvUUyZ?bS~W7%Fp!HMQ1kC zLPBQG= zIDFdF!C;2l@L=0#`Y%n!6-m!K)0&qh6$-v*`4N&%|3oGJcLLkBU7nUoT25lY zxMaJBU{qLd+m-Cw|N7bM=|wDTCquEm>c7Hd$&Wa%``ZQyt!vqE39e%-KRP3GVHhkXTq;1nZo!x&UGd+}f!3UsVNX+~h;)Z_e+$mNr!b=nz5n&9 z;cl~VxqM)orkJ5h!}P$Z391C~8W*D{sra zj$K8AVPIMM|Fl{*RUlZfh!SJ4CwUCqU_QTrQGY~b;k0V4LqG7uo+KTsqMXTrX7)Ls zJ(01ohOgUyoFF_#EU6F#;l3xO9ehc_AMFWsBE|Zce-&tO<0C}^IM+6 z0&PP2a+;AN6hq?_l-U>m-OQ?~mq&&>pLXa_82*)8Crryv_WHlU$jBU;f7e#7AWyt= zy&|7Zfct!kdw3Ui#jf-4bN^Xl&l7a=$>KsYe?A{$1INRnAQ@4JRA88CWF$2<&xZX_ zIF<6;6PGS2N3MV&V+lMDjIlsHjyuBT@oHAWD$?ohk}E+R>4Z!wECuJl!V|r zvH57ABBxskE{yqCj(P8k+(9ParXGp^dJ|LCob~%xa(ysZ!0L4~WqR6aF$p-lMV{w@ zAtNM1QQ`X0Mjof3;=;Mn>ND9d0ujsEyqg{r9j&1O1{+*mH&mxg&QI<3?Ea61Ajs9g z90`jt8aORvZ(?twdU5h9&A#1Q6^UwqX9GMQ7W1F)n%pWkp+}d~q{px~>?>$mk5$&^ z=8hyShv_Lbm0yNh={eC+&iu1OK>~xvm9WRs&$3eY>i} zsQ-1-h>$+stb_-itgJfpg10q5y&cKY`Rb~wn+@6Eom;N|rYfe|JEs*Trcp_iZ^+Ef z9vVEF$;ax?Bb<`Pg$_I8YXmQg)-2?INhprfxXoBk*3t9y8N{OH1E+b8l|hHX#E$>k zdMB9}-BC_MS>X@@KJq-7tVfmjI4w}7gLU3OInZJM>|QkRV)+Vl0Bf-IhTT}xhD{!9 zl$mfb)hmTxQNFicOZwYp(LhdlQS{H4w4n3p(B{YkOJu7>i$P|bUYJ)eBplrK)wDzy^u4=A7M!ZuDF-67mV4*H)7SpFh8V%w?20d5zNM@* zlM5t4uZb=Eg5t86@7$tDlrVTp86+>=wo;VwnTtqYGU7kXZn>lEkckoBmaR()gRnV8 zbjI*)vw*RZ&N6k>%txb)%uN5LGM;NGvAb3=HsO6%`dr z{X0Dm$KMf=v0KW?zVn3Z$~&HNN`pUoWZ1UJ)qsFP^m2Q{-vjrBKEcxt{>aUO$v@+H zrexh7-I7JAxbEH%Q;P;O5yGdA*DZ?bN0V4V6Z?TWLd=B3qDQmwTqbdmSwod?Q6g>8 ztR5_)JU$n?tl`-i8O^tE7d_FU2*R^YYUOADkl>7ZcVA!My@&YRD$9|&p&~k#JCt^` z{ufUbD_hq&qeye1teGOb(PfyP*l$}3!hrmY9d6v9e zx9p#Z*6<1Qpsah-ry7s34+GL!HB?yH49X%f>?a?GfaSTEWWU?(rF}n#}( z;hs*E$m85YV+ry)fxhUbkvs%=_m$wC?OJirXBL3R3~#vR{KJuNg*qVz zQs$rOn-~(gsCjJINMfzwEZh~Vq&*Ra72xdm@vMaN^AlqghUDwu+xt*DWiFHFQU5T_ zQyPN{y#U1cB9q7yh&(z%184(?hy@yOGjQx%1Zq-y$l?nhx&A-El@GvK_{t|g!GgnG zF%$~b+1aUYJC{RGe$#5I;a3ueqvdNQB#@{4&I98wnAwK^sz?S5p(*^7ip{*ObG@1i z{X82{xMUIDkty}xT29z~@sw-5Cr2E3!GXcpNalq}4F#8RP=Bt?;<%WJropYdfRXN< z8_9Q`qmuSrahuuo37uDo^3vAUg{;mtv14@X?2?*5hzEe(GK%x*KftF3;Mfx1sPcWB zm7p{Fp3l*drhS$qKR;xk)M5y&``oZAt^*bm2BZEf*-3Ge;$OyikIJYaEyIH_Oug@y zy1JBy6>%RwX8B9Y^tZR`2W!2jPPVJhr=$G%FaO2E`Sq>)-Irv$jpa1eW45q!IEq%!r>?RkSfbAIb0rfKtv~3~$7wPQ*dzgCVkJ ziJ=Fe7vJasnXs%oq!Vw9=O5zpd=1sxmnbWgl$2mFPvs4_nS@hsMp6sHJ~xH&KN)_& z4|?ULho(2Dc#UN@56}4gHSm_WYU?xbjRv^O=HA;giSSY~06nAim1}mJC+ey@s4yS1 z7jN_P^Uo;smjj_Afr}yb?)*Thx9PRz?(;y(_s?syUIV0139$DWI0zqymf(7F3=x9>TA`@mOZHb+ zC+UnA;ozmaCt!1sZ}TxKovhL&m^gs$`$;N57IB;-#joZ3YCht}5!x7vyWeB-#Z#y9RiTRewX2S+?~;7Vy4ct59(n+VH*M z;Rj=IEJ_SW@r7Eoz}Q8Hl9pL~e~IY*bm3rP7ga+&t_p(1R2DOcl=J(%DggShceG0M z)W)v&^KEg2cAJM5UH!RF#8h{dg^g6ejQSZo5>5UL12MP*lnS?8rmQG;{<7Ie;r#a0 z!%ZU&UD5=dzT4}lDmgeV0vp>;?LaE0$hxsq>211gENmVQIQAZS9{4hs`Q{-GKv#)e zuUoHfm3}jQyVRW{Zrce6+@cvz&LpRswm|rMo=x90Sioohi> zLxgd3?!NEwRuaHx(o&%@)~A&S)^r_wuGjs+={Dn}A)H}08Uun1d=vumU|S?3Ka~^5 z5>>@DiWYzxz`)r@Ucqw^@14vwl%iXzd~|?SDZIg}RBTIUWq0fFGc%5VvlrRA6ce#loblAbwcc{KIho_hl#mb&KYxG6t3~cNP#`exdsm3Sz=ZY3 zf#7j8N6Li64+UG}PbOw}|23iMCO6KO=SxXRxw5j-JiQO7M{KbyAdt*W0ZC9PYq0Df zk;d>B(`$eih(Ft(oOun8uVB^W8;d(Hpy_^B;5O6AOL3^GEu(9t{2h z5J_VbImIY8qQDS!YirihkPC{)%;JMj?NkS z9zU*+fyKNk)FHd`AZen2OS;WGh8XW$gpXt*&4WKiSm*gxTJ{3dz-7|){HmQ^r3EvK z;OUZ9z;M6O-gTpyI|~m$nQg+XBFtGGsGpfR?d_ih#>lQyg+Ok+qnz!QIuF1yN#SGB z2?^$1&0i@hUT|}})>kY9O>-)wcz|Fd$z(oC=c&gfh7_dsL1_(j_=n9UfA~o?QPC4K ze7|n;Ev(R`ja^Ld>r=3!Xq5nEB_&bWe~`DcMK0ci!o-8$If4Kz)r_^jAm8*85lYtL zM>sy%Ncrh0Wsy97|C!69FTmt5DK1n7Hn( z-tU7&_2A~%wxe_eHK{_++4RH-NkB;fZ4$ZgrE46(G{am>+W9K08B*%{AG9ZPVf6gF zy%uBAme0v|bOzFkD8O&XG*7?xhj+G_u#ITBk#u}j`PjNK>ph+7YAhZlo39tBpNcE* zO~zjp>5R>^oR$1;8txRB51R%g#t+h)1KNObM;x1Tp`$-Z8JG2Q^3f7#JKiI2{Vko^ z)*Vc>vfE(8uss8)J~f`QJbw;k>dVe6O%kC0ip*W7Lg2t-2X!&SaRQx3qol@U=}jr9Nm?dSTRi=DN&3D1mf*yWSK8W1K%#F6ez@u&fB^Phjwjs} zuzo3t^?8+@IyQ5L4W?1#)e;i0ifw^3kOr`TN?BX$8Lh9D6$4J#Cv;!4#j_g_jtSY- z`^#Z4SbqLK?>>G`bwBJQt{z^}v)bir-QkKbP>jI*xFo9H=qaW$*gSP|3@^!bIh>`{ z!6J2z8IW5VHXu8`wS~Ep16?l-wM6d0&0yfSGdBqvfcib`Oom`y_ZFpmP6>5D`{$V@ zRO3E)dN$_Ma2lDcDuZSWqGM?Rr4;@7jWTjt{7fk0%LJ_TrAtuQW~@^9{tf?EjS?X0 zTh7S#+fFTx6v=iL9^t#f-#LDta~@f;eb^H30FR?` z8m?6E`!t=)>$dN>_OO89z?2M`NsyN|H#axV8cSMc1VUr8k+^s^EM~W>3J?(~lg@E- zc6oxaaIdZNGqbxqHiLjn5EpJkvzrRIx?Q!6j)$URB!6W1y|HU;NY8E`k~4rlJupx7 zM&q+Q$M3a)oXoVew8BE!n^;FcD<9ubA1-IEG?Y5kb1*+i1!iw6Y)-6I12IdSzGU;y zeOApnpf-*NiPMI#9HRQVE=IyBVMfOp+eH3@RxXHAVdSgnUw@kcg<@MfMk1n&kz~eZ4tjhI$ooRZsq$T=SmJ0N zV8LVF)|HaQRC2ol*M8Fh2uz|mxlpdcYQcMivB!Dlo2(i$pt?f)LZG3v@}&}^lwmr2 zKN!`6dm%hr>$(~DZhWn@o?swk{0`{lL117k0BGr?h%K2ads!RPl=HtLB)+DLdIh;M z0G~t;kihZ5)cXk@;@D6lquP-M7JhyAKu*y1ma&G0>ppMs`H@X-(?)Qp*d+$U5AMb< ze*)R4mEC#%WH>G7!-{M8Sc(I&Sfu~bBl8K#5r58`x{FnN`C=cVGcc3l|JqN9@D)JV2B zIN-GJWQv~-*X%V5>jC)n)II0%XhID;`wj&Kxb6C0WaUjx97V;o!UOS=bzcXM4s{_U zjmBJkm-|&BE$P79u~Ah;q>EJ62GFj=$0Y~&GU4_d!Ow@fcH=-K`%kR(1s%zSK9_1H`R}YxK z)%Nd-CGuGDTy=G2%wa5K=7qbNjQ6e|3ilTp^(?pM0P3WCZ(revpIcq+Xg{(l!_dnA z#o=0rz8(O$y~D?+qkbtgfEg!I)e$y?k1@)$bDGEo^+F}H0Wt8Ec_%_6nTLEI<#E?zjtW9}{v#NDkC-qtGmotTuD$0h?RJaIfH%{4f#hq$0 zs4y6?@a`MR^aG)_v~)(BVqSe$tv8_z&<10gb@z4x$!cOB2&=5c*V}IHK~Tw+z&;jI zsbpC;^>W>C_}@(+LvnL!k*m_``9h&b+tBR;_p}d8XJ~?aPJ5CGb(neGtdAGtCkFS# zeLFey@}mDQ@sRPo*>aZ7(M+uV-^f&<4HN!x=Zs$qruSV_tJ|d-v|$ z+Vo#QbOZ2ThXYiD&cBve&-b`H^XvK;;c~LhV3IOs|LBQ0GvHw5<>k%zMCkpB4JLJR zp#C8;!@h-?%m_hx2e(t?<+g)rM3x>6H8w=W#hJ>cJpU&#P8}`COdap?BEEBc2Wdl3 z+Pu(8tIKGgdN;cndPZ8|RRKBx|8YN4*S~s&x>{<(VE|E8JI@AbLaI(oj)g<+qNLV!Y=3e7T0l)p{3D?C&^hnuW2Uqug z~ zzE9n^G1r0%>MG8qc2Qe*Sx(ffqiek$5sDsfUQz`#a(>s(56Dhtc^h4|Z)!u9i49r| z1Dg6|3M`zjt_2*K9aPZa+@^?10zjKe_T0V z#v)#1emxg#pfQlt^kc|NURr8XA$0E9TDf;lP7i%FtNI|n2R@@uU+#a=X2IIFtS0=_ zawNTo1_)K19YSWEj0|!qh7~Kza_Z`==523-zrI?y)$+Zku^xP*aATYXA$)><4L?P( zc&h$G>cdz%EJ4H;ewE_0I*QXkqQTWgL9JjgSCKIgsCKZL+dZrYUoMj4zDmB2$Dtb~ zAmll><>NS2J|zeGdU`%+XfP5o+UChzJ1de?j$ZNH=t8Jgv~LhcmcfK zyGI;B>bTsgP+C5W%IrEruq2%ZtS$0}W)2_ojSc&=)SxkSb&*sRbLZs9Kr)(tmUHXT zX<5-nLUh+$J!9{OaMe_4@lsw_tHW=6BT1JRWV_KX@>ml|`c6qAkO!@;^EuYrA|kmu zsZLeoO8}T7J=<5s%C@FxUoOWM`^A9uaWsskWnalTmLYzPp z%-Hn-jRSzuh5?et>hJ+R<$9+TG$?!Q_DgUuC51b*R9)t{_Vx9Uwwn(O#yjOc`}vA9 zg-P;z(Sx=ptAifg*5g%xn>f!D&l2j0K5^aU^R>G{nEu~zR0fpM+SpB5T3kF6w&KWk za8SL_(H0#EW!E1qGYOsAAoIB^3sfs=`zf4@m!|MRH=iT0(3Ij(2#-Q#p8+LiR%wcL z`9MIhi{rQd#?MzRfJMYv_%+KoQdsx_GIa6Md9+rLTYI_4>=~q8b?SoNk!|CiOi#q+ zNAVRoK=0AS>pcr|oB-1;Emf-}RfSEyYOxsqc+(w6RuOgoTsNZ*xS^%c7Gad!Plk78 z*$i`o3-YZ%ttQ_*UIh2lW_z3t1nQh`zvB}Sz?N(`_7iOHt>s7f=~(L}pqIHjTQXHG zPH8ReqKzM%rLPQA%Rs`P3FHozqUFvuj`sGag)QPJAa4_C2&nMH9|{v$zJ9@Un!G7D z0)lJ!I$q$v8CQ@6*bgiTjR7q@Vz+q->>`MlmsV6%)Y3{OuNw8CE9x~RyrhXIJ)!JT z|GV?GS`Iv}3Pv-2rl=TR-<68QSV6A(0do)Nz%!h^4A~4zMN<~bL4xEMgQ6I52(hM} zYfpNS0Bt`Ve(1KZfkhl9-xg3%&y0=%8AD^-)vawJ1qlFQ6;&rZKR>?^RQ=7btIFr~ z$?lmHt2_Oi?2h9LKr|V1LXXoE9voaU-3gnvZH8HPz(|`k#mbA6PyKYd?R*dCt?#dy z@q?Wyq$l^-f?m>p&fDsGobiT3t;~4B>!=l~{};gRGeKO&%Z#_kyM?wB;gjG6+uY4t|5>GGFe?M*LMPVRSm%zQh=nZE%>jJFJf+1y~)Q-RJ&Xvg(^mcohPu zk5*9uFua9j9}G~}zrdmgAY-2x?p@Q*uUAUWv7&5nuOg3dZ-j2YV3+x6FrFmg6&00h zgm}k4*ZT}0wo6=qykzE3nsUb#sLB3V#Vfa~Z0_zQ#kNkC#V&fE;NNP_h=`Of8Z%x3 zF+JR+PW$loCLut+kRO3fpX5=|2p+oj=R9mesEodQ%LIh;yQcLnbPEDu!b#VP+ral+<;6Hl67^hUie<8IrZhY=F6u8Kqw~wJRx&>ZCA_pv^NBN z{^ki7-Nyg~WLzow%<}A+vU1Ulw(ig?6n1wZi$tLNA;F@--2%jb+Uj}4$MIZnHbl0v zy;Ni)lM78S7z$+72KWcC5>U$!#G~iwjMLRUx&Y|yK;`)t6_scw?X~)%*z&la7CaW8 zKCDge15RP#*O3F%{-KeNdC~4F9)`(HL z#pacC{DzV5r|TE5YKHFoT>nyemNrPTvn=Gs0r_xY!I&dXM0hGL#HZ(~#S5>OH>29F zHfI{;A0MOIg?q6QxRqHhqjtkQ<;HoSUKzA&^Z}sY#XzHJ=Odikez9y}Wf>sEDOGfp zLmK=gq|+lrmFXUfnba+?#6IXrwpz>nQ>d$z%YiC3arOyvtK3Wx0jS16sQkqJ=8{Sy zumN)%N1m*XpH0R{byOb^3{LgwlCkwj2BUbcR%T2uxO0*0l2N-SziTFswu(wYm5_F}?mtWmh23=ACQU>7nx2tAKAO6IL`XATR%_3Td zm#Y=!G(8T}mixDj?8oM2@5}p~s4-8rx6vVUR4kf0BS5d>Z7Yp}8os?1oDPh#=Is(> z1K8uhJ^wd&TFi#8kX}*|RXHy_e_XdvMybhZ3a9)%&j_0<{tvPHdBDmfbRFh1`pJ)V z*%FTlQfZ@nFl#H6Fq;5mLnEX4nLbT1rPaWSL&VE|z!6DXu+vUr=d*rY!62&qT71jJ z^v*1r8wWuaQq0OGuK`s+jB z&@~<1P(9te)bT<%Zn(iik|`rLzM0Ovw_JDg#-@s_pV~NR@Uuq8a#s{H*)xL#diBN& zY4fWcZ3f0{kM04RrkXR6rov*%$RFqXHpvrCD_YgKo`p`0j$gAj1NV+U+Lt>uk}uJN zW@X_)afV&aSwYDlMtXG#ct8o@O(@={0>-l0TwMJi!Uqo|2K38Q%q#=Hb=-=19)w&ROL!c7_WCYM7VL;jnaZX(PTf-1X) z_&9bcPtk2ob@j+@Z+|O1!>qM>bsGprMh1~4 zWm97PAtG=6GS!!R!@AXv0m-7!5g2~b!LOHOGTELV5q8|er3k%#lVc}h`X!yAd#fmHQ{>|O! zhyTqMkhxn8)-XapbBFJ%E2G-mt!8Yom{}lJxzCc|g1KSu%`3X9y5d#~e>b^XxyLHrJPx-StE>$IK)40N%HGE&dy~yMob!Eg z-|x>a-}4V}u5-Pv>+yW7mx>IaDr;-^vhD7<9;}ChGwpL~9Z>X-s2Ph+bUVnPOFlO1 zms2rA`&~20yKUj*2#vu7vkVXe$eh_&`|+0uOdT-yg#$Vc>NkHrFt$dxgGf{W$aHmv z2MLS~@?66GKe?cp?58@!!* zm=cb%EM-Ykd!o-Pz#muVu}wxQ3tZD@ej=G`VW#}g|D)mq7$feWGtV8sE^cmauH`At z%&zK&ZgFCo`Fz(kTSfJ4j6nJ1>d?s)k7VZPs2@KjP2!bcTsemwDq+BHm1as?ztqP5JvN9 zcQ^Q7`~3!h3ZK9HSMZ?M%ujskHMb_u3S4dbt0!fJIaI#1r}(xgPHEC$$wkVxd=W;+=s z<7d~FKkp%pJcZlFmYSSNY!O2Xa+nm3iuC5Bje>I-Q{auKXBIHt0h6ux|GrLOJ{S)< z7#2L#VBgKT+yoPe4&_2w4Vy9sA0uI*@;at(Uor=YZH#K9)89Ddzxf ztoMrh*nxg2xBjwz>*^Pf-C~NZZ-&Ga7e%1&ug_%WfT?;*)Loyd9zebP|NC=_s#GRo?r%OjU@huCz0JHC(9K zRQKJ)Kj`Ts8USPH3;ITBJft=z#0reqNJ!wW73JoZ=x0{Qon`p~Hbs*E-1(*}=aNPO zv?H8F8yJs6BOch1fll;-*Al`UDhH!HkrL2dc_v-7?|o7-mpKmbNPM&uGMQgdR4}%O z#ekQM(?B7tBJ^*Fv+W{j`>O!lBQY^WL()%aMs@BrT7b|6+(!Q;GJf;{w;GT(amp!! zY87%h8XM14vJNmByiAP^{$TaCU~|BryPaaY@>HsDm8>TVJi_@~5fT?;4^Flpk$J1{ zB>NmD#C6qb&5ABVqS*b%UG6DIwL>uA6)r0a4t)a{y8mVG`2Tk(QMgXb3n*NpF6VNz zvs(j1cbprB&S#Gevl_y#-^<|0z;aXMRpLjJ1eL%t`@!t-oWy9w*QOh|Lgh&E4}9GW zFA{{?<|veOq!`IqwOl8G!+;qudd0-)0#+J2)ePV{{x1MQ|L~1!zDPa<817$204PTR z1h|gYM-Grndx6qZ_el|ver=0Y3DMaI+r1k^N%KG7sGq3g0wg>w6RexIeFfmIPQNN3-&tQ;BMUg? z+=qbDPT(Uem&|8Qld&>EDIzB3jX|4FjsONZF&SYMi2dDAL|~W@m+E#^gV__7TJcrJ z9FF#+XZb?Ze7EBWwlL4vCNY+p*@m{o52A)_-wppfnHCzky*a7@*u!Y&TQDPE6PyOf zdjNl2q3yX;(Ng=Rc&?3(C3~_%$|R}0(sLe&mi-{AKxRr2Y5X!W2y*AZO_h)_8RFs0)! zp8beX-I^MJtA&nZi((moAr{z70WTQPF}$F|t|v(-T~n~;|GCyLmO$L?d|u!#6MhU9 zU_w6%Hdmm+(D>|;aGS?ebUAnCU6ZUo&M5LVdO8Fg27}Z+cRrEWoozWOQXA?6Cr^^` zX!_Q^oD}(z{kD}&n>1gBQAk6;SAY>Q=LblRg2t#DJsY{&&UI}{DIy$}7Zih2uuv6i z$E)&=vI>Bu%C#D=$P1=|S-HIN0(UCn^2sEmOdIo6z@33ba8eOWM#q<)0Cy1p3Ls-0lM2YgN6C|Iy#QD^Q(jSK5DUw1z+yMYpjPi+uGYRy1{7= z-#}=KX+Akuf<416pqgfJEGOY(<|RV)o9`iTwT^Z+kVQEt!=Od{bc{4_+goJ$oL=AE zb@|tb@tj}W``>Z2PusVEQFMIFIvWDOXKigt766Kc@kFTI{QQ!2RZ44N=-b)&Cnn01 zjH1+v1`w&}n4i@E`O<>GBPDTNgyoKN!Q3zp&n?F2)B zk2%}oKJCnIW|SD|xCb5MN~IRO?bK0Ui4*wuw=-8|DWiKM$2%wHo2Kc{z1y#;Qt((MnKCF5ieU>5b@}^Bk^a|es>zn zNVwbNu92(YcQj_`IJCN=qf&Cf@0&STY&oLM1et=;#i*$acnq>u&`U|B<2^`CydT!P z)YEhMtlz*7FEel*Vr7VXMu0QD+@`m7qbE>iqMx&Kz`|AWk?>6khV#sT=TY6#UC>)v znabyYjK=~Cx;OxG9!2zLHz()6IZq?4Cq7zUUS=3!R+S_7{l3iWqS@^1o0BD51ixA# zDj+Vi(^0*^`->rHIYh<30{t-8U+$-%Pr8+TKvFRrPJ`Qrxt1Mu6%_*8TuAevry9vQ zjP5I5WM`@X>jJ(ef#go@$vsw+`f7tgy0cfx7ye1pN0NVZNm`d)BtUgs6K&GsG*teE zaX?T^RM~-1*&y)N#7}_HJz?*N*b!k=Vb-Z0$!O9 zx$?4Ce)O4@BhrW(?hl`AmCrBF4v;P-MxaF0?={p?C3&3T-1S3X;l$J7~YXgqUT@TRr zRO>qXd`ltst5KQiXPu`SzW9YbD!!1Bfiwys78`x5MEaPw8#sH{$NDyUg8SWizf$9r zXQc}-A)<)1lFhV|<8;xGKlR@E?uRS0KQM4t=Hh>*tT2WXTqBz~@oD^z~t6 z-?hXR0|^17Q&Uw}4RC>2{X8)LQx*sxgF0zsy$nz+E22SDR}ZQ1i+9t z1Daq5xw&z`hSfd=z>mEhbX4d&Tse?b zTD=!rN->s}!#+#vYaknwn8@~|3O*z77~F_gO40boQiWgkF@yEp~Et7EmdOOf7rY_R0ae~XNDlTmj_-F5rD5I zI^-NS-*O}`T5Dyrn7IxfAEZC=PZimE`g~USQqo06#X7$X8l95z>H^~mb5U}YEYKEd z!yV1**xPuaW7N~761niIXUfjqYVjGVLvU+`Zf9-oGJz6ol18?%IfDf|FOmkANm(bI z2t+c;y{i&P#?eWJ=e(P#lR@d!sl|6;w-|y!nM@|;ul(S$_CKyvmz*A-BTxl^-?Wp! zt))5fpT774a8MPWnGU1^o+2pp**ohO5*PjaFwa__I%m#NeLDEbmmXyt#m1G*6Yav= zbdU<0rCsOnl}R^d5OXXX%-hy5LKg|P7th!qdP~=w!|EURv7>ZnUMS-MLFH-xwuHP9 zRdvCm8lRlPgJCKYz0Cu7-lg|HyX>z>c0u!|F+za-Y)2yl@n@j1MH%v>JDS-`uW^9b zQ1f%acX6CD7v*)r+Tv^=4SU&bw93E$zWGULEJ9TfRWd zrRz`u^h+ZhQ6jS+S&D6a!ZG>w(>nv|F>OXeHqs255r&|xtom>yB^NAPgtnpTJ_J=e7+B|;H(D@@;%_y9r2nmd9J)$ zbON_fV})0}@oa?vd+L-*@Egh{$o3`u47!Mbk`}~DjyI#CuDKV=ye?-GQG(w(*9A?T&>cg?<()DkCg^i2AX-6zaCyaxrHXMDm#f_TUac{nvD13Ho?ylpEHvZYp!dl8YMkF zewc&qo=aUJQeEP&07UAThj@%Jik{gMpj?U??Yi9sN=%;0s+D-Nd5>Jv32B<`$StSh z6IGLNrdnuz=KXJmuF9&+L-~+d*7w2fS&t>j%+ZfKCo#v#6lo7%SCA95C=D zJFDM2j}P%bDw^!4(?OF+HaPBXQ3am+ZH%6b45|~?dL*|?^mu=ouB_(xpLM|fPkPG> z0oNhvhl#^4sRm<8A|jV=N!`oH=ivBRR>Z4A5*6n$nk&DzP3do5k*Lky7PhAi_C+1I z34l^Zvt*OI2NLHy=0ts_u+ybh9rFJ&;%@2{#(Y()c3FVRyqQ+vx6q;OYj(E{-@fa;}{=UW$#!D`+$E>&dJ zw`wEbtB=H(FtBJ2#Lg~@^9?VnM}53%Z80UbCBrG>xe zu7=lD+f&F*=t+1-{kshnPIWN($}{sdxINvL#q;H?v2JkgegSkBMaU2a@mqMYz^3B- zwGh6BeH_Z)OG{0-y_mSWx7hRJrit*$N1Qt?u$hapFGrj zF?)jVcSN>$SC(uPd#`FOIMPcE@ZSMb0$Ugo2|OqoVB$_D>H%W`>cM~yK`HNEGV^c+ zbkH(GRmCE#Gy=`;sW1EXzkk&Fp!oUy!p)i5%B%(m^RyqnC|L#awC-@cAk}+oWWF_w zb{@zl-j(_bca5ryP#IC59;El&D(7^D0())aQ&E8T2?g-Z&P>E)Dl6`> zlm^krHiN6eR$I%0smS1x={F6L_Q@6*q2XHSptZp7-d>U7)hG3*sD59s?ysBmr|6yo z{IIXN59HSvi5akh31l|hQG}yUs4#1ci+OESG$?1qo9c_MPZ97NFGWZ^&}@`7^zx0I zb{mpUI?so`f01Dc@4Fi+`o?F>c)+EgWgyVRS|N<_061~nCLCs>tZIsiHmiCG9-TIg z$??TpymMj)%Q~Wt6L&>>uUxuyBPCle#uQcnbHpb8J{+YMTbp7wp301{%-dutAF1?x z9Kem(-=jwLaa{|&A|cSLai3K3C9SH4Z<95q#47ZhJID|7V%(1ox1DPyJLmn8cKd3z zc5m$dYK^*3{rf||I2Al=7j1l3ZZiy{4hI#(`h$ zqJD>8JjUx|m_t7eB*r z+)PfEt-+nZ;JVpnI5034CT2{WbnUgau5EcI+dh&?B&2CLc#+}!8f$H}2Nfa+N6&%L zKNDKo9jeIrxgdWZ|RIqjWP?Hf$;ths4Yezp`t!V-jjZsTXTKf;-X&{s&sCf%} ztszud1CTVkox$#Bh(Mh}F*S*(^NNQ%56QLXqVf^Z7j-AMF0*Q{89})tX|DWWcbgLWj%r>zjUFF$iS!41j=#t*jci*FX=1hK_kHB@@5g3W$5l(Hmzmm&L(H7x< z`XeKP;B9W6o()Z{KRa5RHKDCO3}MHT3-(&t!sVd zEw$`Vy13#-LR4}%Rxd9E3l)O#2oV?aTQjHVB~W(F`L>v$0HFKkvj3OQGw` z$zlRUVzH51=o-A1fH^8^0j@lhO-88~C_4;Bfaw0F= zU!vEu3kA||yqkg-ibMbEE8$`Rx#7QSb1U~S4H?qC8e+x~OvOsL09iHu;(L8G?Ow=v zdx2bCj7a2E)Ua8yw1FDs*Mz&t4eHct^#4o$Y#AW|%8c}5 ze!$<5g2Z)E)F@$kyLlE^)#p{YS(_dzzfxJw)O|kMMKiXxSbHKWnTshgERHm z>+&e-pzesj*%((T7ut&BDY8|x^QdtNIt&G(5o)@(JTZ|m{rU#nhWw{QlE zwf|mn6*9$+)5fg4p0j~3Ok}OI@mX<%K2HxaK$69_5$}_NqAxc{;Lj*pQon!gEU{C` zMRRx;u6l#mJUX!{xQR-N=w|pdp3}~aIxD~#@+PR8H3E1&%T+4$^N&~rJ?$q^UuN34 zpI7p_xvkTSdPeh%Y9@E9;LIsV#t5LxBPSpgQzcVqryqQTYV>-}?A|^%{Q6HUk#B$c zI``udwb-~bgJvkWfo<~|MUB>2=ldfK*iQC$<0cmy9Hkbh=_Byu@VW>0{`PC%_`Gds zkuu2EIO9L%=9L@cZDxjJ5Q|W$^4oqU45?BB0!7w#2OvW!@EU7VI2*G94bq_M&dKb|0!0 zzMg#P2Y32^erbB6s`O(k%*GC|zEGNI^4zAk(E|A7-t zRx)mZW7j$D;6#3;L#hDZ$>w8|DrIc(USy&#VnQ%QJ$ zr&>gc&#sKj@gKItDZkc6%p(f_cg{E`t}oGN;TM$8TQ|@eTt^s-crvq-Mu5#VQ4$xT zRGtW;sM7I_2KR9OnsTuN9}is*m2?8Ue3$! zo4iqzK_7W@#U#!L-mi#2Qp|n7szE ztd&UCZ>r9uHvhT2JgHCS`ZDzyi;rg`T?J&1^C|HxwcFLJ;_a$IBjLc++-Y2fI3QuZ zQDu|0P_xe}u%dfGQGLfxj5MgG=z%+rcjgIy16zRc<&?Obr8K4nM%XWJBBEst6o@5i zDcMzt2Z@{32c{fUt7b)gcf`{lRL!hA7O+tNwX7H(8+O_VR!ev1M$+jFOl+)5OMvck ze4Uvd3?mLSXR(u#Ev3=tw1-b)bKWSrKgsi3|AD_-fZs<1QUv-~n2ir{pF(b3lETlg zEwPZ#nqe!g)XxgUPp6L>yaC=m=mWrUG`RTNp3sBQ!lAAkPgudSufXLbM}HsY0)}=222)^Lsst=G3P^6bmad#o>&n@lZ9V!B?(J^{z>} zh8^Y)FRlFKlOAQg4uj%H8u2njZi-aTrA7doQh)ke8z&1d8g9A{#;p|R3c}XhxU1HQ zf8_Krm75{MgnGla*tnKuG9TB!>y!p@Uw>-1SG_7vL{u35PTD9&T__ z1sS?_i#0DEkHtmQteET?9>RN{+CTa9?%#D8Utc%CZbQ%3zTkfqsm`}Wc<;yq@5BS& z{0#9s4#f^|O1!~etvgiUI%{#Qimw{$+Lv=*>j&GPsVQcfzv>7I!szu5Qt!MN-t;~~ zP1G+(_qNFus^#Tae|8r^)U3>^yw*%FJ!u;3G^PUVD)U8GtA2yo9zu?ju_KQk{~|>2 z4ZZ|4#ZiIE#Ky>u9=S_>`W6QJjndM9z^sZY@@mx6h_UM2SLyb@e>{Gcrp~E+MNj!BRWs!2^U5eAk-_bRN7L5rwj8Z$# z2O@XSmU=~~64(!?IPlY@cgyeZCssskY{c&_1lEjN~`4jlF zM1;G2_tO`)W2Y?CjYt2U96G@)gp*cYsq~Ng_XA z&V9QQ%r3%y6^U+@T02w+HMMf*S(I%G#h6`NlMOQDW0m&(MdAg8l}wm-WU4{|3f879-RgSN7r}=JFkQR&$!ESE&tX9NBb!uTouwf#%8#(R z-0ik4ym|8Ih2zuZ@ukRwN;&Uf#+a9-&*Wj`itCrxdcH&Mg>Aix*F>X+Za*kp`uaanYn;*=wM!sE%on{ z>H4;a7DIME{y3)(>AJ<5ZRqLQk>r}h!E|}9q+T#4aZ}0Vp2Z8Rz(}1D+>baU4LS5D zl-mZ@%@GO8&uov%9_#rXmi+d5YHyXx;$s1Ngd390N=_|63N-r;P8NPq@^|ZXgXw-4 zIcWNTRrF2qoj{q>Slnhh#v_AjMt(ZK#EL%mR$mCre z+8w4%hnZKpG1M&2**Q6T5_5={xAU#48X_*H_>m81!$I@bj<%IquiRCuAC366+qVt7 z77lXpSSTn{)Gbjey}(Qw_4yE1p1?CR1@~vi`y@?l!-6fgs?x(I_FLo#XZ@S0`T;f) zT3kyKYABUy`uKX$x%Qz`u(ZkBv)1RWwgtyurhQ~CIoWxkCRsH_+>VfIML5bY=hUfp z$%A@agk6wr? z&iWbE+3APex5-jP*>=P`sRFs##I793qhDfw-yGf~e%%5i(vgCXjS^Nwm+Qc)s-9;D zVokFpA_CCnq4ELhSZK!BXtDnVZ}s6f>wxhD@Gg%NQ=$$gb5T*I*8lW)R1m*HuqF=r zN2hB@a9c_hxkCpVu{gz`lZl1|Y5URkpnI13(r5dF*4|q0r!_oi3o|!?tjCq{)nMOe{a%zm022p{RcM?FEeUDtKMQ%naMlSsWU8w z`{NU5`Ha8X?<&F$RQ)Sw_|xy#^@)q6GzGyz#H2_Pv|}h=q$?(-WG26d9_LG;m0Z1@m6Zsz zHCT$oXz-8NMOufcd$RwfEyFZPZZZJMde0GX1Ev zr)WWWgZmeig_&eoZAZ`zx&T1Xz5z8NWr}HC(j&Wq|&tb zjK>nbhcY=NOUU!RtC=-l4{cXodIX{wU_@qpWz=ufz7bw#+W?!#tl=mh@FNgb_HLiJ8(UewDM7R3- zrx{5X8)hUriR-iv+$jrXPV1@@Tts?G1@dwVq$X~TzM;EyrDDAHt5Cln=OA6(R=hX} zyqKn`t=aM;ISHjx+{c(S?w9J&^Gc#-nf1%uH7)3BtJC*kHyrJYZomGR=u>Lf-xo6; ziQ4@_Ol?Ef()!UMoT$u9SW!F*V-mvxXxiEP@4=$EDZ}6-66#rG_To+X*O|BQ8i8)X zONUxc;v2vu2nJRk+)gS&1s%tGR& znlJ^}kz&K)XivRD*;WXMGauI_Xg{~IpFnM|<-y_mKz-~NfaY?lRa5%H1Dw8>x*yqL zRB-4KW2wAZ3p6jyLFU&c1XE5#3dA&t{@QGbar-VVv76RlLKYE;EhtuM@G{PSM=EXS zmNxuYJ$XaVgz>dD6d&IAd8cxJ-@<=DO;_PffGDZ3|0jqT?0C4pR((j>_r%kNdlQ9mw8Qx7S z&psL4^h(2z+MA*M;!bUw4=Eb z1=wk{#0z~7J=X_`sM(ANgHyjVPxm3E^{|ng={;0a&NA1&AKCKP*$$9cX3(C9DsEz3 zH7v|-BiKTa$1J?sK1dXP)1g$Yaa3@Ck3yCe6@oUEX%1x=?0x|#G1dFH{W=P+OTf!h zFPT2So;Nmjxm)j=e2Yny z{DV!($;s(Wl|iMM5rGbijL5zQ5YMnv$xjJ%wgggY+)>KspYWt4+s1c@jS~3|53mLZ z;{ALoA7axL`A{-5m$8T^0vpQ_DkUkix?%0$KNv64@!L1jNFSIHoo;wFPO^TrEwW-A z(cLbY*qmuUQmm5C5CNK>EGI^d)2w(PD{JjyL5WdVLnKi*X}N#uO}P zh2C@9S4PN^vu2NO?jGiU%U7PL3{*=^c-Q66MQ_Gp#HdFd`4H5Ttl23@nwYzBX;{-(wzxw1qoV zzxuEDlFwVX(Zn`F3CW&w4VnF0g>h?0cx5rC^J+=UtJW_o2n2HQ< zS9vdY{Cju@&kQ{AX~$9pYeTjk;()Z)X1QSE&^8P-r)%Tpnw-QxDEO3J-UkBnt+2}y zH18Oiy*qB@?KYrWnHPJ$MEPW&(Ugz(HN%m7#;^mCDVLu^35Uqvq;WJlLzdp-QZtAc z3zOPAH=qUk-?E_VhkCyS$FJ)*`fMR8fVykD9s%Pp?*PT7xXRs!0%lEGeld9myG;_B8r_tF<)7bxKp zS;06DM}rY;TDl}dj#>KnPef~I`w*%x6HCN}H0VbZa@)K!fkH;9z@?By{~8B9^SSrN z*QA{1KCAFy-VJ7Vlau3{io)EOWQL;@5hX7R$!~{*-HkD^xrR>&<7xK5VR7~paWC>iWMD2Ju|30aMC*3EHJ6sD#&GIh;>bg z`sQ@dIF`5?-KM()H7e%8OA#Keeutx z@5MZ`>R7NiB|nf;R#Qt6+wO1@uLpXpj#;YGTvQFT&h9C?%V}|jm9TK%jFR94pIe0cMZ`sYdZ5y3yFR?9SzIeMR@0}lvn1#=u75AdwBT0(Ht+zTzqy!5`5|`s8;C30DEW28!H$4SqGc` z+{3N9?T{D2-epPBhril;{^?Wo`+ea#Bl*G@Ys?M2DwKr>>iOpbtF`qS2MD5)NR%Ny zluvhgnJKOAiT_bFCpH{Jy)h?dIzK~xnJ&cYaN}cwP!7rnuYLcv?Nn7k+FWOACbu^U zSR!MylC5|+BDU&LFa(OIs!%wx(hCTgDfNYPHrNg;FRvt=G(AD-!hE3y4q8?DDFPae z(JgY90xE~=KBA@3dAobrQdTl`?$u3+G*gM3ODrSCrpW?h&vN2E{?y~>JY*^T))Jc* z$h$YkQuelFYynKY$s|g8fv{~mEWMRGN}uUc>MA%~FQy~WuY6S!5pF-u^QEw#MD?(9 z-`IKzD7`-0CN?}I4Uf6AO0C}6UXsIEBBkd4FX_;t>wS6MLrnK{USE}bdC7XlO}8+U zAv^igTRH6@_fF8)Jm2eRzRHdGzu4?e-`X1I81J_*ObiPiXETTYj z$tY5=%>N~VqP-mv+K*K=_=x0;)eTTfOmVs;GXxAl$lt|FD<4SFj)%FwRuB;tUOCu} zs+33=SS37psK-uQns^#=hNo02ixHTQa&EHU8X}xAtN%M|JpXD3a3JA)gnm8ri;F`< zQ0PD^g3U_u6A}M`Ue6H3nqyKX#IG896Q#x?=Kk6-`P;WY)pNm}RMga>_M^G^k*&#D z_<}0kF&E9`@UDuC(+-{-P8MExzi`n5s-oU+(IhS}`2pp3s>;nA8^*R_;UU)%v!mVd z_pDz^A8BU>JTYlpg?8I9CoMv=#oGR-5jUfY?%BNcsEzmNlIiurz1d4*yLqLeS7-G> zCxwN~{hym<#;)2Olbu=$;o>j;`F!%heUl=v2{PRC`X`hO(ZII~t`O&WnU$aUlqJK^ z;UKbmE;`aG(L7m#!(D+3C~QX+PBI>@Cp!m96lp1vf0VEObkQ(Pe;ccNZDi9v|FjL& z9fjETJ5uu%O|N`*61707tUM$%b@F2G!2F3fa=t92j#%mloC^{%GTVjaJ*R-#0eGJP z$+dbnAj;1(Z&1{f9agCyZs>0=&}pzc-f1vo>sCgiTA7Kjz}DIhFSAW8t1C;|*t~y$1ELhE^2-GH_42(~Y}p&L+P+FJ5)XcLw$ zqQ*^y4)x%+P-szu+MpqEPkdEwMJa?;MRe4fYNks>R9^smt{DaOl}?9il??}pxr`~& zQrmz9>~^$)@S%c(| zM~IQ_vC4_3(45{iW%Ru)gEaZdCAEs44hrD|LTgVtzNn09|v;7gq@>8Qh!T}0GbkI9eF;e^L~<61zKLW z(EiNZ*>$+5grO|7y~0RR<{(%lTJe@lyNnhuorHHj=B-wrp@OhusKaqdgZBOK3hNkB ztX!s2$WYWaJ+*$Li6&^ywX$0R&TuqmvUrhS|&R$RbOfQLmX`RH$<)0 zpsV5&%M&u80=ef@BiQ`oXogRPTv}i>I<8jG=?i_=Q>mS#@+5Qqm{$pcC+Q(iMys6% zKagCz9EMIo%@h?JI37kk`_37zTE#IMzOPck0U86i34yP%Rl*YK({EKEi8RIGTc_q7 z@#|4hZJQME=s*#@oHsx}*)KoI^Ud)OE8L+xg79a}A#nlsc_n<-yw&d{p;BnC3nmGJ zh4|H$9fZv-RUBMA({{R_N|4=>B69wTN9=}s->*8{@-fjea8>4(X&2TlpT z(>2dW?oX!_-IYUx7QwZ|tZW@b0TyH$-a%%RGB`e-&Wh@bySX{ea#Mfu$-0~FdMqyq zKTHj*5kRTc0dR%cj#G3`9Tdz{?|r|c+=}~g7nymLY9o4WeaOMo$P3v8rz<5VwLmlw2`m9bd_*fa?x#n(3 zzr{eI;z}tM4?M_D!80UNghLL)jdaOU4h8B%i7xmmB{7wnd&^8yi z!@uA#aSu|O@78Y6&}{&`NO+AvvNpZuw1|D(9`GZd?{vMvv0##}usDcW{5JU);g-jg z2%Ar9OV8bYrJ{JJcvzKQSB2dcIt1kSo@7U3p5wEAbs3niFL-ZDYS#8mYCqEqQc9oH z>4izFElj*Hh->-zbLxnpRUv$zQVZuqVmf|Zd)v>=KqH#|{o954;|yU6pH$sa!g#Pnc&~ZF6_2HO zjrKtQNYluo6MgJpPTry<8X?MEC|5AZu8oL&yuO994s9&@dGFbGEUam5L#vVlyF>~B zbvM|8p@}>hy+HHXEz3DHuA}!%g)ocv@-=WUYVKmB;4mH*6Oo5Ki*%5DnU#3iq(Gj!lWfm#P|{Pf(S4gTKT%_)X^~KlUO*0#D;{V7UPm=PAPs7o%Cji%MfNRAMf5S94+MWKargj4ck1aB zFVyqc3<%6lRf_Eo)XlwSp*wM1Yn0>Y{C%fGbw;V2+3ZetUsO_(&sNQHSE`J9m_n5U zDmdTncU7a;U_NcCZ-Zwe$fo0S%;zRfHiQ|smuEQL2cJji=BTM7gdn$(rNsw z2~QhIRHNuYM`skDcyB^#+&7V*(q0uJ65u;C2SB-VWJ_-T!k#>A{h_v`Y+~h=5g=uL zQseLH=`>RO+6Xf~&NwX0E$~9Rrnhza_jDKtZd}=5Z0DXE%hnRQd75x|Q|$uPGlz{BB_yfYIPVzzH0?82aZ;0B1||)yrJQxL;mG3ud;e*IE}&ZNS0&?{ z8u3H;;q5K$rVsk%H&VRTh)Q-9J6yex`tB%syyD^FL?)CjWFNDAtCwC%&YfkAC$;ye zqX1rCV+k$khWD^jxF-9yh!Hj`3kIUY_wiMbMJRrACL@LP>^U|Dd<|&6i6OJWCV93` zeBdwxv1bpucklQJ^Uw^KM1(QH>Q0!T+}tEPe504be~eH~Rdc_t<$i5&H%OHMNZ6|N zdUSQEE2+z9_I-zHT0}!kP+J8NLt=7=!v%AKx4*Us2U77(wMa6H{CaAaDd>{vEb+_h zm(IPsD4fe6+`1UmH8mgNvl+gnLM1kYYd+F-RM9(f13WLnX7!utd(mZ_6xb|*u&}js znGH%(5oh?!iF#A>p6f<%#@L!H7OfkU^EU{L7z8->sIH+*;s`jX7W` z5Ii_zov)9jYnKj06%<>=+}CNqZe^hCpg(;K-+XQN5pqAi!Ddt#l_A$cZm9iGAfa;qZOd$l+(TqSJF+>@aTK*R##Eep%MT-6vU`&_!r@?0 z6=?Ttwzbt(yinhvY-*ZswsV<4$%w2ptanZYicC8dgAy>sWW;h;J4JN_*}TJuNwn9_ zm-eP`dVX@JISnSsR-Ib#%(vXahvGsqFP_~fT@Sa77fgRv{o)yBgd@P_jhOrqyHY+- zR{o}S9glPS>ji5hc=-xbF(><*AwqJqOiJDZrHx6Lt)-@y$pg`+so}i2*dN?I*5%34t~gaOLmSs@ZO0h~ipspSN)`j< zX;_QjZ)!LXisY_(F85`eJtW-;g&Zo-~pMQ7<19m1-0f z2iZ^E8!r*~+hRvtLlZiR(xklE@RYe9zGv(0AK!OBEZtQ&^c$_+KkYtX^GW-&^r}Xi z@_MkM$uQ817WOL1w2?4A6vC(U)P=U!^nr9pvs`E8W*Tq;Hn8#D`!enDgUi6u%BET{ z_i9;mxxI;)ay}qRjPfPX)=l3IlAHD?$_gm8Cq1>E{LGy(`uPz-@A>EB+#R{*ZA-_y zA0A!$UPaiA-NuX<=j$I;(i4}&dKZ?gS>LT)wX#5q``GMqEFLl^sx~Z}1X6~XAm^2| zha2m62u!F(?7(*q3Oaj=<*dE`2S!1;zOG*QFE^*8q?j|^g(HF2mWST?!aR~wgVvd~ z*8Ev(W{zJM(R(NgldEso^!^z0wbR%!wp(ssF%dAZh*#aEn*-$)!EpFs#$mV1x!H~x z(-V%ocYAbSWAkSpM#CX#>I7TvGhdk2-XDBuRe! z&#(UVsXv7JJJlsLtH1TO+dg&QJp~2$#QH+w*`CCv~6sEX{X4%Xy=dIYw2ZtL= zo?qHNxcXf^uPq9;p@qMhyZO%T8!O7M+DaK{mp=AOpW4yy4cD1(x!J5PpBUO#hhum+ z=g;h8#6RKvuYdo|`uE~CxhbFi^!CoquDtSv>+gHuU)}*tTe1(L7H~P@ak=?a{Md;& z`smjdrLmZ)HLHzl>y0K8BrX5|05bcXEA-57A9FW8hswKl{iLS6!uQqhGeKTrh+Q?G zjMIkN8r?@fl&@|K#>0v7<9qf$zvmCZ-ZSbFnr1e?w5 zQ$Z{!$`jVnRkH zXkx>7%7|&>(~tzI#x82|k}Qu&XGSfLhgttHsm3l!&%1aeBkkcb$;+dZ@I~uz7fsPM zMQ6bCiOBP?e z^D^{#{xkpgBtp7jpkTox9?5H@>?X?({|Wv5QojHF|9$@X7b!-!{tG|*#=8oQ<0M?* zvO&}WF3rhParB{orY)h(D;CVtuUMuJhNQO+M#JHek508=XUVlXW&{8Lfbk4R#2>t% zRcTqje%&{}`JnHKKhZBWqgDILH#Fwe84Tp-?=Q4iAhMs7P+WR^?~&J^{iDD0gt~;J zs2gv*;l7W3c+Q+EbxAt$OjqoYr=+2PI!iAYrfymA%o4g!#x0UelzD02M_=EogOP~< zn0cYFbo@lT`BdD~KdLbfdM7SlYFN5hKi+SdQqMr-;347gar(laLQO(^9z(3CCDG-y z*GG2-X?KDgCJ7D8DmFMI{PZy& z?r)eOKXspdGMzTO5cyMU;utD?_VJ+L!j)D`-}pGQxLR3>{q?WU{_uzYhYBk`_N~v~ zv8=WTx@*ZYh+4p;bocPboAHN!`p2B3lv%ONuyVN}{S*IGYvRD6XlgWj1bs2At2ZuN znuX?|000244o@8q|M^!xb02*km3Qs>Ni}7RJg}RP3BSeiSmnpi!VkXRws_&SJL=Ho z=?{s&c&YiwOMmjV9U;)(RBYI={=WM@vS7h{b#??N#DDh^_tGJCLv&fiZjz5|UfifV zr>rJ63LkL&wL-nvgT_Q4i{wC`G~6yn2FUy>+Oe2mP1=fU8#>2US_#Fwx<>^ir6tVr zrG{lo^|riBy;cdL(9#j!zmGW4O$A5J(lJUFi@EqBD|6kt;wA6U7N(O4$vq^rwuxsu z#EyQ+9U_Dbl}$*Uh+`L90!=Aff?!9g*u;#6h)EwZu|X5%Gg3hV88k5w!{z+QDhrI{ zD-eBl$!`~Z1(MG$`ZF|XsWrA-uYbvYfF)((cp~tv@VRH7{R??*)Vpgt%l+o}epJY_ zQrkaWaM9KSgQEL4fk#l`u2Xv3qZ}bp?8e2$zx$xN7HMlc`?=430TpU){q)B_c*mx> z&|EjmAZh^<@%zPN&A6eE&o}a^YOzo&m4u~u{En>L9^vgn(G$&aZC5&!h5n*KPQZ2Ok*x`uFv{5rQNhuesN!%U{0CfG+ISjlrdA z9pIjN^X&0g|1{M4mbQo>R;^lj@4X+auOBr61tOm5jy?QGX*h^yXqjH*?|*D)wI&=j0$cSv(XnN;ni&_R?^5oEf+N-FN1yt!$ zs&o;lzvd1wL6BR|B#t-7(S@|ONMX0r%a#~cEY%kkWjNoK0}*^=OOv#IpPsJ`|UL1XHXe-i4)*{iI z&ztiSW=q^;ikJ*BlOfE?oE+!mL_$ua3UN8A-6s>Ax%l&yk$#3-%v~zWiz!70R6KXFqxI-c|k-daQ?UFAI^k?+oLe#!%Ls zUnBJ+wO6)m*~W2P$?}`u|B27PeB3E_5Ee(_Vc>jhNawd*HEZJp$=aqoSuqUEm@ zUvITipTECQuZLXz@<}prxGVl#V|UyBrw32IE(zMV`ND+@KK$ViU3cAvQ9lB6Lj1`W zxtFzZh{*i7cxTZc>f=!gUk_KXbLaKGfA2F1XiNkqPmX$Vy_Mnfk$!h%a4?!6W0E;0 zn$R>ZnWB;fl{wj9rG0j0*v<~w8FU-eQ*kn{j4EA(Z;qv;;VREt&z|GZ$#%==;e^a) z3fEy-qAxGY(3(SRcXLOMB@Q2>+#^3{V(1NROGIi(zP`3#{Z@;vNLxM?f+%+Ni^=3g z>K(+NEMt%anMY8z7-|-DP_{VWY$ZN+_dxGe&K?QW2+_mi@ z?~(Id>tDmaL4{BJHAcRSlN7_J-lN+*lDU8BOJ6;C@|3Bl^4)*`y}!GDQo|d8$;*|f z#kF($PM1=0Zf$6|!>JT6G|pz8y$uiS(S}3B>UQkfQKyx`D5u*J&8HI0${RSPs*+u? z%z)m{<8{7uQAe9%ZyksZdq=9q%&pd~U2R;v2r7pI0Kl~+l#sstOvmBfUy?=Py6ZMR z_|>oYzw$pcC&yU*qqX-5By-<~^U-&Nwl$c7gdo3uF1GJvf7hXB`;WaM^4gbsb@iNk z@4aX9=9{Rr@dAaGj@ZM0kp0Rp%(O(;2`}7j>o(w@PxGk!o28Gw_-96KOk^;S?|-jt zUJd+>u4$2o6pcyIs2oF6bPL5JUSBjAjfS~cOpXf1m}H7em)0`KNJZ?-aK4tj4B2f& zVR@0IY!0sNVky=(%6;8EeDkUJiIWMm>$FA6+iK}z+z-ozpMEmOizm*-4;~SZx07Rf zlVv2SG#*-Pls2w*%zsx_25%l0Cx{*Hk>tfQoNT0+hM}ku6ID!;`5b8q5Yzx6jE;md zA$1ngT1=XYwW*~D$1!Rk2l&T(iWcQ!`^k;%3ulv%^ z9=yW|J)mb-PDCy4y$>`TTBk-QI7}fjCne)=hNG6QZ4j@FueXnHIzF~57JELuayf1& zl%JoS8Yt)6xdVryZRbX+N80W5#&xDuD-7ce>IMJ+;41T6OXSx-+vRC`36&px^bx~f zUNAM{-VOg;c}It(YTX*+?eDTG8-nZz#HANoqptJA?xvUe8lMvrT6KMg!*S0&A9&Au z?oekDInKp@^(_DTadnm|j-R>L{zffMTNskP-F$cJ-^vd+LSv$7!vBPXUoKSP(#Hmrk2{8=0V7?BWY%iEM_SZ*gI4Cr>#t$4K+J?17 zNu-&JS8|~h1?xmy=WbaAABwPtd5uNdo(Pz;x&wNu^X7*zE5j^w9a^wt@HXl&jg_{QO=PhLQP3< zC6uVFW+)?hO0sgwWoIY|O$tUTYG5LiE>4)@v@T+jLV1ahJshHo+lT0qA<{9dFNiYZUP809P+$=X3UvjgmI6DCZv{-=tUMIa$@Yon`0?g=|G-F> zDilS`tI;oCs$aN3Kj!B~@pPAPv?YGHi5whTAA~H9hUQA)bye2ow>nLWw579y9EpqP zdc=0E+KcQ9X)Dr@d1kt{oUSRS=ay0B7D5inp+PNtQE!nUZPRgxZ4U7~PIw<;;`_Rr zs;jFXeH3^5dJXdQ3y(hT6Gd64Bk%uIL1DqT*HD7YKkENpLXK}e7%%({4m9;!Ht6rY zOn!*KQ?3xj&hc;7G-@?ZJjE4sC&IqRk*` z84aBwoovDVZ*_EzR4^e)^r4Sq^+gNyG(GL7x#+w6XjAOqkys$0eea?tFn^wY!&)QM z8wUV@tJO=VqmS=?r2p8z3+Y7(9L4OC*rtz%cD>72RqcYgj0ColVo2hF4pK4ZQ$?v z7_5G}aDXi9qbuU{MXm#jikLz> zZCAnGu%*`Q}vVmM_&WS!75bCPI!TgyUzqgH7Uz z^F(4)6Cu(dNTo5~Vm7g6anZbY7t$r#irGyLM#OWyO6=km&-KV*tu|absyH7fFLTT3 znliekoY3J9e>psmid~XH%zzwIhNb6d?#)_)mj>*`pFjJO$i?rtf5-Xj%UEZe* z7i*`B-fO+@&6nuuYfOYLQ#npjGZCIwy2sSQ5nSy87nCq1S&-Ch1oUYTjbu2F@o8HpaU|^{%~9SU#PxKLH4l+_gCsq29(Mtf zL>JYRvxq7$qS3Uh2$e~zaz!Vj3qPOKJBSCq=^d1M2E^V$LKwI5OWZ_8^4O@(7-nn( zOi33rXGp$y^iWWMlb51GCf}yzFB4P&m^yS$yZ=D+OxvhYmYfbo8L-)4O>6oj^$iJ4 zXA*~+ef(DhJLoQ$$`44<_~;;9fd`=6<(g?eAXrF)IAazx?B^w`Ll|`kL{#*CYG(<506^ zuI^*^=Bo=Y6qbUI`Ts{Eq)+@hNFKr;@1}qJFtc*Ly7piH_1_O3Jgl=8-usP*KeiUe z{>!FoBWf9e>$A*{^tpu-CvmbKN$X6@Y^K!CZZGvGM6tC~iB~#=Q_0`EMk9@S zX3b)D{ZeM-JZ;g%xIMywL($`DgF~Zl{ne`s>(-cNXLV2j005WjZ*8$hANjxj3nf`^_#g#knHujhUMeG}dPDXr-^m;nhv{##r0KxbT(WbfI=-h+F>{q5>1olf`e zcfadHAG*7wq(qL!Vn5y`G%G(T6GUvT`1GgbXdbC2jqkDE8)$Rxd3K`4M6sAsi)2(R zf(lxOGJ4g>!l~51n3!Hq>UE@EPw8|dGqvhd61r-^H(5*;(xyZ-I=b)D8HZjVj!uj? zNipIA&QoyNNSW1O#Yo{lmMqDEUTOHeG>pe!mVI4>G&bgt6O0hkg+&vW&=X-+@1sot zGDCl;Njym;@=d0i3S)ISRi;mJdp$exXoXJ-+;WI#vHg&0>l(jj23&=i0gElkron+E`txqC$Gv zQhc(F9$#C8+vuGaj-KX@oFKfT>w2&fSsV%02)@-0{rnrMY^%{5O$i?j>N-X{$DxHg$j!vEG;_!%HwF8U;N@{<>h00&%M_C z?oWZ%(>T{#zt;HfTgUC`?D_B?PjkoDoDD4BX(M==SzTlL2W{l0C!YBA6HojK6*hl) z=fB=LM_mZAV)jQZ*=RtNZoK7_77B$pZq&HdGg{(y>HPIK5}NhBHFyT9O!KBJ^1H9&uL{1cH@oLzwdq9%F3L~fj6nYG|F-1T2Ut*_<-25 z9!Dzm@{MJ|y60Y$hKBKJhF(utEhNXwJV$W6*5GA2pnpiGBXqbCjatA{wX8I&(aLz1 zK~rUkQl4RgK*%y49#>ZK7hG1Rd3ku}pmH*%Ap!xM(WEv&&m3spMVYHEU zc^==;5_IF0OH_lNFd7Jh5f=;w(mYWM0GWymP=RhD&_M*+*!)6S+Y*ddGNww_ zSZy#nNIfl&`>aTVKw7wji4Gf$UcG%lS3D>?eWJsg822~-6pNY2w~^=%gr>GU!e+yT ziBmaGzua~X-_S{H3VIxLraixwEG|ku&q$m)*-jllOPuZ|`O!^;tO?l>8(1Lwm(S4` ztt(~b)5LUDy6NcX6h*PNwnm$u9mu|6vS)zo86vy-$&O4t=IU9T)kKS(y$kQI^1#-wPaD|w}zJ(*h@ZXN{Ao+NmT5_?*;x_ zpCL@Ri>{`op_kQIYcdypZ_(x?f((CmW%f;(*=0MbAN{IN2h0b&opDDR)v!7Bh<$(32XoIl;?q-Nd;*`E(c2o;Ff;5}&X0 z&eQeOa$Pkse{yG9yu<>RzShN9x<}UxH0a3sg~Y1)loIdI}NRQ}=ik5xY1h6=~*%U*TdaPtki`a1Y{zhXQg`GvDQ znxb;ZeYXGbp24#&brngH8#b)J`|i7H3N6I$$EEXHrIr4r{3{=&5+-5+wfqL=_E%ox znvQ4qU3y|hBMw2(If-6RuneiwAV=^miHjgS3!r>LXBcSSLr&jg=xgF{UFU zEIEF49FdUwgm|wIL$@A0jYllH8Hp07T7=d!f^@-&+@m(Nb>ixL7l=4nca7LvD-2f4=zGf^=ItRgm#Y55Wz>K;D&bnnRn=;TmcyJk)OM?UhQ z1*hNUp6`+q_@Y`g%CCJy?piK8n2PsUKHPbRJ=7S(S&7z22TyfML8qhCC3sdT7>(2N zB_5Nb{Lruv3JKwm6pTpWh#Zc}p%@vClVOg=H=d3N^yqF!FG^xb$v}z*T0%D?nzE9K zl}$R?Y#=iB1dAYl-KZdidC}{+`o;AvI)CSCyBSZ`!mG-Igp_ zOp=rM^)7qD;mFG`zp{7l^XJcN?cET)UU%b-H*BllFvnyLb)V;ZJWOxEI58@p3*oe`Sa_{NiRU{n(! z(!^86kw7)?uCp=a_2tEzifE;~>1^|QeMgVFT&^aU>)61+sI+2?s;bJhYwOV)eC5g& zI^Ap>m_j_;gPR(4xTQh=@QoWE88jSzcn4bk+0TCJo_p?Aw*g(<{A0hw-71+()cv2d zXB^b^JlFcy@Na57k(>WdFNgG0xy|yOFRQCQ`ms-Y+hdN~ob zAUHZve_=`Q*LHN&f)`}mENwACIIhB+WoSrfI*x~t3n}BPt5}v)yJAUw?q?*2W5TI+ z-2F;xhtxALrtz&z68ak3tVZ!DkSV-K0nMA1uxQsil-@e0ghd~I%D2hef2S_ z1bru_JvjOb$9?FoU&1V_owyHOpHDn^Bzm+dp5AyHy|hgmOeH1oD<}W} zvTWIs9kZCXBky*2KtK}ml%v3u~NXRix=6I#^7D49G6gNeZ6Jk6j zg(6ZoMucKSI8KEVRG6b9JQEVwh{%Q|T|_oSh>3b;omny^%Q{(NC5e?Koh+i8Ub*Q= zNl&t*PBK!G9tStFk&%onP3OsGJz>(z79+ZF7otNHqbF&-wO}zt&=Mih1T7Mxl4_v4 z<91PaO0ovh7?DE$SZ8eTq&(cN_j;`UfH5k{Q6*1FR$4)`+PyO(Nvg=E_EsyG+Rp^M zZ?>I!_3*(!AgFDCHz5}+n6D%(*Ugzzr7gX3&YWp`?ztCUef70SWTfeOMMe4Tx8L^e zci(2S^T?gIv?-pCVPB_zL>>}u6DF7$0C*RrGTc(is+hZdhv>QQMorLtFepM zi>5e&NsUyMvUIV2`7*=8`FLC;se6DwdRk~~5j)(YPNzwkDu|QCk^Y6!(4sO!<%YS| zHCD=|t<9crIMRe2ce$E6JG-={X;!UTsitEmPo8ROI;Jg6vwC&inl<%n)~v3nnVr{z z#J+Q}-#xqU^wSTa@(+LbgQZKCsLKI@E(Z5JgWt2ICCq0&Vb3_a$m9Np0+RQWKMfGg zxN|h~H+RrgIPClOxBvT5tS!wlL)-7RHY5iblgigDTHpSjP7!8I-;-tz7c3r)3 z*-{8!0RUk3l4Rn){&Mz>hrfirB|g68`fV=!oz-csc&h3>TkpuLTM3`xvrCMZUu}yX z?u?7d<)RSw3a6hx`S#1Hj_TGeoBNNo7WSAyPT-6zVUhQJMDAH4-)4D#4ZBDUO3;*7 zMqXBCaa@utphr>GDzij1PU75zM+HNOFhmGllr)5KK_5}4q)F?O_i`~3$%?qcQ5~9! z%2Zi`3g|W-p2qEK1PV<@6-0{Q)0RvRsxV40GR|1g9!AgBnvhwUP# zIs)A|qihKfreR8pRPa!hQBNZ_i zhFQ6Cg<6NDu<+u2&Cakyg4?(6jpv?w;rMYpFpUa5=M5Xy-G2MK*R5NVs&pe0(on3= z*L6DD-6{1B8Qjsr9>N$HKYl_dsCJfi7ErY{^c3Y=GuFM74p-Oamt8;CxHRkC+@d{j;zYAjd!?zZ?QE(Vnu?;R zg$w7`VJnv|U6NjD1>Lc!sR{kL8yk;yclT&ZlhEIK&6?F}>|(W!+tcdI`|Z)t-rxVC z@5r+>P4C^i2TipVK=J%b;e&^9r$LJr=w8e-~ZsB-wOd&)%{a$H>MUe_8EGpgZDo|L5=}|dsEXgx@HxrT zDh;$q1E&do>{xCBP4=5iF>ju^-B8#*>hqB_=$N&O@mSI0XD;aVww_5GI5cW-=)62? zUA?Kk&S)@9^pyz!0N{!^(jEW7_x@+_)El&p{^h(i1|KPq^b@roDq2|d(GOj`qe^f^ zc%$O;Ezy>KEncDd5P9z9qpv@oszmTlHq4Bqk(@lOi!Wo{-`R98kq^{Tm`75DAe)r$4BSb{;2_ zJR$QW9+*cUCvLMd9Y~v*E-R*-h00jVN}*`vP3QOf_wRrE%{Sjd7wUpA^1GeUXk5Ft ze$%GwHf&gDHs`<)>~6Q`*=L`7@x_3=v?b#?XX)vH#mT8VBZ)5XJ`!NH+JhYlY; z+=w19y_OK7)@D*;m!(UWP}CJ}zyCk4`QP~2zlYpyix)5Y@sIykTMClUh0+th@pp9M z&+VJ8H{X2Y*f%dPb3gNc-xLbn^&>&*w~$80y8B5nWKexX2@K?||;JerlA&=0Ze^rf9tf(+5Ofk;VEKl|hOW`OU zv?hvslObqM42Gm=OpeB-1W$Fvq*#JT2$D%AVj}6gSjVkNI7ulh8p&45ib)f0+cJj7 z)BnaBZ|>j!*2$AC>GdG;^YgE}Zo{Tc8&|KcW7&zCpU+N`Bpp0>__^nvM^iC50v1V< z=;dtLa@(d&*NxYAZ&ZqSgl@OcJrwDp&vrS_CyIMzYd^&V7`11ji=ql*WMR}>BMvVq zHq6;%waqVQsS}5_cKmpAdd(x1!{JclmHPTRn=SLXdT&7J@(F?@ z+l{o{L=~85BRlGn8tuSSr&^C3X+&CE&y1-fV=|fQ>Q=5f|Jha*VS zm+xWf7YTxJ#~trQ@0!w;@BHC^e7VRB7gN~*QA-XO_KHo%V#iO$gTaxuGc-*un6F#4 z+%T_JpB^!b-Th)qN9IeWR<98+7c1nM))h9cqjnIU0*9-T0|$=IYk3H7=N! z;oJfM0Kg18)|dFscfLP(>dggn?ca$nL`%H7{9n}G`=Jlm7A}Af>fC_-h%dE9199!E z)@hauJ#W19%%2Abha6V=U$4)v>~~1+NwhN1(i62sPqHl!o{nnQL+X^cM9okP7E)&= z&=hAV)?|i))@Hw}i`h&LMMDWyRW4q3FV$APZZ-+c3} z{rlfKckaBlNKsy1wrSJG>#nC&0*=60I+{r=~lf9d(>U+C%S)fN$i&6fAhcfRA! zJGWF;R%nYdlfB}QN9aK}U#!E_-CcE-EAExeLzEoSavci>M>kL+2)o^0SBI;vtXZ=NEF$q2v5nbLre~{otXcj@j5jaxQ|XW%i22q~pzr zV<%#6&!}HBD$3cF%W;3VdcF2_D7L$Ur<(awXLVYa1_nnI+l0zIWbL!ac{ZIY=w;oUb=QdbwFDR5c^9i*rkD8ub zP#Z<7cw(>;Ivky(g(()opjJpx8ufteL8td8Pqyse|JIvt?svOA+ERtm&FyuYHf^k~ zo~~hruecK@n)mK~e&4<~6N!=E7ndwqyk*O~H*daak{Lmt(B%=jhvJ>`z!}@{P??7> z?33eGxnr&_RyMz&?D|?mHalVQdVP(JM_sO_qeopAW*jDyY2`{hPV=f&D>HUpI~)XmyaI|C+mJ+3W_B13|jbtr$#C~*xlZ8?3n8)dSco}X;!XWv3Bj6`ue*0^DjQS z=v3@)kN^Bvf9QPuH>muFKm5jShoS4n)zQg4@f*J^6BY~gxz7}gsX+RC_z&&TV;_Au zBA>(c{;dD^kEG4~!yo?SuYY|8&HmF5e|y`~Yb(p1J`lCcI-)4Ip5cz2h@CsnNolc( zEf0^`yn3Y}Kc5yw-g~-{KX!sXJ)rOADQ;|bY$I1N{XBK0E}hil*rmE0%9k1`;YRzDO;Y zt41^$d-c`7J@?!Tr%#{J7U9goc=OFSZQ1hfMT>B4yGcsOF}Kh?Ah@lRtwy&fTVr^K z!x20(vod&4S68>TG>uYwW!37{b&D5gc($EBq1(rIdWB9OA4?mrGsR}4s_bl4K2vJd z&WA$@$rqD+QPCU4Q-5siFSQra(YOjsr2E8h`|+;Urh&e(&(mtP*4N`PjIO(GLtb9? z!}LEM3;%xSe|y^wI~0Pm~EFP(p+7+b;DZIiX~$*mq0*#`_S0Ip%*XIuUT!Z znG4n7003a-{P&*IFaG$;#ZL3X`lWP&O3?bB*M9h(`yADC;L|vV4Ti;+PLK4MYh=lr z=9x&h>#3*qcs%_c�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

F5v^2uU`8|$sW}JEI)Gt%YUQ-Nj&lY19lFh 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 aI$37}G2|=oWWJB~!JrB*D=HTV^by~ZZ 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 z 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 Lin)K7y#2obCOT84 literal 61615 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 diff --git a/docs/images/mqc_deseq2_sample_similarity_plot.png b/docs/images/mqc_deseq2_sample_similarity_plot.png index f8de20eb78227bd406edef4c3f0d325d0ac344ca..53861f70b64c93807ad43c1d641bb0b05f83896f 100755 GIT binary patch literal 25642 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