From d5bc4ea516b25deb767f4120ab01453819960f65 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 09:16:17 +0200 Subject: [PATCH 1/8] Add editorconfig config file + GitHub Actions test --- .editorconfig | 12 ++++++++++++ .github/workflows/linting.yml | 14 ++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..a6981b478 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_size = 4 +indent_style = space + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 0ee21dc44..554e1154d 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -47,6 +47,20 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} allow-repeats: false + EditorConfig: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: "10" + + - name: Install editorconfig-checker + run: npm install -g editorconfig-checker + + - name: Run ECLint check + run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) YAML: runs-on: ubuntu-latest From 82ece8a510a815b7faf2eca6be9b6022e8b834cd Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 09:35:48 +0200 Subject: [PATCH 2/8] Trim trailing whitespace --- .editorconfig | 9 + CHANGELOG.md | 30 +- README.md | 2 +- bin/check_samplesheet.py | 4 +- bin/deseq2_qc.r | 12 +- bin/sra_ids_to_runinfo.py | 2 +- bin/sra_runinfo_to_ftp.py | 16 +- conf/modules.config | 2 +- docs/images/dupradar_example_plot.png | Bin 247174 -> 247167 bytes docs/images/mqc_deseq2_pca.png | Bin 26252 -> 26251 bytes docs/images/mqc_featurecounts_biotype.png | Bin 48011 -> 48010 bytes docs/images/mqc_qualimap_coverage.png | Bin 97373 -> 97371 bytes docs/images/mqc_qualimap_features.png | Bin 28086 -> 28085 bytes docs/images/mqc_rseqc_junctionsaturation.png | Bin 65611 -> 65608 bytes docs/images/mqc_star.png | Bin 29742 -> 29739 bytes docs/images/nfcore-rnaseq_logo.ai | 80 ++-- docs/output.md | 10 +- lib/NfcoreSchema.groovy | 4 +- lib/NfcoreTemplate.groovy | 8 +- lib/WorkflowMain.groovy | 2 +- lib/WorkflowRnaseq.groovy | 16 +- lib/WorkflowSraDownload.groovy | 2 +- lib/nfcore_external_java_deps.jar | Bin 2291171 -> 2291152 bytes main.nf | 4 +- nextflow.config | 2 +- subworkflows/local/input_check.nf | 86 ++-- subworkflows/local/prepare_genome.nf | 428 +++++++++--------- subworkflows/local/quantify_rsem.nf | 122 ++--- subworkflows/local/quantify_salmon.nf | 160 +++---- subworkflows/nf-core/align_hisat2.nf | 86 ++-- subworkflows/nf-core/align_star.nf | 96 ++-- subworkflows/nf-core/bam_sort_samtools.nf | 90 ++-- subworkflows/nf-core/bam_stats_samtools.nf | 50 +- subworkflows/nf-core/bedgraph_to_bigwig.nf | 62 +-- subworkflows/nf-core/dedup_umi_umitools.nf | 108 ++--- .../nf-core/fastqc_umitools_trimgalore.nf | 132 +++--- .../nf-core/mark_duplicates_picard.nf | 108 ++--- subworkflows/nf-core/rseqc.nf | 314 ++++++------- workflows/rnaseq.nf | 50 +- workflows/sra_download.nf | 10 +- 40 files changed, 1058 insertions(+), 1049 deletions(-) diff --git a/.editorconfig b/.editorconfig index a6981b478..b80832b37 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,12 @@ indent_style = space [*.{yml,yaml}] indent_size = 2 + +# These files are edited upstream in nf-core/modules +[/modules/**] +charset = unset +end_of_line = unset +insert_final_newline = unset +trim_trailing_whitespace = unset +indent_style = unset +indent_size = unset diff --git a/CHANGELOG.md b/CHANGELOG.md index f9264ea4f..0d1c41fe5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,9 +50,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | | `--validate_params` | | `--clusterOptions` | | -> **NB:** Parameter has been __updated__ if both old and new parameter information is present. -> **NB:** Parameter has been __added__ if just the new parameter information is present. -> **NB:** Parameter has been __removed__ if parameter information isn't present. +> **NB:** Parameter has been __updated__ if both old and new parameter information is present. +> **NB:** Parameter has been __added__ if just the new parameter information is present. +> **NB:** Parameter has been __removed__ if parameter information isn't present. ### Software dependencies @@ -64,9 +64,9 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi | `multiqc` | 1.9 | 1.10.1 | | `preseq` | 2.0.3 | 3.1.2 | -> **NB:** Dependency has been __updated__ if both old and new version information is present. -> **NB:** Dependency has been __added__ if just the new version information is present. -> **NB:** Dependency has been __removed__ if version information isn't present. +> **NB:** Dependency has been __updated__ if both old and new version information is present. +> **NB:** Dependency has been __added__ if just the new version information is present. +> **NB:** Dependency has been __removed__ if version information isn't present. ## [[3.0](https://github.com/nf-core/rnaseq/releases/tag/3.0)] - 2020-12-15 @@ -108,9 +108,9 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi |  | `--singularity_pull_docker_container` | | `--skip_featurecounts` |  | -> **NB:** Parameter has been __updated__ if both old and new parameter information is present. -> **NB:** Parameter has been __added__ if just the new parameter information is present. -> **NB:** Parameter has been __removed__ if parameter information isn't present. +> **NB:** Parameter has been __updated__ if both old and new parameter information is present. +> **NB:** Parameter has been __added__ if just the new parameter information is present. +> **NB:** Parameter has been __removed__ if parameter information isn't present. ### Software dependencies @@ -126,9 +126,9 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi | `ucsc-bedclip` | | 377 | | `umi_tools` | 1.0.1 | 1.1.1 | -> **NB:** Dependency has been __updated__ if both old and new version information is present. -> **NB:** Dependency has been __added__ if just the new version information is present. -> **NB:** Dependency has been __removed__ if version information isn't present. +> **NB:** Dependency has been __updated__ if both old and new version information is present. +> **NB:** Dependency has been __added__ if just the new version information is present. +> **NB:** Dependency has been __removed__ if version information isn't present. ## [[2.0](https://github.com/nf-core/rnaseq/releases/tag/2.0)] - 2020-11-12 @@ -292,9 +292,9 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi | `r-gplots` | - | - | | `r-markdown` | - | - | -> **NB:** Dependency has been __updated__ if both old and new version information is present. -> **NB:** Dependency has been __added__ if just the new version information is present. -> **NB:** Dependency has been __removed__ if version information isn't present. +> **NB:** Dependency has been __updated__ if both old and new version information is present. +> **NB:** Dependency has been __added__ if just the new version information is present. +> **NB:** Dependency has been __removed__ if version information isn't present. ## [[1.4.2](https://github.com/nf-core/rnaseq/releases/tag/1.4.2)] - 2019-10-18 diff --git a/README.md b/README.md index c3eef4c0f..10c4e0a52 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool 14. Pseudo-alignment and quantification ([`Salmon`](https://combine-lab.github.io/salmon/); *optional*) 15. Present QC for raw read, alignment, gene biotype, sample similarity, and strand-specificity checks ([`MultiQC`](http://multiqc.info/), [`R`](https://www.r-project.org/)) -> **NB:** Quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. +> **NB:** Quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. > **NB:** The `--aligner star_rsem` option will require STAR indices built from version 2.7.6a or later. However, in order to support legacy usage of genomes hosted on AWS iGenomes the `--aligner star_salmon` option requires indices built with STAR 2.6.1d or earlier. Please refer to this [issue](https://github.com/nf-core/rnaseq/issues/498) for further details. ## Quick Start diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 3f74a5bd5..d7480a078 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -60,7 +60,7 @@ def check_samplesheet(file_in, file_out): ## Check valid number of columns per row if len(lspl) < len(HEADER): print_error(f"Invalid number of columns (minimum = {len(HEADER)})!", 'Line', line) - + num_cols = len([x for x in lspl if x]) if num_cols < MIN_COLS: print_error(f"Invalid number of populated columns (minimum = {MIN_COLS})!", 'Line', line) @@ -119,7 +119,7 @@ def check_samplesheet(file_in, file_out): if not all(x[0] == sample_mapping_dict[sample][0][0] for x in sample_mapping_dict[sample]): print_error(f"Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end!", "Sample", sample) - ## Check that multiple runs of the same sample are of the same strandedness + ## Check that multiple runs of the same sample are of the same strandedness if not all(x[-1] == sample_mapping_dict[sample][0][-1] for x in sample_mapping_dict[sample]): print_error(f"Multiple runs of a sample must have the same strandedness!", "Sample", sample) diff --git a/bin/deseq2_qc.r b/bin/deseq2_qc.r index 02073ab96..022c0e320 100755 --- a/bin/deseq2_qc.r +++ b/bin/deseq2_qc.r @@ -73,7 +73,7 @@ setwd(opt$outdir) samples.vec <- colnames(count.table) name_components <- strsplit(samples.vec, "_") n_components <- length(name_components[[1]]) -decompose <- n_components!=1 && all(sapply(name_components, length)==n_components) +decompose <- n_components!=1 && all(sapply(name_components, length)==n_components) coldata <- data.frame(samples.vec, sample=samples.vec, row.names=1) if (decompose) { groupings <- as.data.frame(lapply(1:n_components, function(i) sapply(name_components, "[[", i))) @@ -130,7 +130,7 @@ if (min(dim(count.table))<=1) { # No point if only one sample, or one gene ##' in which an assay containing a variance-stabilised matrix of counts is ##' stored. Copied from DESeq2::plotPCA, but with additional ability to ##' say which assay to run the PCA on. -##' +##' ##' @param object The DESeq2DataSet object. ##' @param ntop number of top genes to use for principla components, selected by highest row variance. ##' @param assay the name or index of the assay that stores the variance-stabilised data. @@ -162,10 +162,10 @@ if (file.exists(PlotFile) == FALSE) { plot_subtitle <- ifelse(n_top_var==Inf, "All genes", paste("Top", n_top_var, "genes")) pl <- ggplot(pca.data, aes(PC1, PC2, label=paste0(" ", sample, " "))) + geom_point() + - geom_text(check_overlap=TRUE, vjust=0.5, hjust="inward") + + geom_text(check_overlap=TRUE, vjust=0.5, hjust="inward") + xlab(paste0("PC1: ",percentVar[1],"% variance")) + ylab(paste0("PC2: ",percentVar[2],"% variance")) + - labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + + labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + theme(legend.position="top", panel.grid.major = element_blank(), panel.grid.minor = element_blank(), @@ -176,7 +176,7 @@ if (file.exists(PlotFile) == FALSE) { if (decompose) { pc_names <- paste0("PC", attr(pca.data, "percentVar")$PC) long_pc <- reshape(pca.data, varying=pc_names, direction="long", sep="", timevar="component", idvar="pcrow") - long_pc <- subset(long_pc, component<=5) + long_pc <- subset(long_pc, component<=5) long_pc_grp <- reshape(long_pc, varying=names(groupings), direction="long", sep="", timevar="grouper") long_pc_grp <- subset(long_pc_grp, grouper<=5) long_pc_grp$component <- paste("PC", long_pc_grp$component) @@ -190,7 +190,7 @@ if (file.exists(PlotFile) == FALSE) { print(pl) } } # at end of loop, we'll be using the user-defined ntop if any, else all genes - + ## WRITE PC1 vs PC2 VALUES TO FILE pca.vals <- pca.data[,c("PC1","PC2")] colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') diff --git a/bin/sra_ids_to_runinfo.py b/bin/sra_ids_to_runinfo.py index 9e9935898..002a859ab 100755 --- a/bin/sra_ids_to_runinfo.py +++ b/bin/sra_ids_to_runinfo.py @@ -110,7 +110,7 @@ def fetch_sra_runinfo(file_in,file_out,platform_list=[],library_layout_list=[]): prefix = match.group() if prefix in PREFIX_LIST: if not db_id in seen_ids: - + ids = [db_id] ## Resolve/expand these ids against GEO URL if prefix in ['GSE']: diff --git a/bin/sra_runinfo_to_ftp.py b/bin/sra_runinfo_to_ftp.py index 6fd09aeb7..80a8c1d7d 100755 --- a/bin/sra_runinfo_to_ftp.py +++ b/bin/sra_runinfo_to_ftp.py @@ -48,10 +48,10 @@ def parse_sra_runinfo(file_in): sample_dict['fastq_1'] = fastq_files sample_dict['md5_1'] = fastq_md5 else: - ## In some instances FTP links don't exist for FastQ files + ## In some instances FTP links don't exist for FastQ files ## These have to be downloaded via fastq-dump / fasterq-dump / parallel-fastq-dump via the run id db_id = run_id - + elif library == 'PAIRED': sample_dict = collections.OrderedDict([('fastq_1',''), ('fastq_2',''), ('md5_1',''), ('md5_2',''), ('single_end','false')]) if fastq_files: @@ -62,14 +62,14 @@ def parse_sra_runinfo(file_in): sample_dict['fastq_1'] = fq_files[0] sample_dict['fastq_2'] = fq_files[1] sample_dict['md5_1'] = fq_md5[0] - sample_dict['md5_2'] = fq_md5[1] + sample_dict['md5_2'] = fq_md5[1] else: print("Invalid FastQ files found for database id:'{}'!.".format(run_id)) else: print("Invalid number of FastQ files ({}) found for paired-end database id:'{}'!.".format(len(fq_files), run_id)) else: db_id = run_id - + if sample_dict: sample_dict.update(line_dict) if db_id not in runinfo_dict: @@ -79,20 +79,20 @@ def parse_sra_runinfo(file_in): print("Input run info file contains duplicate rows!\nLine: '{}'".format(line)) else: runinfo_dict[db_id].append(sample_dict) - + return runinfo_dict def sra_runinfo_to_ftp(files_in,file_out): samplesheet_dict = {} for file_in in files_in: - runinfo_dict = parse_sra_runinfo(file_in) + runinfo_dict = parse_sra_runinfo(file_in) for db_id in runinfo_dict.keys(): if db_id not in samplesheet_dict: samplesheet_dict[db_id] = runinfo_dict[db_id] else: print("Duplicate sample identifier found!\nID: '{}'".format(db_id)) - + ## Write samplesheet with paths to FastQ files and md5 sums if samplesheet_dict: out_dir = os.path.dirname(file_out) @@ -108,7 +108,7 @@ def sra_runinfo_to_ftp(files_in,file_out): def main(args=None): args = parse_args(args) sra_runinfo_to_ftp([x.strip() for x in args.FILES_IN.split(',')], args.FILE_OUT) - + if __name__ == '__main__': sys.exit(main()) diff --git a/conf/modules.config b/conf/modules.config index 86d5153ef..f769177cd 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -11,7 +11,7 @@ * publish_by_meta = Groovy list of keys available in meta map to append as directories to "publish_dir" path * If publish_by_meta = true - Value of ${meta['id']} is appended as a directory to "publish_dir" path * If publish_by_meta = ['id', 'custompath'] - If "id" is in meta map and "custompath" isn't then "${meta['id']}/custompath/" - * is appended as a directory to "publish_dir" path + * is appended as a directory to "publish_dir" path * If publish_by_meta = false / null - No directories are appended to "publish_dir" path * publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension * The value of "directory" is appended to the standard "publish_dir" path as defined above. diff --git a/docs/images/dupradar_example_plot.png b/docs/images/dupradar_example_plot.png index 72db5d4572a188b3214a4d281e3b215ed6c99827..3071475980b8ea3ee700add70bc560741c148ba8 100644 GIT binary patch delta 57 zcmV-90LK4@ix2;b53o|@uhr>Dnx5GLD@g}#mVFLF!x2>82 PR2qi@wF0*SwF86@^B)*c delta 71 zcmez0#oyM=zrp_~qrztYqjsu5s`pj56{Es-3021BqKpdd`>hza@3&(5s0I|5DfY5VUj%q;={&hQ%! diff --git a/docs/images/mqc_deseq2_pca.png b/docs/images/mqc_deseq2_pca.png index 25e86ba65e14e46f3c5f65c59945d5a4bbdb22e8..942bd52838b216e7ddaa576b06e07b70aaa159f0 100755 GIT binary patch delta 12 UcmeA<%h-LEal*@uuNI{O04d)F&j0`b delta 14 WcmeA^%h+?4al%VRg^e#4r2+sl*#_?b diff --git a/docs/images/mqc_featurecounts_biotype.png b/docs/images/mqc_featurecounts_biotype.png index 652ca836514900ed15bbc53a4140e1289f7d41f0..6cdf4b6cf9c4b11b4b04d6ab45d53d9f2dcb0261 100755 GIT binary patch delta 12 UcmeDF&eZjtX~Lw9lYi_204qWVAOHXW delta 14 WcmeDB&eZ*#X~HB%g^iPb>;eEZHU~fe diff --git a/docs/images/mqc_qualimap_coverage.png b/docs/images/mqc_qualimap_coverage.png index 3696115ca588e878e89b8055c1872b0eb744eb1e..185d591a2a49cc98b0dbc5311030e1082e9e1f0b 100755 GIT binary patch delta 20 ccmccngZ1_g)(zgXHv7!FwspI50Hc)-0C}ki{Qv*} delta 24 gcmccpgZ1tY)(zgX7!@{q&$_miQDM7c0Hc)-0GF%^JOBUy diff --git a/docs/images/mqc_qualimap_features.png b/docs/images/mqc_qualimap_features.png index b285331431b0a09df396b96f17ba0a4f53c696aa..bf2bd5146cb261fe1e65ab3f8f183e52f298a702 100755 GIT binary patch delta 14 WcmdmXn{n%H#tnSooB6|+iva*Ln+6X6 delta 16 Ycmdmbn{nH1#tnSoj0&6i!k3Ey06fhGF8}}l diff --git a/docs/images/mqc_rseqc_junctionsaturation.png b/docs/images/mqc_rseqc_junctionsaturation.png index b19080a05f4e576321f4c9868ed369b5fa1a8da6..7404bf198440a7c14013d1f016a71c4fd268d61a 100755 GIT binary patch delta 23 fcmX@zz;dF2WrLphW_@ux+sSz$KQ^a_K3N3-a)}C0 delta 29 jcmX@nz;e2QWrLnLqrzrAaXVW^g~>S~KY*N+&?l<^mgfqr diff --git a/docs/images/mqc_star.png b/docs/images/mqc_star.png index b9675cea8feaf0dd529ade504b276df13187d6dd..b906f6cb60355f2ab06c76e294f9f22c706c13e1 100755 GIT binary patch delta 24 gcmZ4Yf^qc=#tj=}HgA;KsIWQNmX&dHrrl9f0FucHrT_o{ delta 30 jcmZ4ef^ppo#tj=}7!@{eklCmJq!Mje8G%%q-BD8jzkCY= diff --git a/docs/images/nfcore-rnaseq_logo.ai b/docs/images/nfcore-rnaseq_logo.ai index 444dfb337..9ef929a42 100644 --- a/docs/images/nfcore-rnaseq_logo.ai +++ b/docs/images/nfcore-rnaseq_logo.ai @@ -626,27 +626,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/Thumb 206 0 R/TrimBox[0.0 0.0 1150.9 517.026]/Type/Page>> endobj 201 0 obj <>stream H���ˮ�� ���z��G�]ی�� �"Ј��Lg��W��}�=0�����~](�X,}����鯟c��O����[ ��S f5^3�p?#�����?�O����[�W1u���C �ۃ ?3���n�c(�w���b!�v�Qjx|���כ�e3�tU!��!�1��l�[)�۪�Jl�Cgh��xŬiݮ\k��[�^�c��������sj��XYW—[a��~4R�f�0��e)�Ltb�L��B�>혏g'{}W0�p3��ͪ6�W���-���g�.P�F����V�j�0y�/g5q���!��lz� Z*�� ���{�[�*%����� @@ -709,7 +709,7 @@ U ��.��Jl6m�Hj�u�,b�U6�+s�� �hܸd�-ʥ�}�wi��-s�un=0�Ľ�i-_�*)U��_ˈ����b$��na+;ϧT�;p�pA7����C�4��.*�Iߥ�a�8��M��m�.���ACi���7�\j|fi������ԫ)��]ޭ�j����ʄ���U�]�3(í� �wh�J��c�h-�4x7���h׿*P0�H됎L����랇ڡu��Â������,�{�Bz}��8�v�g�g�Ҳ�d[�!XTZ�Z.��vl�A���g�� {;S�m�`v��ؿ`~�?g�a.� 3�Ì�{����L�^�������W�����Y�e�4��]�L�7o����k����!w����I�~�Ir�a^=�C�#Z��h��`W�u}p����)��"�z�7ff&�3����$����F�����J8Ҷ5���m� @@ -1337,7 +1337,7 @@ Em �F���ʳ��'+מ���le'��I.�;�FY)��L�T�c�����|P���r:��#�x>�3��z��h�L�9��eHc�_#yV���R��!�: �q��q�)ˑ�L�S�,��yJO-QZZ�R��L�#}�R\ ��z@I�Ge��Ǖ��6|��W<h5� ћ��<�X�uP�u9~���/^�N��� �I.W��\6��R��pɑ����"%gV*)�A���Jt�(�=O��U�y�/��G�� ���}U6w@+ј�f��y�PP�����ϼ��L���C����D)�3BI���iJ��(!ۧ��r�rje�mӈ�)�˝�X�}�xQ�w7U�� ��������ؽhN�%i���UPE<��r�{ ����H%��o�-?A�|�F�g*Η�X�__�b �*��KQ�2.���T� ����^pQ��C@KП��Dڑ�P �P>ȅL���|�}�^��d+ W\�Q��hŔX]����tȑ�_$�4��(c�,J�*�t=�T�����O��\�K�%7���ME��F4�� � �g��R]�AQ�g��]w�EЪ(* -�-,����� � +�-,����� � B��m�ă�D3i�F���Ui;1&ͤ��Nk�N�c�̴�L56i��֣�c��,�d�?�Y����罾��}��F�L+�����`��WJ�Q��dv|d��ȕ�Q �Jv���\*��C �~�;�+ιO��c�q��X�����^8V±����`>(� ����*i���d�_+�;IF�YI��J�d���T�'[��y*�u)ڋ����'/ыp�| <�<�_h���&����q;(�@1τ;�~$J� ~d����ʼnJ��**�@0��� �:3��"$�� �*�� ��!�y���U��Rx�P J��l�L_��qÿ~L��l�u1JXbPt|�R.�Fz#ì�C�H� �� ��N��j�ų#a��K�gpK-��/p� PH�9ĜE̓}�O?���/��Q�_�µ�EgKO �F+�k+:w%�K�����F.�(\/�Q��u`;ϰ-�D����M��T\~�vPB�s�y&1O �_?��f4`��9��V�AZM.��?�P��px�s�{�E�z���3����r [d������!m��\@̳p}j��Ϋ)��$C��7�X�l�a�X���?X�6N`���LM6s�6�����U|R�M�y����Sp�w�+�TQ�"͡|���ի^3uK a·A?� �XWY<���e0��":�����1�%7���� p�;q|'��q�������L~x�Թ�|���Ӊ9c5�=���m�p> �����q���/�O�=��r�, �w��}�q�K�C�M~���'��q~g���<�>�,��O� ڙ��zb/��k��u?#|a�g�D:a/�Caq0&�X���k����u�7F��4�(�8�!��8��G��䠿���&M��������� s�A�� ";`4"�hu��&x����`x?NsfO��8�)�������w �/�:�r���΄;��M�6���H��hD�9p���ɈH#��88r�p�u��\���,b���%�% @@ -1590,7 +1590,7 @@ PFF (��2U�XE�j�����/��-唞ה^�d�ޗd�����3MD�1A���J^�W%fA��=X����4��������B��y#45�Z��ѫ� �ޥ��~E��@C]S_kͭi�f����!az�S��z;\Yu�:\Y��HUI�Tf"P� _]Ax�k���C���?4 -`C�z'f�,@���w +`C�z'f�,@���w ;�kW� �j0�\Ž�-���nؾ$�mˉ�uY [�u�M�e��W��/�ة��)Z���x�M���*� ��u���]x��p�N�A�{&q38��;���p;�@�5��7h~�D��@t[�ۛ �N�D�n���^>p�W�� B�Cȃ��z�`���u�P�� �y���2��cc}8�ܻy3��i����t�u�`����� �cOx�������>����>����ޏ�;x}~l�Fຕ@���Cq� �� \��֥)��������b�J��r:�ɣP-g�< �<ܗ��\�;�Jܖ�ᦼU��p��8��^�E�'�� 霽��:�'�8����^vMm q'� A��R����� :J����m(sEM�^��ğ�P�и�(Ƭ� Ų\+g�j�m��܂�RZ�W#P� BU�QV�W���-Su�=#�*x!�Tc'� �jLޤQ8�'� •�\C�T"� �� �R�FM.�P1�h��a�, 1�(�6-+I���d���,[MQ���P�SV � �;ej׻ȵ��e�=nR�q�4�ew���8]���,X\�i���P��%�28Z��2�� ����X��N��vQS�K髂X���&� �Z��:�\�Q-Q�g�9(J+��F���u�i����W�I�cn����(Y��S� ��üIw��y����pB{�a4�ܷ ����7X��FU7��(o�E�42 �Í��b�rkS,�k�lE��V^U�M�*�U.$W4 *�\��ݢX�q��0�����4��k �3��!��A4�(AD�q���p�U�֩�Z��� -X+ +X+ 8"8Kl��Uk+���.D���:��Z��u�}_�Z���?����y���}r��?h��L1+�'Ǫ�$�;LZ�_3~�P��ec�^:A?��i�Ö���8�g��~����&�h�;���+�Wƒ&�^��I�>��7A�R9�����{��u{��d�*`}��¬4=f�15�����x/��j\j�ѫ;��|�v��� ������G ��X��{E�wϔL���m���n�5�l�����%���$ ݓ�W��o�����y?���8�lJeҁ�5��29�e�g�a�:_�_�q�ڋQ�q���=�C�8���9N�w��n�����X���ۚ�]2�xu��j��8��Q���gCl�s��4و<�+al܃��?/ �b��, q=0���D�Gcr5����04/��"�����~�}T�s��{�r�e����.�r���,�E�v�ܜ����GD����������7H}�z�Q�I���;��q-������r�i�9����Ѩ�� }�>�mm��V ⭱��5^t��Wt�S�Y����Nq�̟���X���b�ߢm��_�6����*m�管;�k莿+��g�s����'� ��v���}��8 �����.B�- ��8D�z �6P��F �m���m���m���m��dۤ�}���h���ͮny�c�!�xP:շ��n+�9 �d� ;�������H΢�l@��@������Ѻ��EA0[T�V%=вdKƠE�4+�+J�D��u�I�U��>%�K��ſ+� ����T��� �O���ﳿ&3{���_3�[�������_� � ����wE .�R�.uC�K�ɗ�������"�����ۡ�r��AWY �E ]�� omb�j�/e�?f�SX�hf�?�� � rh^�U�?�����mw���fp����ػ��>���p���b��P٭P؋!�v��I����/��3x���G�������@��S`�� @@ -2042,7 +2042,7 @@ c;E즣(3 � D ��!L`���0���!J���{��e7�#b�ɽ6ɼ0�X�a,L�|�q��zJ�] PSSm$;���8D'!b8�� ��-,F�I>� d0�� �1�y7ȹf����{���5�"�Iq�[�\9 ���N�����98���|���_%~ �/ .�) ._��\Z�!�,8 ]�u'0���B(5w�N�� �FO3��朜�>��d�P�g���<��Y �]��qp���8�����{��N���!d�†�Թ�^Z��>\Ҥ���}j�Ct����r�t��\�\�ȯ�k������K����8D�??8{=�<��<����w��rx\��O� ��&5�y�� v����h�}���q�����-� t=��!��� P F�j0��ؔ��f�/���T�d���V� [�=��v�]�������K�u�_}��K�7�펝ץc��+� XA��S����Z�Qvg�+t�B����-��l�7�?c�k�n���c��g�����X����>Nth���o����+|�������+{n�* ��^�k踂�?��t\B�{l��u�m���29�wt�t��"w�7�1p�����y�����G\Vx��塿ۏa� @@ -2598,7 +2598,7 @@ n ����I�6���� u�B4���"^���,���v=��t?����{����'8�/��C�J7�W �"�$uA��"��ry�����Ũ��ɯ�UJ �3�Z���'_��\Kzi���L�!��^�<��c��4>��xm��3N��7-l-��3ٙ2��fQ�X29�R��mK}�o�u�f�UaR )��L97�o -[�/p�Lq_x�A�U�.�vA� ����n��+NW�!�zi�������"�4����d!DBS'��F"���l b����E����j�7j$*�>ȧ|Sğ��lp4�ϕN�\8C�qj�M�M� +[�/p�Lq_x�A�U�.�vA� ����n��+NW�!�zi�������"�4����d!DBS'��F"���l b����E����j�7j$*�>ȧ|Sğ��lp4�ϕN�\8C�qj�M�M� �!�H@4�_$(������Z�S�4��7`C�-�X*T�_�}�Ɲ>]�0�E���Rc^r[�& ���F� n�NSz5!�s�U�%�y|��B�H)��%w�.3�S3��茗D�q�d�9� 2l�/I�*�9��`�An�5������ݢ��94 ���3�(w�=� ΌaFæւ?j�|�bd,�4���=)��5߈��~�C=�0PO��{Y_��~U���R���M( ��`�{��� ��)�@ʃB�/~�!���l@Ɉ � ���c�+u���A�&�� ��lxPN�$�w�e�j�' ɘX:�T\*حQNYq��^��X��J|�PŒ��D�&6�!�-W�ӎ��� HOA'!'�C ł�g@�;1H�0 �(��Qj��y1�!�%��"�J_G�@� e�)�@B�5v�"�z>#�Q{E<!���L�#�pu� r,Z��2�"./)R%�U�U�ut|Jh�y�n��8 �-�[��o��pc�0�ж�ؖ+D>K���;� �9`�y�›G)w>H��w�Fw�ŻcpD�G2M� � @@ -2714,7 +2714,7 @@ z Qjs.���/�|y(�.�@�#�fV �v< ]�yÏ��U�3��)�M_��B� �p峣�Wo�~S��Ǚ\q?�*u.��#D~(E� )���m� i��ý�T�ah���K�ӳؗd�n��? �P�.R'�O�O�8ǧ��N���<�����:�c7/�q��Yu���^BNg�|=�����^�|�_�E��<�K��X4��x]|��xb���JN����ʫ�O����q$�8|�< �����A��^h+��]ϪNr_m ��r*ߋ�e�7uQ�q�'n>�:ؕ�ǙPVz�N��7]�p�ZG���gg��c��*'��c�xGO����;(�bz�%��J��m�Xk�&njO��2ҭߨz)$�!{6��k��A� dyJr��:�VS�wD�-���w�����ˋ����G��S�N������i- W����s�Z��"�s[Q���WP���� �@�91���P{��;?�Z[�0�}�>�t�FmQ��G�㙆0��K��G� ��)�o�V��D�'� -�Z��5}+ڨ��ϙ� �ϰ@���[f�.=�DŽ�)�x��E�a=��"�_MH�D��T?~�1�Q�5=�4�Fy��&��'�e���@��&��7w���YXl +�Z��5}+ڨ��ϙ� �ϰ@���[f�.=�DŽ�)�x��E�a=��"�_MH�D��T?~�1�Q�5=�4�Fy��&��'�e���@��&��7w���YXl 1 ¥�/��pRiT��|��˃RR���nN�䩻��uS�WS��7����G����M�đ�yP�����w>��u�k���zW#��/T��.��4�*g1-�e,�a7W��x�Ji� �u��Z�5�Q"�{r5 �.�Y���?��}j��2hrqj���p-ّb!��Z*�ݓ��.ZY|�׸r�u����fsF�+&��(�xѠ�+�.v��h!���_R�?O�_F��㽒�HG}E�[���:ox+#lo/���Z��k*s9Ot��!}f>�TNI���-�E�{1G��f�5�Z�q� X��#8���QJ�+4�'��+2�a����HKc{ ���O�=9�qc 8����$8]'�n��t�_&M"2J�h5���+�8�0�� d��@�{q�������kP<����w ����JZ�J]tq/�`T��!e�Y���Ҋɽ��n\���u�+���X�/&Ȼ)��r7[��[/ @@ -2870,7 +2870,7 @@ f 9S �S(��J�9R�R|a!��${��YGF%n�V�+�OU_��d��[�PU2��{���� $�Ũ� ;@Ե�������S�����&sB�LC��)��]�gk�����<��z$qS�T}e�_Y-Dˠ���ÍOC�V8�Xt|�A��6�c��TWJ��ڋ��WpB�*d�����{������cg� ۏ���{���[Y���t����,w���i��cQ�􁽳�<8u2�]������M�a���f���ZaJ�OTC�œɇ8n<�_��c[�>$���=�M/�O�]�Y�V�)��G``��:�����ؘ�w-dg�4�l��v�]�w��@ \��oS��[&)#�����d��FYJ�v^}vT��7TI�o(�����B��ce��O�!s�5�g��P��޺��Ѥ5Eȝ ׯ��ņ�D;\�S5�oQj0�\�ZG�c �1���CHܒ�4��|�{@?�/�<ᲊ`{Z�Ǯ5#o�8�o��F�)�k�ݩ ��Df��%���� �3A��X�h�����V��d1���:M�� =��C�/������a0�h�OaD_�h�Y�����EV��P�.;ВL���2�r�)�b!n����=�VZ�=�ڙά桦�A���)�d[E��.��-ɇ�<,m#��_��N�9⦇����9�)�6x�oZB�h���� �H��rM��ҹ]���_�Ϗ.h#Ę�8e�ezB���),-�L �L�j|H���ƨߺ���t�KȠ1ܦ^ڰ�<�������,Y+y���8t�����չI�v#��"P�^���+���f�Ը�O��z���u���G%�N��2%uÏ�ɽS��҆��u,�De��{{�'�|`��bֳ�~��Z����_'�E�g���O��D{�b�PC����8�� �K,��4Y���X������sE��V���Fz�GV��N>kh}ܜ���]MTto��t��4P8�s�/~R --�j3��O��1W�"'N2�ˮ*�6�R�K���� ���I�B��ױ���8jg��Q��j��i6V�����cDc��/��2d#�m��~��B,��1VJ���I!����O,����&����m�خ�-�@ȅ|}S�����e"�R���^��uoMm/����kczn*�1WUCV�C`��[�79W��f��[��|*��w!�3��m�-C��_����.���#=; +-�j3��O��1W�"'N2�ˮ*�6�R�K���� ���I�B��ױ���8jg��Q��j��i6V�����cDc��/��2d#�m��~��B,��1VJ���I!����O,����&����m�خ�-�@ȅ|}S�����e"�R���^��uoMm/����kczn*�1WUCV�C`��[�79W��f��[��|*��w!�3��m�-C��_����.���#=; �;��E��nM�|\����W��޾���-p݁��|^�v?�fv�IutKP��� ����~�mhM�Ц���U8�����/�fۚ��n�.;W�����E<�_m�sܑ� �Z��P�W�M��'�(�+��rݠRu�ɲ1z�^+��g������ F��Sr/��j/���1cut�4|��U��v��4�0�������$���R�zfd��h/9E^5�.�nlTm�.�X����Z>�ӷ ��*��R��!?Vqz�glIV���ax����׼�T�=&�%IZdo*'M��GvF�%í��w���sw�w�ZS�af��� ��n��#q��BF�Q�a-;}�Xp��>�/�l���5�{(��#���V�pX�U׍Jmy�ܿMC{��H_c1�:\�.�n�ꭿ�{��r���t{U��w�a����؛m�:n��N��d��s���A��w��H�!f�s_�u��OIY5]�nE�иl���渦��ѱΖ���R^����n�92봵u��|0_c^�}�ͱ$�ύ�9t=��tr2?6 SX�+pAƨm �ƈ�9�9b�r�Y6� � �JCûr�h�ۃ��>���f��w>mivf�a̰��ٻ�.�%���Y�s��aWH#��f� ����M��k~��uu뫭4�wb �[��B�o8�h!-�{��y_�������C/�2m���\����,[feX)�����<����2�+��-I� +4��x�p>l?��ݭ�"�z{���z��>+�"�5�$Z���c�����1��ʹ%����d"�LՃy{ڑD�iEꉚͰ�`���h�:����y��AU�#b(��<�ׅ�>j�o�j9T�Iƿ�YRp��IsZ� 6о�n�^�Oۮ}��4�~����`���H[��"�� ��Ɔ-٤])�"�q�By]�k+2��bK�����5��p����Y��nI���>>������mW�8�ؗ�� �< i�Y�F���s����9�|�j^P>�A9̆go`�Ύg}ba\�����Vf 5k\�V��rƲ�{c�����&)���︣� �kGV\u|ߨ����-m9>��c��rv�{�`/��Y𪹸܋z�� ���9�# m=v魍�lP�|:͜Qd���!}yY�<�)��N+i� �\����1?+[v��r9˝E��U"������ EН[~��e�W%�y��{/_���o-���Ѫ�Q���N��YS1ܤv��(�)�h]��<|��U{� l�55�:n=꽟V���?(�0Y׮�����M�Ε�]�>w���& E*�.)w�"�TE�ZV��Ώз�j~X�� ��)��[�7��7���_������ΩnXpB0[� ��i�6���ڹ���Gs�j�Dv��,,2�J^l&����jJ28��Aj `!�y��'.�*��!�ɫ�°���W #�H*�q��+��^��r�,��ָ��lj� �v+���V�h���郿BYq�x��|���b�dXmq@��s��A�Q򁮗e���\�H81�/ё~��P�F�� bM��tn�T��-�?6����7�F�g�e=�p�����d�@~�6>oɹ�8�ޣ�k#}y6���k^Pb���1�s�x�c0�+j�$=,����8�ȭ�F!EU1��R�O H��A��dr/���5�A4U/�����.Vq| ����1��\�(ͳ�����5�`����~���1K��JWߗ\��x�Uu�_2�{ɭԍS��Pd�f#@�4fZ�.�J�X{[�cpE��ܩ����=Sк�~4۪N�FK��(M4�}�a@"@6��jGHT�mP��}a����{�d���7�>5lv�h�����v2JQ� � @@ -3467,7 +3467,7 @@ N x��S� аE����R+(*�P�žcB� ���6}QxܧE�NJ��-�g��)_���7��||Oz���Q�S��&,�hG����2SG+l�'�^�O���⟚�jڱ�X�V�/$&Z>�ܬ�/���|s'\VV���s �������L)<��"�b�~���?BÓ��ڤ�2����K�A��7�����r�t1J�E�9X�;��"���<.�bM���iӯ� ,O��GM�y���c��\+��K ���Quk�q���g�CKY?wTp�hS������M�=*��L_������6O~2�9��|Ft7��Rd�\OZ�0m=c�yφ�w��_b�8����I�`i�����E���w\��S ����o;;EZ�@� �ܚ��F��Z^t��#�mW��[�)�EA���@�"��=��|(Or�gUO���F�_H�3�JP���Y�ͱ�����/4���'C�������l+@+x/O�hʕ�+En�W9Perc�r?(�� �����IL�!Z��xڟ��� Eբ���� oR��f�J pF��dj����k*:��LO�mD���X&з�D�M[�Pitk�Jq���=[9I�������H��4Z��O�fo3��'�aD��T�2�T�O?��y�6��5�A��ަ��=�h�zT�V�J��|<�zếĵx�Ż���+���sZo�� �X�����ȯ�k�8}��f�� ������_g��@��ٜ��]�-��iVV�iv���"�_a�=����W�'�g���O�3�9(� �q���[ڞ��d�툺��gE� =��ʼ6�|/��Y����o ��� 7\=���IJ��v�����������ѿ1"�4���h��j�S�d�1�,o�>N�/ك�jp����q���cqK�a3(��`S.���1���%�R���2�N6pݛ� �^�<��Q>q�_p��kv=��Mg� ��mY�x�E��Ŕ�E-O���"����k�Os���y��:ҳ3]~k��2Z�m�l.� �A�����_��EO�\�� �V dM:���Hw�����no]�0���m����˲҅ӛP3O��4.�e�}>��Zr������8_����Ǘ٥�����h{�~:��H �h>�� I����+�d�>|��3u�!�Jن�q�*�Wd�����P�y3*D��""�м���i���s�����d�����>;{ F;'u��A;��ث� �_vH�/�;�p��-�U+��Y��]��P�斒�jk�z��;[Y���� �� -�v��OJn�!��6@mi̴�b~<����/7f�\Zj� 4x5��L΄��m)�0�eq�r=^�h)�h��ߵ��'�l�^�/o� ������L���vƘ�K��I*�=�2�uw�f ����?�c~n����4���\µ�<�TfNJJ���� �r���V$Ż�⭀V����qd���}�~ �l���H/|tٕ�}���U��M��|�_A� s��X�z�M =����;�������&�rQePC ��@>.C����d�ߗ�9���5n���R��K�.C����d�ߗ�9���5n���R��K�����Y\�|t�,����0�sg�OO%u:Z4�&z!�{5'�楰�������s,-\��H ��h�[�L�l�2K 6�r ꌬFf�=o����Ll>���-�29���®:u�yYM5���! lp�����x��;\yM�i�:�������eFA~l�V�\����߭�Q!{��R�8������� <ŏ��jX�_ް]V�i=�w��]�r�qv�{�h�ٯ V͓YsPۑ3�öemRϋ��P2���o� @@ -3761,7 +3761,7 @@ P ��y5,d�O��v����t��]l,��ȖUD�6)~O������!�������Ě��f\����(M�����f��/�c1*��f���jmPJA��C�ۉ��B]׉���wJj6�-�ݮt�;F��㶞Duu�� ]��� ?�pi�KA��[�>�\���|� |��A�9�Syvܩ�%�|f��L�Ŗ�h�Z���tS���E��t�% ����m�r�U���)�r��M�W��D��fM�����Kr�?[�n�����5���- �֨��R���7�r�����q�RZ��Z� �B�m�)�_ 6��5�t������RU��#��5Mқ�@��F��w�'IO�i�v_�"�d�b}�����Ͼ -el�5�=���jn���*��$z0�~ ���P���)�T�K��:;)]�F�13��s�(�^N�om�f��Cf��Ј+\7���ܼ��Bb'ӻ�̖�"S 2U؀.O��ާ��Q�\����É"������ �t�r}�����F�=k����'� � :�:"���k)L��� ��m�$������ {�Ly�"U����7?.�{z;�/df���􊯨4uʧ%�<����� ��H���l ��_���p���i_o�&&:Z|�Y����.��g���W%?�͏�yGς_D��^N�om�f��Cf��Ј+\7���ܼ��Bb'ӻ�̖�"S 2U؀.O��ާ��Q�\����É"������ �t�r}�����F�=k����'� � :�:"���k)L��� ��m�$������ {�Ly�"U����7?.�{z;�/df���􊯨4uʧ%�<����� ��H���l ��_���p���i_o�&&:Z|�Y����.��g���W%?�͏�yGς_D�>stream :n�UԲ���BPm���Ƴ|Yl��%sEJm%�[?jX�һ��=�Yڊ� VOps���\�T�㝲�������𓥑����'j�Hb�6sX�w�uj=�X����#�q�y���5�h�P {C3ZB�p��Ȳгt�ss����U�G;G��avߵٺ�=f�����\�3����{��$�C汞�2*Y��g��<��w�/|ʑ$�Y����[� �����CQ��^�1>[��K4�~Y�5[�pe�G��C!��Kl�41˄��eކ[/��z�� @@ -3958,7 +3958,7 @@ Pq f��މ۞l5QI'��aF�8h9 �P���'���B*���g5��A��O�|z�_�3!��ߖ������ǻ�iE+�n�ᤶ�̢���P���/�^�R�<]h��3i` z����o���|�ü���ӫ�R�fM:���f�}숏�Ī{[������I�-��1D��I���\7V�E�/ߜ"l���A���ņcʝ�T� �J9?���5� �0Y{2 d+S~���'�R3��$��KY앬��Rb�i�10ۂ������� -���HT\q8š�����]d��Te���a���v�� [��lcV^W^��\%����Z���$�;Қ�ŮLu�`h�����v�Zo[�~�z�ϫ��Y�{�ɺ��Wi�o�ʹ�r�o��Ռ=�[��^ի��U˯̒*�U4�<����ʣt�bc�b��Ҥ_6�H>^���of{A�5����Fي�iあc�"1 蕕[� +���HT\q8š�����]d��Te���a���v�� [��lcV^W^��\%����Z���$�;Қ�ŮLu�`h�����v�Zo[�~�z�ϫ��Y�{�ɺ��Wi�o�ʹ�r�o��Ռ=�[��^ի��U˯̒*�U4�<����ʣt�bc�b��Ҥ_6�H>^���of{A�5����Fي�iあc�"1 蕕[� ��*,d%�םv�۹Y;���Z�m l)c)�AoeU��״�U�}y�4^��ȕ>E�Q��[~i���J��|�?��� F�|ǨdGrw���*Փ��[�E��yOmQQщ.3�j�Y���(����T��'.��vrS'6�^��}z�+�⒮�� ޗ�����Oq�L�W�J��6��r�S�H�7�� c4�:c4��2�J�K-���m=A/[)����y� �̉����M��s��: �BXMno ����ݿYO^ �~g��=+.�β���}��Z��Q��p�t�XRtMj�}[�P�6����^��I!��_� �/�1�I &�n��PZ���쯃'�G?�Qh��e�J4�3e���YW�RkE�Z� �3�`�Hy�sm���V����"����%��� �5!US|�W�qG���mf �g�7� �||�� ��]��Ui��k�=�wBk��q3 �R��+|&|��Z�QD�r�쇩$�o���(�dH���9�apb�P$�f`���8S��:ʡ�9%�t�ӑ^[ |=�:z|�:�e˴�� ��k ��U�~ �W T�H�X}k���dW4<�z�BdK� ��d 2��dS�d� Ă��� � s�T�9e=c�A��/���߀W����ߑed�� :���P]����;@�<�g� ��Od��d;� Ȋ���Q~�ly�B\� K��7I�1�A��<o�<@�fS=�?����,_=�W|��Gh�����g��7���Ȝ�b8@�S ��l<����M^���+���:qda~�Z[�XuAVύ�Wїg�5�B����D9;t�2V�<�f�W@S�P�є�]�̷h�8�Z']��~�@ �N �q ?����Id� ��dA��5�u�B<� �+� ������;�Pҭ��Q*�����5��\�� �"�� @@ -4060,7 +4060,7 @@ Of( �S�B4�bN�2�ûQ���\;4�1<����7�|`Lc��,�V�SY.Z��<^��XL�������T�n�R_����ttw�7��@�l��d� �����!�5;�q���f<��i�_��?a�?�B��(��OV��_�=�}�^3�?x��as�PB9�qh}��`�,\b��5�A�y�Ҿ��pv���J��F��x!�� g�2?N�Ao|x��^üz����� �wm�›�룲̩v_g����΃1��_ʀ]d+S6�w�p���_x����~����d?�����r#�( ����y^�(Dz:�y\��;� r4�PU6ޞ.Y��9<��-:G�,���C�"ԇW(����� �v��0X���2 a�a !�2���L�ߕY�V���pu�v�dq,���nI���>���uw�.�Um��!U�f �t�iNڭ W�֫�(�ۧ��ܵ�u��X:R;�j�N��){���S̰�R/ H��f�+7`2uS��쾏�wQ����Z��;�|3:� ��_Y�۟��V�� �Z��CC̐��o.�ņ�k�$�4X#�7����ۚ���6�$�3}Uo�Kp�͙��=����`Y��?T�O��0,�w��G�J�'�D�>��-ե��S�>MI��z�I���=�j������u�Sm������Í<��D��@sͨtM�7�h� MHN�ZA�o l(rDO�dj�P����\;|,�8��{�ߺy��K���r����i� (�k���8��7�_j���lS5�������]���� [� �u����݄"����?2s�?C3a��F A)F$�*gH�q�B4b���:����Xٍ��Ǔc���n�b�{ѕ�0CMF�*�Nd�y����[o���{����=�;M���������.܎���q�<��71��M^a�*?��eR��qM��������i���"����鰫��^b�����ɢ��E�W*q6]�u�٧�Γ� 贻��+� �@� ���� �/�&��l��gƸ�}$<֐�✩<����L�����化���i��-1������A^�� ��A��� [�7V�辠q|O��#ڽs幝����.�O])��Z�$���Q�7�|r�F����m�������j�#�6����e|^x�j��Z�}헻��%�}����n��ӭj?�N�2�B�����9���5wh��9�9���SA��d"g��{p��O�2c �Kh��^i��J����\�ٛږ�ʦ?��l��r+M��by(�\�a���cЛ͜Z�v �� �A��³�Z��5���;[��]��~��l3��2�{��hZ δ��*�܃.�@���k�7G���R��o{\H7�r~ ��Օ7�;�4"�%�0�b2��E�(i�h�����g�w�E�W��+'��U��vN� ���y� �e����)g�_<3�3J�����q��e4z��]������G&�;-/���W8 oӠ|�糨�̖�J6�l�Ũި�C�lu�V�§րe&ׇ,O�����a�k�b��K�1e��>���H�G��d����V^VTR���6��G�c�s���cT{SQ1Ƀ�Ħ;��e@S�|>f�h�hM��������a�:�8 +�����4T-�31��9�N���|�УR�/ W��V󏱧�ݍרl������'��u���TՇ��/���z��b���A-�����|��ڛ�p�ЯƂۺ�h����2�� ����;V�~d����E���:��x�����m�1�8*4��=҉�Ez�sl�>ܘ�dnu�&b��Z�k�7y����?�����7S�;���o��Ϭ��Y��>/��bxʭ��av�������p�E�g�>��k����*�6Ν�I��?�� P2h1�U�r�6y���@�9�36��֨Y^�׋Kd�)��~�i^?����m� �.����oA[]z���f�Q�:�ռl��;v+7��r���CS����<��tж��4ҍ,OW�����|z�WJ˷�1�����n�^�b���y�:Lm \g��2ͪ���8{T\����_Ļ3�FI��PK 2 @@ -4089,7 +4089,7 @@ r ��0�_�˩4�|JrBZ�M}�z�O�Jim���H��E\������'k���r�t��X�UG�p0���?�����Z�.P�M�RM`��Z�UY�I�J�q+�/+���,f�(��#�ܪ.w��������J'�F��Tu��d�օ6m8����������;i��=dQwK����k��9�m�I�&���s4(����,����t������JP�\*ƭz��2]H�Q�sLX fq �f5?)C|��u>؁�|uK���� �Kʪ�WB�lVJL��K�z�q�b��t(�c��x�+�� �$�I�^��VR 6��'|�y��< �mpƶ�)�KPW'P���`a��sKi ��J7�a�}�f�fs��[�l�H���Q���Q��={+gk�W��쨮Z5����$�m���D����>�ű s�˭ʶ ;�i#�����w�� J��~�@����ᩙv���ǘ��~�d@8}N�HD)VIl�'r.�t�� @� C��o�+?`��_�e����7���.�ƫM���7��k�K!�U}�U�J�>G���s!���R6=^�������S�]`�1���Iq���pnHF`��sRL�R��Roc)^�4�'i>�Rd����q�qr����`F�id���X�7���$�C]T��������;����I� �H#�d�7�@� -�S�?��!�� �F�"��S�j���8L? ��C���u&�}`Bt�~�0SWRl�/4�>�D�3�ق���3��+�ʶQ��}���0� ����J�26�rzQDtt�� ��V~FU�&�����N�����������@�m +�S�?��!�� �F�"��S�j���8L? ��C���u&�}`Bt�~�0SWRl�/4�>�D�3�ق���3��+�ʶQ��}���0� ����J�26�rzQDtt�� ��V~FU�&�����N�����������@�m �#@4E�h�h� �@�� �j%Ŋ���*��@�r4+�2q��MDܕ�mOټj��}*ݷ�*���QN���=�k�WO�Ͷ�J����?���F�zf��m�*@\��� ����������2����1��b �<���<�PN�J' UbR�GQ�+I�z�b|N��Ia5R\�$aa�����?����D�:��ť����;�:� �YC���mL �VR����tL�]����u��ܞ�,����n�����уΦ ѵYS���W���[z��p�w������|��yv�Cg�eb3����Z��:��V�Z�|�gci�Lj�\x���x��ҙO��ὖ{���u��7=��M��Z9>�[ށ�y����ŸW^ �O���'����֌�h�x�lTV^�P��Ӱv _��{֘X� �� ��n0�M��/�w? �߭�Ń��p�Ң���,��%��?�q ?Zi@,��_"WH=/.��lo�ɕs���g�R �宺�*��1z�*�sjl���ܘT&]s�\�MHH+�Q>�AW��B�� ��̴�"�m K@X���C���nM$�N��z�&��~�G{�Z���z����@~�U�f�J��Pׁ�ik_��=-�����8)�Fc©���V>=d~V��#n5���4﵎��ʫ�v}w��vg���;�ڨ90\���=[��`g���uz�h_1��z��<��A�x������Az�{-q(-���� ��nY��7��4�������>���|exѭ�ò[��I�ƨ31�r�a�n~�?s�J_@�r�����_<�� ]n�HJ �:,,�l��*�d��ٴ3��?��t�~��}�[��i&�p�)�9G:���9����p�֫�w,*�V�>�M6z���b1� +.g��nݨ�nDo��^}-��~�O}���T���2�vk ~k��x�yj�h�ւ��|�d��$ޒ��P���F��� �0�/�f����w�oX4A&'O��?�N�~���b.4�ڹX=}���CR��m�k��� v]P�|RQ)P��;�(D��o�I���n�(J���W�So�jI�"�j2����H�oO_��dG��7w���73�����ͽ`��\��k?;�q��H�G��� �񤬪X�i*Ɍ���,R+��Ifj�|]�[ '.&�(��C��sN,�W�2b �/.hx���ԋb�\�w����1Z�N{���^4Mk2nz?�Yh4#c`�^�@ƺya͹��� 5 �2�jH�ɤ�y��4�X�T�Ɩ���'bY�mu�?���)�{�'�f����q'������ ���41]q=Ԯ�Lόj��~����1l��V�X�^��K���3j�H�� ��O*�<=�{�{+J3���R�j��� ˏ!hd����z�7Xaȝ���-]��u��,R���=� ���=3�W`����g�c��ű���*C����k��Lp�&��{������U����H{*c+�&(���A9I‚}����:W�}���ť��Y{�bo�PfS��bp+��|(��k�Ԛ���֣3zcOg����W�c�� �b����b��P�.��8Rz�aOs��g��M�F��4�tP*�{�7�P*V3�r�n�]�>~~p� �pP6γ.�TY�X�0#��3DU��tf9�)���P`l���l�"�Q��{�!Ke�I����?M��M��b��躿�Ղgԧ�?��)�P��o+u�8��D���ʈp�C���)K�^){6���,ڳ����e@���Ktp[7�,z�)�3T��4R �!�ίV��l=�]eT�wUY�����w�����/���f��MH��6S��!�쩬���a)R�=�K 2K ;|'�f�hpN3�X��N���f�g�HO(�NgC�ME���� �JJe�C�6 �P뱌���o\�tOƎ�[���������~])�/�X\��ڷW7��K��~I�5��f7�b�Zչ��&�j�4��U���|z�1~س�4c�Tt��Ty_�ER}�e��#�i�L�X����= ;�&�a�&�̫! @@ -4232,7 +4232,7 @@ yq Θ�M�46=���#��'hu��5�Qt�z�:�ed3�'� N�S��@9¦�_Cˤ6�7mܥya%�\u$���b�/D~ޢD���E�m���b?�8\rN5��&�l�1acC>�ay��•�q����[��v���,��z#���g�# N���� Օl1��7�d���H�6H�K���E�+ �h&lo�E�� �i��հ���EЧ\c����<��\4��ul��Kׯ_J�t��K��$Zp�� ?M"�l��|����❶��D�k^���n�Tp�q�s�=���3�c�-*�I@��9#;�Q��Z7��|�� -x���qM�pƺ�c������1��2it8d�Ia���c�b���K�Zk�zA��ȹ?x%���2 ���K�yZN�cc3�c�5��Y��CO�t�"l� +x���qM�pƺ�c������1��2it8d�Ia���c�b���K�Zk�zA��ȹ?x%���2 ���K�yZN�cc3�c�5��Y��CO�t�"l� 3�(T�ę?w�&�w��p���x�>8Xl'Cfp6)�e�_�v��C���0x��,*R�}'G�F��5�AѮ���G���ޕ�n놵䬘-/k�X/�R���D.��kF+>�)d^m�l��pC%��v�kF��Kw���x�_m8Sno��qxd�Z�¼����p&�8�s*=:�Rt�� hµT~۝Rt����{���0�!6�{�'"�p%"K��Lr�M�����o�n&Û�R �ף�ͻ�p[Yz�d��Ur�Po�dbػ�2S����:���p� P{Š� g|tv.�i���At5Ki�Gq��7�\F�<�=oUb�wFD�΄ć ���.w�M<�Ox"�2�_/��נ��^N�7����h����&�WVF����]r�;�ͽ�/k�w���Hk@�y���N���=O]Q��Z���}K�%� �y��X���c-ќ5 ����>!U�U<�JC<1�sΡ���Na��SGo���5�*�_�"����o�'#��]&xWӧ�����#���hq�RӺ�Y�a�\۔D&��MN{1�)�����"��tAD������!��'~�^Mt8\w;�� �(�˘!�>z{�����v-$�S*B�W?8��U�C^�[�=ka���QC/^�������+�Z!ө��j���87�O]4���v -�LS�:c ��<�'���Ə�q����g���_'�°��Jb�Ѩq��Xk�=�]��gJH�<�"HSڀ̣��g���q �!���y�M�ԯ�f`\n������ .gi�+#0i��z�%��6.��@C�l,��+�Ŧ̺��Q��9�^a�]���/;4�O���v�#��"�[��hYJ��$!P�zI���„ %��e��V�p]"7W��[�f��FY4�����_pd�f���T�� ��� 31�$�V�*��Cޓ��f�!�.AF�׫�3���'���Q�# ����d!�* �x�X�xq���J$�#�m��]���?�(1���e'�G�V�d=|��ʯ� ד��i+)R��V��.�@hLN�Bӛg�̩�RŵG�v�|G2�}��~d��I$;�"OBL%@vq ���8��s'W�y���nf٠��,ຈq��_e�Z�^�lZ�L�U�%��W-�`�����p�M�6n��%1[�c)��kܻ:��K�bLJ�b�mE����U� �a ��D!�$��GP%A�(�!�E@ENb������rP��(�8TʁG�����}�Ѳ��ޣ����~]�%�^�ԻYHg�Ӗ &�#��"o��D�N�:K�z>�e�炷�u u�!��ܟ߀�#�{,����<� �����t�V 6@���� �L�:��m�9�� @@ -4373,7 +4373,7 @@ x?gy_ ��{�q�"cx/ �{qx��31fG��۳!*G�<>�oA$�6J���{r����O��4l���Dr���QB*GnCЩ˸�w��c]"� �R@t��Z<��u,���b ��Z� ��:J���7�`��R�M �E�P9�T�[<3�[�[� �e��&7���~�������Ôf�9�|�KE���j%꥽ 7 +��'.����¾^Mz�� ��ټ^ڼUOm3G���C�hX�n%�/J�i_�����pL�:�)�@+) j�c��g����S��?��@�W����U�g}�]�q� 9?<~�oxl:��/q�W���>��~�������Ôf�9�|�KE���j%꥽ 7 g��w�A�[�OOyuE�.���/s\�s�{[\{r1@�,m��YW �bk��U�̗f|��s�ӿќ6�Wgv�V��ӻ�lMJ� ���f�d�Kq��.��G΢@�e�CyCKz�'&�'&�'&�'&��Ø�^ ��:=�yX�P%��d �ؾm'�>����{&�(�~�=Y�a��9�Q~ŏ'�,:��̝�WD"�֔$�K=� ���Lw�f'b�~9궃��:x]�]�/��mDY�%̥���_7�Z�[��M0y�] ;wd�)<������V.K�̞%ܐ��t*��"l�+&�Np�Oak�uQ���j�d�B�-<~�6Mzuz���fF��Xk2��ߥ^(� !c3w����t��������������R��>�|�޾���>l~���?�������Z����[�cS�8 �H�Z��kfIX,��+��}����N���`�ٙ���Uw��f_����Ԕ^�wj���)��$Eɒ:��N�LL�s/mZ���\7��� ?Z��Y� 2H��������v�u��o+«�ą#�Ƥ�R�ke2Ofnߚ����r���� {.���gf�ƽwd���xH O�Z_��z!��ر��� �/���YyA���5�:_|-� ����J�v��m�qe͝پ���U}��n��s�Ͼ_��"�'�Y�FN^�n��� �Wf*������z�z�*u�ꅾW5��Ն�$�{���Ѿ�+#N�=��x�z�ݳ��׋��^� _�T�ͻ-�5�8eֱ�/o|�!ÞqeJS��~qvg�_�������a�}���ꐿ��q?�͊X^�RsԺ��זn�Uީ����۸��+��^:N�uc���X9����ϡ�ve�a� @@ -4730,7 +4730,7 @@ Tx D��Ί�\�!�Ql�_��n��J=��|����}k@IJ���"E��±��5Y��`�Ј�⣵Nݜ_ ���� ��CSZ(c��d��0������z��ME�򹤗�)� ��:Ơ�z8�H3�����xb�l։~�A��!�눞� ��M�v�#��1�H���]��;)֘�w��ԋ�3^�o���ϐXQl�[ ����?$�UjRd�h`��0�Y�iDg��F.g7B�[ �����h��_�)�G���7^~1;����o���b�I�mǐz��yܶ��c'�A�$��0B__b�C!��Ќ9����^�EˡG^e;�I7`H��a���ǶG��G�nvbPq_t���h� AC�LyԸ�KQ�E�c�2��囥��4(F ��p��Y��ڑ�C���;*2�-���B�@Ɛ�� �� @�;>>�>X�l���0uP4����5% �$S�{k���X>7��$_5����V��P��u��pO�{�WC\]�=�5���OB����Q�~o؛�CYxkkb���0܃ -%��'�n���K` Y5�k����C=��,p��K�p܃&����^O.��d�l|�K���9�c�V +%��'�n���K` Y5�k����C=��,p��K�p܃&����^O.��d�l|�K���9�c�V i76�� ���X���:"3eS2������x�Z����{Cu�j�U�_�����XQ<`í)̾B ���xKkP���a��� � ��d��K~kP�0��%R��m�!�Z�7�&v�#��&rҔXbS.��H+� ���������`���B�^u���y4�1Y��ǧV�_�=ܱ��� �aCإ�0��4z.w�I�ڐ.�Lz����'�\!n�T�lP�(dcb ��8 H{G��w,T���WV�k͗ ލ&a_p�}���7�ڽK�||Sr�z�m'Xp�����a�W�r&0^| zzY��4�P�[���(����n5������1nq��� Ms±|j�6�\"Ht�+�%gιb7�皁{�V5 �1��/��t��UN������ @@ -4833,7 +4833,7 @@ O ��hB�=��Rʯ�^~@���Am+����[�s�FOahv���æHOF�y �[;��:�0� *����v�@�� 6��݊�1R� 2Ue�ŤT�I�aVP�ޫ|G�˻��KGC�3P1j x�#Q}��ڮep#��`%�Mki%핗~@َ՛W@t�z֓?|O��w��;�հC5R� W�n���h�WJ U���6���n��������IM�,Jb���]TM����m2ir�!�{��5���0QA�貔���P��Qlcr��^�4�Ȍ+�?҉����Ǯh�u�8�o�����ݰ����jR"gx��z,.\ �8`��� �vg�씗JO��Hv]!!]d���7 I�[���Y�CB�L]!�r\�^1���9����P�s�A�J�2Y�5C㩿�=!ޯ᮹I5c���M)���Y��vxK� 2�L|e)WhJ ���X���"�r'����F��5��c�W�C6���0����Y�20p$o>^��.�)��+W��O�|�d 7� ��UR��Qp�d�@����t�^����]7�G��E�R�k�u � �:ژ�O@݁��l�@�ߛ�gE���^��|G�@����d���h.��{��1�!�aC��Q�]/����!z��v����x�K�صV����x�eR@\��aW�n��|����E�q��������0��L$` e"��إ��ق�X� -�� r-K���Ɲ�QW=���R�87�G#�C�[�����0$�P� ���e�n�c/2d�]P\0w �q�E����3�fpD���c=Ƙ�����~�@K�7�C.@���Da/� � +�� r-K���Ɲ�QW=���R�87�G#�C�[�����0$�P� ���e�n�c/2d�]P\0w �q�E����3�fpD���c=Ƙ�����~�@K�7�C.@���Da/� � ĈT�LM�,m{a�>�%��6�����El�Π�""��O�Z�G����+�Fv�����B3�!|%c��.u�G����}C!ze%�>�»fA�k>�������2�K��Ĥ��q[k��K���<�嶸��(�+I�ʛu=F ��(��^p��0AD���S����c� �E>�G��Rz%P���f�Z^O�p�MQ g��� (��������ԛM������_�&�R�@$�dT�Yߩ)%aXC���%Q8l$^ז�NY�Qy,6����D��f��u�F��v���;�|���fz�V�J.yR�H�*v�Y\?t n���6ۖcm��YWXH1钐!B^9�k����F�����G�ahg�h�_ @@ -4992,7 +4992,7 @@ D 0G��RM�4�[�p��9�]��e���&u���Fq6�b�ͽ[AG�e��O9'25z�ݖ��Q�{C��X��p�>�Mǂ��`�-xj�)f�N�X�;�¬'���s f���5�H΄�73?�Mw�h=$��~�������ě~ ���(�G��#H�]2� eK~���d�q��W��ǓM �~$�@��)V��'���qF�è;�.�+I�/��a�0�Ւ���V�xE�kH� ޝ���0_OI,n�L�6��o�R����4g���!2������(���U��]S��Y.�4�N���b^9��=�-�����? �jlZU��� �P�zcC� 5\d|���pF^�t���= ��}ޝ ���K`� -U���Nq�t]�+��3�^�+����� �]��$0� �,��N# ��-D��Ũ���y4 +U���Nq�t]�+��3�^�+����� �]��$0� �,��N# ��-D��Ũ���y4 �No�08���a��{��!"�"�k����� M�������۶�f��(�.Z����Ea4䊿dl/�^k��}D\��}~�s5�H��� � &� (���fR�Q����;��z���҇��dt�r���΁�_/�p0T ���Q}��"��B�;��»i�H���Tu��2�)ܳ���Oڕ��_ݩ?�W�K��@{5�����>�gف�@����iZR`��n��O��r8��n{u�vd��e���}�M+�[ʏ� 0�In���޾Bi���O������?G�T�]˶K1�-�i$F�k�4+I�Bk��w�9��~?/�����_�3���F��G�^��zp�7�ɓ�0�~��ÙfS� �~�Z�.�.3� o��A, 5���}HBC���C������ψ rf��X�Q�5��G�+.��?D�{a&j�u��~S��,ȮĬ9����V�*'W�� ���N ���e�5X diff --git a/docs/output.md b/docs/output.md index 8caf518e0..17b0b19cf 100644 --- a/docs/output.md +++ b/docs/output.md @@ -217,7 +217,7 @@ You can choose to align and quantify your data with RSEM by providing the `--ali -[HISAT2](http://daehwankimlab.github.io/hisat2/) is a fast and sensitive alignment program for mapping next-generation sequencing reads (both DNA and RNA) to a population of human genomes as well as to a single reference genome. It introduced a new indexing scheme called a Hierarchical Graph FM index (HGFM) which when combined with several alignment strategies, enable rapid and accurate alignment of sequencing reads. The HISAT2 route through the pipeline is a good option if you have memory limitations on your compute. However, quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. +[HISAT2](http://daehwankimlab.github.io/hisat2/) is a fast and sensitive alignment program for mapping next-generation sequencing reads (both DNA and RNA) to a population of human genomes as well as to a single reference genome. It introduced a new indexing scheme called a Hierarchical Graph FM index (HGFM) which when combined with several alignment strategies, enable rapid and accurate alignment of sequencing reads. The HISAT2 route through the pipeline is a good option if you have memory limitations on your compute. However, quantification isn't performed if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. However, you can use this route if you have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. You can choose to align your data with HISAT2 by providing the `--aligner hisat2` parameter. @@ -297,7 +297,7 @@ Unless you are using [UMIs](https://emea.illumina.com/science/sequencing-method- * `/stringtie/` * `*.coverage.gtf`: GTF file containing transcripts that are fully covered by reads. * `*.transcripts.gtf`: GTF file containing all of the assembled transcipts from StringTie. - * `*.gene_abundance.txt`: Text file containing gene aboundances and FPKM values. + * `*.gene_abundance.txt`: Text file containing gene aboundances and FPKM values. * `/stringtie/.ballgown/`: Ballgown output directory. @@ -616,7 +616,7 @@ The plot on the left hand side shows the standard PC plot - notice the variable
Output files -* `multiqc//` +* `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. @@ -678,9 +678,9 @@ According to the `txtimport` documentation you can do one of the following:
Output files -* `genome/` +* `genome/` * `*.fa`, `*.gtf`, `*.gff`, `*.bed`, `.tsv`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. -* `genome/index/` +* `genome/index/` * `star/`: Directory containing STAR indices. * `hisat2/`: Directory containing HISAT2 indices. * `rsem/`: Directory containing STAR and RSEM indices. diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 30ac1a7f1..3b3ff5050 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -12,7 +12,7 @@ import groovy.json.JsonSlurper import groovy.json.JsonBuilder class NfcoreSchema { - + /* * Resolve Schema path relative to main workflow directory */ @@ -319,7 +319,7 @@ class NfcoreSchema { output += NfcoreTemplate.dashedLine(params.monochrome_logs) return output } - + /* * Loop over nested exceptions and print the causingException */ diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 5f671b576..94283ed9b 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -57,7 +57,7 @@ class NfcoreTemplate { for (group in summary_params.keySet()) { summary << summary_params[group] } - + def misc_fields = [:] misc_fields['Date Started'] = workflow.start misc_fields['Date Completed'] = workflow.complete @@ -84,7 +84,7 @@ class NfcoreTemplate { email_fields['summary'] = summary << misc_fields email_fields['fail_percent_mapped'] = fail_percent_mapped.keySet() email_fields['min_mapped_reads'] = params.min_mapped_reads - + // On success try attach the multiqc report def mqc_report = null try { @@ -121,7 +121,7 @@ class NfcoreTemplate { def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit + def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] def sf = new File("$projectDir/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) @@ -275,7 +275,7 @@ class NfcoreTemplate { /* * nf-core logo - */ + */ public static String logo(workflow, monochrome_logs) { Map colors = logColours(monochrome_logs) String.format( diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 20cab4753..1e9bffe12 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -9,7 +9,7 @@ class WorkflowMain { */ public static String citation(workflow) { return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + + "* The pipeline\n" + " https://doi.org/10.5281/zenodo.1400710\n\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + diff --git a/lib/WorkflowRnaseq.groovy b/lib/WorkflowRnaseq.groovy index f884c568a..4cc3007b0 100755 --- a/lib/WorkflowRnaseq.groovy +++ b/lib/WorkflowRnaseq.groovy @@ -10,19 +10,19 @@ class WorkflowRnaseq { public static void initialise(params, log, valid_params) { genomeExistsError(params, log) - if (!params.fasta) { + if (!params.fasta) { log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." System.exit(1) } - if (!params.gtf && !params.gff) { + if (!params.gtf && !params.gff) { log.error "No GTF or GFF3 annotation specified! The pipeline requires at least one of these files." System.exit(1) } - - if (params.gtf) { + + if (params.gtf) { if (params.gff) { - gtfGffWarn(log) + gtfGffWarn(log) } if (params.genome == 'GRCh38' && params.gtf.contains('Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf')) { ncbiGenomeWarn(log) @@ -63,7 +63,7 @@ class WorkflowRnaseq { rsemUmiError(log) } if (params.rsem_index && params.star_index) { - rsemStarIndexWarn(log) + rsemStarIndexWarn(log) } } @@ -241,7 +241,7 @@ class WorkflowRnaseq { log.error "=============================================================================\n" + " When using '--aligner star_rsem', STAR is run by RSEM itself and so it is\n" + " not possible to remove UMIs before the quantification.\n\n" + - " If you would like to remove UMI barcodes using the '--with_umi' option\n" + + " If you would like to remove UMI barcodes using the '--with_umi' option\n" + " please use either '--aligner star_salmon' or '--aligner hisat2'.\n" + "=============================================================================" System.exit(1) @@ -254,7 +254,7 @@ class WorkflowRnaseq { log.warn "=============================================================================\n" + " When using '--aligner star_rsem', both the STAR and RSEM indices should\n" + " be present in the path specified by '--rsem_index'.\n\n" + - " This warning has been generated because you have provided both\n" + + " This warning has been generated because you have provided both\n" + " '--rsem_index' and '--star_index'. The pipeline will ignore the latter.\n\n" + " Please see:\n" + " https://github.com/nf-core/rnaseq/issues/568\n" + diff --git a/lib/WorkflowSraDownload.groovy b/lib/WorkflowSraDownload.groovy index ed06763aa..5d0f7e5b7 100755 --- a/lib/WorkflowSraDownload.groovy +++ b/lib/WorkflowSraDownload.groovy @@ -12,7 +12,7 @@ class WorkflowSraDownload { " Please double-check the samplesheet that has been auto-created using the\n" + " public database ids provided via the '--public_data_ids' parameter.\n\n" + " Public databases don't reliably hold information such as strandedness\n" + - " information.\n\n" + + " information.\n\n" + " All of the sample metadata obtained from the ENA has been appended\n" + " as additional columns to help you manually curate the samplesheet before\n" + " you run the main workflow(s) in the pipeline.\n" + diff --git a/lib/nfcore_external_java_deps.jar b/lib/nfcore_external_java_deps.jar index 805c8bb5e4fd43a12a5891eea5a68788309629b0..531f50a9b4d89675b2e54c62040a7b465f88d2b4 100644 GIT binary patch delta 227 zcmaF-x|{I=5N}|8wwdi&vH0eyzbUQl_nR2E-)~|%9o@eA9@F;K_n7@}xBuSBviG8aAYL_qM*)CtmtIN3Ew}|)F!|fU&e3$Cle_!GQV*c&FF9|g7YOn7V1Y#i|7T#Xp zEAm@sd-X1nnFrfNYea!q42Z>nSOSP8fmjNNrGZ!mh-J5n*2uk&Z)d$D2gLF~tN_G{ L+ga}@-ID|WhBIYL delta 265 zcmcccx|{Ja5N}|8#;CBF^;xkvkgE8b(#ojNey53X`<*7H)6qco@_S6%m)~RdzYS!6 z+sU&1+fLSPX+ZWG1-9*L6xa=yGAeApdzAgiDGgB|aeL-~Q&3 zK=UpjKfhNHh=qVyczb@Y$Zs8>+N@n7GY Read 1 FastQ file does not exist!\n${row.fastq_1}" - } - if (meta.single_end) { - array = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" - } - array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return array -} +/* + * Check input samplesheet and get read channels + */ + +params.options = [:] + +include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' addParams( options: params.options ) + +workflow INPUT_CHECK { + take: + samplesheet // file: /path/to/samplesheet.csv + + main: + SAMPLESHEET_CHECK ( samplesheet ) + .splitCsv ( header:true, sep:',' ) + .map { create_fastq_channels(it) } + .set { reads } + + emit: + reads // channel: [ val(meta), [ reads ] ] +} + +// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] +def create_fastq_channels(LinkedHashMap row) { + def meta = [:] + meta.id = row.sample + meta.single_end = row.single_end.toBoolean() + meta.strandedness = row.strandedness + + def array = [] + if (!file(row.fastq_1).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + } + if (meta.single_end) { + array = [ meta, [ file(row.fastq_1) ] ] + } else { + if (!file(row.fastq_2).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + } + array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + } + return array +} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 03b0f6323..6914e399d 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -1,214 +1,214 @@ -/* - * Uncompress and prepare reference genome files -*/ - -params.genome_options = [:] -params.index_options = [:] -params.gffread_options = [:] -params.star_index_options = [:] -params.rsem_index_options = [:] -params.hisat2_index_options = [:] -params.salmon_index_options = [:] - -include { - GUNZIP as GUNZIP_FASTA - GUNZIP as GUNZIP_GTF - GUNZIP as GUNZIP_GFF - GUNZIP as GUNZIP_GENE_BED - GUNZIP as GUNZIP_TRANSCRIPT_FASTA - GUNZIP as GUNZIP_ADDITIONAL_FASTA } from '../../modules/nf-core/software/gunzip/main' addParams( options: params.genome_options ) -include { UNTAR as UNTAR_STAR_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.star_index_options ) -include { UNTAR as UNTAR_RSEM_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.index_options ) -include { UNTAR as UNTAR_HISAT2_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.hisat2_index_options ) -include { UNTAR as UNTAR_SALMON_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.index_options ) -include { GFFREAD } from '../../modules/nf-core/software/gffread/main' addParams( options: params.gffread_options ) -include { STAR_GENOMEGENERATE } from '../../modules/nf-core/software/star/genomegenerate/main' addParams( options: params.star_index_options ) -include { HISAT2_EXTRACTSPLICESITES } from '../../modules/nf-core/software/hisat2/extractsplicesites/main' addParams( options: params.hisat2_index_options ) -include { HISAT2_BUILD } from '../../modules/nf-core/software/hisat2/build/main' addParams( options: params.hisat2_index_options ) -include { SALMON_INDEX } from '../../modules/nf-core/software/salmon/index/main' addParams( options: params.salmon_index_options ) -include { RSEM_PREPAREREFERENCE as RSEM_PREPAREREFERENCE } from '../../modules/nf-core/software/rsem/preparereference/main' addParams( options: params.rsem_index_options ) -include { RSEM_PREPAREREFERENCE as RSEM_PREPAREREFERENCE_TRANSCRIPTS } from '../../modules/nf-core/software/rsem/preparereference/main' addParams( options: params.genome_options ) - -include { GTF2BED } from '../../modules/local/gtf2bed' addParams( options: params.genome_options ) -include { CAT_ADDITIONAL_FASTA } from '../../modules/local/cat_additional_fasta' addParams( options: params.genome_options ) -include { GTF_GENE_FILTER } from '../../modules/local/gtf_gene_filter' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) - -workflow PREPARE_GENOME { - take: - prepare_tool_indices // list : tools to prepare indices for - biotype // string: if additional fasta file is provided - // biotype value to use when appending entries to GTF file - - main: - /* - * Uncompress genome fasta file if required - */ - if (params.fasta.endsWith('.gz')) { - ch_fasta = GUNZIP_FASTA ( params.fasta ).gunzip - } else { - ch_fasta = file(params.fasta) - } - - /* - * Uncompress GTF annotation file or create from GFF3 if required - */ - ch_gffread_version = Channel.empty() - if (params.gtf) { - if (params.gtf.endsWith('.gz')) { - ch_gtf = GUNZIP_GTF ( params.gtf ).gunzip - } else { - ch_gtf = file(params.gtf) - } - } else if (params.gff) { - if (params.gff.endsWith('.gz')) { - ch_gff = GUNZIP_GFF ( params.gff ).gunzip - } else { - ch_gff = file(params.gff) - } - ch_gtf = GFFREAD ( ch_gff ).gtf - ch_gffread_version = GFFREAD.out.version - } - - /* - * Uncompress additional fasta file and concatenate with reference fasta and gtf files - */ - if (params.additional_fasta) { - if (params.additional_fasta.endsWith('.gz')) { - ch_add_fasta = GUNZIP_ADDITIONAL_FASTA ( params.additional_fasta ).gunzip - } else { - ch_add_fasta = file(params.additional_fasta) - } - CAT_ADDITIONAL_FASTA ( ch_fasta, ch_gtf, ch_add_fasta, biotype ) - ch_fasta = CAT_ADDITIONAL_FASTA.out.fasta - ch_gtf = CAT_ADDITIONAL_FASTA.out.gtf - } - - /* - * Uncompress gene BED annotation file or create from GTF if required - */ - if (params.gene_bed) { - if (params.gene_bed.endsWith('.gz')) { - ch_gene_bed = GUNZIP_GENE_BED ( params.gene_bed ).gunzip - } else { - ch_gene_bed = file(params.gene_bed) - } - } else { - ch_gene_bed = GTF2BED ( ch_gtf ) - } - - /* - * Uncompress transcript fasta file / create if required - */ - ch_rsem_version = Channel.empty() - if (params.transcript_fasta) { - if (params.transcript_fasta.endsWith('.gz')) { - ch_transcript_fasta = GUNZIP_TRANSCRIPT_FASTA ( params.transcript_fasta ).gunzip - } else { - ch_transcript_fasta = file(params.transcript_fasta) - } - } else { - ch_transcript_fasta = RSEM_PREPAREREFERENCE_TRANSCRIPTS ( ch_fasta, GTF_GENE_FILTER ( ch_fasta, ch_gtf ) ).transcript_fasta - ch_rsem_version = RSEM_PREPAREREFERENCE_TRANSCRIPTS.out.version - } - - /* - * Create chromosome sizes file - */ - ch_chrom_sizes = GET_CHROM_SIZES ( ch_fasta ).sizes - - /* - * Uncompress STAR index or generate from scratch if required - */ - ch_star_index = Channel.empty() - ch_star_version = Channel.empty() - if ('star_salmon' in prepare_tool_indices) { - if (params.star_index) { - if (params.star_index.endsWith('.tar.gz')) { - ch_star_index = UNTAR_STAR_INDEX ( params.star_index ).untar - } else { - ch_star_index = file(params.star_index) - } - } else { - ch_star_index = STAR_GENOMEGENERATE ( ch_fasta, ch_gtf ).index - ch_star_version = STAR_GENOMEGENERATE.out.version - } - } - - /* - * Uncompress RSEM index or generate from scratch if required - */ - ch_rsem_index = Channel.empty() - if ('star_rsem' in prepare_tool_indices) { - if (params.rsem_index) { - if (params.rsem_index.endsWith('.tar.gz')) { - ch_rsem_index = UNTAR_RSEM_INDEX ( params.rsem_index ).untar - } else { - ch_rsem_index = file(params.rsem_index) - } - } else { - ch_rsem_index = RSEM_PREPAREREFERENCE ( ch_fasta, ch_gtf ).index - ch_rsem_version = RSEM_PREPAREREFERENCE.out.version - } - } - - /* - * Uncompress HISAT2 index or generate from scratch if required - */ - ch_splicesites = Channel.empty() - ch_hisat2_index = Channel.empty() - ch_hisat2_version = Channel.empty() - if ('hisat2' in prepare_tool_indices) { - if (!params.splicesites) { - ch_splicesites = HISAT2_EXTRACTSPLICESITES ( ch_gtf ).txt - ch_hisat2_version = HISAT2_EXTRACTSPLICESITES.out.version - } else { - ch_splicesites = file(params.splicesites) - } - if (params.hisat2_index) { - if (params.hisat2_index.endsWith('.tar.gz')) { - ch_hisat2_index = UNTAR_HISAT2_INDEX ( params.hisat2_index ).untar - } else { - ch_hisat2_index = file(params.hisat2_index) - } - } else { - ch_hisat2_index = HISAT2_BUILD ( ch_fasta, ch_gtf, ch_splicesites ).index - ch_hisat2_version = HISAT2_BUILD.out.version - } - } - - /* - * Uncompress Salmon index or generate from scratch if required - */ - ch_salmon_index = Channel.empty() - ch_salmon_version = Channel.empty() - if ('salmon' in prepare_tool_indices) { - if (params.salmon_index) { - if (params.salmon_index.endsWith('.tar.gz')) { - ch_salmon_index = UNTAR_SALMON_INDEX ( params.salmon_index ).untar - } else { - ch_salmon_index = file(params.salmon_index) - } - } else { - ch_salmon_index = SALMON_INDEX ( ch_fasta, ch_transcript_fasta ).index - ch_salmon_version = SALMON_INDEX.out.version - } - } - - emit: - fasta = ch_fasta // path: genome.fasta - gtf = ch_gtf // path: genome.gtf - gene_bed = ch_gene_bed // path: gene.bed - transcript_fasta = ch_transcript_fasta // path: transcript.fasta - chrom_sizes = ch_chrom_sizes // path: genome.sizes - splicesites = ch_splicesites // path: genome.splicesites.txt - star_index = ch_star_index // path: star/index/ - rsem_index = ch_rsem_index // path: rsem/index/ - hisat2_index = ch_hisat2_index // path: hisat2/index/ - salmon_index = ch_salmon_index // path: salmon/index/ - star_version = ch_star_version // path: *.version.txt - rsem_version = ch_rsem_version // path: *.version.txt - hisat2_version = ch_hisat2_version // path: *.version.txt - salmon_version = ch_salmon_version // path: *.version.txt - gffread_version = ch_gffread_version // path: *.version.txt -} +/* + * Uncompress and prepare reference genome files +*/ + +params.genome_options = [:] +params.index_options = [:] +params.gffread_options = [:] +params.star_index_options = [:] +params.rsem_index_options = [:] +params.hisat2_index_options = [:] +params.salmon_index_options = [:] + +include { + GUNZIP as GUNZIP_FASTA + GUNZIP as GUNZIP_GTF + GUNZIP as GUNZIP_GFF + GUNZIP as GUNZIP_GENE_BED + GUNZIP as GUNZIP_TRANSCRIPT_FASTA + GUNZIP as GUNZIP_ADDITIONAL_FASTA } from '../../modules/nf-core/software/gunzip/main' addParams( options: params.genome_options ) +include { UNTAR as UNTAR_STAR_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.star_index_options ) +include { UNTAR as UNTAR_RSEM_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.index_options ) +include { UNTAR as UNTAR_HISAT2_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.hisat2_index_options ) +include { UNTAR as UNTAR_SALMON_INDEX } from '../../modules/nf-core/software/untar/main' addParams( options: params.index_options ) +include { GFFREAD } from '../../modules/nf-core/software/gffread/main' addParams( options: params.gffread_options ) +include { STAR_GENOMEGENERATE } from '../../modules/nf-core/software/star/genomegenerate/main' addParams( options: params.star_index_options ) +include { HISAT2_EXTRACTSPLICESITES } from '../../modules/nf-core/software/hisat2/extractsplicesites/main' addParams( options: params.hisat2_index_options ) +include { HISAT2_BUILD } from '../../modules/nf-core/software/hisat2/build/main' addParams( options: params.hisat2_index_options ) +include { SALMON_INDEX } from '../../modules/nf-core/software/salmon/index/main' addParams( options: params.salmon_index_options ) +include { RSEM_PREPAREREFERENCE as RSEM_PREPAREREFERENCE } from '../../modules/nf-core/software/rsem/preparereference/main' addParams( options: params.rsem_index_options ) +include { RSEM_PREPAREREFERENCE as RSEM_PREPAREREFERENCE_TRANSCRIPTS } from '../../modules/nf-core/software/rsem/preparereference/main' addParams( options: params.genome_options ) + +include { GTF2BED } from '../../modules/local/gtf2bed' addParams( options: params.genome_options ) +include { CAT_ADDITIONAL_FASTA } from '../../modules/local/cat_additional_fasta' addParams( options: params.genome_options ) +include { GTF_GENE_FILTER } from '../../modules/local/gtf_gene_filter' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) + +workflow PREPARE_GENOME { + take: + prepare_tool_indices // list : tools to prepare indices for + biotype // string: if additional fasta file is provided + // biotype value to use when appending entries to GTF file + + main: + /* + * Uncompress genome fasta file if required + */ + if (params.fasta.endsWith('.gz')) { + ch_fasta = GUNZIP_FASTA ( params.fasta ).gunzip + } else { + ch_fasta = file(params.fasta) + } + + /* + * Uncompress GTF annotation file or create from GFF3 if required + */ + ch_gffread_version = Channel.empty() + if (params.gtf) { + if (params.gtf.endsWith('.gz')) { + ch_gtf = GUNZIP_GTF ( params.gtf ).gunzip + } else { + ch_gtf = file(params.gtf) + } + } else if (params.gff) { + if (params.gff.endsWith('.gz')) { + ch_gff = GUNZIP_GFF ( params.gff ).gunzip + } else { + ch_gff = file(params.gff) + } + ch_gtf = GFFREAD ( ch_gff ).gtf + ch_gffread_version = GFFREAD.out.version + } + + /* + * Uncompress additional fasta file and concatenate with reference fasta and gtf files + */ + if (params.additional_fasta) { + if (params.additional_fasta.endsWith('.gz')) { + ch_add_fasta = GUNZIP_ADDITIONAL_FASTA ( params.additional_fasta ).gunzip + } else { + ch_add_fasta = file(params.additional_fasta) + } + CAT_ADDITIONAL_FASTA ( ch_fasta, ch_gtf, ch_add_fasta, biotype ) + ch_fasta = CAT_ADDITIONAL_FASTA.out.fasta + ch_gtf = CAT_ADDITIONAL_FASTA.out.gtf + } + + /* + * Uncompress gene BED annotation file or create from GTF if required + */ + if (params.gene_bed) { + if (params.gene_bed.endsWith('.gz')) { + ch_gene_bed = GUNZIP_GENE_BED ( params.gene_bed ).gunzip + } else { + ch_gene_bed = file(params.gene_bed) + } + } else { + ch_gene_bed = GTF2BED ( ch_gtf ) + } + + /* + * Uncompress transcript fasta file / create if required + */ + ch_rsem_version = Channel.empty() + if (params.transcript_fasta) { + if (params.transcript_fasta.endsWith('.gz')) { + ch_transcript_fasta = GUNZIP_TRANSCRIPT_FASTA ( params.transcript_fasta ).gunzip + } else { + ch_transcript_fasta = file(params.transcript_fasta) + } + } else { + ch_transcript_fasta = RSEM_PREPAREREFERENCE_TRANSCRIPTS ( ch_fasta, GTF_GENE_FILTER ( ch_fasta, ch_gtf ) ).transcript_fasta + ch_rsem_version = RSEM_PREPAREREFERENCE_TRANSCRIPTS.out.version + } + + /* + * Create chromosome sizes file + */ + ch_chrom_sizes = GET_CHROM_SIZES ( ch_fasta ).sizes + + /* + * Uncompress STAR index or generate from scratch if required + */ + ch_star_index = Channel.empty() + ch_star_version = Channel.empty() + if ('star_salmon' in prepare_tool_indices) { + if (params.star_index) { + if (params.star_index.endsWith('.tar.gz')) { + ch_star_index = UNTAR_STAR_INDEX ( params.star_index ).untar + } else { + ch_star_index = file(params.star_index) + } + } else { + ch_star_index = STAR_GENOMEGENERATE ( ch_fasta, ch_gtf ).index + ch_star_version = STAR_GENOMEGENERATE.out.version + } + } + + /* + * Uncompress RSEM index or generate from scratch if required + */ + ch_rsem_index = Channel.empty() + if ('star_rsem' in prepare_tool_indices) { + if (params.rsem_index) { + if (params.rsem_index.endsWith('.tar.gz')) { + ch_rsem_index = UNTAR_RSEM_INDEX ( params.rsem_index ).untar + } else { + ch_rsem_index = file(params.rsem_index) + } + } else { + ch_rsem_index = RSEM_PREPAREREFERENCE ( ch_fasta, ch_gtf ).index + ch_rsem_version = RSEM_PREPAREREFERENCE.out.version + } + } + + /* + * Uncompress HISAT2 index or generate from scratch if required + */ + ch_splicesites = Channel.empty() + ch_hisat2_index = Channel.empty() + ch_hisat2_version = Channel.empty() + if ('hisat2' in prepare_tool_indices) { + if (!params.splicesites) { + ch_splicesites = HISAT2_EXTRACTSPLICESITES ( ch_gtf ).txt + ch_hisat2_version = HISAT2_EXTRACTSPLICESITES.out.version + } else { + ch_splicesites = file(params.splicesites) + } + if (params.hisat2_index) { + if (params.hisat2_index.endsWith('.tar.gz')) { + ch_hisat2_index = UNTAR_HISAT2_INDEX ( params.hisat2_index ).untar + } else { + ch_hisat2_index = file(params.hisat2_index) + } + } else { + ch_hisat2_index = HISAT2_BUILD ( ch_fasta, ch_gtf, ch_splicesites ).index + ch_hisat2_version = HISAT2_BUILD.out.version + } + } + + /* + * Uncompress Salmon index or generate from scratch if required + */ + ch_salmon_index = Channel.empty() + ch_salmon_version = Channel.empty() + if ('salmon' in prepare_tool_indices) { + if (params.salmon_index) { + if (params.salmon_index.endsWith('.tar.gz')) { + ch_salmon_index = UNTAR_SALMON_INDEX ( params.salmon_index ).untar + } else { + ch_salmon_index = file(params.salmon_index) + } + } else { + ch_salmon_index = SALMON_INDEX ( ch_fasta, ch_transcript_fasta ).index + ch_salmon_version = SALMON_INDEX.out.version + } + } + + emit: + fasta = ch_fasta // path: genome.fasta + gtf = ch_gtf // path: genome.gtf + gene_bed = ch_gene_bed // path: gene.bed + transcript_fasta = ch_transcript_fasta // path: transcript.fasta + chrom_sizes = ch_chrom_sizes // path: genome.sizes + splicesites = ch_splicesites // path: genome.splicesites.txt + star_index = ch_star_index // path: star/index/ + rsem_index = ch_rsem_index // path: rsem/index/ + hisat2_index = ch_hisat2_index // path: hisat2/index/ + salmon_index = ch_salmon_index // path: salmon/index/ + star_version = ch_star_version // path: *.version.txt + rsem_version = ch_rsem_version // path: *.version.txt + hisat2_version = ch_hisat2_version // path: *.version.txt + salmon_version = ch_salmon_version // path: *.version.txt + gffread_version = ch_gffread_version // path: *.version.txt +} diff --git a/subworkflows/local/quantify_rsem.nf b/subworkflows/local/quantify_rsem.nf index 14d8479d0..ea9dc8998 100644 --- a/subworkflows/local/quantify_rsem.nf +++ b/subworkflows/local/quantify_rsem.nf @@ -1,61 +1,61 @@ -/* - * Gene/transcript quantification with RSEM - */ - -params.calculateexpression_options = [:] -params.samtools_sort_options = [:] -params.samtools_index_options = [:] -params.samtools_stats_options = [:] -params.merge_counts_options = [:] - -include { RSEM_CALCULATEEXPRESSION } from '../../modules/nf-core/software/rsem/calculateexpression/main' addParams( options: params.calculateexpression_options ) -include { RSEM_MERGE_COUNTS } from '../../modules/local/rsem_merge_counts' addParams( options: params.merge_counts_options ) -include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) - -workflow QUANTIFY_RSEM { - take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: /path/to/rsem/index/ - - main: - /* - * Quantify reads with RSEM - */ - RSEM_CALCULATEEXPRESSION ( reads, index ) - - /* - * Sort, index BAM file and run samtools stats, flagstat and idxstats - */ - BAM_SORT_SAMTOOLS ( RSEM_CALCULATEEXPRESSION.out.bam_star ) - - /* - * Merge counts across samples - */ - RSEM_MERGE_COUNTS ( - RSEM_CALCULATEEXPRESSION.out.counts_gene.collect{it[1]}, // [meta, counts]: Collect the second element (counts files) in the channel across all samples - RSEM_CALCULATEEXPRESSION.out.counts_transcript.collect{it[1]} - ) - - emit: - counts_gene = RSEM_CALCULATEEXPRESSION.out.counts_gene // channel: [ val(meta), counts ] - counts_transcript = RSEM_CALCULATEEXPRESSION.out.counts_transcript // channel: [ val(meta), counts ] - stat = RSEM_CALCULATEEXPRESSION.out.stat // channel: [ val(meta), stat ] - logs = RSEM_CALCULATEEXPRESSION.out.logs // channel: [ val(meta), logs ] - bam_star = RSEM_CALCULATEEXPRESSION.out.bam_star // channel: [ val(meta), bam ] - bam_genome = RSEM_CALCULATEEXPRESSION.out.bam_genome // channel: [ val(meta), bam ] - bam_transcript = RSEM_CALCULATEEXPRESSION.out.bam_transcript // channel: [ val(meta), bam ] - rsem_version = RSEM_CALCULATEEXPRESSION.out.version // path: *.version.txt - - bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] - csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] - stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt - - merged_counts_gene = RSEM_MERGE_COUNTS.out.counts_gene // path: *.gene_counts.tsv - merged_tpm_gene = RSEM_MERGE_COUNTS.out.tpm_gene // path: *.gene_tpm.tsv - merged_counts_transcript = RSEM_MERGE_COUNTS.out.counts_transcript // path: *.transcript_counts.tsv - merged_tpm_transcript = RSEM_MERGE_COUNTS.out.tpm_transcript // path: *.transcript_tpm.tsv -} +/* + * Gene/transcript quantification with RSEM + */ + +params.calculateexpression_options = [:] +params.samtools_sort_options = [:] +params.samtools_index_options = [:] +params.samtools_stats_options = [:] +params.merge_counts_options = [:] + +include { RSEM_CALCULATEEXPRESSION } from '../../modules/nf-core/software/rsem/calculateexpression/main' addParams( options: params.calculateexpression_options ) +include { RSEM_MERGE_COUNTS } from '../../modules/local/rsem_merge_counts' addParams( options: params.merge_counts_options ) +include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) + +workflow QUANTIFY_RSEM { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/rsem/index/ + + main: + /* + * Quantify reads with RSEM + */ + RSEM_CALCULATEEXPRESSION ( reads, index ) + + /* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + BAM_SORT_SAMTOOLS ( RSEM_CALCULATEEXPRESSION.out.bam_star ) + + /* + * Merge counts across samples + */ + RSEM_MERGE_COUNTS ( + RSEM_CALCULATEEXPRESSION.out.counts_gene.collect{it[1]}, // [meta, counts]: Collect the second element (counts files) in the channel across all samples + RSEM_CALCULATEEXPRESSION.out.counts_transcript.collect{it[1]} + ) + + emit: + counts_gene = RSEM_CALCULATEEXPRESSION.out.counts_gene // channel: [ val(meta), counts ] + counts_transcript = RSEM_CALCULATEEXPRESSION.out.counts_transcript // channel: [ val(meta), counts ] + stat = RSEM_CALCULATEEXPRESSION.out.stat // channel: [ val(meta), stat ] + logs = RSEM_CALCULATEEXPRESSION.out.logs // channel: [ val(meta), logs ] + bam_star = RSEM_CALCULATEEXPRESSION.out.bam_star // channel: [ val(meta), bam ] + bam_genome = RSEM_CALCULATEEXPRESSION.out.bam_genome // channel: [ val(meta), bam ] + bam_transcript = RSEM_CALCULATEEXPRESSION.out.bam_transcript // channel: [ val(meta), bam ] + rsem_version = RSEM_CALCULATEEXPRESSION.out.version // path: *.version.txt + + bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt + + merged_counts_gene = RSEM_MERGE_COUNTS.out.counts_gene // path: *.gene_counts.tsv + merged_tpm_gene = RSEM_MERGE_COUNTS.out.tpm_gene // path: *.gene_tpm.tsv + merged_counts_transcript = RSEM_MERGE_COUNTS.out.counts_transcript // path: *.transcript_counts.tsv + merged_tpm_transcript = RSEM_MERGE_COUNTS.out.tpm_transcript // path: *.transcript_tpm.tsv +} diff --git a/subworkflows/local/quantify_salmon.nf b/subworkflows/local/quantify_salmon.nf index d9c645ed5..de8155f6b 100644 --- a/subworkflows/local/quantify_salmon.nf +++ b/subworkflows/local/quantify_salmon.nf @@ -1,80 +1,80 @@ -/* - * Pseudo-alignment and quantification with Salmon - */ - -params.genome_options = [:] -params.salmon_quant_options = [:] -params.tximport_options = [:] -params.merge_counts_options = [:] - -include { SALMON_QUANT } from '../../modules/nf-core/software/salmon/quant/main' addParams( options: params.salmon_quant_options ) -include { SALMON_TX2GENE } from '../../modules/local/salmon_tx2gene' addParams( options: params.genome_options ) -include { SALMON_TXIMPORT } from '../../modules/local/salmon_tximport' addParams( options: params.tximport_options ) -include { SALMON_MERGE_COUNTS } from '../../modules/local/salmon_merge_counts' addParams( options: params.merge_counts_options ) -include { SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_LENGTH_SCALED - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_SCALED - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_TRANSCRIPT } from '../../modules/local/salmon_summarizedexperiment' addParams( options: params.merge_counts_options ) - -workflow QUANTIFY_SALMON { - take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: /path/to/salmon/index/ - transcript_fasta // channel: /path/to/transcript.fasta - gtf // channel: /path/to/genome.gtf - alignment_mode // bool: Run Salmon in alignment mode - - main: - /* - * Quantify and merge counts across samples - */ - SALMON_QUANT ( reads, index, gtf, transcript_fasta, alignment_mode ) - SALMON_TX2GENE ( SALMON_QUANT.out.results.collect{it[1]}, gtf ) - SALMON_TXIMPORT ( SALMON_QUANT.out.results.collect{it[1]}, SALMON_TX2GENE.out.collect() ) - - - SALMON_SE_GENE ( - SALMON_TXIMPORT.out.counts_gene, - SALMON_TXIMPORT.out.tpm_gene, - SALMON_TX2GENE.out.collect() - ) - - SALMON_SE_GENE_LENGTH_SCALED ( - SALMON_TXIMPORT.out.counts_gene_length_scaled, - SALMON_TXIMPORT.out.tpm_gene, - SALMON_TX2GENE.out.collect() - ) - - SALMON_SE_GENE_SCALED ( - SALMON_TXIMPORT.out.counts_gene_scaled, - SALMON_TXIMPORT.out.tpm_gene, - SALMON_TX2GENE.out.collect() - ) - - SALMON_SE_TRANSCRIPT ( - SALMON_TXIMPORT.out.counts_transcript, - SALMON_TXIMPORT.out.tpm_transcript, - SALMON_TX2GENE.out.collect() - ) - - emit: - results = SALMON_QUANT.out.results // channel: [ val(meta), results_dir ] - salmon_version = SALMON_QUANT.out.version // path: *.version.txt - - tpm_gene = SALMON_TXIMPORT.out.tpm_gene // channel: [ val(meta), counts ] - counts_gene = SALMON_TXIMPORT.out.counts_gene // channel: [ val(meta), counts ] - counts_gene_length_scaled = SALMON_TXIMPORT.out.counts_gene_length_scaled // channel: [ val(meta), counts ] - counts_gene_scaled = SALMON_TXIMPORT.out.counts_gene_scaled // channel: [ val(meta), counts ] - tpm_transcript = SALMON_TXIMPORT.out.tpm_transcript // channel: [ val(meta), counts ] - counts_transcript = SALMON_TXIMPORT.out.counts_transcript // channel: [ val(meta), counts ] - tximeta_version = SALMON_TXIMPORT.out.version // path: *.version.txt - - merged_gene_rds = SALMON_SE_GENE.out.rds // path: *.rds - merged_gene_rds_length_scaled = SALMON_SE_GENE_LENGTH_SCALED.out.rds // path: *.rds - merged_gene_rds_scaled = SALMON_SE_GENE_SCALED.out.rds // path: *.rds - summarizedexperiment_version = SALMON_SE_GENE.out.version // path: *.version.txt - - merged_counts_transcript = SALMON_TXIMPORT.out.counts_transcript // path: *.transcript_counts.tsv - merged_tpm_transcript = SALMON_TXIMPORT.out.tpm_transcript // path: *.transcript_tpm.tsv - merged_transcript_rds = SALMON_SE_TRANSCRIPT.out.rds // path: *.rds -} +/* + * Pseudo-alignment and quantification with Salmon + */ + +params.genome_options = [:] +params.salmon_quant_options = [:] +params.tximport_options = [:] +params.merge_counts_options = [:] + +include { SALMON_QUANT } from '../../modules/nf-core/software/salmon/quant/main' addParams( options: params.salmon_quant_options ) +include { SALMON_TX2GENE } from '../../modules/local/salmon_tx2gene' addParams( options: params.genome_options ) +include { SALMON_TXIMPORT } from '../../modules/local/salmon_tximport' addParams( options: params.tximport_options ) +include { SALMON_MERGE_COUNTS } from '../../modules/local/salmon_merge_counts' addParams( options: params.merge_counts_options ) +include { SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_LENGTH_SCALED + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_SCALED + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_TRANSCRIPT } from '../../modules/local/salmon_summarizedexperiment' addParams( options: params.merge_counts_options ) + +workflow QUANTIFY_SALMON { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/salmon/index/ + transcript_fasta // channel: /path/to/transcript.fasta + gtf // channel: /path/to/genome.gtf + alignment_mode // bool: Run Salmon in alignment mode + + main: + /* + * Quantify and merge counts across samples + */ + SALMON_QUANT ( reads, index, gtf, transcript_fasta, alignment_mode ) + SALMON_TX2GENE ( SALMON_QUANT.out.results.collect{it[1]}, gtf ) + SALMON_TXIMPORT ( SALMON_QUANT.out.results.collect{it[1]}, SALMON_TX2GENE.out.collect() ) + + + SALMON_SE_GENE ( + SALMON_TXIMPORT.out.counts_gene, + SALMON_TXIMPORT.out.tpm_gene, + SALMON_TX2GENE.out.collect() + ) + + SALMON_SE_GENE_LENGTH_SCALED ( + SALMON_TXIMPORT.out.counts_gene_length_scaled, + SALMON_TXIMPORT.out.tpm_gene, + SALMON_TX2GENE.out.collect() + ) + + SALMON_SE_GENE_SCALED ( + SALMON_TXIMPORT.out.counts_gene_scaled, + SALMON_TXIMPORT.out.tpm_gene, + SALMON_TX2GENE.out.collect() + ) + + SALMON_SE_TRANSCRIPT ( + SALMON_TXIMPORT.out.counts_transcript, + SALMON_TXIMPORT.out.tpm_transcript, + SALMON_TX2GENE.out.collect() + ) + + emit: + results = SALMON_QUANT.out.results // channel: [ val(meta), results_dir ] + salmon_version = SALMON_QUANT.out.version // path: *.version.txt + + tpm_gene = SALMON_TXIMPORT.out.tpm_gene // channel: [ val(meta), counts ] + counts_gene = SALMON_TXIMPORT.out.counts_gene // channel: [ val(meta), counts ] + counts_gene_length_scaled = SALMON_TXIMPORT.out.counts_gene_length_scaled // channel: [ val(meta), counts ] + counts_gene_scaled = SALMON_TXIMPORT.out.counts_gene_scaled // channel: [ val(meta), counts ] + tpm_transcript = SALMON_TXIMPORT.out.tpm_transcript // channel: [ val(meta), counts ] + counts_transcript = SALMON_TXIMPORT.out.counts_transcript // channel: [ val(meta), counts ] + tximeta_version = SALMON_TXIMPORT.out.version // path: *.version.txt + + merged_gene_rds = SALMON_SE_GENE.out.rds // path: *.rds + merged_gene_rds_length_scaled = SALMON_SE_GENE_LENGTH_SCALED.out.rds // path: *.rds + merged_gene_rds_scaled = SALMON_SE_GENE_SCALED.out.rds // path: *.rds + summarizedexperiment_version = SALMON_SE_GENE.out.version // path: *.version.txt + + merged_counts_transcript = SALMON_TXIMPORT.out.counts_transcript // path: *.transcript_counts.tsv + merged_tpm_transcript = SALMON_TXIMPORT.out.tpm_transcript // path: *.transcript_tpm.tsv + merged_transcript_rds = SALMON_SE_TRANSCRIPT.out.rds // path: *.rds +} diff --git a/subworkflows/nf-core/align_hisat2.nf b/subworkflows/nf-core/align_hisat2.nf index 03a5bd1f8..b380b0989 100644 --- a/subworkflows/nf-core/align_hisat2.nf +++ b/subworkflows/nf-core/align_hisat2.nf @@ -1,43 +1,43 @@ -/* - * Alignment with HISAT2 - */ - -params.align_options = [:] -params.samtools_sort_options = [:] -params.samtools_index_options = [:] -params.samtools_stats_options = [:] - -include { HISAT2_ALIGN } from '../../modules/nf-core/software/hisat2/align/main' addParams( options: params.align_options ) -include { BAM_SORT_SAMTOOLS } from './bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) - -workflow ALIGN_HISAT2 { - take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: /path/to/star/index/ - splicesites // channel: /path/to/genome.splicesites.txt - - main: - /* - * Map reads with HISAT2 - */ - HISAT2_ALIGN ( reads, index, splicesites ) - - /* - * Sort, index BAM file and run samtools stats, flagstat and idxstats - */ - BAM_SORT_SAMTOOLS ( HISAT2_ALIGN.out.bam ) - - emit: - orig_bam = HISAT2_ALIGN.out.bam // channel: [ val(meta), bam ] - summary = HISAT2_ALIGN.out.summary // channel: [ val(meta), log ] - fastq = HISAT2_ALIGN.out.fastq // channel: [ val(meta), fastq ] - hisat2_version = HISAT2_ALIGN.out.version // path: *.version.txt - - bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] - csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] - stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt -} +/* + * Alignment with HISAT2 + */ + +params.align_options = [:] +params.samtools_sort_options = [:] +params.samtools_index_options = [:] +params.samtools_stats_options = [:] + +include { HISAT2_ALIGN } from '../../modules/nf-core/software/hisat2/align/main' addParams( options: params.align_options ) +include { BAM_SORT_SAMTOOLS } from './bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) + +workflow ALIGN_HISAT2 { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/star/index/ + splicesites // channel: /path/to/genome.splicesites.txt + + main: + /* + * Map reads with HISAT2 + */ + HISAT2_ALIGN ( reads, index, splicesites ) + + /* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + BAM_SORT_SAMTOOLS ( HISAT2_ALIGN.out.bam ) + + emit: + orig_bam = HISAT2_ALIGN.out.bam // channel: [ val(meta), bam ] + summary = HISAT2_ALIGN.out.summary // channel: [ val(meta), log ] + fastq = HISAT2_ALIGN.out.fastq // channel: [ val(meta), fastq ] + hisat2_version = HISAT2_ALIGN.out.version // path: *.version.txt + + bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/align_star.nf b/subworkflows/nf-core/align_star.nf index 05ace30af..3ce084346 100644 --- a/subworkflows/nf-core/align_star.nf +++ b/subworkflows/nf-core/align_star.nf @@ -1,48 +1,48 @@ -/* - * Alignment with STAR - */ - -params.align_options = [:] -params.samtools_sort_options = [:] -params.samtools_index_options = [:] -params.samtools_stats_options = [:] - -include { STAR_ALIGN } from '../../modules/nf-core/software/star/align/main' addParams( options: params.align_options ) -include { BAM_SORT_SAMTOOLS } from './bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) - -workflow ALIGN_STAR { - take: - reads // channel: [ val(meta), [ reads ] ] - index // channel: /path/to/star/index/ - gtf // channel: /path/to/genome.gtf - - main: - /* - * Map reads with STAR - */ - STAR_ALIGN ( reads, index, gtf ) - - /* - * Sort, index BAM file and run samtools stats, flagstat and idxstats - */ - BAM_SORT_SAMTOOLS ( STAR_ALIGN.out.bam ) - - emit: - orig_bam = STAR_ALIGN.out.bam // channel: [ val(meta), bam ] - log_final = STAR_ALIGN.out.log_final // channel: [ val(meta), log_final ] - log_out = STAR_ALIGN.out.log_out // channel: [ val(meta), log_out ] - log_progress = STAR_ALIGN.out.log_progress // channel: [ val(meta), log_progress ] - bam_sorted = STAR_ALIGN.out.bam_sorted // channel: [ val(meta), bam_sorted ] - bam_transcript = STAR_ALIGN.out.bam_transcript // channel: [ val(meta), bam_transcript ] - fastq = STAR_ALIGN.out.fastq // channel: [ val(meta), fastq ] - tab = STAR_ALIGN.out.tab // channel: [ val(meta), tab ] - star_version = STAR_ALIGN.out.version // path: *.version.txt - - bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] - bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] - csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] - stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt -} +/* + * Alignment with STAR + */ + +params.align_options = [:] +params.samtools_sort_options = [:] +params.samtools_index_options = [:] +params.samtools_stats_options = [:] + +include { STAR_ALIGN } from '../../modules/nf-core/software/star/align/main' addParams( options: params.align_options ) +include { BAM_SORT_SAMTOOLS } from './bam_sort_samtools' addParams( sort_options: params.samtools_sort_options, index_options: params.samtools_index_options, stats_options: params.samtools_stats_options ) + +workflow ALIGN_STAR { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/star/index/ + gtf // channel: /path/to/genome.gtf + + main: + /* + * Map reads with STAR + */ + STAR_ALIGN ( reads, index, gtf ) + + /* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + BAM_SORT_SAMTOOLS ( STAR_ALIGN.out.bam ) + + emit: + orig_bam = STAR_ALIGN.out.bam // channel: [ val(meta), bam ] + log_final = STAR_ALIGN.out.log_final // channel: [ val(meta), log_final ] + log_out = STAR_ALIGN.out.log_out // channel: [ val(meta), log_out ] + log_progress = STAR_ALIGN.out.log_progress // channel: [ val(meta), log_progress ] + bam_sorted = STAR_ALIGN.out.bam_sorted // channel: [ val(meta), bam_sorted ] + bam_transcript = STAR_ALIGN.out.bam_transcript // channel: [ val(meta), bam_transcript ] + fastq = STAR_ALIGN.out.fastq // channel: [ val(meta), fastq ] + tab = STAR_ALIGN.out.tab // channel: [ val(meta), tab ] + star_version = STAR_ALIGN.out.version // path: *.version.txt + + bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + csi = BAM_SORT_SAMTOOLS.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf index 0bc45eb80..212536cf8 100644 --- a/subworkflows/nf-core/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -1,45 +1,45 @@ -/* - * Sort, index BAM file and run samtools stats, flagstat and idxstats - */ - -params.sort_options = [:] -params.index_options = [:] -params.stats_options = [:] - -include { SAMTOOLS_SORT } from '../../modules/nf-core/software/samtools/sort/main' addParams( options: params.sort_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.index_options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.stats_options ) - -workflow BAM_SORT_SAMTOOLS { - take: - ch_bam // channel: [ val(meta), [ bam ] ] - - main: - SAMTOOLS_SORT ( ch_bam ) - SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - - SAMTOOLS_SORT.out.bam - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } - .set { ch_bam_bai } - - BAM_STATS_SAMTOOLS ( ch_bam_bai ) - - emit: - bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] - - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - version = SAMTOOLS_SORT.out.version // path: *.version.txt -} +/* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + +params.sort_options = [:] +params.index_options = [:] +params.stats_options = [:] + +include { SAMTOOLS_SORT } from '../../modules/nf-core/software/samtools/sort/main' addParams( options: params.sort_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.index_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.stats_options ) + +workflow BAM_SORT_SAMTOOLS { + take: + ch_bam // channel: [ val(meta), [ bam ] ] + + main: + SAMTOOLS_SORT ( ch_bam ) + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) + + SAMTOOLS_SORT.out.bam + .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) + .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) + .map { + meta, bam, bai, csi -> + if (bai) { + [ meta, bam, bai ] + } else { + [ meta, bam, csi ] + } + } + .set { ch_bam_bai } + + BAM_STATS_SAMTOOLS ( ch_bam_bai ) + + emit: + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] + + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + version = SAMTOOLS_SORT.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/bam_stats_samtools.nf b/subworkflows/nf-core/bam_stats_samtools.nf index 7d30b5cfd..7e9513394 100644 --- a/subworkflows/nf-core/bam_stats_samtools.nf +++ b/subworkflows/nf-core/bam_stats_samtools.nf @@ -1,25 +1,25 @@ -/* - * Run SAMtools stats, flagstat and idxstats - */ - -params.options = [:] - -include { SAMTOOLS_STATS } from '../../modules/nf-core/software/samtools/stats/main' addParams( options: params.options ) -include { SAMTOOLS_IDXSTATS } from '../../modules/nf-core/software/samtools/idxstats/main' addParams( options: params.options ) -include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/software/samtools/flagstat/main' addParams( options: params.options ) - -workflow BAM_STATS_SAMTOOLS { - take: - ch_bam_bai // channel: [ val(meta), [ bam ], [bai/csi] ] - - main: - SAMTOOLS_STATS ( ch_bam_bai ) - SAMTOOLS_FLAGSTAT ( ch_bam_bai ) - SAMTOOLS_IDXSTATS ( ch_bam_bai ) - - emit: - stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - version = SAMTOOLS_STATS.out.version // path: *.version.txt -} +/* + * Run SAMtools stats, flagstat and idxstats + */ + +params.options = [:] + +include { SAMTOOLS_STATS } from '../../modules/nf-core/software/samtools/stats/main' addParams( options: params.options ) +include { SAMTOOLS_IDXSTATS } from '../../modules/nf-core/software/samtools/idxstats/main' addParams( options: params.options ) +include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/software/samtools/flagstat/main' addParams( options: params.options ) + +workflow BAM_STATS_SAMTOOLS { + take: + ch_bam_bai // channel: [ val(meta), [ bam ], [bai/csi] ] + + main: + SAMTOOLS_STATS ( ch_bam_bai ) + SAMTOOLS_FLAGSTAT ( ch_bam_bai ) + SAMTOOLS_IDXSTATS ( ch_bam_bai ) + + emit: + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + version = SAMTOOLS_STATS.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/bedgraph_to_bigwig.nf b/subworkflows/nf-core/bedgraph_to_bigwig.nf index 7ee3f076c..5b8b092ea 100644 --- a/subworkflows/nf-core/bedgraph_to_bigwig.nf +++ b/subworkflows/nf-core/bedgraph_to_bigwig.nf @@ -1,31 +1,31 @@ -/* - * Clip over-running ends from bedGraph file and convert to bigWig - */ - -params.bedclip_options = [:] -params.bedgraphtobigwig_options = [:] - -include { UCSC_BEDCLIP } from '../../modules/nf-core/software/ucsc/bedclip/main' addParams( options: params.bedclip_options ) -include { UCSC_BEDGRAPHTOBIGWIG } from '../../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: params.bedgraphtobigwig_options ) - -workflow BEDGRAPH_TO_BIGWIG { - take: - bedgraph // channel: [ val(meta), [ bedgraph ] ] - sizes // path: chrom.sizes - - main: - /* - * Clip bedGraph file - */ - UCSC_BEDCLIP ( bedgraph, sizes ) - - /* - * Convert bedGraph to bigWig - */ - UCSC_BEDGRAPHTOBIGWIG ( UCSC_BEDCLIP.out.bedgraph, sizes ) - - emit: - bigwig = UCSC_BEDGRAPHTOBIGWIG.out.bigwig // channel: [ val(meta), [ bigwig ] ] - bedgraph = UCSC_BEDCLIP.out.bedgraph // channel: [ val(meta), [ bedgraph ] ] - ucsc_version = UCSC_BEDCLIP.out.version // path: *.version.txt -} +/* + * Clip over-running ends from bedGraph file and convert to bigWig + */ + +params.bedclip_options = [:] +params.bedgraphtobigwig_options = [:] + +include { UCSC_BEDCLIP } from '../../modules/nf-core/software/ucsc/bedclip/main' addParams( options: params.bedclip_options ) +include { UCSC_BEDGRAPHTOBIGWIG } from '../../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: params.bedgraphtobigwig_options ) + +workflow BEDGRAPH_TO_BIGWIG { + take: + bedgraph // channel: [ val(meta), [ bedgraph ] ] + sizes // path: chrom.sizes + + main: + /* + * Clip bedGraph file + */ + UCSC_BEDCLIP ( bedgraph, sizes ) + + /* + * Convert bedGraph to bigWig + */ + UCSC_BEDGRAPHTOBIGWIG ( UCSC_BEDCLIP.out.bedgraph, sizes ) + + emit: + bigwig = UCSC_BEDGRAPHTOBIGWIG.out.bigwig // channel: [ val(meta), [ bigwig ] ] + bedgraph = UCSC_BEDCLIP.out.bedgraph // channel: [ val(meta), [ bedgraph ] ] + ucsc_version = UCSC_BEDCLIP.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/dedup_umi_umitools.nf b/subworkflows/nf-core/dedup_umi_umitools.nf index 648f20ab6..c2feda10a 100644 --- a/subworkflows/nf-core/dedup_umi_umitools.nf +++ b/subworkflows/nf-core/dedup_umi_umitools.nf @@ -1,54 +1,54 @@ -/* - * UMI-tools dedup, index BAM file and run samtools stats, flagstat and idxstats - */ - -params.umitools_options = [:] -params.samtools_index_options = [:] -params.samtools_stats_options = [:] - -include { UMITOOLS_DEDUP } from '../../modules/nf-core/software/umitools/dedup/main' addParams( options: params.umitools_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_index_options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_stats_options ) - -workflow DEDUP_UMI_UMITOOLS { - take: - bam_bai // channel: [ val(meta), [ bam ], [ bai/csi ] ] - - main: - /* - * UMI-tools dedup - */ - UMITOOLS_DEDUP ( bam_bai ) - - /* - * Index BAM file and run samtools stats, flagstat and idxstats - */ - SAMTOOLS_INDEX ( UMITOOLS_DEDUP.out.bam ) - - UMITOOLS_DEDUP.out.bam - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } - .set { ch_bam_bai } - - BAM_STATS_SAMTOOLS ( ch_bam_bai ) - - emit: - bam = UMITOOLS_DEDUP.out.bam // channel: [ val(meta), [ bam ] ] - tsv = UMITOOLS_DEDUP.out.tsv // channel: [ val(meta), [ tsv ] ] - umitools_version = UMITOOLS_DEDUP.out.version // path: *.version.txt - - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt -} +/* + * UMI-tools dedup, index BAM file and run samtools stats, flagstat and idxstats + */ + +params.umitools_options = [:] +params.samtools_index_options = [:] +params.samtools_stats_options = [:] + +include { UMITOOLS_DEDUP } from '../../modules/nf-core/software/umitools/dedup/main' addParams( options: params.umitools_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_index_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_stats_options ) + +workflow DEDUP_UMI_UMITOOLS { + take: + bam_bai // channel: [ val(meta), [ bam ], [ bai/csi ] ] + + main: + /* + * UMI-tools dedup + */ + UMITOOLS_DEDUP ( bam_bai ) + + /* + * Index BAM file and run samtools stats, flagstat and idxstats + */ + SAMTOOLS_INDEX ( UMITOOLS_DEDUP.out.bam ) + + UMITOOLS_DEDUP.out.bam + .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) + .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) + .map { + meta, bam, bai, csi -> + if (bai) { + [ meta, bam, bai ] + } else { + [ meta, bam, csi ] + } + } + .set { ch_bam_bai } + + BAM_STATS_SAMTOOLS ( ch_bam_bai ) + + emit: + bam = UMITOOLS_DEDUP.out.bam // channel: [ val(meta), [ bam ] ] + tsv = UMITOOLS_DEDUP.out.tsv // channel: [ val(meta), [ tsv ] ] + umitools_version = UMITOOLS_DEDUP.out.version // path: *.version.txt + + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/fastqc_umitools_trimgalore.nf b/subworkflows/nf-core/fastqc_umitools_trimgalore.nf index 7ff26b0be..2b4980f31 100644 --- a/subworkflows/nf-core/fastqc_umitools_trimgalore.nf +++ b/subworkflows/nf-core/fastqc_umitools_trimgalore.nf @@ -1,66 +1,66 @@ -/* - * Read QC, UMI extraction and trimming - */ - -params.fastqc_options = [:] -params.umitools_options = [:] -params.trimgalore_options = [:] - -include { FASTQC } from '../../modules/nf-core/software/fastqc/main' addParams( options: params.fastqc_options ) -include { UMITOOLS_EXTRACT } from '../../modules/nf-core/software/umitools/extract/main' addParams( options: params.umitools_options ) -include { TRIMGALORE } from '../../modules/nf-core/software/trimgalore/main' addParams( options: params.trimgalore_options ) - -workflow FASTQC_UMITOOLS_TRIMGALORE { - take: - reads // channel: [ val(meta), [ reads ] ] - skip_fastqc // boolean: true/false - with_umi // boolean: true/false - skip_trimming // boolean: true/false - - main: - fastqc_html = Channel.empty() - fastqc_zip = Channel.empty() - fastqc_version = Channel.empty() - if (!skip_fastqc) { - FASTQC ( reads ).html.set { fastqc_html } - fastqc_zip = FASTQC.out.zip - fastqc_version = FASTQC.out.version - } - - umi_reads = reads - umi_log = Channel.empty() - umitools_version = Channel.empty() - if (with_umi) { - UMITOOLS_EXTRACT ( reads ).reads.set { umi_reads } - umi_log = UMITOOLS_EXTRACT.out.log - umitools_version = UMITOOLS_EXTRACT.out.version - } - - trim_reads = umi_reads - trim_html = Channel.empty() - trim_zip = Channel.empty() - trim_log = Channel.empty() - trimgalore_version = Channel.empty() - if (!skip_trimming) { - TRIMGALORE ( umi_reads ).reads.set { trim_reads } - trim_html = TRIMGALORE.out.html - trim_zip = TRIMGALORE.out.zip - trim_log = TRIMGALORE.out.log - trimgalore_version = TRIMGALORE.out.version - } - - emit: - reads = trim_reads // channel: [ val(meta), [ reads ] ] - - fastqc_html // channel: [ val(meta), [ html ] ] - fastqc_zip // channel: [ val(meta), [ zip ] ] - fastqc_version // path: *.version.txt - - umi_log // channel: [ val(meta), [ log ] ] - umitools_version // path: *.version.txt - - trim_html // channel: [ val(meta), [ html ] ] - trim_zip // channel: [ val(meta), [ zip ] ] - trim_log // channel: [ val(meta), [ txt ] ] - trimgalore_version // path: *.version.txt -} +/* + * Read QC, UMI extraction and trimming + */ + +params.fastqc_options = [:] +params.umitools_options = [:] +params.trimgalore_options = [:] + +include { FASTQC } from '../../modules/nf-core/software/fastqc/main' addParams( options: params.fastqc_options ) +include { UMITOOLS_EXTRACT } from '../../modules/nf-core/software/umitools/extract/main' addParams( options: params.umitools_options ) +include { TRIMGALORE } from '../../modules/nf-core/software/trimgalore/main' addParams( options: params.trimgalore_options ) + +workflow FASTQC_UMITOOLS_TRIMGALORE { + take: + reads // channel: [ val(meta), [ reads ] ] + skip_fastqc // boolean: true/false + with_umi // boolean: true/false + skip_trimming // boolean: true/false + + main: + fastqc_html = Channel.empty() + fastqc_zip = Channel.empty() + fastqc_version = Channel.empty() + if (!skip_fastqc) { + FASTQC ( reads ).html.set { fastqc_html } + fastqc_zip = FASTQC.out.zip + fastqc_version = FASTQC.out.version + } + + umi_reads = reads + umi_log = Channel.empty() + umitools_version = Channel.empty() + if (with_umi) { + UMITOOLS_EXTRACT ( reads ).reads.set { umi_reads } + umi_log = UMITOOLS_EXTRACT.out.log + umitools_version = UMITOOLS_EXTRACT.out.version + } + + trim_reads = umi_reads + trim_html = Channel.empty() + trim_zip = Channel.empty() + trim_log = Channel.empty() + trimgalore_version = Channel.empty() + if (!skip_trimming) { + TRIMGALORE ( umi_reads ).reads.set { trim_reads } + trim_html = TRIMGALORE.out.html + trim_zip = TRIMGALORE.out.zip + trim_log = TRIMGALORE.out.log + trimgalore_version = TRIMGALORE.out.version + } + + emit: + reads = trim_reads // channel: [ val(meta), [ reads ] ] + + fastqc_html // channel: [ val(meta), [ html ] ] + fastqc_zip // channel: [ val(meta), [ zip ] ] + fastqc_version // path: *.version.txt + + umi_log // channel: [ val(meta), [ log ] ] + umitools_version // path: *.version.txt + + trim_html // channel: [ val(meta), [ html ] ] + trim_zip // channel: [ val(meta), [ zip ] ] + trim_log // channel: [ val(meta), [ txt ] ] + trimgalore_version // path: *.version.txt +} diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 73fcef926..e17211fb1 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -1,54 +1,54 @@ -/* - * Picard MarkDuplicates, index BAM file and run samtools stats, flagstat and idxstats - */ - -params.markduplicates_options = [:] -params.samtools_index_options = [:] -params.samtools_stats_options = [:] - -include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_index_options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_stats_options ) - -workflow MARK_DUPLICATES_PICARD { - take: - bam // channel: [ val(meta), [ bam ] ] - - main: - /* - * Picard MarkDuplicates - */ - PICARD_MARKDUPLICATES ( bam ) - - /* - * Index BAM file and run samtools stats, flagstat and idxstats - */ - SAMTOOLS_INDEX ( PICARD_MARKDUPLICATES.out.bam ) - - PICARD_MARKDUPLICATES.out.bam - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } - .set { ch_bam_bai } - - BAM_STATS_SAMTOOLS ( ch_bam_bai ) - - emit: - bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), [ bam ] ] - metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] - picard_version = PICARD_MARKDUPLICATES.out.version // path: *.version.txt - - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt -} +/* + * Picard MarkDuplicates, index BAM file and run samtools stats, flagstat and idxstats + */ + +params.markduplicates_options = [:] +params.samtools_index_options = [:] +params.samtools_stats_options = [:] + +include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_index_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_stats_options ) + +workflow MARK_DUPLICATES_PICARD { + take: + bam // channel: [ val(meta), [ bam ] ] + + main: + /* + * Picard MarkDuplicates + */ + PICARD_MARKDUPLICATES ( bam ) + + /* + * Index BAM file and run samtools stats, flagstat and idxstats + */ + SAMTOOLS_INDEX ( PICARD_MARKDUPLICATES.out.bam ) + + PICARD_MARKDUPLICATES.out.bam + .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) + .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) + .map { + meta, bam, bai, csi -> + if (bai) { + [ meta, bam, bai ] + } else { + [ meta, bam, csi ] + } + } + .set { ch_bam_bai } + + BAM_STATS_SAMTOOLS ( ch_bam_bai ) + + emit: + bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), [ bam ] ] + metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] + picard_version = PICARD_MARKDUPLICATES.out.version // path: *.version.txt + + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + csi = SAMTOOLS_INDEX.out.csi // channel: [ val(meta), [ csi ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt +} diff --git a/subworkflows/nf-core/rseqc.nf b/subworkflows/nf-core/rseqc.nf index b6b39ce46..f84696a35 100644 --- a/subworkflows/nf-core/rseqc.nf +++ b/subworkflows/nf-core/rseqc.nf @@ -1,157 +1,157 @@ -/* - * Run RSeQC modules - */ - -params.bamstat_options = [:] -params.innerdistance_options = [:] -params.inferexperiment_options = [:] -params.junctionannotation_options = [:] -params.junctionsaturation_options = [:] -params.readdistribution_options = [:] -params.readduplication_options = [:] - -include { RSEQC_BAMSTAT } from '../../modules/nf-core/software/rseqc/bamstat/main' addParams( options: params.bamstat_options ) -include { RSEQC_INNERDISTANCE } from '../../modules/nf-core/software/rseqc/innerdistance/main' addParams( options: params.innerdistance_options ) -include { RSEQC_INFEREXPERIMENT } from '../../modules/nf-core/software/rseqc/inferexperiment/main' addParams( options: params.inferexperiment_options ) -include { RSEQC_JUNCTIONANNOTATION } from '../../modules/nf-core/software/rseqc/junctionannotation/main' addParams( options: params.junctionannotation_options ) -include { RSEQC_JUNCTIONSATURATION } from '../../modules/nf-core/software/rseqc/junctionsaturation/main' addParams( options: params.junctionsaturation_options ) -include { RSEQC_READDISTRIBUTION } from '../../modules/nf-core/software/rseqc/readdistribution/main' addParams( options: params.readdistribution_options ) -include { RSEQC_READDUPLICATION } from '../../modules/nf-core/software/rseqc/readduplication/main' addParams( options: params.readduplication_options ) - -workflow RSEQC { - take: - bam // channel: [ val(meta), [ ban ] ] - bed // file: /path/to/genome.bed - rseqc_modules // list: rseqc modules to run - - main: - /* - * Run RSeQC bam_stat.py - */ - version = Channel.empty() - bamstat_txt = Channel.empty() - if ('bam_stat' in rseqc_modules) { - RSEQC_BAMSTAT ( bam ) - bamstat_txt = RSEQC_BAMSTAT.out.txt - version = RSEQC_BAMSTAT.out.version - } - - /* - * Run RSeQC inner_distance.py - */ - innerdistance_distance = Channel.empty() - innerdistance_freq = Channel.empty() - innerdistance_mean = Channel.empty() - innerdistance_pdf = Channel.empty() - innerdistance_rscript = Channel.empty() - if ('inner_distance' in rseqc_modules) { - RSEQC_INNERDISTANCE ( bam, bed ) - innerdistance_distance = RSEQC_INNERDISTANCE.out.distance - innerdistance_freq = RSEQC_INNERDISTANCE.out.freq - innerdistance_mean = RSEQC_INNERDISTANCE.out.mean - innerdistance_pdf = RSEQC_INNERDISTANCE.out.pdf - innerdistance_rscript = RSEQC_INNERDISTANCE.out.rscript - version = RSEQC_INNERDISTANCE.out.version - } - - /* - * Run RSeQC infer_experiment.py - */ - inferexperiment_txt = Channel.empty() - if ('infer_experiment' in rseqc_modules) { - RSEQC_INFEREXPERIMENT ( bam, bed ) - inferexperiment_txt = RSEQC_INFEREXPERIMENT.out.txt - version = RSEQC_INFEREXPERIMENT.out.version - } - - /* - * Run RSeQC junction_annotation.py - */ - junctionannotation_bed = Channel.empty() - junctionannotation_interact_bed = Channel.empty() - junctionannotation_xls = Channel.empty() - junctionannotation_pdf = Channel.empty() - junctionannotation_events_pdf = Channel.empty() - junctionannotation_rscript = Channel.empty() - junctionannotation_log = Channel.empty() - if ('junction_annotation' in rseqc_modules) { - RSEQC_JUNCTIONANNOTATION ( bam, bed ) - junctionannotation_bed = RSEQC_JUNCTIONANNOTATION.out.bed - junctionannotation_interact_bed = RSEQC_JUNCTIONANNOTATION.out.interact_bed - junctionannotation_xls = RSEQC_JUNCTIONANNOTATION.out.xls - junctionannotation_pdf = RSEQC_JUNCTIONANNOTATION.out.pdf - junctionannotation_events_pdf = RSEQC_JUNCTIONANNOTATION.out.events_pdf - junctionannotation_rscript = RSEQC_JUNCTIONANNOTATION.out.rscript - junctionannotation_log = RSEQC_JUNCTIONANNOTATION.out.log - version = RSEQC_JUNCTIONANNOTATION.out.version - } - - /* - * Run RSeQC junction_saturation.py - */ - junctionsaturation_pdf = Channel.empty() - junctionsaturation_rscript = Channel.empty() - if ('junction_saturation' in rseqc_modules) { - RSEQC_JUNCTIONSATURATION ( bam, bed ) - junctionsaturation_pdf = RSEQC_JUNCTIONSATURATION.out.pdf - junctionsaturation_rscript = RSEQC_JUNCTIONSATURATION.out.rscript - version = RSEQC_JUNCTIONSATURATION.out.version - } - - /* - * Run RSeQC read_distribution.py - */ - readdistribution_txt = Channel.empty() - if ('read_distribution' in rseqc_modules) { - RSEQC_READDISTRIBUTION ( bam, bed ) - readdistribution_txt = RSEQC_READDISTRIBUTION.out.txt - version = RSEQC_READDISTRIBUTION.out.version - } - - /* - * Run RSeQC read_duplication.py - */ - readduplication_seq_xls = Channel.empty() - readduplication_pos_xls = Channel.empty() - readduplication_pdf = Channel.empty() - readduplication_rscript = Channel.empty() - if ('read_duplication' in rseqc_modules) { - RSEQC_READDUPLICATION ( bam ) - readduplication_seq_xls = RSEQC_READDUPLICATION.out.seq_xls - readduplication_pos_xls = RSEQC_READDUPLICATION.out.pos_xls - readduplication_pdf = RSEQC_READDUPLICATION.out.pdf - readduplication_rscript = RSEQC_READDUPLICATION.out.rscript - version = RSEQC_READDUPLICATION.out.version - } - - emit: - bamstat_txt // channel: [ val(meta), txt ] - - innerdistance_distance // channel: [ val(meta), txt ] - innerdistance_freq // channel: [ val(meta), txt ] - innerdistance_mean // channel: [ val(meta), txt ] - innerdistance_pdf // channel: [ val(meta), pdf ] - innerdistance_rscript // channel: [ val(meta), r ] - - inferexperiment_txt // channel: [ val(meta), txt ] - - junctionannotation_bed // channel: [ val(meta), bed ] - junctionannotation_interact_bed // channel: [ val(meta), bed ] - junctionannotation_xls // channel: [ val(meta), xls ] - junctionannotation_pdf // channel: [ val(meta), pdf ] - junctionannotation_events_pdf // channel: [ val(meta), pdf ] - junctionannotation_rscript // channel: [ val(meta), r ] - junctionannotation_log // channel: [ val(meta), log ] - - junctionsaturation_pdf // channel: [ val(meta), pdf ] - junctionsaturation_rscript // channel: [ val(meta), r ] - - readdistribution_txt // channel: [ val(meta), txt ] - - readduplication_seq_xls // channel: [ val(meta), xls ] - readduplication_pos_xls // channel: [ val(meta), xls ] - readduplication_pdf // channel: [ val(meta), pdf ] - readduplication_rscript // channel: [ val(meta), r ] - - version // path: *.version.txt -} +/* + * Run RSeQC modules + */ + +params.bamstat_options = [:] +params.innerdistance_options = [:] +params.inferexperiment_options = [:] +params.junctionannotation_options = [:] +params.junctionsaturation_options = [:] +params.readdistribution_options = [:] +params.readduplication_options = [:] + +include { RSEQC_BAMSTAT } from '../../modules/nf-core/software/rseqc/bamstat/main' addParams( options: params.bamstat_options ) +include { RSEQC_INNERDISTANCE } from '../../modules/nf-core/software/rseqc/innerdistance/main' addParams( options: params.innerdistance_options ) +include { RSEQC_INFEREXPERIMENT } from '../../modules/nf-core/software/rseqc/inferexperiment/main' addParams( options: params.inferexperiment_options ) +include { RSEQC_JUNCTIONANNOTATION } from '../../modules/nf-core/software/rseqc/junctionannotation/main' addParams( options: params.junctionannotation_options ) +include { RSEQC_JUNCTIONSATURATION } from '../../modules/nf-core/software/rseqc/junctionsaturation/main' addParams( options: params.junctionsaturation_options ) +include { RSEQC_READDISTRIBUTION } from '../../modules/nf-core/software/rseqc/readdistribution/main' addParams( options: params.readdistribution_options ) +include { RSEQC_READDUPLICATION } from '../../modules/nf-core/software/rseqc/readduplication/main' addParams( options: params.readduplication_options ) + +workflow RSEQC { + take: + bam // channel: [ val(meta), [ ban ] ] + bed // file: /path/to/genome.bed + rseqc_modules // list: rseqc modules to run + + main: + /* + * Run RSeQC bam_stat.py + */ + version = Channel.empty() + bamstat_txt = Channel.empty() + if ('bam_stat' in rseqc_modules) { + RSEQC_BAMSTAT ( bam ) + bamstat_txt = RSEQC_BAMSTAT.out.txt + version = RSEQC_BAMSTAT.out.version + } + + /* + * Run RSeQC inner_distance.py + */ + innerdistance_distance = Channel.empty() + innerdistance_freq = Channel.empty() + innerdistance_mean = Channel.empty() + innerdistance_pdf = Channel.empty() + innerdistance_rscript = Channel.empty() + if ('inner_distance' in rseqc_modules) { + RSEQC_INNERDISTANCE ( bam, bed ) + innerdistance_distance = RSEQC_INNERDISTANCE.out.distance + innerdistance_freq = RSEQC_INNERDISTANCE.out.freq + innerdistance_mean = RSEQC_INNERDISTANCE.out.mean + innerdistance_pdf = RSEQC_INNERDISTANCE.out.pdf + innerdistance_rscript = RSEQC_INNERDISTANCE.out.rscript + version = RSEQC_INNERDISTANCE.out.version + } + + /* + * Run RSeQC infer_experiment.py + */ + inferexperiment_txt = Channel.empty() + if ('infer_experiment' in rseqc_modules) { + RSEQC_INFEREXPERIMENT ( bam, bed ) + inferexperiment_txt = RSEQC_INFEREXPERIMENT.out.txt + version = RSEQC_INFEREXPERIMENT.out.version + } + + /* + * Run RSeQC junction_annotation.py + */ + junctionannotation_bed = Channel.empty() + junctionannotation_interact_bed = Channel.empty() + junctionannotation_xls = Channel.empty() + junctionannotation_pdf = Channel.empty() + junctionannotation_events_pdf = Channel.empty() + junctionannotation_rscript = Channel.empty() + junctionannotation_log = Channel.empty() + if ('junction_annotation' in rseqc_modules) { + RSEQC_JUNCTIONANNOTATION ( bam, bed ) + junctionannotation_bed = RSEQC_JUNCTIONANNOTATION.out.bed + junctionannotation_interact_bed = RSEQC_JUNCTIONANNOTATION.out.interact_bed + junctionannotation_xls = RSEQC_JUNCTIONANNOTATION.out.xls + junctionannotation_pdf = RSEQC_JUNCTIONANNOTATION.out.pdf + junctionannotation_events_pdf = RSEQC_JUNCTIONANNOTATION.out.events_pdf + junctionannotation_rscript = RSEQC_JUNCTIONANNOTATION.out.rscript + junctionannotation_log = RSEQC_JUNCTIONANNOTATION.out.log + version = RSEQC_JUNCTIONANNOTATION.out.version + } + + /* + * Run RSeQC junction_saturation.py + */ + junctionsaturation_pdf = Channel.empty() + junctionsaturation_rscript = Channel.empty() + if ('junction_saturation' in rseqc_modules) { + RSEQC_JUNCTIONSATURATION ( bam, bed ) + junctionsaturation_pdf = RSEQC_JUNCTIONSATURATION.out.pdf + junctionsaturation_rscript = RSEQC_JUNCTIONSATURATION.out.rscript + version = RSEQC_JUNCTIONSATURATION.out.version + } + + /* + * Run RSeQC read_distribution.py + */ + readdistribution_txt = Channel.empty() + if ('read_distribution' in rseqc_modules) { + RSEQC_READDISTRIBUTION ( bam, bed ) + readdistribution_txt = RSEQC_READDISTRIBUTION.out.txt + version = RSEQC_READDISTRIBUTION.out.version + } + + /* + * Run RSeQC read_duplication.py + */ + readduplication_seq_xls = Channel.empty() + readduplication_pos_xls = Channel.empty() + readduplication_pdf = Channel.empty() + readduplication_rscript = Channel.empty() + if ('read_duplication' in rseqc_modules) { + RSEQC_READDUPLICATION ( bam ) + readduplication_seq_xls = RSEQC_READDUPLICATION.out.seq_xls + readduplication_pos_xls = RSEQC_READDUPLICATION.out.pos_xls + readduplication_pdf = RSEQC_READDUPLICATION.out.pdf + readduplication_rscript = RSEQC_READDUPLICATION.out.rscript + version = RSEQC_READDUPLICATION.out.version + } + + emit: + bamstat_txt // channel: [ val(meta), txt ] + + innerdistance_distance // channel: [ val(meta), txt ] + innerdistance_freq // channel: [ val(meta), txt ] + innerdistance_mean // channel: [ val(meta), txt ] + innerdistance_pdf // channel: [ val(meta), pdf ] + innerdistance_rscript // channel: [ val(meta), r ] + + inferexperiment_txt // channel: [ val(meta), txt ] + + junctionannotation_bed // channel: [ val(meta), bed ] + junctionannotation_interact_bed // channel: [ val(meta), bed ] + junctionannotation_xls // channel: [ val(meta), xls ] + junctionannotation_pdf // channel: [ val(meta), pdf ] + junctionannotation_events_pdf // channel: [ val(meta), pdf ] + junctionannotation_rscript // channel: [ val(meta), r ] + junctionannotation_log // channel: [ val(meta), log ] + + junctionsaturation_pdf // channel: [ val(meta), pdf ] + junctionsaturation_rscript // channel: [ val(meta), r ] + + readdistribution_txt // channel: [ val(meta), txt ] + + readduplication_seq_xls // channel: [ val(meta), xls ] + readduplication_pos_xls // channel: [ val(meta), xls ] + readduplication_pdf // channel: [ val(meta), pdf ] + readduplication_rscript // channel: [ val(meta), r ] + + version // path: *.version.txt +} diff --git a/workflows/rnaseq.nf b/workflows/rnaseq.nf index 1d94c3b8d..40004030a 100755 --- a/workflows/rnaseq.nf +++ b/workflows/rnaseq.nf @@ -19,7 +19,7 @@ WorkflowRnaseq.initialise(params, log, valid_params) checkPathParamList = [ params.input, params.multiqc_config, params.fasta, params.transcript_fasta, params.additional_fasta, - params.gtf, params.gff, params.gene_bed, + params.gtf, params.gff, params.gene_bed, params.ribo_database_manifest, params.splicesites, params.star_index, params.hisat2_index, params.rsem_index, params.salmon_index ] @@ -52,7 +52,7 @@ ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) /* ======================================================================================== - CONFIG FILES + CONFIG FILES ======================================================================================== */ @@ -247,7 +247,7 @@ workflow RNASEQ { /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - INPUT_CHECK ( + INPUT_CHECK ( ch_input ) .map { @@ -263,11 +263,11 @@ workflow RNASEQ { return [ meta, fastq.flatten() ] } .set { ch_fastq } - + /* * MODULE: Concatenate FastQ files from same sample if required */ - CAT_FASTQ ( + CAT_FASTQ ( ch_fastq.multiple ) .mix(ch_fastq.single) @@ -294,8 +294,8 @@ workflow RNASEQ { if (params.remove_ribo_rna) { ch_sortmerna_fasta = Channel.from(ch_ribo_db.readLines()).map { row -> file(row) }.collect() - SORTMERNA ( - ch_trimmed_reads, + SORTMERNA ( + ch_trimmed_reads, ch_sortmerna_fasta ) .reads @@ -435,7 +435,7 @@ workflow RNASEQ { * SUBWORKFLOW: Alignment with HISAT2 */ ch_hisat2_multiqc = Channel.empty() - if (!params.skip_alignment && params.aligner == 'hisat2') { + if (!params.skip_alignment && params.aligner == 'hisat2') { ALIGN_HISAT2 ( ch_trimmed_reads, PREPARE_GENOME.out.hisat2_index, @@ -489,7 +489,7 @@ workflow RNASEQ { .join(ch_percent_mapped, by: [0]) .map { meta, ofile, mapped, pass -> if (pass) [ meta, ofile ] } .set { ch_genome_bam_index } - + ch_percent_mapped .branch { meta, mapped, pass -> pass: pass @@ -501,7 +501,7 @@ workflow RNASEQ { } .set { ch_pass_fail_mapped } - MULTIQC_CUSTOM_FAIL_MAPPED ( + MULTIQC_CUSTOM_FAIL_MAPPED ( ch_pass_fail_mapped.fail.collect() ) .set { ch_fail_mapping_multiqc } @@ -512,7 +512,7 @@ workflow RNASEQ { */ ch_preseq_multiqc = Channel.empty() if (!params.skip_alignment && !params.skip_qc && !params.skip_preseq) { - PRESEQ_LCEXTRAP ( + PRESEQ_LCEXTRAP ( ch_genome_bam ) ch_preseq_multiqc = PRESEQ_LCEXTRAP.out.ccurve @@ -543,8 +543,8 @@ workflow RNASEQ { * MODULE: STRINGTIE */ if (!params.skip_alignment && !params.skip_stringtie) { - STRINGTIE ( - ch_genome_bam, + STRINGTIE ( + ch_genome_bam, PREPARE_GENOME.out.gtf ) ch_software_versions = ch_software_versions.mix(STRINGTIE.out.version.first().ifEmpty(null)) @@ -555,7 +555,7 @@ workflow RNASEQ { */ ch_featurecounts_multiqc = Channel.empty() if (!params.skip_alignment && !params.skip_qc && !params.skip_biotype_qc && biotype) { - + PREPARE_GENOME .out .gtf @@ -569,14 +569,14 @@ workflow RNASEQ { .filter { it[-1] } .map { it[0.. + .map { + meta -> meta.single_end = meta.single_end.toBoolean() [ meta, [ meta.fastq_1, meta.fastq_2 ] ] } From c27c1e93a281a7df23a00db73a3e2c66dca3f806 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 09:46:55 +0200 Subject: [PATCH 3/8] Start converting 2-space indent to 4-space indent --- .editorconfig | 3 + conf/base.config | 70 ++-- conf/igenomes.config | 818 +++++++++++++++++++++---------------------- lib/Utils.groovy | 94 ++--- nextflow.config | 390 ++++++++++----------- 5 files changed, 689 insertions(+), 686 deletions(-) diff --git a/.editorconfig b/.editorconfig index b80832b37..2095f8e52 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,3 +19,6 @@ insert_final_newline = unset trim_trailing_whitespace = unset indent_style = unset indent_size = unset + +[/assets/email*] +indent_size = unset diff --git a/conf/base.config b/conf/base.config index 42e8aa9fd..b70713e85 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,41 +11,41 @@ process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 1 * task.attempt, 'cpus' ) } + 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' } - maxRetries = 1 - maxErrors = '-1' + errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } + maxRetries = 1 + maxErrors = '-1' - // Process-specific resource requirements - withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } - } - withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - 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( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } - } - withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } - } - withLabel:process_high_memory { - memory = { check_max( 200.GB * task.attempt, 'memory' ) } - } - withLabel:error_ignore { - errorStrategy = 'ignore' - } - withLabel:error_retry { - errorStrategy = 'retry' - maxRetries = 2 - } + // Process-specific resource requirements + withLabel:process_low { + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 12.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } + } + withLabel:process_medium { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + 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( 72.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } + } + withLabel:process_long { + time = { check_max( 20.h * task.attempt, 'time' ) } + } + withLabel:process_high_memory { + memory = { check_max( 200.GB * task.attempt, 'memory' ) } + } + withLabel:error_ignore { + errorStrategy = 'ignore' + } + withLabel:error_retry { + errorStrategy = 'retry' + maxRetries = 2 + } } \ No newline at end of file diff --git a/conf/igenomes.config b/conf/igenomes.config index 31b7ee613..1bcca3f38 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -8,414 +8,414 @@ */ params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - 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 = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + 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 = "${projectDir}/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 = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'GRCm38' { + 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 = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + 'TAIR10' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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' { + 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 = "${projectDir}/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 = "${projectDir}/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 = "${projectDir}/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" + macs_gsize = "1.37e9" + } + '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" + } } - '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 = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'GRCm38' { - 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 = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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' { - 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 = "${projectDir}/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 = "${projectDir}/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 = "${projectDir}/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" - macs_gsize = "1.37e9" - } - '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/lib/Utils.groovy b/lib/Utils.groovy index cdbafc31b..8164a16c2 100755 --- a/lib/Utils.groovy +++ b/lib/Utils.groovy @@ -1,47 +1,47 @@ -/* - * This file holds several Groovy functions that could be useful for any Nextflow pipeline - */ - -import org.yaml.snakeyaml.Yaml - -class Utils { - - /* - * When running with -profile conda, warn if channels have not been set-up appropriately - */ - public static void checkCondaChannels(log) { - Yaml parser = new Yaml() - def channels = [] - try { - def config = parser.load("conda config --show channels".execute().text) - channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return - } - - // Check that all channels are present - def required_channels = ['conda-forge', 'bioconda', 'defaults'] - def conda_check_failed = !required_channels.every { ch -> ch in channels } - - // Check that they are in the right order - conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) - conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) - - if (conda_check_failed) { - log.warn "=============================================================================\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + - " NB: The order of the channels matters!\n" + - "===================================================================================" - } - } - - /* - * Join module args with appropriate spacing - */ - public static String joinModuleArgs(args_list) { - return ' ' + args_list.join(' ') - } -} +/* + * This file holds several Groovy functions that could be useful for any Nextflow pipeline + */ + +import org.yaml.snakeyaml.Yaml + +class Utils { + + /* + * When running with -profile conda, warn if channels have not been set-up appropriately + */ + public static void checkCondaChannels(log) { + Yaml parser = new Yaml() + def channels = [] + try { + def config = parser.load("conda config --show channels".execute().text) + channels = config.channels + } catch(NullPointerException | IOException e) { + log.warn "Could not verify conda channel configuration." + return + } + + // Check that all channels are present + def required_channels = ['conda-forge', 'bioconda', 'defaults'] + def conda_check_failed = !required_channels.every { ch -> ch in channels } + + // Check that they are in the right order + conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) + conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) + + if (conda_check_failed) { + log.warn "=============================================================================\n" + + " There is a problem with your Conda configuration!\n\n" + + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + + " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + + " NB: The order of the channels matters!\n" + + "===================================================================================" + } + } + + /* + * Join module args with appropriate spacing + */ + public static String joinModuleArgs(args_list) { + return ' ' + args_list.join(' ') + } +} diff --git a/nextflow.config b/nextflow.config index f03b05979..a0ec1679a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -8,106 +8,106 @@ // Global default params, used in configs params { - // Input options - input = null - public_data_ids = null - skip_sra_fastq_download = false + // Input options + input = null + public_data_ids = null + skip_sra_fastq_download = false - // References - genome = null - transcript_fasta = null - additional_fasta = null - splicesites = null - gtf_extra_attributes = 'gene_name' - gtf_group_features = 'gene_id' - featurecounts_feature_type = 'exon' - featurecounts_group_type = 'gene_biotype' - gencode = false - save_reference = false + // References + genome = null + transcript_fasta = null + additional_fasta = null + splicesites = null + gtf_extra_attributes = 'gene_name' + gtf_group_features = 'gene_id' + featurecounts_feature_type = 'exon' + featurecounts_group_type = 'gene_biotype' + gencode = false + save_reference = false - // UMI handling - with_umi = false - umitools_extract_method = 'string' - umitools_bc_pattern = null - save_umi_intermeds = false + // UMI handling + with_umi = false + umitools_extract_method = 'string' + umitools_bc_pattern = null + save_umi_intermeds = false - // Trimming - clip_r1 = null - clip_r2 = null - three_prime_clip_r1 = null - three_prime_clip_r2 = null - trim_nextseq = null - save_trimmed = false - skip_trimming = false + // Trimming + clip_r1 = null + clip_r2 = null + three_prime_clip_r1 = null + three_prime_clip_r2 = null + trim_nextseq = null + save_trimmed = false + skip_trimming = false - // Ribosomal RNA removal - remove_ribo_rna = false - save_non_ribo_reads = false - ribo_database_manifest = "${projectDir}/assets/rrna-db-defaults.txt" + // Ribosomal RNA removal + remove_ribo_rna = false + save_non_ribo_reads = false + ribo_database_manifest = "${projectDir}/assets/rrna-db-defaults.txt" - // Alignment - aligner = 'star_salmon' - pseudo_aligner = null - seq_center = null - bam_csi_index = false - star_ignore_sjdbgtf = false - hisat2_build_memory = '200.GB' // Amount of memory required to build HISAT2 index with splice sites - stringtie_ignore_gtf = false - min_mapped_reads = 5 - save_merged_fastq = false - save_unaligned = false - save_align_intermeds = false - skip_markduplicates = false - skip_alignment = false + // Alignment + aligner = 'star_salmon' + pseudo_aligner = null + seq_center = null + bam_csi_index = false + star_ignore_sjdbgtf = false + hisat2_build_memory = '200.GB' // Amount of memory required to build HISAT2 index with splice sites + stringtie_ignore_gtf = false + min_mapped_reads = 5 + save_merged_fastq = false + save_unaligned = false + save_align_intermeds = false + skip_markduplicates = false + skip_alignment = false - // QC - skip_qc = false - skip_bigwig = false - skip_stringtie = false - skip_fastqc = false - skip_preseq = false - skip_dupradar = false - skip_qualimap = false - skip_rseqc = false - skip_biotype_qc = false - skip_deseq2_qc = false - skip_multiqc = false - deseq2_vst = false - rseqc_modules = 'bam_stat,inner_distance,infer_experiment,junction_annotation,junction_saturation,read_distribution,read_duplication' + // QC + skip_qc = false + skip_bigwig = false + skip_stringtie = false + skip_fastqc = false + skip_preseq = false + skip_dupradar = false + skip_qualimap = false + skip_rseqc = false + skip_biotype_qc = false + skip_deseq2_qc = false + skip_multiqc = false + deseq2_vst = false + rseqc_modules = 'bam_stat,inner_distance,infer_experiment,junction_annotation,junction_saturation,read_distribution,read_duplication' - // Boilerplate options - outdir = './results' - publish_dir_mode = 'copy' - multiqc_config = null - multiqc_title = null - email = null - email_on_fail = null - max_multiqc_email_size = '25.MB' - plaintext_email = false - monochrome_logs = false - help = false - igenomes_base = 's3://ngi-igenomes/igenomes/' - tracedir = "${params.outdir}/pipeline_info" - igenomes_ignore = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes,modules' - enable_conda = false - singularity_pull_docker_container = false + // Boilerplate options + outdir = './results' + publish_dir_mode = 'copy' + multiqc_config = null + multiqc_title = null + email = null + email_on_fail = null + max_multiqc_email_size = '25.MB' + plaintext_email = false + monochrome_logs = false + help = false + igenomes_base = 's3://ngi-igenomes/igenomes/' + tracedir = "${params.outdir}/pipeline_info" + igenomes_ignore = false + validate_params = true + show_hidden_params = false + schema_ignore_params = 'genomes,modules' + enable_conda = false + singularity_pull_docker_container = false - // Config options - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - hostnames = [:] - config_profile_name = null - config_profile_description = null - config_profile_contact = null - config_profile_url = null + // Config options + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + hostnames = [:] + config_profile_name = null + config_profile_description = null + config_profile_contact = null + config_profile_url = null - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' + // Defaults only, expecting to be overwritten + max_memory = '128.GB' + max_cpus = 16 + max_time = '240.h' } @@ -119,145 +119,145 @@ includeConfig 'conf/modules.config' // Load nf-core custom profiles from different Institutions try { - includeConfig "${params.custom_config_base}/nfcore_custom.config" + includeConfig "${params.custom_config_base}/nfcore_custom.config" } catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") + System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } // Load nf-core/rnaseq custom config try { - includeConfig "${params.custom_config_base}/pipeline/rnaseq.config" + includeConfig "${params.custom_config_base}/pipeline/rnaseq.config" } catch (Exception e) { - System.err.println("WARNING: Could not load nf-core/config/rnaseq profiles: ${params.custom_config_base}/pipeline/rnaseq.config") + System.err.println("WARNING: Could not load nf-core/config/rnaseq profiles: ${params.custom_config_base}/pipeline/rnaseq.config") } // Load igenomes.config if required if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' + includeConfig 'conf/igenomes.config' } else { - params.genomes = [:] + params.genomes = [:] } profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } - conda { - params.enable_conda = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - 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.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - singularity { - singularity.enabled = true - singularity.autoMounts = true - docker.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - podman { - podman.enabled = true - docker.enabled = false - singularity.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - shifter { - shifter.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - charliecloud.enabled = false - } - charliecloud { - charliecloud.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - } - test { includeConfig 'conf/test.config' } - test_sra { includeConfig 'conf/test_sra.config' } - test_full { includeConfig 'conf/test_full.config' } + debug { process.beforeScript = 'echo $HOSTNAME' } + conda { + params.enable_conda = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + 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.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + singularity { + singularity.enabled = true + singularity.autoMounts = true + docker.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + podman { + podman.enabled = true + docker.enabled = false + singularity.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + shifter { + shifter.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + charliecloud.enabled = false + } + charliecloud { + charliecloud.enabled = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + } + test { includeConfig 'conf/test.config' } + test_sra { includeConfig 'conf/test_sra.config' } + test_full { includeConfig 'conf/test_full.config' } } // 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" + PYTHONNOUSERSITE = 1 + R_PROFILE_USER = "/.Rprofile" + R_ENVIRON_USER = "/.Renviron" } def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { - enabled = true - file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" + enabled = true + file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" } report { - enabled = true - file = "${params.tracedir}/execution_report_${trace_timestamp}.html" + enabled = true + file = "${params.tracedir}/execution_report_${trace_timestamp}.html" } trace { - enabled = true - file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" + enabled = true + file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" } dag { - enabled = true - file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg" + enabled = true + file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg" } manifest { - name = 'nf-core/rnaseq' - author = 'Phil Ewels, Rickard Hammarén' - homePage = 'https://github.com/nf-core/rnaseq' - description = 'Nextflow RNA-Seq analysis pipeline, part of the nf-core community.' - mainScript = 'main.nf' - nextflowVersion = '!>=21.04.0' - version = '3.1' + name = 'nf-core/rnaseq' + author = 'Phil Ewels, Rickard Hammarén' + homePage = 'https://github.com/nf-core/rnaseq' + description = 'Nextflow RNA-Seq analysis pipeline, part of the nf-core community.' + mainScript = 'main.nf' + nextflowVersion = '!>=21.04.0' + version = '3.1' } // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { - if (type == 'memory') { - try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else - return obj - } catch (all) { - println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'time') { - try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration - else - return obj - } catch (all) { - println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" - return obj - } - } else if (type == 'cpus') { - try { - return Math.min( obj, params.max_cpus as int ) - } catch (all) { - println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" - return obj + if (type == 'memory') { + try { + if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) + return params.max_memory as nextflow.util.MemoryUnit + else + return obj + } catch (all) { + println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" + return obj + } + } else if (type == 'time') { + try { + if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) + return params.max_time as nextflow.util.Duration + else + return obj + } catch (all) { + println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" + return obj + } + } else if (type == 'cpus') { + try { + return Math.min( obj, params.max_cpus as int ) + } catch (all) { + println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" + return obj + } } - } } From dc510a32273f43f76879ec338d53f74e0074991d Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 10:01:04 +0200 Subject: [PATCH 4/8] Fix indentation for markdown and some other files --- .github/PULL_REQUEST_TEMPLATE.md | 4 +- .github/markdownlint.yml | 14 +- .github/workflows/ci.yml | 2 +- CHANGELOG.md | 36 ++-- CITATIONS.md | 220 +++++++++---------- README.md | 56 ++--- assets/sendmail_template.txt | 36 ++-- conf/base.config | 2 +- docs/README.md | 4 +- docs/output.md | 296 +++++++++++++------------- docs/usage.md | 58 ++--- nextflow_schema.json | 2 +- subworkflows/local/prepare_genome.nf | 3 +- subworkflows/local/quantify_salmon.nf | 10 +- 14 files changed, 373 insertions(+), 370 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6ae73eacb..ead77d048 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,8 +15,8 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/rnas - [ ] 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 you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnaseq/tree/master/.github/CONTRIBUTING.md) - - [ ] If necessary, also make a PR on the nf-core/rnaseq _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. + - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/rnaseq/tree/master/.github/CONTRIBUTING.md) + - [ ] If necessary, also make a PR on the nf-core/rnaseq _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint .`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index 8d7eb53b0..b5c4bbf8a 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -1,12 +1,14 @@ # Markdownlint configuration file default: true line-length: false +ul-indent: + indent: 4 no-duplicate-header: - siblings_only: true + siblings_only: true no-inline-html: allowed_elements: - - img - - p - - kbd - - details - - summary + - img + - p + - kbd + - details + - summary diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3af2827f8..4ca2a861a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,7 +91,7 @@ jobs: run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - + - name: Run pipeline with RSEM STAR and various parameters run: | nextflow run ${GITHUB_WORKSPACE} -profile test,docker --aligner star_rsem ${{ matrix.parameters }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d1c41fe5..cd5665ecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### :warning: Major enhancements * Samplesheet format has changed from `group,replicate,fastq_1,fastq_2,strandedness` to `sample,fastq_1,fastq_2,strandedness` - * This gives users the flexibility to name their samples however they wish (see [#550](https://github.com/nf-core/rnaseq/issues/550])) - * PCA generated by DESeq2 will now be monochrome and will not be grouped by using the replicate id + * This gives users the flexibility to name their samples however they wish (see [#550](https://github.com/nf-core/rnaseq/issues/550])) + * PCA generated by DESeq2 will now be monochrome and will not be grouped by using the replicate id * Updated Nextflow version to `v21.04.0` (see [nextflow#572](https://github.com/nextflow-io/nextflow/issues/1964)) * Restructure pipeline scripts into `modules/`, `subworkflows/` and `workflows/` directories @@ -74,10 +74,10 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi * You will need to install Nextflow `>=20.11.0-edge` to run the pipeline. If you are using Singularity, then features introduced in that release now enable the pipeline to directly download Singularity images hosted by Biocontainers as opposed to performing a conversion from Docker images (see [#496](https://github.com/nf-core/rnaseq/issues/496)). * The previous default of aligning BAM files using STAR and quantifying using featureCounts (`--aligner star`) has been removed. The new default is to align with STAR and quantify using Salmon (`--aligner star_salmon`). - * This decision was made primarily because of the limitations of featureCounts to appropriately quantify gene expression data. Please see [Zhao et al., 2015](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0141910#pone-0141910-t001) and [Soneson et al., 2015](https://f1000research.com/articles/4-1521/v1)). + * This decision was made primarily because of the limitations of featureCounts to appropriately quantify gene expression data. Please see [Zhao et al., 2015](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0141910#pone-0141910-t001) and [Soneson et al., 2015](https://f1000research.com/articles/4-1521/v1)). * For similar reasons, **quantification will not be performed** if using `--aligner hisat2` due to the lack of an appropriate option to calculate accurate expression estimates from HISAT2 derived genomic alignments. - * This pipeline option is still available for those who have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. No gene-level quantification results will be generated. - * In a future release we hope to add back quantitation for HISAT2 using different tools. + * This pipeline option is still available for those who have a preference for the alignment, QC and other types of downstream analysis compatible with the output of HISAT2. No gene-level quantification results will be generated. + * In a future release we hope to add back quantitation for HISAT2 using different tools. ### Enhancements & fixes @@ -244,10 +244,10 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi * `--skipEdgeR` qc not performed by DESeq2 instead * `--star_memory` in favour of updating centrally on nf-core/modules if required * Strandedness is now specified at the sample-level via the input samplesheet - * `--forwardStranded` - * `--reverseStranded` - * `--unStranded` - * `--pico` + * `--forwardStranded` + * `--reverseStranded` + * `--unStranded` + * `--pico` ### Software dependencies @@ -321,9 +321,9 @@ Major novel changes include: * Several improvements in `featureCounts` handling of types other than `exon`. It is possible now to handle nuclearRNAseq data. Nuclear RNA has un-spliced RNA, and the whole transcript, including the introns, needs to be counted, e.g. by specifying `--fc_count_type transcript`. * Support for [outputting unaligned data](https://github.com/nf-core/rnaseq/issues/277) to results folders. * Added options to skip several steps - * Skip trimming using `--skipTrimming` - * Skip BiotypeQC using `--skipBiotypeQC` - * Skip Alignment using `--skipAlignment` to only use pseudo-alignment using Salmon + * Skip trimming using `--skipTrimming` + * Skip BiotypeQC using `--skipBiotypeQC` + * Skip Alignment using `--skipAlignment` to only use pseudo-alignment using Salmon ### Documentation updates @@ -434,7 +434,7 @@ Major novel changes include: * Remove legacy rseqc `strandRule` config code. [#119](https://github.com/nf-core/rnaseq/issues/119) * Added STRINGTIE ballgown output to results folder [#125](https://github.com/nf-core/rnaseq/issues/125) * HiSAT index build now requests `200GB` memory, enough to use the exons / splice junction option for building. - * Added documentation about the `--hisatBuildMemory` option. + * Added documentation about the `--hisatBuildMemory` option. * BAM indices are stored and re-used between processes [#71](https://github.com/nf-core/rnaseq/issues/71) ### Bug Fixes @@ -474,25 +474,25 @@ In summary, the main changes are: * Rebranding and renaming throughout the pipeline to nf-core * Updating many parts of the pipeline config and style to meet nf-core standards * Support for GFF files in addition to GTF files - * Just use `--gff` instead of `--gtf` when specifying a file path + * Just use `--gff` instead of `--gtf` when specifying a file path * New command line options to skip various quality control steps * More safety checks when launching a pipeline - * Several new sanity checks - for example, that the specified reference genome exists + * Several new sanity checks - for example, that the specified reference genome exists * Improved performance with memory usage (especially STAR and Picard) * New BigWig file outputs for plotting coverage across the genome * Refactored gene body coverage calculation, now much faster and using much less memory * Bugfixes in the MultiQC process to avoid edge cases where it wouldn't run * MultiQC report now automatically attached to the email sent when the pipeline completes * New testing method, with data on GitHub - * Now run pipeline with `-profile test` instead of using bash scripts + * Now run pipeline with `-profile test` instead of using bash scripts * Rewritten continuous integration tests with Travis CI * New explicit support for Singularity containers * Improved MultiQC support for DupRadar and featureCounts - * Now works for all users instead of just NGI Stockholm + * Now works for all users instead of just NGI Stockholm * New configuration for use on AWS batch * Updated config syntax to support latest versions of Nextflow * Built-in support for a number of new local HPC systems - * CCGA, GIS, UCT HEX, updates to UPPMAX, CFC, BINAC, Hebbe, c3se + * CCGA, GIS, UCT HEX, updates to UPPMAX, CFC, BINAC, Hebbe, c3se * Slightly improved documentation (more updates to come) * Updated software packages diff --git a/CITATIONS.md b/CITATIONS.md index cefda54d8..41487d48e 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,110 +1,110 @@ -# nf-core/rnaseq: Citations - -## [nf-core](https://pubmed.ncbi.nlm.nih.gov/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. - -## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/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 - -* [BEDTools](https://pubmed.ncbi.nlm.nih.gov/20110278/) - > Quinlan AR, Hall IM. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 2010 Mar 15;26(6):841-2. doi: 10.1093/bioinformatics/btq033. Epub 2010 Jan 28. PubMed PMID: 20110278; PubMed Central PMCID: PMC2832824. - -* [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - -* [featureCounts](https://pubmed.ncbi.nlm.nih.gov/24227677/) - > Liao Y, Smyth GK, Shi W. featureCounts: an efficient general purpose program for assigning sequence reads to genomic features. Bioinformatics. 2014 Apr 1;30(7):923-30. doi: 10.1093/bioinformatics/btt656. Epub 2013 Nov 13. PubMed PMID: 24227677. - -* [GffRead](https://pubmed.ncbi.nlm.nih.gov/32489650/) - > Pertea G, Pertea M. GFF Utilities: GffRead and GffCompare. F1000Res. 2020 Apr 28;9:ISCB Comm J-304. doi: 10.12688/f1000research.23297.2. eCollection 2020. PubMed PMID: 32489650; PubMed Central PMCID: PMC7222033. - -* [HISAT2](https://pubmed.ncbi.nlm.nih.gov/31375807/) - > Kim D, Paggi JM, Park C, Bennett C, Salzberg SL. Graph-based genome alignment and genotyping with HISAT2 and HISAT-genotype Graph-based genome alignment and genotyping with HISAT2 and HISAT-genotype. Nat Biotechnol. 2019 Aug;37(8):907-915. doi: 10.1038/s41587-019-0201-4. Epub 2019 Aug 2. PubMed PMID: 31375807. - -* [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. - -* [picard-tools](http://broadinstitute.github.io/picard) - -* [preseq](https://pubmed.ncbi.nlm.nih.gov/23435259/) - > Daley T, Smith AD. Predicting the molecular complexity of sequencing libraries. Nat Methods. 2013 Apr;10(4):325-7. doi: 10.1038/nmeth.2375. Epub 2013 Feb 24. PubMed PMID: 23435259; PubMed Central PMCID: PMC3612374. - -* [Qualimap 2](https://pubmed.ncbi.nlm.nih.gov/26428292/) - > Okonechnikov K, Conesa A, García-Alcalde F. Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data Bioinformatics. 2016 Jan 15;32(2):292-4. doi: 10.1093/bioinformatics/btv566. Epub 2015 Oct 1. PubMed PMID: 26428292; PubMed Central PMCID: PMC4708105. - -* [RSEM](https://pubmed.ncbi.nlm.nih.gov/21816040/) - > Li B, Dewey CN. RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome BMC Bioinformatics. 2011 Aug 4;12:323. doi: 10.1186/1471-2105-12-323. PubMed PMID: 21816040; PubMed Central PMCID: PMC3163565. - -* [RSeQC](https://pubmed.ncbi.nlm.nih.gov/22743226/) - > Wang L, Wang S, Li W. RSeQC: quality control of RNA-seq experiments Bioinformatics. 2012 Aug 15;28(16):2184-5. doi: 10.1093/bioinformatics/bts356. Epub 2012 Jun 27. PubMed PMID: 22743226. - -* [Salmon](https://pubmed.ncbi.nlm.nih.gov/28263959/) - > Patro R, Duggal G, Love MI, Irizarry RA, Kingsford C. Salmon provides fast and bias-aware quantification of transcript expression Nat Methods. 2017 Apr;14(4):417-419. doi: 10.1038/nmeth.4197. Epub 2017 Mar 6. PubMed PMID: 28263959; PubMed Central PMCID: PMC5600148. - -* [SAMtools](https://pubmed.ncbi.nlm.nih.gov/19505943/) - > Li H, Handsaker B, Wysoker A, Fennell T, Ruan J, Homer N, Marth G, Abecasis G, Durbin R; 1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. Bioinformatics. 2009 Aug 15;25(16):2078-9. doi: 10.1093/bioinformatics/btp352. Epub 2009 Jun 8. PubMed PMID: 19505943; PubMed Central PMCID: PMC2723002. - -* [SortMeRNA](https://pubmed.ncbi.nlm.nih.gov/23071270/) - > Kopylova E, Noé L, Touzet H. SortMeRNA: fast and accurate filtering of ribosomal RNAs in metatranscriptomic data Bioinformatics. 2012 Dec 15;28(24):3211-7. doi: 10.1093/bioinformatics/bts611. Epub 2012 Oct 15. PubMed PMID: 23071270. - -* [STAR](https://pubmed.ncbi.nlm.nih.gov/23104886/) - > Dobin A, Davis CA, Schlesinger F, Drenkow J, Zaleski C, Jha S, Batut P, Chaisson M, Gingeras TR. STAR: ultrafast universal RNA-seq aligner Bioinformatics. 2013 Jan 1;29(1):15-21. doi: 10.1093/bioinformatics/bts635. Epub 2012 Oct 25. PubMed PMID: 23104886; PubMed Central PMCID: PMC3530905. - -* [StringTie2](https://pubmed.ncbi.nlm.nih.gov/31842956/) - > Kovaka S, Zimin AV, Pertea GM, Razaghi R, Salzberg SL, Pertea M. Transcriptome assembly from long-read RNA-seq alignments with StringTie2 Genome Biol. 2019 Dec 16;20(1):278. doi: 10.1186/s13059-019-1910-1. PubMed PMID: 31842956; PubMed Central PMCID: PMC6912988. - -* [Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) - -* [UMI-tools](https://pubmed.ncbi.nlm.nih.gov/28100584/) - > Smith T, Heger A, Sudbery I. UMI-tools: modeling sequencing errors in Unique Molecular Identifiers to improve quantification accuracy Genome Res. 2017 Mar;27(3):491-499. doi: 10.1101/gr.209601.116. Epub 2017 Jan 18. PubMed PMID: 28100584; PubMed Central PMCID: PMC5340976. - -* [UCSC tools](https://pubmed.ncbi.nlm.nih.gov/20639541/) - > Kent WJ, Zweig AS, Barber G, Hinrichs AS, Karolchik D. BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics. 2010 Sep 1;26(17):2204-7. doi: 10.1093/bioinformatics/btq351. Epub 2010 Jul 17. PubMed PMID: 20639541; PubMed Central PMCID: PMC2922891. - -## R packages - -* [R](https://www.R-project.org/) - > R Core Team (2017). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. - -* [DESeq2](https://pubmed.ncbi.nlm.nih.gov/25516281/) - > Love MI, Huber W, Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014;15(12):550. PubMed PMID: 25516281; PubMed Central PMCID: PMC4302049. - -* [dupRadar](https://pubmed.ncbi.nlm.nih.gov/27769170/) - > Sayols S, Scherzinger D, Klein H. dupRadar: a Bioconductor package for the assessment of PCR artifacts in RNA-Seq data BMC Bioinformatics. 2016 Oct 21;17(1):428. doi: 10.1186/s12859-016-1276-2. PubMed PMID: 27769170; PubMed Central PMCID: PMC5073875. - -* [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html) - > H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016. - -* [optparse](https://CRAN.R-project.org/package=optparse) - > Trevor L Davis (2018). optparse: Command Line Option Parser. - -* [pheatmap](https://CRAN.R-project.org/package=pheatmap) - > Raivo Kolde (2018). pheatmap: Pretty Heatmaps. - -* [RColorBrewer](https://CRAN.R-project.org/package=RColorBrewer) - > Erich Neuwirth (2014). RColorBrewer: ColorBrewer Palettes. - -* [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) - > Morgan M, Obenchain V, Hester J and Pagès H (2020). SummarizedExperiment: SummarizedExperiment container. - -* [Tximeta](https://pubmed.ncbi.nlm.nih.gov/32097405/) - > Love MI, Soneson C, Hickey PF, Johnson LK, Pierce NT, Shepherd L, Morgan M, Patro R. Tximeta: Reference sequence checksums for provenance identification in RNA-seq PLoS Comput Biol. 2020 Feb 25;16(2):e1007664. doi: 10.1371/journal.pcbi.1007664. eCollection 2020 Feb. PubMed PMID: 32097405; PubMed Central PMCID: PMC7059966. - -## Software packaging/containerisation tools - -* [Anaconda](https://anaconda.com) - > Anaconda Software Distribution. Computer software. Vers. 2-2.4.0. Anaconda, Nov. 2016. Web. - -* [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) - > Grüning B, Dale R, Sjödin A, Chapman BA, Rowe J, Tomkins-Tinch CH, Valieris R, Köster J; Bioconda Team. Bioconda: sustainable and comprehensive software distribution for the life sciences. Nat Methods. 2018 Jul;15(7):475-476. doi: 10.1038/s41592-018-0046-7. PubMed PMID: 29967506. - -* [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) - > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. - -* [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) - -* [Singularity](https://pubmed.ncbi.nlm.nih.gov/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. +# nf-core/rnaseq: Citations + +## [nf-core](https://pubmed.ncbi.nlm.nih.gov/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. + +## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/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 + +* [BEDTools](https://pubmed.ncbi.nlm.nih.gov/20110278/) + > Quinlan AR, Hall IM. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 2010 Mar 15;26(6):841-2. doi: 10.1093/bioinformatics/btq033. Epub 2010 Jan 28. PubMed PMID: 20110278; PubMed Central PMCID: PMC2832824. + +* [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + +* [featureCounts](https://pubmed.ncbi.nlm.nih.gov/24227677/) + > Liao Y, Smyth GK, Shi W. featureCounts: an efficient general purpose program for assigning sequence reads to genomic features. Bioinformatics. 2014 Apr 1;30(7):923-30. doi: 10.1093/bioinformatics/btt656. Epub 2013 Nov 13. PubMed PMID: 24227677. + +* [GffRead](https://pubmed.ncbi.nlm.nih.gov/32489650/) + > Pertea G, Pertea M. GFF Utilities: GffRead and GffCompare. F1000Res. 2020 Apr 28;9:ISCB Comm J-304. doi: 10.12688/f1000research.23297.2. eCollection 2020. PubMed PMID: 32489650; PubMed Central PMCID: PMC7222033. + +* [HISAT2](https://pubmed.ncbi.nlm.nih.gov/31375807/) + > Kim D, Paggi JM, Park C, Bennett C, Salzberg SL. Graph-based genome alignment and genotyping with HISAT2 and HISAT-genotype Graph-based genome alignment and genotyping with HISAT2 and HISAT-genotype. Nat Biotechnol. 2019 Aug;37(8):907-915. doi: 10.1038/s41587-019-0201-4. Epub 2019 Aug 2. PubMed PMID: 31375807. + +* [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + +* [picard-tools](http://broadinstitute.github.io/picard) + +* [preseq](https://pubmed.ncbi.nlm.nih.gov/23435259/) + > Daley T, Smith AD. Predicting the molecular complexity of sequencing libraries. Nat Methods. 2013 Apr;10(4):325-7. doi: 10.1038/nmeth.2375. Epub 2013 Feb 24. PubMed PMID: 23435259; PubMed Central PMCID: PMC3612374. + +* [Qualimap 2](https://pubmed.ncbi.nlm.nih.gov/26428292/) + > Okonechnikov K, Conesa A, García-Alcalde F. Qualimap 2: advanced multi-sample quality control for high-throughput sequencing data Bioinformatics. 2016 Jan 15;32(2):292-4. doi: 10.1093/bioinformatics/btv566. Epub 2015 Oct 1. PubMed PMID: 26428292; PubMed Central PMCID: PMC4708105. + +* [RSEM](https://pubmed.ncbi.nlm.nih.gov/21816040/) + > Li B, Dewey CN. RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome BMC Bioinformatics. 2011 Aug 4;12:323. doi: 10.1186/1471-2105-12-323. PubMed PMID: 21816040; PubMed Central PMCID: PMC3163565. + +* [RSeQC](https://pubmed.ncbi.nlm.nih.gov/22743226/) + > Wang L, Wang S, Li W. RSeQC: quality control of RNA-seq experiments Bioinformatics. 2012 Aug 15;28(16):2184-5. doi: 10.1093/bioinformatics/bts356. Epub 2012 Jun 27. PubMed PMID: 22743226. + +* [Salmon](https://pubmed.ncbi.nlm.nih.gov/28263959/) + > Patro R, Duggal G, Love MI, Irizarry RA, Kingsford C. Salmon provides fast and bias-aware quantification of transcript expression Nat Methods. 2017 Apr;14(4):417-419. doi: 10.1038/nmeth.4197. Epub 2017 Mar 6. PubMed PMID: 28263959; PubMed Central PMCID: PMC5600148. + +* [SAMtools](https://pubmed.ncbi.nlm.nih.gov/19505943/) + > Li H, Handsaker B, Wysoker A, Fennell T, Ruan J, Homer N, Marth G, Abecasis G, Durbin R; 1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. Bioinformatics. 2009 Aug 15;25(16):2078-9. doi: 10.1093/bioinformatics/btp352. Epub 2009 Jun 8. PubMed PMID: 19505943; PubMed Central PMCID: PMC2723002. + +* [SortMeRNA](https://pubmed.ncbi.nlm.nih.gov/23071270/) + > Kopylova E, Noé L, Touzet H. SortMeRNA: fast and accurate filtering of ribosomal RNAs in metatranscriptomic data Bioinformatics. 2012 Dec 15;28(24):3211-7. doi: 10.1093/bioinformatics/bts611. Epub 2012 Oct 15. PubMed PMID: 23071270. + +* [STAR](https://pubmed.ncbi.nlm.nih.gov/23104886/) + > Dobin A, Davis CA, Schlesinger F, Drenkow J, Zaleski C, Jha S, Batut P, Chaisson M, Gingeras TR. STAR: ultrafast universal RNA-seq aligner Bioinformatics. 2013 Jan 1;29(1):15-21. doi: 10.1093/bioinformatics/bts635. Epub 2012 Oct 25. PubMed PMID: 23104886; PubMed Central PMCID: PMC3530905. + +* [StringTie2](https://pubmed.ncbi.nlm.nih.gov/31842956/) + > Kovaka S, Zimin AV, Pertea GM, Razaghi R, Salzberg SL, Pertea M. Transcriptome assembly from long-read RNA-seq alignments with StringTie2 Genome Biol. 2019 Dec 16;20(1):278. doi: 10.1186/s13059-019-1910-1. PubMed PMID: 31842956; PubMed Central PMCID: PMC6912988. + +* [Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) + +* [UMI-tools](https://pubmed.ncbi.nlm.nih.gov/28100584/) + > Smith T, Heger A, Sudbery I. UMI-tools: modeling sequencing errors in Unique Molecular Identifiers to improve quantification accuracy Genome Res. 2017 Mar;27(3):491-499. doi: 10.1101/gr.209601.116. Epub 2017 Jan 18. PubMed PMID: 28100584; PubMed Central PMCID: PMC5340976. + +* [UCSC tools](https://pubmed.ncbi.nlm.nih.gov/20639541/) + > Kent WJ, Zweig AS, Barber G, Hinrichs AS, Karolchik D. BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics. 2010 Sep 1;26(17):2204-7. doi: 10.1093/bioinformatics/btq351. Epub 2010 Jul 17. PubMed PMID: 20639541; PubMed Central PMCID: PMC2922891. + +## R packages + +* [R](https://www.R-project.org/) + > R Core Team (2017). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. + +* [DESeq2](https://pubmed.ncbi.nlm.nih.gov/25516281/) + > Love MI, Huber W, Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014;15(12):550. PubMed PMID: 25516281; PubMed Central PMCID: PMC4302049. + +* [dupRadar](https://pubmed.ncbi.nlm.nih.gov/27769170/) + > Sayols S, Scherzinger D, Klein H. dupRadar: a Bioconductor package for the assessment of PCR artifacts in RNA-Seq data BMC Bioinformatics. 2016 Oct 21;17(1):428. doi: 10.1186/s12859-016-1276-2. PubMed PMID: 27769170; PubMed Central PMCID: PMC5073875. + +* [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html) + > H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016. + +* [optparse](https://CRAN.R-project.org/package=optparse) + > Trevor L Davis (2018). optparse: Command Line Option Parser. + +* [pheatmap](https://CRAN.R-project.org/package=pheatmap) + > Raivo Kolde (2018). pheatmap: Pretty Heatmaps. + +* [RColorBrewer](https://CRAN.R-project.org/package=RColorBrewer) + > Erich Neuwirth (2014). RColorBrewer: ColorBrewer Palettes. + +* [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) + > Morgan M, Obenchain V, Hester J and Pagès H (2020). SummarizedExperiment: SummarizedExperiment container. + +* [Tximeta](https://pubmed.ncbi.nlm.nih.gov/32097405/) + > Love MI, Soneson C, Hickey PF, Johnson LK, Pierce NT, Shepherd L, Morgan M, Patro R. Tximeta: Reference sequence checksums for provenance identification in RNA-seq PLoS Comput Biol. 2020 Feb 25;16(2):e1007664. doi: 10.1371/journal.pcbi.1007664. eCollection 2020 Feb. PubMed PMID: 32097405; PubMed Central PMCID: PMC7059966. + +## Software packaging/containerisation tools + +* [Anaconda](https://anaconda.com) + > Anaconda Software Distribution. Computer software. Vers. 2-2.4.0. Anaconda, Nov. 2016. Web. + +* [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) + > Grüning B, Dale R, Sjödin A, Chapman BA, Rowe J, Tomkins-Tinch CH, Valieris R, Köster J; Bioconda Team. Bioconda: sustainable and comprehensive software distribution for the life sciences. Nat Methods. 2018 Jul;15(7):475-476. doi: 10.1038/s41592-018-0046-7. PubMed PMID: 29967506. + +* [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) + > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. + +* [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) + +* [Singularity](https://pubmed.ncbi.nlm.nih.gov/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. diff --git a/README.md b/README.md index 10c4e0a52..de0e0c510 100644 --- a/README.md +++ b/README.md @@ -31,20 +31,20 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool 5. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) 6. Removal of ribosomal RNA ([`SortMeRNA`](https://github.com/biocore/sortmerna)) 7. Choice of multiple alignment and quantification routes: - 1. [`STAR`](https://github.com/alexdobin/STAR) -> [`Salmon`](https://combine-lab.github.io/salmon/) - 2. [`STAR`](https://github.com/alexdobin/STAR) -> [`RSEM`](https://github.com/deweylab/RSEM) - 3. [`HiSAT2`](https://ccb.jhu.edu/software/hisat2/index.shtml) -> **NO QUANTIFICATION** + 1. [`STAR`](https://github.com/alexdobin/STAR) -> [`Salmon`](https://combine-lab.github.io/salmon/) + 2. [`STAR`](https://github.com/alexdobin/STAR) -> [`RSEM`](https://github.com/deweylab/RSEM) + 3. [`HiSAT2`](https://ccb.jhu.edu/software/hisat2/index.shtml) -> **NO QUANTIFICATION** 8. Sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) 9. UMI-based deduplication ([`UMI-tools`](https://github.com/CGATOxford/UMI-tools)) 10. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/)) 11. Transcript assembly and quantification ([`StringTie`](https://ccb.jhu.edu/software/stringtie/)) 12. Create bigWig coverage files ([`BEDTools`](https://github.com/arq5x/bedtools2/), [`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) 13. Extensive quality control: - 1. [`RSeQC`](http://rseqc.sourceforge.net/) - 2. [`Qualimap`](http://qualimap.bioinfo.cipf.es/) - 3. [`dupRadar`](https://bioconductor.org/packages/release/bioc/html/dupRadar.html) - 4. [`Preseq`](http://smithlabresearch.org/software/preseq/) - 5. [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) + 1. [`RSeQC`](http://rseqc.sourceforge.net/) + 2. [`Qualimap`](http://qualimap.bioinfo.cipf.es/) + 3. [`dupRadar`](https://bioconductor.org/packages/release/bioc/html/dupRadar.html) + 4. [`Preseq`](http://smithlabresearch.org/software/preseq/) + 5. [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) 14. Pseudo-alignment and quantification ([`Salmon`](https://combine-lab.github.io/salmon/); *optional*) 15. Present QC for raw read, alignment, gene biotype, sample similarity, and strand-specificity checks ([`MultiQC`](http://multiqc.info/), [`R`](https://www.r-project.org/)) @@ -59,34 +59,34 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool 3. Download the pipeline and test it on a minimal dataset with a single command: - ```bash - nextflow run nf-core/rnaseq -profile test, - ``` + ```bash + nextflow run nf-core/rnaseq -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. - > * If you are using `singularity` then the pipeline will auto-detect this and attempt to download the Singularity images directly as opposed to performing a conversion from Docker images. If you are persistently observing issues downloading Singularity images directly due to timeout or network issues then please use the `--singularity_pull_docker_container` parameter to pull and convert the Docker image instead. Alternatively, it is highly recommended to use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to pre-download all of the required containers before running the pipeline and to set the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options to be able to store and re-use the images from a central location for future pipeline runs. - > * If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. + > * 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. + > * If you are using `singularity` then the pipeline will auto-detect this and attempt to download the Singularity images directly as opposed to performing a conversion from Docker images. If you are persistently observing issues downloading Singularity images directly due to timeout or network issues then please use the `--singularity_pull_docker_container` parameter to pull and convert the Docker image instead. Alternatively, it is highly recommended to use the [`nf-core download`](https://nf-co.re/tools/#downloading-pipelines-for-offline-use) command to pre-download all of the required containers before running the pipeline and to set the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) Nextflow options to be able to store and re-use the images from a central location for future pipeline runs. + > * If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. 4. Start running your own analysis! - * Typical command for RNA-seq analysis: + * Typical command for RNA-seq analysis: - ```bash - nextflow run nf-core/rnaseq \ - --input samplesheet.csv \ - --genome GRCh37 \ - -profile - ``` + ```bash + nextflow run nf-core/rnaseq \ + --input samplesheet.csv \ + --genome GRCh37 \ + -profile + ``` - * Typical command for downloading public data: + * Typical command for downloading public data: - ```bash - nextflow run nf-core/rnaseq \ - --public_data_ids ids.txt \ - -profile - ``` + ```bash + nextflow run nf-core/rnaseq \ + --public_data_ids ids.txt \ + -profile + ``` - > **NB:** The commands to obtain public data and to run the main arm of the pipeline are completely independent. This is intentional because it allows you to download all of the raw data in an initial pipeline run (`results/public_data/`) and then to curate the auto-created samplesheet based on the available sample metadata before you run the pipeline again properly. + > **NB:** The commands to obtain public data and to run the main arm of the pipeline are completely independent. This is intentional because it allows you to download all of the raw data in an initial pipeline run (`results/public_data/`) and then to curate the auto-created samplesheet based on the available sample metadata before you run the pipeline again properly. See [usage](https://nf-co.re/rnaseq/usage) and [parameter](https://nf-co.re/rnaseq/parameters) docs for all of the available options when running the pipeline. diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 41387bfd5..df93faab7 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -15,15 +15,15 @@ Content-ID: Content-Disposition: inline; filename="nf-core-rnaseq_logo.png" <% out << new File("$projectDir/assets/nf-core-rnaseq_logo.png"). - bytes. - encodeBase64(). - toString(). - tokenize( '\n' )*. - toList()*. - collate( 76 )*. - collect { it.join() }. - flatten(). - join( '\n' ) %> + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' ) %> <% if (mqcFile){ @@ -37,15 +37,15 @@ Content-ID: Content-Disposition: attachment; filename=\"${mqcFileObj.getName()}\" ${mqcFileObj. - bytes. - encodeBase64(). - toString(). - tokenize( '\n' )*. - toList()*. - collate( 76 )*. - collect { it.join() }. - flatten(). - join( '\n' )} + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' )} """ }} %> diff --git a/conf/base.config b/conf/base.config index b70713e85..42cdf6f26 100644 --- a/conf/base.config +++ b/conf/base.config @@ -48,4 +48,4 @@ process { errorStrategy = 'retry' maxRetries = 2 } -} \ No newline at end of file +} diff --git a/docs/README.md b/docs/README.md index 3775cdd28..052f60f03 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,8 +3,8 @@ The nf-core/rnaseq documentation is split into the following pages: * [Usage](usage.md) - * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. + * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. * [Output](output.md) - * An overview of the different results produced by the pipeline and how to interpret them. + * An overview of the different results produced by the pipeline and how to interpret them. You can find a lot more documentation about installing, configuring and running nf-core pipelines on the website: [https://nf-co.re](https://nf-co.re) diff --git a/docs/output.md b/docs/output.md index 17b0b19cf..f479b417f 100644 --- a/docs/output.md +++ b/docs/output.md @@ -15,36 +15,36 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: * [Preprocessing](#preprocessing) - * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids - * [cat](#cat) - Merge re-sequenced FastQ files - * [FastQC](#fastqc) - Raw read QC - * [UMI-tools extract](#umi-tools-extract) - UMI barcode extraction - * [TrimGalore](#trimgalore) - Adapter and quality trimming - * [SortMeRNA](#sortmerna) - Removal of ribosomal RNA + * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids + * [cat](#cat) - Merge re-sequenced FastQ files + * [FastQC](#fastqc) - Raw read QC + * [UMI-tools extract](#umi-tools-extract) - UMI barcode extraction + * [TrimGalore](#trimgalore) - Adapter and quality trimming + * [SortMeRNA](#sortmerna) - Removal of ribosomal RNA * [Alignment and quantification](#alignment-and-quantification) - * [STAR and Salmon](#star-and-salmon) - Fast spliced aware genome alignment and transcriptome quantification - * [STAR via RSEM](#star-via-rsem) - Alignment and quantification of expression levels - * [HISAT2](#hisat2) - Memory efficient splice aware alignment to a reference + * [STAR and Salmon](#star-and-salmon) - Fast spliced aware genome alignment and transcriptome quantification + * [STAR via RSEM](#star-via-rsem) - Alignment and quantification of expression levels + * [HISAT2](#hisat2) - Memory efficient splice aware alignment to a reference * [Alignment post-processing](#alignment-post-processing) - * [SAMtools](#samtools) - Sort and index alignments - * [UMI-tools dedup](#umi-tools-dedup) - UMI-based deduplication - * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking + * [SAMtools](#samtools) - Sort and index alignments + * [UMI-tools dedup](#umi-tools-dedup) - UMI-based deduplication + * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking * [Other steps](#other-steps) - * [StringTie](#stringtie) - Transcript assembly and quantification - * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files + * [StringTie](#stringtie) - Transcript assembly and quantification + * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files * [Quality control](#quality-control) - * [RSeQC](#rseqc) - Various RNA-seq QC metrics - * [Qualimap](#qualimap) - Various RNA-seq QC metrics - * [dupRadar](#dupradar) - Assessment of technical / biological read duplication - * [Preseq](#preseq) - Estimation of library complexity - * [featureCounts](#featurecounts) - Read counting relative to gene biotype - * [DESeq2](#deseq2) - PCA plot and sample pairwise distance heatmap and dendrogram - * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity + * [RSeQC](#rseqc) - Various RNA-seq QC metrics + * [Qualimap](#qualimap) - Various RNA-seq QC metrics + * [dupRadar](#dupradar) - Assessment of technical / biological read duplication + * [Preseq](#preseq) - Estimation of library complexity + * [featureCounts](#featurecounts) - Read counting relative to gene biotype + * [DESeq2](#deseq2) - PCA plot and sample pairwise distance heatmap and dendrogram + * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity * [Pseudo-alignment and quantification](#pseudo-alignment-and-quantification) - * [Salmon](#salmon) - Wicked fast gene and isoform quantification relative to the transcriptome + * [Salmon](#salmon) - Wicked fast gene and isoform quantification relative to the transcriptome * [Workflow reporting and genomes](#workflow-reporting-and-genomes) - * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files - * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution + * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files + * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ## Preprocessing @@ -54,13 +54,13 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Output files * `public_data/` - * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. - * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. + * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. + * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. * `public_data/md5/` - * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. + * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. * `public_data/runinfo/` - * `*.runinfo.tsv`: Original metadata file downloaded from the ENA - * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA + * `*.runinfo.tsv`: Original metadata file downloaded from the ENA + * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA
@@ -72,7 +72,7 @@ Please see the [usage documentation](https://nf-co.re/rnaseq/usage#direct-downlo Output files * `fastq/` - * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. + * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory.
@@ -84,8 +84,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. > **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. @@ -105,8 +105,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `umitools/` - * `*.fastq.gz`: If `--save_umi_intermeds` is specified, FastQ files **after** UMI extraction will be placed in this directory. - * `*.log`: Log file generated by the UMI-tools `extract` command. + * `*.fastq.gz`: If `--save_umi_intermeds` is specified, FastQ files **after** UMI extraction will be placed in this directory. + * `*.log`: Log file generated by the UMI-tools `extract` command. @@ -118,11 +118,11 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `trimgalore/` - * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. - * `*_trimming_report.txt`: Log file generated by Trim Galore!. + * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + * `*_trimming_report.txt`: Log file generated by Trim Galore!. * `trimgalore/fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. @@ -138,8 +138,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `sortmerna/` - * `*.fastq.gz`: If `--save_non_ribo_reads` is specified, FastQ files containing non-rRNA reads will be placed in this directory. - * `*.log`: Log file generated by SortMeRNA with information regarding reads that matched the reference database(s). + * `*.fastq.gz`: If `--save_non_ribo_reads` is specified, FastQ files containing non-rRNA reads will be placed in this directory. + * `*.log`: Log file generated by SortMeRNA with information regarding reads that matched the reference database(s). @@ -155,14 +155,14 @@ When `--remove_ribo_rna` is specified, the pipeline uses [SortMeRNA](https://git Output files * `star_salmon/` - * `*.Aligned.out.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. - * `*.Aligned.toTranscriptome.out.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the transcriptome will be placed in this directory. + * `*.Aligned.out.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. + * `*.Aligned.toTranscriptome.out.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the transcriptome will be placed in this directory. * `star_salmon/log/` - * `*.SJ.out.tab`: File containing filtered splice junctions detected after mapping the reads. - * `*.Log.final.out`: STAR alignment report containing the mapping results summary. - * `*.Log.out` and `*.Log.progress.out`: STAR log files containing detailed information about the run. Typically only useful for debugging purposes. + * `*.SJ.out.tab`: File containing filtered splice junctions detected after mapping the reads. + * `*.Log.final.out`: STAR alignment report containing the mapping results summary. + * `*.Log.out` and `*.Log.progress.out`: STAR log files containing detailed information about the run. Typically only useful for debugging purposes. * `star_salmon/unmapped/` - * `*.fastq.gz`: If `--save_unaligned` is specified, FastQ files containing unmapped reads will be placed in this directory. + * `*.fastq.gz`: If `--save_unaligned` is specified, FastQ files containing unmapped reads will be placed in this directory. @@ -180,18 +180,18 @@ The STAR section of the MultiQC report shows a bar plot with alignment rates: go Output files * `star_rsem/` - * `rsem.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. - * `rsem.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. - * `rsem.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. - * `rsem.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. - * `*.genes.results`: RSEM gene-level quantification results for each sample. - * `*.isoforms.results`: RSEM isoform-level quantification results for each sample. - * `*.STAR.genome.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. - * `*.transcript.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the transcriptome will be placed in this directory. + * `rsem.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. + * `rsem.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. + * `rsem.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. + * `rsem.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. + * `*.genes.results`: RSEM gene-level quantification results for each sample. + * `*.isoforms.results`: RSEM isoform-level quantification results for each sample. + * `*.STAR.genome.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. + * `*.transcript.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the transcriptome will be placed in this directory. * `star_rsem/.stat/` - * `*.cnt`, `*.model`, `*.theta`: RSEM counts and statistics for each sample. + * `*.cnt`, `*.model`, `*.theta`: RSEM counts and statistics for each sample. * `star_rsem/log/` - * `*.log`: STAR alignment report containing the mapping results summary. + * `*.log`: STAR alignment report containing the mapping results summary. @@ -209,11 +209,11 @@ You can choose to align and quantify your data with RSEM by providing the `--ali Output files * `hisat2/` - * `.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. + * `.bam`: If `--save_align_intermeds` is specified the original BAM file containing read alignments to the reference genome will be placed in this directory. * `hisat2/log/` - * `*.log`: HISAT2 alignment report containing the mapping results summary. + * `*.log`: HISAT2 alignment report containing the mapping results summary. * `hisat2/unmapped/` - * `*.fastq.gz`: If `--save_unaligned` is specified, FastQ files containing unmapped reads will be placed in this directory. + * `*.fastq.gz`: If `--save_unaligned` is specified, FastQ files containing unmapped reads will be placed in this directory. @@ -233,11 +233,11 @@ The pipeline has been written in a way where all the files generated downstream Output files * `/` - * `.sorted.bam`: If `--save_align_intermeds` is specified the original coordinate sorted BAM file containing read alignments will be placed in this directory. - * `.sorted.bam.bai`: If `--save_align_intermeds` is specified the BAI index file for the original coordinate sorted BAM file will be placed in this directory. - * `.sorted.bam.csi`: If `--save_align_intermeds --bam_csi_index` is specified the CSI index file for the original coordinate sorted BAM file will be placed in this directory. + * `.sorted.bam`: If `--save_align_intermeds` is specified the original coordinate sorted BAM file containing read alignments will be placed in this directory. + * `.sorted.bam.bai`: If `--save_align_intermeds` is specified the BAI index file for the original coordinate sorted BAM file will be placed in this directory. + * `.sorted.bam.csi`: If `--save_align_intermeds --bam_csi_index` is specified the CSI index file for the original coordinate sorted BAM file will be placed in this directory. * `/samtools_stats/` - * SAMtools `.sorted.bam.flagstat`, `.sorted.bam.idxstats` and `.sorted.bam.stats` files generated from the alignment files. + * SAMtools `.sorted.bam.flagstat`, `.sorted.bam.idxstats` and `.sorted.bam.stats` files generated from the alignment files. @@ -253,13 +253,13 @@ The original BAM files generated by the selected alignment algorithm are further Output files * `/` - * `.umi_dedup.sorted.bam`: If `--save_umi_intermeds` is specified the UMI deduplicated, coordinate sorted BAM file containing read alignments will be placed in this directory. - * `.umi_dedup.sorted.bam.bai`: If `--save_umi_intermeds` is specified the BAI index file for the UMI deduplicated, coordinate sorted BAM file will be placed in this directory. - * `.umi_dedup.sorted.bam.csi`: If `--save_umi_intermeds --bam_csi_index` is specified the CSI index file for the UMI deduplicated, coordinate sorted BAM file will be placed in this directory. + * `.umi_dedup.sorted.bam`: If `--save_umi_intermeds` is specified the UMI deduplicated, coordinate sorted BAM file containing read alignments will be placed in this directory. + * `.umi_dedup.sorted.bam.bai`: If `--save_umi_intermeds` is specified the BAI index file for the UMI deduplicated, coordinate sorted BAM file will be placed in this directory. + * `.umi_dedup.sorted.bam.csi`: If `--save_umi_intermeds --bam_csi_index` is specified the CSI index file for the UMI deduplicated, coordinate sorted BAM file will be placed in this directory. * `/umitools/` - * `*_edit_distance.tsv`: Reports the (binned) average edit distance between the UMIs at each position. - * `*_per_umi.tsv`: UMI-level summary statistics. - * `*_per_umi_per_position.tsv`: Tabulates the counts for unique combinations of UMI and position. + * `*_edit_distance.tsv`: Reports the (binned) average edit distance between the UMIs at each position. + * `*_per_umi.tsv`: UMI-level summary statistics. + * `*_per_umi_per_position.tsv`: Tabulates the counts for unique combinations of UMI and position. The content of the files above is explained in more detail in the [UMI-tools documentation](https://umi-tools.readthedocs.io/en/latest/reference/dedup.html#dedup-specific-options). @@ -273,13 +273,13 @@ After extracting the UMI information from the read sequence (see [UMI-tools extr Output files * `/` - * `.markdup.sorted.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. - * `.markdup.sorted.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. - * `.markdup.sorted.bam.csi`: CSI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. Only generated if `--bam_csi_index` is specified as a parameter. + * `.markdup.sorted.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. + * `.markdup.sorted.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. + * `.markdup.sorted.bam.csi`: CSI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. Only generated if `--bam_csi_index` is specified as a parameter. * `/samtools_stats/` - * SAMtools `.markdup.sorted.bam.flagstat`, `.markdup.sorted.bam.idxstats` and `.markdup.sorted.bam.stats` files generated from the duplicate marked alignment files. + * SAMtools `.markdup.sorted.bam.flagstat`, `.markdup.sorted.bam.idxstats` and `.markdup.sorted.bam.stats` files generated from the duplicate marked alignment files. * `/picard_metrics/` - * `.markdup.sorted.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. + * `.markdup.sorted.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. @@ -295,9 +295,9 @@ Unless you are using [UMIs](https://emea.illumina.com/science/sequencing-method- Output files * `/stringtie/` - * `*.coverage.gtf`: GTF file containing transcripts that are fully covered by reads. - * `*.transcripts.gtf`: GTF file containing all of the assembled transcipts from StringTie. - * `*.gene_abundance.txt`: Text file containing gene aboundances and FPKM values. + * `*.coverage.gtf`: GTF file containing transcripts that are fully covered by reads. + * `*.transcripts.gtf`: GTF file containing all of the assembled transcipts from StringTie. + * `*.gene_abundance.txt`: Text file containing gene aboundances and FPKM values. * `/stringtie/.ballgown/`: Ballgown output directory. @@ -310,8 +310,8 @@ Unless you are using [UMIs](https://emea.illumina.com/science/sequencing-method- Output files * `/bigwig/` - * `*.sense.bigWig`: bigWig coverage file relative to genes on the sense strand. - * `*.antisense.bigWig`: bigWig coverage file relative to genes on the anti-sense strand. + * `*.sense.bigWig`: bigWig coverage file relative to genes on the sense strand. + * `*.antisense.bigWig`: bigWig coverage file relative to genes on the anti-sense strand. @@ -331,7 +331,7 @@ The majority of RSeQC scripts generate output files which can be plotted and sum Output files * `/rseqc/infer_experiment/` - * `*.infer_experiment.txt`: File containing fraction of reads mapping to given strandedness configurations. + * `*.infer_experiment.txt`: File containing fraction of reads mapping to given strandedness configurations. @@ -349,7 +349,7 @@ RSeQC documentation: [infer_experiment.py](http://rseqc.sourceforge.net/#infer-e Output files * `/rseqc/read_distribution/` - * `*.read_distribution.txt`: File containing fraction of reads mapping to genome feature e.g. CDS exon, 5’UTR exon, 3’ UTR exon, Intron, Intergenic regions etc. + * `*.read_distribution.txt`: File containing fraction of reads mapping to genome feature e.g. CDS exon, 5’UTR exon, 3’ UTR exon, Intron, Intergenic regions etc. @@ -365,17 +365,17 @@ RSeQC documentation: [read_distribution.py](http://rseqc.sourceforge.net/#read-d Output files * `/rseqc/junction_annotation/bed/` - * `*.junction.bed`: BED file containing splice junctions. - * `*.junction.Interact.bed`: BED file containing interacting splice junctions. + * `*.junction.bed`: BED file containing splice junctions. + * `*.junction.Interact.bed`: BED file containing interacting splice junctions. * `/rseqc/junction_annotation/log/` - * `*.junction_annotation.log`: Log file generated by the program. + * `*.junction_annotation.log`: Log file generated by the program. * `/rseqc/junction_annotation/pdf/` - * `*.splice_events.pdf`: PDF file containing splicing events plot. - * `*.splice_junction.pdf`: PDF file containing splice junctions plot. + * `*.splice_events.pdf`: PDF file containing splicing events plot. + * `*.splice_junction.pdf`: PDF file containing splice junctions plot. * `/rseqc/junction_annotation/rscript/` - * `*.junction_plot.r`: R script used to generate pdf plots above. + * `*.junction_plot.r`: R script used to generate pdf plots above. * `/rseqc/junction_annotation/xls/` - * `*.junction.xls`: Excel spreadsheet with junction information. + * `*.junction.xls`: Excel spreadsheet with junction information. @@ -391,12 +391,12 @@ RSeQC documentation: [junction_annotation.py](http://rseqc.sourceforge.net/#junc Output files * `/rseqc/inner_distance/pdf/` - * `*.inner_distance_plot.pdf`: PDF file containing inner distance plot. + * `*.inner_distance_plot.pdf`: PDF file containing inner distance plot. * `/rseqc/inner_distance/rscript/` - * `*.inner_distance_plot.r`: R script used to generate pdf plot above. + * `*.inner_distance_plot.r`: R script used to generate pdf plot above. * `/rseqc/inner_distance/txt/` - * `*.inner_distance_freq.txt`: File containing frequency of insert sizes. - * `*.inner_distance_mean.txt`: File containing mean, median and standard deviation of insert sizes. + * `*.inner_distance_freq.txt`: File containing frequency of insert sizes. + * `*.inner_distance_mean.txt`: File containing mean, median and standard deviation of insert sizes. @@ -414,9 +414,9 @@ RSeQC documentation: [inner_distance.py](http://rseqc.sourceforge.net/#inner-dis Output files * `/rseqc/junction_saturation/pdf/` - * `*.junctionSaturation_plot.pdf`: PDF file containing junction saturation plot. + * `*.junctionSaturation_plot.pdf`: PDF file containing junction saturation plot. * `/rseqc/junction_saturation/rscript/` - * `*.junctionSaturation_plot.r`: R script used to generate pdf plot above. + * `*.junctionSaturation_plot.r`: R script used to generate pdf plot above. @@ -432,12 +432,12 @@ RSeQC documentation: [junction_saturation.py](http://rseqc.sourceforge.net/#junc Output files * `/rseqc/read_duplication/pdf/` - * `*.DupRate_plot.pdf`: PDF file containing read duplication plot. + * `*.DupRate_plot.pdf`: PDF file containing read duplication plot. * `/rseqc/read_duplication/rscript/` - * `*.DupRate_plot.r`: R script used to generate pdf plot above. + * `*.DupRate_plot.r`: R script used to generate pdf plot above. * `/rseqc/read_duplication/xls/` - * `*.pos.DupRate.xls`: Read duplication rate determined from mapping position of read. First column is “occurrence” or duplication times, second column is number of uniquely mapped reads. - * `*.seq.DupRate.xls`: Read duplication rate determined from sequence of read. First column is “occurrence” or duplication times, second column is number of uniquely mapped reads. + * `*.pos.DupRate.xls`: Read duplication rate determined from mapping position of read. First column is “occurrence” or duplication times, second column is number of uniquely mapped reads. + * `*.seq.DupRate.xls`: Read duplication rate determined from sequence of read. First column is “occurrence” or duplication times, second column is number of uniquely mapped reads. @@ -453,7 +453,7 @@ RSeQC documentation: [read_duplication.py](http://rseqc.sourceforge.net/#read-du Output files * `/rseqc/bam_stat/` - * `*.bam_stat.txt`: Mapping statistics for the BAM file. + * `*.bam_stat.txt`: Mapping statistics for the BAM file. @@ -490,8 +490,8 @@ RSeQC documentation: [bam_stat.py](http://rseqc.sourceforge.net/#bam-stat-py) Output files * `/qualimap//` - * `qualimapReport.html`: Qualimap HTML report that can be viewed in a web browser. - * `rnaseq_qc_results.txt`: Textual results output. + * `qualimapReport.html`: Qualimap HTML report that can be viewed in a web browser. + * `rnaseq_qc_results.txt`: Textual results output. * `/qualimap//images_qualimapReport/`: Images required for the HTML report. * `/qualimap//raw_data_qualimapReport/`: Raw data required for the HTML report. * `/qualimap//css/`: CSS files required for the HTML report. @@ -515,15 +515,15 @@ The [Qualimap RNA-seq QC module](http://qualimap.bioinfo.cipf.es/doc_html/analys Output files * `/dupradar/box_plot/` - * `*_duprateExpBoxplot.pdf`: PDF file containing box plot for duplicate rate relative to mean expression. + * `*_duprateExpBoxplot.pdf`: PDF file containing box plot for duplicate rate relative to mean expression. * `/dupradar/gene_data/` - * `*_dupMatrix.txt`: Text file containing duplicate metrics per gene. + * `*_dupMatrix.txt`: Text file containing duplicate metrics per gene. * `/dupradar/histogram/` - * `*_expressionHist.pdf`: PDF file containing histogram of reads per kilobase values per gene. + * `*_expressionHist.pdf`: PDF file containing histogram of reads per kilobase values per gene. * `/dupradar/intercepts_slope/` - * `*_intercept_slope.txt`: Text file containing intercept slope values. + * `*_intercept_slope.txt`: Text file containing intercept slope values. * `/dupradar/scatter_plot/` - * `*_duprateExpDens.pdf`: PDF file containing typical dupRadar 2D density scatter plot. + * `*_duprateExpDens.pdf`: PDF file containing typical dupRadar 2D density scatter plot. See [dupRadar docs](https://www.bioconductor.org/packages/devel/bioc/vignettes/dupRadar/inst/doc/dupRadar.html) for further information regarding the content of these files. @@ -541,9 +541,9 @@ See [dupRadar docs](https://www.bioconductor.org/packages/devel/bioc/vignettes/d Output files * `/preseq/` - * `*.ccurve.txt`: Preseq expected future yield file. + * `*.ccurve.txt`: Preseq expected future yield file. * `/preseq/log/` - * `*.command.log`: Standard error output from command. + * `*.command.log`: Standard error output from command. @@ -557,9 +557,9 @@ The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at p Output files * `/featurecounts/` - * `*.featureCounts.txt`: featureCounts biotype-level quantification results for each sample. - * `*.featureCounts.txt.summary`: featureCounts summary file containing overall statistics about the counts. - * `*_mqc.tsv`: MultiQC custom content files used to plot biotypes in report. + * `*.featureCounts.txt`: featureCounts biotype-level quantification results for each sample. + * `*.featureCounts.txt.summary`: featureCounts summary file containing overall statistics about the counts. + * `*_mqc.tsv`: MultiQC custom content files used to plot biotypes in report. @@ -573,17 +573,17 @@ The [Preseq](http://smithlabresearch.org/software/preseq/) package is aimed at p Output files * `/deseq2_qc/` - * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. - * `*.dds.RData`: File containing R `DESeqDataSet` object generated - by DESeq2, with either an rlog or vst `assay` storing the - variance-stabilised data. - * `*.rds`: Alternative version of the RData file suitable for - `readRDS` to give user control of the eventual object name. - * `*pca.vals.txt`: Matrix of values for the first 2 principal components. - * `*sample.dists.txt`: Sample distance matrix. - * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. + * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. + * `*.dds.RData`: File containing R `DESeqDataSet` object generated + by DESeq2, with either an rlog or vst `assay` storing the + variance-stabilised data. + * `*.rds`: Alternative version of the RData file suitable for + `readRDS` to give user control of the eventual object name. + * `*pca.vals.txt`: Matrix of values for the first 2 principal components. + * `*sample.dists.txt`: Sample distance matrix. + * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. * `/deseq2_qc/size_factors/` - * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. + * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. @@ -617,8 +617,8 @@ The plot on the left hand side shows the standard PC plot - notice the variable 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_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. @@ -634,24 +634,24 @@ Results generated by MultiQC collate pipeline QC from supported tools i.e. FastQ Output files * `salmon/` - * `salmon.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. - * `salmon.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. - * `salmon.merged.gene_counts.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. - * `salmon.merged.gene_counts_scaled.tsv`: Matrix of gene-level scaled counts across all samples. - * `salmon.merged.gene_counts_scaled.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. - * `salmon.merged.gene_counts_length_scaled.tsv`: Matrix of gene-level length-scaled counts across all samples. - * `salmon.merged.gene_counts_length_scaled.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. - * `salmon.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. - * `salmon.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. - * `salmon.merged.transcript_counts.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for transcripts. + * `salmon.merged.gene_counts.tsv`: Matrix of gene-level raw counts across all samples. + * `salmon.merged.gene_tpm.tsv`: Matrix of gene-level TPM values across all samples. + * `salmon.merged.gene_counts.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. + * `salmon.merged.gene_counts_scaled.tsv`: Matrix of gene-level scaled counts across all samples. + * `salmon.merged.gene_counts_scaled.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. + * `salmon.merged.gene_counts_length_scaled.tsv`: Matrix of gene-level length-scaled counts across all samples. + * `salmon.merged.gene_counts_length_scaled.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for genes. + * `salmon.merged.transcript_counts.tsv`: Matrix of isoform-level raw counts across all samples. + * `salmon.merged.transcript_tpm.tsv`: Matrix of isoform-level TPM values across all samples. + * `salmon.merged.transcript_counts.rds`: RDS object that can be loaded in R that contains a [SummarizedExperiment](https://bioconductor.org/packages/release/bioc/html/SummarizedExperiment.html) container with the TPM (`abundance`), estimated counts (`counts`) and transcript length (`length`) in the assays slot for transcripts. * `salmon//` - * `aux_info/`: Auxiliary info e.g. versions and number of mapped reads. - * `cmd_info.json`: Information about the Salmon quantification command, version and options. - * `lib_format_counts.json`: Number of fragments assigned, unassigned and incompatible. - * `libParams/`: Contains the file `flenDist.txt` for the fragment length distribution. - * `logs/`: Contains the file `salmon_quant.log` giving a record of Salmon's quantification. - * `quant.genes.sf`: Salmon _gene_-level quantification of the sample, including feature length, effective length, TPM, and number of reads. - * `quant.sf`: Salmon _transcript_-level quantification of the sample, including feature length, effective length, TPM, and number of reads. + * `aux_info/`: Auxiliary info e.g. versions and number of mapped reads. + * `cmd_info.json`: Information about the Salmon quantification command, version and options. + * `lib_format_counts.json`: Number of fragments assigned, unassigned and incompatible. + * `libParams/`: Contains the file `flenDist.txt` for the fragment length distribution. + * `logs/`: Contains the file `salmon_quant.log` giving a record of Salmon's quantification. + * `quant.genes.sf`: Salmon _gene_-level quantification of the sample, including feature length, effective length, TPM, and number of reads. + * `quant.sf`: Salmon _transcript_-level quantification of the sample, including feature length, effective length, TPM, and number of reads. @@ -679,12 +679,12 @@ According to the `txtimport` documentation you can do one of the following: Output files * `genome/` - * `*.fa`, `*.gtf`, `*.gff`, `*.bed`, `.tsv`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. + * `*.fa`, `*.gtf`, `*.gff`, `*.bed`, `.tsv`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. * `genome/index/` - * `star/`: Directory containing STAR indices. - * `hisat2/`: Directory containing HISAT2 indices. - * `rsem/`: Directory containing STAR and RSEM indices. - * `salmon/`: Directory containing Salmon indices. + * `star/`: Directory containing STAR indices. + * `hisat2/`: Directory containing HISAT2 indices. + * `rsem/`: Directory containing STAR and RSEM indices. + * `salmon/`: Directory containing Salmon indices. @@ -696,9 +696,9 @@ A number of genome-specific files are generated by the pipeline because they are Output files * `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. diff --git a/docs/usage.md b/docs/usage.md index 7b7b911ab..aa1306ac9 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -162,20 +162,20 @@ 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](https://docker.com/) + * A generic configuration profile to be used with [Docker](https://docker.com/) * `singularity` - * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) + * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) * `podman` - * A generic configuration profile to be used with [Podman](https://podman.io/) + * A generic configuration profile to be used with [Podman](https://podman.io/) * `shifter` - * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) + * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) * `charliecloud` - * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) * `conda` - * A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. + * A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. * `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 ### `-resume` @@ -200,26 +200,26 @@ For example, if the nf-core/rnaseq pipeline is failing after multiple re-submiss Error executing process > 'RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)' Caused by: - Process `RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) + Process `RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) Command executed: - STAR \ - --genomeDir star \ - --readFilesIn WT_REP1_trimmed.fq.gz \ - --runThreadN 2 \ - --outFileNamePrefix WT_REP1. \ - + STAR \ + --genomeDir star \ + --readFilesIn WT_REP1_trimmed.fq.gz \ + --runThreadN 2 \ + --outFileNamePrefix WT_REP1. \ + Command exit status: - 137 + 137 Command output: - (empty) + (empty) Command error: - .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. + .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. Work dir: - /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb + /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` ``` @@ -228,9 +228,9 @@ To bypass this error you would need to find exactly which resources are set by t ```nextflow process { - withName: STAR_ALIGN { - memory = 100.GB - } + withName: STAR_ALIGN { + memory = 100.GB + } } ``` @@ -262,13 +262,13 @@ As you will see in the example below, we have: ```nextflow params { - modules { - 'star_align' { - args = "--quantMode TranscriptomeSAM --twopassMode Basic --outSAMtype BAM Unsorted --readFilesCommand zcat --runRNGseed 0 --outFilterMultimapNmax 20 --alignSJDBoverhangMin 1 --outSAMattributes NH HI AS NM MD --quantTranscriptomeBan Singleend --outFilterMismatchNmax 16" - publish_dir = "my_star_directory" - publish_files = ['out':'log', 'tab':'log', 'bam':''] - } - } + modules { + 'star_align' { + args = "--quantMode TranscriptomeSAM --twopassMode Basic --outSAMtype BAM Unsorted --readFilesCommand zcat --runRNGseed 0 --outFilterMultimapNmax 20 --alignSJDBoverhangMin 1 --outSAMattributes NH HI AS NM MD --quantTranscriptomeBan Singleend --outFilterMismatchNmax 16" + publish_dir = "my_star_directory" + publish_files = ['out':'log', 'tab':'log', 'bam':''] + } + } } ``` diff --git a/nextflow_schema.json b/nextflow_schema.json index 8e86ce96c..1c114d73b 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -661,4 +661,4 @@ "$ref": "#/definitions/generic_options" } ] -} \ No newline at end of file +} diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 6914e399d..c9d29f10e 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -37,8 +37,7 @@ include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_size workflow PREPARE_GENOME { take: prepare_tool_indices // list : tools to prepare indices for - biotype // string: if additional fasta file is provided - // biotype value to use when appending entries to GTF file + biotype // string: if additional fasta file is provided biotype value to use when appending entries to GTF file main: /* diff --git a/subworkflows/local/quantify_salmon.nf b/subworkflows/local/quantify_salmon.nf index de8155f6b..003864e8b 100644 --- a/subworkflows/local/quantify_salmon.nf +++ b/subworkflows/local/quantify_salmon.nf @@ -11,10 +11,12 @@ include { SALMON_QUANT } from '../../modules/nf-core/software/salmon/quan include { SALMON_TX2GENE } from '../../modules/local/salmon_tx2gene' addParams( options: params.genome_options ) include { SALMON_TXIMPORT } from '../../modules/local/salmon_tximport' addParams( options: params.tximport_options ) include { SALMON_MERGE_COUNTS } from '../../modules/local/salmon_merge_counts' addParams( options: params.merge_counts_options ) -include { SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_LENGTH_SCALED - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_SCALED - SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_TRANSCRIPT } from '../../modules/local/salmon_summarizedexperiment' addParams( options: params.merge_counts_options ) +include { + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_LENGTH_SCALED + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_GENE_SCALED + SALMON_SUMMARIZEDEXPERIMENT as SALMON_SE_TRANSCRIPT +} from '../../modules/local/salmon_summarizedexperiment' addParams( options: params.merge_counts_options ) workflow QUANTIFY_SALMON { take: From 1fd1ad044152f4ce9459886b811682b8046afc6d Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 10:03:24 +0200 Subject: [PATCH 5/8] Move markdownlint config to root to play well with editors --- .github/markdownlint.yml => .markdownlint.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/markdownlint.yml => .markdownlint.yml (100%) diff --git a/.github/markdownlint.yml b/.markdownlint.yml similarity index 100% rename from .github/markdownlint.yml rename to .markdownlint.yml From 7161d3ea07c5a306cb90a1d58eb84d5ea8060660 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 10:12:48 +0200 Subject: [PATCH 6/8] Revert image files --- docs/images/dupradar_example_plot.png | Bin 247167 -> 247174 bytes docs/images/mqc_deseq2_pca.png | Bin 26251 -> 26252 bytes docs/images/mqc_featurecounts_biotype.png | Bin 48010 -> 48011 bytes docs/images/mqc_qualimap_coverage.png | Bin 97371 -> 97373 bytes docs/images/mqc_qualimap_features.png | Bin 28085 -> 28086 bytes docs/images/mqc_rseqc_junctionsaturation.png | Bin 65608 -> 65611 bytes docs/images/mqc_star.png | Bin 29739 -> 29742 bytes docs/images/nfcore-rnaseq_logo.ai | 80 +++++++++---------- 8 files changed, 40 insertions(+), 40 deletions(-) diff --git a/docs/images/dupradar_example_plot.png b/docs/images/dupradar_example_plot.png index 3071475980b8ea3ee700add70bc560741c148ba8..72db5d4572a188b3214a4d281e3b215ed6c99827 100644 GIT binary patch delta 71 zcmez0#oyM=zrp_~qrztYqjsu5s`pj56{Es-3021BqKpdd`>hza@3&(5s0I|5DfY5VUj%q;={&hQ%! delta 57 zcmV-90LK4@ix2;b53o|@uhr>Dnx5GLD@g}#mVFLF!x2>82 PR2qi@wF0*SwF86@^B)*c diff --git a/docs/images/mqc_deseq2_pca.png b/docs/images/mqc_deseq2_pca.png index 942bd52838b216e7ddaa576b06e07b70aaa159f0..25e86ba65e14e46f3c5f65c59945d5a4bbdb22e8 100755 GIT binary patch delta 14 WcmeA^%h+?4al%VRg^e#4r2+sl*#_?b delta 12 UcmeA<%h-LEal*@uuNI{O04d)F&j0`b diff --git a/docs/images/mqc_featurecounts_biotype.png b/docs/images/mqc_featurecounts_biotype.png index 6cdf4b6cf9c4b11b4b04d6ab45d53d9f2dcb0261..652ca836514900ed15bbc53a4140e1289f7d41f0 100755 GIT binary patch delta 14 WcmeDB&eZ*#X~HB%g^iPb>;eEZHU~fe delta 12 UcmeDF&eZjtX~Lw9lYi_204qWVAOHXW diff --git a/docs/images/mqc_qualimap_coverage.png b/docs/images/mqc_qualimap_coverage.png index 185d591a2a49cc98b0dbc5311030e1082e9e1f0b..3696115ca588e878e89b8055c1872b0eb744eb1e 100755 GIT binary patch delta 24 gcmccpgZ1tY)(zgX7!@{q&$_miQDM7c0Hc)-0GF%^JOBUy delta 20 ccmccngZ1_g)(zgXHv7!FwspI50Hc)-0C}ki{Qv*} diff --git a/docs/images/mqc_qualimap_features.png b/docs/images/mqc_qualimap_features.png index bf2bd5146cb261fe1e65ab3f8f183e52f298a702..b285331431b0a09df396b96f17ba0a4f53c696aa 100755 GIT binary patch delta 16 Ycmdmbn{nH1#tnSoj0&6i!k3Ey06fhGF8}}l delta 14 WcmdmXn{n%H#tnSooB6|+iva*Ln+6X6 diff --git a/docs/images/mqc_rseqc_junctionsaturation.png b/docs/images/mqc_rseqc_junctionsaturation.png index 7404bf198440a7c14013d1f016a71c4fd268d61a..b19080a05f4e576321f4c9868ed369b5fa1a8da6 100755 GIT binary patch delta 29 jcmX@nz;e2QWrLnLqrzrAaXVW^g~>S~KY*N+&?l<^mgfqr delta 23 fcmX@zz;dF2WrLphW_@ux+sSz$KQ^a_K3N3-a)}C0 diff --git a/docs/images/mqc_star.png b/docs/images/mqc_star.png index b906f6cb60355f2ab06c76e294f9f22c706c13e1..b9675cea8feaf0dd529ade504b276df13187d6dd 100755 GIT binary patch delta 30 jcmZ4ef^ppo#tj=}7!@{eklCmJq!Mje8G%%q-BD8jzkCY= delta 24 gcmZ4Yf^qc=#tj=}HgA;KsIWQNmX&dHrrl9f0FucHrT_o{ diff --git a/docs/images/nfcore-rnaseq_logo.ai b/docs/images/nfcore-rnaseq_logo.ai index 9ef929a42..444dfb337 100644 --- a/docs/images/nfcore-rnaseq_logo.ai +++ b/docs/images/nfcore-rnaseq_logo.ai @@ -626,27 +626,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/Thumb 206 0 R/TrimBox[0.0 0.0 1150.9 517.026]/Type/Page>> endobj 201 0 obj <>stream H���ˮ�� ���z��G�]ی�� �"Ј��Lg��W��}�=0�����~](�X,}����鯟c��O����[ ��S f5^3�p?#�����?�O����[�W1u���C �ۃ ?3���n�c(�w���b!�v�Qjx|���כ�e3�tU!��!�1��l�[)�۪�Jl�Cgh��xŬiݮ\k��[�^�c��������sj��XYW—[a��~4R�f�0��e)�Ltb�L��B�>혏g'{}W0�p3��ͪ6�W���-���g�.P�F����V�j�0y�/g5q���!��lz� Z*�� ���{�[�*%����� @@ -709,7 +709,7 @@ U ��.��Jl6m�Hj�u�,b�U6�+s�� �hܸd�-ʥ�}�wi��-s�un=0�Ľ�i-_�*)U��_ˈ����b$��na+;ϧT�;p�pA7����C�4��.*�Iߥ�a�8��M��m�.���ACi���7�\j|fi������ԫ)��]ޭ�j����ʄ���U�]�3(í� �wh�J��c�h-�4x7���h׿*P0�H됎L����랇ڡu��Â������,�{�Bz}��8�v�g�g�Ҳ�d[�!XTZ�Z.��vl�A���g�� {;S�m�`v��ؿ`~�?g�a.� 3�Ì�{����L�^�������W�����Y�e�4��]�L�7o����k����!w����I�~�Ir�a^=�C�#Z��h��`W�u}p����)��"�z�7ff&�3����$����F�����J8Ҷ5���m� @@ -1337,7 +1337,7 @@ Em �F���ʳ��'+מ���le'��I.�;�FY)��L�T�c�����|P���r:��#�x>�3��z��h�L�9��eHc�_#yV���R��!�: �q��q�)ˑ�L�S�,��yJO-QZZ�R��L�#}�R\ ��z@I�Ge��Ǖ��6|��W<h5� ћ��<�X�uP�u9~���/^�N��� �I.W��\6��R��pɑ����"%gV*)�A���Jt�(�=O��U�y�/��G�� ���}U6w@+ј�f��y�PP�����ϼ��L���C����D)�3BI���iJ��(!ۧ��r�rje�mӈ�)�˝�X�}�xQ�w7U�� ��������ؽhN�%i���UPE<��r�{ ����H%��o�-?A�|�F�g*Η�X�__�b �*��KQ�2.���T� ����^pQ��C@KП��Dڑ�P �P>ȅL���|�}�^��d+ W\�Q��hŔX]����tȑ�_$�4��(c�,J�*�t=�T�����O��\�K�%7���ME��F4�� � �g��R]�AQ�g��]w�EЪ(* -�-,����� � +�-,����� � B��m�ă�D3i�F���Ui;1&ͤ��Nk�N�c�̴�L56i��֣�c��,�d�?�Y����罾��}��F�L+�����`��WJ�Q��dv|d��ȕ�Q �Jv���\*��C �~�;�+ιO��c�q��X�����^8V±����`>(� ����*i���d�_+�;IF�YI��J�d���T�'[��y*�u)ڋ����'/ыp�| <�<�_h���&����q;(�@1τ;�~$J� ~d����ʼnJ��**�@0��� �:3��"$�� �*�� ��!�y���U��Rx�P J��l�L_��qÿ~L��l�u1JXbPt|�R.�Fz#ì�C�H� �� ��N��j�ų#a��K�gpK-��/p� PH�9ĜE̓}�O?���/��Q�_�µ�EgKO �F+�k+:w%�K�����F.�(\/�Q��u`;ϰ-�D����M��T\~�vPB�s�y&1O �_?��f4`��9��V�AZM.��?�P��px�s�{�E�z���3����r [d������!m��\@̳p}j��Ϋ)��$C��7�X�l�a�X���?X�6N`���LM6s�6�����U|R�M�y����Sp�w�+�TQ�"͡|���ի^3uK a·A?� �XWY<���e0��":�����1�%7���� p�;q|'��q�������L~x�Թ�|���Ӊ9c5�=���m�p> �����q���/�O�=��r�, �w��}�q�K�C�M~���'��q~g���<�>�,��O� ڙ��zb/��k��u?#|a�g�D:a/�Caq0&�X���k����u�7F��4�(�8�!��8��G��䠿���&M��������� s�A�� ";`4"�hu��&x����`x?NsfO��8�)�������w �/�:�r���΄;��M�6���H��hD�9p���ɈH#��88r�p�u��\���,b���%�% @@ -1590,7 +1590,7 @@ PFF (��2U�XE�j�����/��-唞ה^�d�ޗd�����3MD�1A���J^�W%fA��=X����4��������B��y#45�Z��ѫ� �ޥ��~E��@C]S_kͭi�f����!az�S��z;\Yu�:\Y��HUI�Tf"P� _]Ax�k���C���?4 -`C�z'f�,@���w +`C�z'f�,@���w ;�kW� �j0�\Ž�-���nؾ$�mˉ�uY [�u�M�e��W��/�ة��)Z���x�M���*� ��u���]x��p�N�A�{&q38��;���p;�@�5��7h~�D��@t[�ۛ �N�D�n���^>p�W�� B�Cȃ��z�`���u�P�� �y���2��cc}8�ܻy3��i����t�u�`����� �cOx�������>����>����ޏ�;x}~l�Fຕ@���Cq� �� \��֥)��������b�J��r:�ɣP-g�< �<ܗ��\�;�Jܖ�ᦼU��p��8��^�E�'�� 霽��:�'�8����^vMm q'� A��R����� :J����m(sEM�^��ğ�P�и�(Ƭ� Ų\+g�j�m��܂�RZ�W#P� BU�QV�W���-Su�=#�*x!�Tc'� �jLޤQ8�'� •�\C�T"� �� �R�FM.�P1�h��a�, 1�(�6-+I���d���,[MQ���P�SV � �;ej׻ȵ��e�=nR�q�4�ew���8]���,X\�i���P��%�28Z��2�� ����X��N��vQS�K髂X���&� �Z��:�\�Q-Q�g�9(J+��F���u�i����W�I�cn����(Y��S� ��üIw��y����pB{�a4�ܷ ����7X��FU7��(o�E�42 �Í��b�rkS,�k�lE��V^U�M�*�U.$W4 *�\��ݢX�q��0�����4��k �3��!��A4�(AD�q���p�U�֩�Z��� -X+ +X+ 8"8Kl��Uk+���.D���:��Z��u�}_�Z���?����y���}r��?h��L1+�'Ǫ�$�;LZ�_3~�P��ec�^:A?��i�Ö���8�g��~����&�h�;���+�Wƒ&�^��I�>��7A�R9�����{��u{��d�*`}��¬4=f�15�����x/��j\j�ѫ;��|�v��� ������G ��X��{E�wϔL���m���n�5�l�����%���$ ݓ�W��o�����y?���8�lJeҁ�5��29�e�g�a�:_�_�q�ڋQ�q���=�C�8���9N�w��n�����X���ۚ�]2�xu��j��8��Q���gCl�s��4و<�+al܃��?/ �b��, q=0���D�Gcr5����04/��"�����~�}T�s��{�r�e����.�r���,�E�v�ܜ����GD����������7H}�z�Q�I���;��q-������r�i�9����Ѩ�� }�>�mm��V ⭱��5^t��Wt�S�Y����Nq�̟���X���b�ߢm��_�6����*m�管;�k莿+��g�s����'� ��v���}��8 �����.B�- ��8D�z �6P��F �m���m���m���m��dۤ�}���h���ͮny�c�!�xP:շ��n+�9 �d� ;�������H΢�l@��@������Ѻ��EA0[T�V%=вdKƠE�4+�+J�D��u�I�U��>%�K��ſ+� ����T��� �O���ﳿ&3{���_3�[�������_� � ����wE .�R�.uC�K�ɗ�������"�����ۡ�r��AWY �E ]�� omb�j�/e�?f�SX�hf�?�� � rh^�U�?�����mw���fp����ػ��>���p���b��P٭P؋!�v��I����/��3x���G�������@��S`�� @@ -2042,7 +2042,7 @@ c;E즣(3 � D ��!L`���0���!J���{��e7�#b�ɽ6ɼ0�X�a,L�|�q��zJ�] PSSm$;���8D'!b8�� ��-,F�I>� d0�� �1�y7ȹf����{���5�"�Iq�[�\9 ���N�����98���|���_%~ �/ .�) ._��\Z�!�,8 ]�u'0���B(5w�N�� �FO3��朜�>��d�P�g���<��Y �]��qp���8�����{��N���!d�†�Թ�^Z��>\Ҥ���}j�Ct����r�t��\�\�ȯ�k������K����8D�??8{=�<��<����w��rx\��O� ��&5�y�� v����h�}���q�����-� t=��!��� P F�j0��ؔ��f�/���T�d���V� [�=��v�]�������K�u�_}��K�7�펝ץc��+� XA��S����Z�Qvg�+t�B����-��l�7�?c�k�n���c��g�����X����>Nth���o����+|�������+{n�* ��^�k踂�?��t\B�{l��u�m���29�wt�t��"w�7�1p�����y�����G\Vx��塿ۏa� @@ -2598,7 +2598,7 @@ n ����I�6���� u�B4���"^���,���v=��t?����{����'8�/��C�J7�W �"�$uA��"��ry�����Ũ��ɯ�UJ �3�Z���'_��\Kzi���L�!��^�<��c��4>��xm��3N��7-l-��3ٙ2��fQ�X29�R��mK}�o�u�f�UaR )��L97�o -[�/p�Lq_x�A�U�.�vA� ����n��+NW�!�zi�������"�4����d!DBS'��F"���l b����E����j�7j$*�>ȧ|Sğ��lp4�ϕN�\8C�qj�M�M� +[�/p�Lq_x�A�U�.�vA� ����n��+NW�!�zi�������"�4����d!DBS'��F"���l b����E����j�7j$*�>ȧ|Sğ��lp4�ϕN�\8C�qj�M�M� �!�H@4�_$(������Z�S�4��7`C�-�X*T�_�}�Ɲ>]�0�E���Rc^r[�& ���F� n�NSz5!�s�U�%�y|��B�H)��%w�.3�S3��茗D�q�d�9� 2l�/I�*�9��`�An�5������ݢ��94 ���3�(w�=� ΌaFæւ?j�|�bd,�4���=)��5߈��~�C=�0PO��{Y_��~U���R���M( ��`�{��� ��)�@ʃB�/~�!���l@Ɉ � ���c�+u���A�&�� ��lxPN�$�w�e�j�' ɘX:�T\*حQNYq��^��X��J|�PŒ��D�&6�!�-W�ӎ��� HOA'!'�C ł�g@�;1H�0 �(��Qj��y1�!�%��"�J_G�@� e�)�@B�5v�"�z>#�Q{E<!���L�#�pu� r,Z��2�"./)R%�U�U�ut|Jh�y�n��8 �-�[��o��pc�0�ж�ؖ+D>K���;� �9`�y�›G)w>H��w�Fw�ŻcpD�G2M� � @@ -2714,7 +2714,7 @@ z Qjs.���/�|y(�.�@�#�fV �v< ]�yÏ��U�3��)�M_��B� �p峣�Wo�~S��Ǚ\q?�*u.��#D~(E� )���m� i��ý�T�ah���K�ӳؗd�n��? �P�.R'�O�O�8ǧ��N���<�����:�c7/�q��Yu���^BNg�|=�����^�|�_�E��<�K��X4��x]|��xb���JN����ʫ�O����q$�8|�< �����A��^h+��]ϪNr_m ��r*ߋ�e�7uQ�q�'n>�:ؕ�ǙPVz�N��7]�p�ZG���gg��c��*'��c�xGO����;(�bz�%��J��m�Xk�&njO��2ҭߨz)$�!{6��k��A� dyJr��:�VS�wD�-���w�����ˋ����G��S�N������i- W����s�Z��"�s[Q���WP���� �@�91���P{��;?�Z[�0�}�>�t�FmQ��G�㙆0��K��G� ��)�o�V��D�'� -�Z��5}+ڨ��ϙ� �ϰ@���[f�.=�DŽ�)�x��E�a=��"�_MH�D��T?~�1�Q�5=�4�Fy��&��'�e���@��&��7w���YXl +�Z��5}+ڨ��ϙ� �ϰ@���[f�.=�DŽ�)�x��E�a=��"�_MH�D��T?~�1�Q�5=�4�Fy��&��'�e���@��&��7w���YXl 1 ¥�/��pRiT��|��˃RR���nN�䩻��uS�WS��7����G����M�đ�yP�����w>��u�k���zW#��/T��.��4�*g1-�e,�a7W��x�Ji� �u��Z�5�Q"�{r5 �.�Y���?��}j��2hrqj���p-ّb!��Z*�ݓ��.ZY|�׸r�u����fsF�+&��(�xѠ�+�.v��h!���_R�?O�_F��㽒�HG}E�[���:ox+#lo/���Z��k*s9Ot��!}f>�TNI���-�E�{1G��f�5�Z�q� X��#8���QJ�+4�'��+2�a����HKc{ ���O�=9�qc 8����$8]'�n��t�_&M"2J�h5���+�8�0�� d��@�{q�������kP<����w ����JZ�J]tq/�`T��!e�Y���Ҋɽ��n\���u�+���X�/&Ȼ)��r7[��[/ @@ -2870,7 +2870,7 @@ f 9S �S(��J�9R�R|a!��${��YGF%n�V�+�OU_��d��[�PU2��{���� $�Ũ� ;@Ե�������S�����&sB�LC��)��]�gk�����<��z$qS�T}e�_Y-Dˠ���ÍOC�V8�Xt|�A��6�c��TWJ��ڋ��WpB�*d�����{������cg� ۏ���{���[Y���t����,w���i��cQ�􁽳�<8u2�]������M�a���f���ZaJ�OTC�œɇ8n<�_��c[�>$���=�M/�O�]�Y�V�)��G``��:�����ؘ�w-dg�4�l��v�]�w��@ \��oS��[&)#�����d��FYJ�v^}vT��7TI�o(�����B��ce��O�!s�5�g��P��޺��Ѥ5Eȝ ׯ��ņ�D;\�S5�oQj0�\�ZG�c �1���CHܒ�4��|�{@?�/�<ᲊ`{Z�Ǯ5#o�8�o��F�)�k�ݩ ��Df��%���� �3A��X�h�����V��d1���:M�� =��C�/������a0�h�OaD_�h�Y�����EV��P�.;ВL���2�r�)�b!n����=�VZ�=�ڙά桦�A���)�d[E��.��-ɇ�<,m#��_��N�9⦇����9�)�6x�oZB�h���� �H��rM��ҹ]���_�Ϗ.h#Ę�8e�ezB���),-�L �L�j|H���ƨߺ���t�KȠ1ܦ^ڰ�<�������,Y+y���8t�����չI�v#��"P�^���+���f�Ը�O��z���u���G%�N��2%uÏ�ɽS��҆��u,�De��{{�'�|`��bֳ�~��Z����_'�E�g���O��D{�b�PC����8�� �K,��4Y���X������sE��V���Fz�GV��N>kh}ܜ���]MTto��t��4P8�s�/~R --�j3��O��1W�"'N2�ˮ*�6�R�K���� ���I�B��ױ���8jg��Q��j��i6V�����cDc��/��2d#�m��~��B,��1VJ���I!����O,����&����m�خ�-�@ȅ|}S�����e"�R���^��uoMm/����kczn*�1WUCV�C`��[�79W��f��[��|*��w!�3��m�-C��_����.���#=; +-�j3��O��1W�"'N2�ˮ*�6�R�K���� ���I�B��ױ���8jg��Q��j��i6V�����cDc��/��2d#�m��~��B,��1VJ���I!����O,����&����m�خ�-�@ȅ|}S�����e"�R���^��uoMm/����kczn*�1WUCV�C`��[�79W��f��[��|*��w!�3��m�-C��_����.���#=; �;��E��nM�|\����W��޾���-p݁��|^�v?�fv�IutKP��� ����~�mhM�Ц���U8�����/�fۚ��n�.;W�����E<�_m�sܑ� �Z��P�W�M��'�(�+��rݠRu�ɲ1z�^+��g������ F��Sr/��j/���1cut�4|��U��v��4�0�������$���R�zfd��h/9E^5�.�nlTm�.�X����Z>�ӷ ��*��R��!?Vqz�glIV���ax����׼�T�=&�%IZdo*'M��GvF�%í��w���sw�w�ZS�af��� ��n��#q��BF�Q�a-;}�Xp��>�/�l���5�{(��#���V�pX�U׍Jmy�ܿMC{��H_c1�:\�.�n�ꭿ�{��r���t{U��w�a����؛m�:n��N��d��s���A��w��H�!f�s_�u��OIY5]�nE�иl���渦��ѱΖ���R^����n�92봵u��|0_c^�}�ͱ$�ύ�9t=��tr2?6 SX�+pAƨm �ƈ�9�9b�r�Y6� � �JCûr�h�ۃ��>���f��w>mivf�a̰��ٻ�.�%���Y�s��aWH#��f� ����M��k~��uu뫭4�wb �[��B�o8�h!-�{��y_�������C/�2m���\����,[feX)�����<����2�+��-I� +4��x�p>l?��ݭ�"�z{���z��>+�"�5�$Z���c�����1��ʹ%����d"�LՃy{ڑD�iEꉚͰ�`���h�:����y��AU�#b(��<�ׅ�>j�o�j9T�Iƿ�YRp��IsZ� 6о�n�^�Oۮ}��4�~����`���H[��"�� ��Ɔ-٤])�"�q�By]�k+2��bK�����5��p����Y��nI���>>������mW�8�ؗ�� �< i�Y�F���s����9�|�j^P>�A9̆go`�Ύg}ba\�����Vf 5k\�V��rƲ�{c�����&)���︣� �kGV\u|ߨ����-m9>��c��rv�{�`/��Y𪹸܋z�� ���9�# m=v魍�lP�|:͜Qd���!}yY�<�)��N+i� �\����1?+[v��r9˝E��U"������ EН[~��e�W%�y��{/_���o-���Ѫ�Q���N��YS1ܤv��(�)�h]��<|��U{� l�55�:n=꽟V���?(�0Y׮�����M�Ε�]�>w���& E*�.)w�"�TE�ZV��Ώз�j~X�� ��)��[�7��7���_������ΩnXpB0[� ��i�6���ڹ���Gs�j�Dv��,,2�J^l&����jJ28��Aj `!�y��'.�*��!�ɫ�°���W #�H*�q��+��^��r�,��ָ��lj� �v+���V�h���郿BYq�x��|���b�dXmq@��s��A�Q򁮗e���\�H81�/ё~��P�F�� bM��tn�T��-�?6����7�F�g�e=�p�����d�@~�6>oɹ�8�ޣ�k#}y6���k^Pb���1�s�x�c0�+j�$=,����8�ȭ�F!EU1��R�O H��A��dr/���5�A4U/�����.Vq| ����1��\�(ͳ�����5�`����~���1K��JWߗ\��x�Uu�_2�{ɭԍS��Pd�f#@�4fZ�.�J�X{[�cpE��ܩ����=Sк�~4۪N�FK��(M4�}�a@"@6��jGHT�mP��}a����{�d���7�>5lv�h�����v2JQ� � @@ -3467,7 +3467,7 @@ N x��S� аE����R+(*�P�žcB� ���6}QxܧE�NJ��-�g��)_���7��||Oz���Q�S��&,�hG����2SG+l�'�^�O���⟚�jڱ�X�V�/$&Z>�ܬ�/���|s'\VV���s �������L)<��"�b�~���?BÓ��ڤ�2����K�A��7�����r�t1J�E�9X�;��"���<.�bM���iӯ� ,O��GM�y���c��\+��K ���Quk�q���g�CKY?wTp�hS������M�=*��L_������6O~2�9��|Ft7��Rd�\OZ�0m=c�yφ�w��_b�8����I�`i�����E���w\��S ����o;;EZ�@� �ܚ��F��Z^t��#�mW��[�)�EA���@�"��=��|(Or�gUO���F�_H�3�JP���Y�ͱ�����/4���'C�������l+@+x/O�hʕ�+En�W9Perc�r?(�� �����IL�!Z��xڟ��� Eբ���� oR��f�J pF��dj����k*:��LO�mD���X&з�D�M[�Pitk�Jq���=[9I�������H��4Z��O�fo3��'�aD��T�2�T�O?��y�6��5�A��ަ��=�h�zT�V�J��|<�zếĵx�Ż���+���sZo�� �X�����ȯ�k�8}��f�� ������_g��@��ٜ��]�-��iVV�iv���"�_a�=����W�'�g���O�3�9(� �q���[ڞ��d�툺��gE� =��ʼ6�|/��Y����o ��� 7\=���IJ��v�����������ѿ1"�4���h��j�S�d�1�,o�>N�/ك�jp����q���cqK�a3(��`S.���1���%�R���2�N6pݛ� �^�<��Q>q�_p��kv=��Mg� ��mY�x�E��Ŕ�E-O���"����k�Os���y��:ҳ3]~k��2Z�m�l.� �A�����_��EO�\�� �V dM:���Hw�����no]�0���m����˲҅ӛP3O��4.�e�}>��Zr������8_����Ǘ٥�����h{�~:��H �h>�� I����+�d�>|��3u�!�Jن�q�*�Wd�����P�y3*D��""�м���i���s�����d�����>;{ F;'u��A;��ث� �_vH�/�;�p��-�U+��Y��]��P�斒�jk�z��;[Y���� �� -�v��OJn�!��6@mi̴�b~<����/7f�\Zj� 4x5��L΄��m)�0�eq�r=^�h)�h��ߵ��'�l�^�/o� ������L���vƘ�K��I*�=�2�uw�f ����?�c~n����4���\µ�<�TfNJJ���� �r���V$Ż�⭀V����qd���}�~ �l���H/|tٕ�}���U��M��|�_A� s��X�z�M =����;�������&�rQePC ��@>.C����d�ߗ�9���5n���R��K�.C����d�ߗ�9���5n���R��K�����Y\�|t�,����0�sg�OO%u:Z4�&z!�{5'�楰�������s,-\��H ��h�[�L�l�2K 6�r ꌬFf�=o����Ll>���-�29���®:u�yYM5���! lp�����x��;\yM�i�:�������eFA~l�V�\����߭�Q!{��R�8������� <ŏ��jX�_ް]V�i=�w��]�r�qv�{�h�ٯ V͓YsPۑ3�öemRϋ��P2���o� @@ -3761,7 +3761,7 @@ P ��y5,d�O��v����t��]l,��ȖUD�6)~O������!�������Ě��f\����(M�����f��/�c1*��f���jmPJA��C�ۉ��B]׉���wJj6�-�ݮt�;F��㶞Duu�� ]��� ?�pi�KA��[�>�\���|� |��A�9�Syvܩ�%�|f��L�Ŗ�h�Z���tS���E��t�% ����m�r�U���)�r��M�W��D��fM�����Kr�?[�n�����5���- �֨��R���7�r�����q�RZ��Z� �B�m�)�_ 6��5�t������RU��#��5Mқ�@��F��w�'IO�i�v_�"�d�b}�����Ͼ -el�5�=���jn���*��$z0�~ ���P���)�T�K��:;)]�F�13��s�(�^N�om�f��Cf��Ј+\7���ܼ��Bb'ӻ�̖�"S 2U؀.O��ާ��Q�\����É"������ �t�r}�����F�=k����'� � :�:"���k)L��� ��m�$������ {�Ly�"U����7?.�{z;�/df���􊯨4uʧ%�<����� ��H���l ��_���p���i_o�&&:Z|�Y����.��g���W%?�͏�yGς_D��^N�om�f��Cf��Ј+\7���ܼ��Bb'ӻ�̖�"S 2U؀.O��ާ��Q�\����É"������ �t�r}�����F�=k����'� � :�:"���k)L��� ��m�$������ {�Ly�"U����7?.�{z;�/df���􊯨4uʧ%�<����� ��H���l ��_���p���i_o�&&:Z|�Y����.��g���W%?�͏�yGς_D�>stream :n�UԲ���BPm���Ƴ|Yl��%sEJm%�[?jX�һ��=�Yڊ� VOps���\�T�㝲�������𓥑����'j�Hb�6sX�w�uj=�X����#�q�y���5�h�P {C3ZB�p��Ȳгt�ss����U�G;G��avߵٺ�=f�����\�3����{��$�C汞�2*Y��g��<��w�/|ʑ$�Y����[� �����CQ��^�1>[��K4�~Y�5[�pe�G��C!��Kl�41˄��eކ[/��z�� @@ -3958,7 +3958,7 @@ Pq f��މ۞l5QI'��aF�8h9 �P���'���B*���g5��A��O�|z�_�3!��ߖ������ǻ�iE+�n�ᤶ�̢���P���/�^�R�<]h��3i` z����o���|�ü���ӫ�R�fM:���f�}숏�Ī{[������I�-��1D��I���\7V�E�/ߜ"l���A���ņcʝ�T� �J9?���5� �0Y{2 d+S~���'�R3��$��KY앬��Rb�i�10ۂ������� -���HT\q8š�����]d��Te���a���v�� [��lcV^W^��\%����Z���$�;Қ�ŮLu�`h�����v�Zo[�~�z�ϫ��Y�{�ɺ��Wi�o�ʹ�r�o��Ռ=�[��^ի��U˯̒*�U4�<����ʣt�bc�b��Ҥ_6�H>^���of{A�5����Fي�iあc�"1 蕕[� +���HT\q8š�����]d��Te���a���v�� [��lcV^W^��\%����Z���$�;Қ�ŮLu�`h�����v�Zo[�~�z�ϫ��Y�{�ɺ��Wi�o�ʹ�r�o��Ռ=�[��^ի��U˯̒*�U4�<����ʣt�bc�b��Ҥ_6�H>^���of{A�5����Fي�iあc�"1 蕕[� ��*,d%�םv�۹Y;���Z�m l)c)�AoeU��״�U�}y�4^��ȕ>E�Q��[~i���J��|�?��� F�|ǨdGrw���*Փ��[�E��yOmQQщ.3�j�Y���(����T��'.��vrS'6�^��}z�+�⒮�� ޗ�����Oq�L�W�J��6��r�S�H�7�� c4�:c4��2�J�K-���m=A/[)����y� �̉����M��s��: �BXMno ����ݿYO^ �~g��=+.�β���}��Z��Q��p�t�XRtMj�}[�P�6����^��I!��_� �/�1�I &�n��PZ���쯃'�G?�Qh��e�J4�3e���YW�RkE�Z� �3�`�Hy�sm���V����"����%��� �5!US|�W�qG���mf �g�7� �||�� ��]��Ui��k�=�wBk��q3 �R��+|&|��Z�QD�r�쇩$�o���(�dH���9�apb�P$�f`���8S��:ʡ�9%�t�ӑ^[ |=�:z|�:�e˴�� ��k ��U�~ �W T�H�X}k���dW4<�z�BdK� ��d 2��dS�d� Ă��� � s�T�9e=c�A��/���߀W����ߑed�� :���P]����;@�<�g� ��Od��d;� Ȋ���Q~�ly�B\� K��7I�1�A��<o�<@�fS=�?����,_=�W|��Gh�����g��7���Ȝ�b8@�S ��l<����M^���+���:qda~�Z[�XuAVύ�Wїg�5�B����D9;t�2V�<�f�W@S�P�є�]�̷h�8�Z']��~�@ �N �q ?����Id� ��dA��5�u�B<� �+� ������;�Pҭ��Q*�����5��\�� �"�� @@ -4060,7 +4060,7 @@ Of( �S�B4�bN�2�ûQ���\;4�1<����7�|`Lc��,�V�SY.Z��<^��XL�������T�n�R_����ttw�7��@�l��d� �����!�5;�q���f<��i�_��?a�?�B��(��OV��_�=�}�^3�?x��as�PB9�qh}��`�,\b��5�A�y�Ҿ��pv���J��F��x!�� g�2?N�Ao|x��^üz����� �wm�›�룲̩v_g����΃1��_ʀ]d+S6�w�p���_x����~����d?�����r#�( ����y^�(Dz:�y\��;� r4�PU6ޞ.Y��9<��-:G�,���C�"ԇW(����� �v��0X���2 a�a !�2���L�ߕY�V���pu�v�dq,���nI���>���uw�.�Um��!U�f �t�iNڭ W�֫�(�ۧ��ܵ�u��X:R;�j�N��){���S̰�R/ H��f�+7`2uS��쾏�wQ����Z��;�|3:� ��_Y�۟��V�� �Z��CC̐��o.�ņ�k�$�4X#�7����ۚ���6�$�3}Uo�Kp�͙��=����`Y��?T�O��0,�w��G�J�'�D�>��-ե��S�>MI��z�I���=�j������u�Sm������Í<��D��@sͨtM�7�h� MHN�ZA�o l(rDO�dj�P����\;|,�8��{�ߺy��K���r����i� (�k���8��7�_j���lS5�������]���� [� �u����݄"����?2s�?C3a��F A)F$�*gH�q�B4b���:����Xٍ��Ǔc���n�b�{ѕ�0CMF�*�Nd�y����[o���{����=�;M���������.܎���q�<��71��M^a�*?��eR��qM��������i���"����鰫��^b�����ɢ��E�W*q6]�u�٧�Γ� 贻��+� �@� ���� �/�&��l��gƸ�}$<֐�✩<����L�����化���i��-1������A^�� ��A��� [�7V�辠q|O��#ڽs幝����.�O])��Z�$���Q�7�|r�F����m�������j�#�6����e|^x�j��Z�}헻��%�}����n��ӭj?�N�2�B�����9���5wh��9�9���SA��d"g��{p��O�2c �Kh��^i��J����\�ٛږ�ʦ?��l��r+M��by(�\�a���cЛ͜Z�v �� �A��³�Z��5���;[��]��~��l3��2�{��hZ δ��*�܃.�@���k�7G���R��o{\H7�r~ ��Օ7�;�4"�%�0�b2��E�(i�h�����g�w�E�W��+'��U��vN� ���y� �e����)g�_<3�3J�����q��e4z��]������G&�;-/���W8 oӠ|�糨�̖�J6�l�Ũި�C�lu�V�§րe&ׇ,O�����a�k�b��K�1e��>���H�G��d����V^VTR���6��G�c�s���cT{SQ1Ƀ�Ħ;��e@S�|>f�h�hM��������a�:�8 +�����4T-�31��9�N���|�УR�/ W��V󏱧�ݍרl������'��u���TՇ��/���z��b���A-�����|��ڛ�p�ЯƂۺ�h����2�� ����;V�~d����E���:��x�����m�1�8*4��=҉�Ez�sl�>ܘ�dnu�&b��Z�k�7y����?�����7S�;���o��Ϭ��Y��>/��bxʭ��av�������p�E�g�>��k����*�6Ν�I��?�� P2h1�U�r�6y���@�9�36��֨Y^�׋Kd�)��~�i^?����m� �.����oA[]z���f�Q�:�ռl��;v+7��r���CS����<��tж��4ҍ,OW�����|z�WJ˷�1�����n�^�b���y�:Lm \g��2ͪ���8{T\����_Ļ3�FI��PK 2 @@ -4089,7 +4089,7 @@ r ��0�_�˩4�|JrBZ�M}�z�O�Jim���H��E\������'k���r�t��X�UG�p0���?�����Z�.P�M�RM`��Z�UY�I�J�q+�/+���,f�(��#�ܪ.w��������J'�F��Tu��d�օ6m8����������;i��=dQwK����k��9�m�I�&���s4(����,����t������JP�\*ƭz��2]H�Q�sLX fq �f5?)C|��u>؁�|uK���� �Kʪ�WB�lVJL��K�z�q�b��t(�c��x�+�� �$�I�^��VR 6��'|�y��< �mpƶ�)�KPW'P���`a��sKi ��J7�a�}�f�fs��[�l�H���Q���Q��={+gk�W��쨮Z5����$�m���D����>�ű s�˭ʶ ;�i#�����w�� J��~�@����ᩙv���ǘ��~�d@8}N�HD)VIl�'r.�t�� @� C��o�+?`��_�e����7���.�ƫM���7��k�K!�U}�U�J�>G���s!���R6=^�������S�]`�1���Iq���pnHF`��sRL�R��Roc)^�4�'i>�Rd����q�qr����`F�id���X�7���$�C]T��������;����I� �H#�d�7�@� -�S�?��!�� �F�"��S�j���8L? ��C���u&�}`Bt�~�0SWRl�/4�>�D�3�ق���3��+�ʶQ��}���0� ����J�26�rzQDtt�� ��V~FU�&�����N�����������@�m +�S�?��!�� �F�"��S�j���8L? ��C���u&�}`Bt�~�0SWRl�/4�>�D�3�ق���3��+�ʶQ��}���0� ����J�26�rzQDtt�� ��V~FU�&�����N�����������@�m �#@4E�h�h� �@�� �j%Ŋ���*��@�r4+�2q��MDܕ�mOټj��}*ݷ�*���QN���=�k�WO�Ͷ�J����?���F�zf��m�*@\��� ����������2����1��b �<���<�PN�J' UbR�GQ�+I�z�b|N��Ia5R\�$aa�����?����D�:��ť����;�:� �YC���mL �VR����tL�]����u��ܞ�,����n�����уΦ ѵYS���W���[z��p�w������|��yv�Cg�eb3����Z��:��V�Z�|�gci�Lj�\x���x��ҙO��ὖ{���u��7=��M��Z9>�[ށ�y����ŸW^ �O���'����֌�h�x�lTV^�P��Ӱv _��{֘X� �� ��n0�M��/�w? �߭�Ń��p�Ң���,��%��?�q ?Zi@,��_"WH=/.��lo�ɕs���g�R �宺�*��1z�*�sjl���ܘT&]s�\�MHH+�Q>�AW��B�� ��̴�"�m K@X���C���nM$�N��z�&��~�G{�Z���z����@~�U�f�J��Pׁ�ik_��=-�����8)�Fc©���V>=d~V��#n5���4﵎��ʫ�v}w��vg���;�ڨ90\���=[��`g���uz�h_1��z��<��A�x������Az�{-q(-���� ��nY��7��4�������>���|exѭ�ò[��I�ƨ31�r�a�n~�?s�J_@�r�����_<�� ]n�HJ �:,,�l��*�d��ٴ3��?��t�~��}�[��i&�p�)�9G:���9����p�֫�w,*�V�>�M6z���b1� +.g��nݨ�nDo��^}-��~�O}���T���2�vk ~k��x�yj�h�ւ��|�d��$ޒ��P���F��� �0�/�f����w�oX4A&'O��?�N�~���b.4�ڹX=}���CR��m�k��� v]P�|RQ)P��;�(D��o�I���n�(J���W�So�jI�"�j2����H�oO_��dG��7w���73�����ͽ`��\��k?;�q��H�G��� �񤬪X�i*Ɍ���,R+��Ifj�|]�[ '.&�(��C��sN,�W�2b �/.hx���ԋb�\�w����1Z�N{���^4Mk2nz?�Yh4#c`�^�@ƺya͹��� 5 �2�jH�ɤ�y��4�X�T�Ɩ���'bY�mu�?���)�{�'�f����q'������ ���41]q=Ԯ�Lόj��~����1l��V�X�^��K���3j�H�� ��O*�<=�{�{+J3���R�j��� ˏ!hd����z�7Xaȝ���-]��u��,R���=� ���=3�W`����g�c��ű���*C����k��Lp�&��{������U����H{*c+�&(���A9I‚}����:W�}���ť��Y{�bo�PfS��bp+��|(��k�Ԛ���֣3zcOg����W�c�� �b����b��P�.��8Rz�aOs��g��M�F��4�tP*�{�7�P*V3�r�n�]�>~~p� �pP6γ.�TY�X�0#��3DU��tf9�)���P`l���l�"�Q��{�!Ke�I����?M��M��b��躿�Ղgԧ�?��)�P��o+u�8��D���ʈp�C���)K�^){6���,ڳ����e@���Ktp[7�,z�)�3T��4R �!�ίV��l=�]eT�wUY�����w�����/���f��MH��6S��!�쩬���a)R�=�K 2K ;|'�f�hpN3�X��N���f�g�HO(�NgC�ME���� �JJe�C�6 �P뱌���o\�tOƎ�[���������~])�/�X\��ڷW7��K��~I�5��f7�b�Zչ��&�j�4��U���|z�1~س�4c�Tt��Ty_�ER}�e��#�i�L�X����= ;�&�a�&�̫! @@ -4232,7 +4232,7 @@ yq Θ�M�46=���#��'hu��5�Qt�z�:�ed3�'� N�S��@9¦�_Cˤ6�7mܥya%�\u$���b�/D~ޢD���E�m���b?�8\rN5��&�l�1acC>�ay��•�q����[��v���,��z#���g�# N���� Օl1��7�d���H�6H�K���E�+ �h&lo�E�� �i��հ���EЧ\c����<��\4��ul��Kׯ_J�t��K��$Zp�� ?M"�l��|����❶��D�k^���n�Tp�q�s�=���3�c�-*�I@��9#;�Q��Z7��|�� -x���qM�pƺ�c������1��2it8d�Ia���c�b���K�Zk�zA��ȹ?x%���2 ���K�yZN�cc3�c�5��Y��CO�t�"l� +x���qM�pƺ�c������1��2it8d�Ia���c�b���K�Zk�zA��ȹ?x%���2 ���K�yZN�cc3�c�5��Y��CO�t�"l� 3�(T�ę?w�&�w��p���x�>8Xl'Cfp6)�e�_�v��C���0x��,*R�}'G�F��5�AѮ���G���ޕ�n놵䬘-/k�X/�R���D.��kF+>�)d^m�l��pC%��v�kF��Kw���x�_m8Sno��qxd�Z�¼����p&�8�s*=:�Rt�� hµT~۝Rt����{���0�!6�{�'"�p%"K��Lr�M�����o�n&Û�R �ף�ͻ�p[Yz�d��Ur�Po�dbػ�2S����:���p� P{Š� g|tv.�i���At5Ki�Gq��7�\F�<�=oUb�wFD�΄ć ���.w�M<�Ox"�2�_/��נ��^N�7����h����&�WVF����]r�;�ͽ�/k�w���Hk@�y���N���=O]Q��Z���}K�%� �y��X���c-ќ5 ����>!U�U<�JC<1�sΡ���Na��SGo���5�*�_�"����o�'#��]&xWӧ�����#���hq�RӺ�Y�a�\۔D&��MN{1�)�����"��tAD������!��'~�^Mt8\w;�� �(�˘!�>z{�����v-$�S*B�W?8��U�C^�[�=ka���QC/^�������+�Z!ө��j���87�O]4���v -�LS�:c ��<�'���Ə�q����g���_'�°��Jb�Ѩq��Xk�=�]��gJH�<�"HSڀ̣��g���q �!���y�M�ԯ�f`\n������ .gi�+#0i��z�%��6.��@C�l,��+�Ŧ̺��Q��9�^a�]���/;4�O���v�#��"�[��hYJ��$!P�zI���„ %��e��V�p]"7W��[�f��FY4�����_pd�f���T�� ��� 31�$�V�*��Cޓ��f�!�.AF�׫�3���'���Q�# ����d!�* �x�X�xq���J$�#�m��]���?�(1���e'�G�V�d=|��ʯ� ד��i+)R��V��.�@hLN�Bӛg�̩�RŵG�v�|G2�}��~d��I$;�"OBL%@vq ���8��s'W�y���nf٠��,ຈq��_e�Z�^�lZ�L�U�%��W-�`�����p�M�6n��%1[�c)��kܻ:��K�bLJ�b�mE����U� �a ��D!�$��GP%A�(�!�E@ENb������rP��(�8TʁG�����}�Ѳ��ޣ����~]�%�^�ԻYHg�Ӗ &�#��"o��D�N�:K�z>�e�炷�u u�!��ܟ߀�#�{,����<� �����t�V 6@���� �L�:��m�9�� @@ -4373,7 +4373,7 @@ x?gy_ ��{�q�"cx/ �{qx��31fG��۳!*G�<>�oA$�6J���{r����O��4l���Dr���QB*GnCЩ˸�w��c]"� �R@t��Z<��u,���b ��Z� ��:J���7�`��R�M �E�P9�T�[<3�[�[� �e��&7���~�������Ôf�9�|�KE���j%꥽ 7 +��'.����¾^Mz�� ��ټ^ڼUOm3G���C�hX�n%�/J�i_�����pL�:�)�@+) j�c��g����S��?��@�W����U�g}�]�q� 9?<~�oxl:��/q�W���>��~�������Ôf�9�|�KE���j%꥽ 7 g��w�A�[�OOyuE�.���/s\�s�{[\{r1@�,m��YW �bk��U�̗f|��s�ӿќ6�Wgv�V��ӻ�lMJ� ���f�d�Kq��.��G΢@�e�CyCKz�'&�'&�'&�'&��Ø�^ ��:=�yX�P%��d �ؾm'�>����{&�(�~�=Y�a��9�Q~ŏ'�,:��̝�WD"�֔$�K=� ���Lw�f'b�~9궃��:x]�]�/��mDY�%̥���_7�Z�[��M0y�] ;wd�)<������V.K�̞%ܐ��t*��"l�+&�Np�Oak�uQ���j�d�B�-<~�6Mzuz���fF��Xk2��ߥ^(� !c3w����t��������������R��>�|�޾���>l~���?�������Z����[�cS�8 �H�Z��kfIX,��+��}����N���`�ٙ���Uw��f_����Ԕ^�wj���)��$Eɒ:��N�LL�s/mZ���\7��� ?Z��Y� 2H��������v�u��o+«�ą#�Ƥ�R�ke2Ofnߚ����r���� {.���gf�ƽwd���xH O�Z_��z!��ر��� �/���YyA���5�:_|-� ����J�v��m�qe͝پ���U}��n��s�Ͼ_��"�'�Y�FN^�n��� �Wf*������z�z�*u�ꅾW5��Ն�$�{���Ѿ�+#N�=��x�z�ݳ��׋��^� _�T�ͻ-�5�8eֱ�/o|�!ÞqeJS��~qvg�_�������a�}���ꐿ��q?�͊X^�RsԺ��זn�Uީ����۸��+��^:N�uc���X9����ϡ�ve�a� @@ -4730,7 +4730,7 @@ Tx D��Ί�\�!�Ql�_��n��J=��|����}k@IJ���"E��±��5Y��`�Ј�⣵Nݜ_ ���� ��CSZ(c��d��0������z��ME�򹤗�)� ��:Ơ�z8�H3�����xb�l։~�A��!�눞� ��M�v�#��1�H���]��;)֘�w��ԋ�3^�o���ϐXQl�[ ����?$�UjRd�h`��0�Y�iDg��F.g7B�[ �����h��_�)�G���7^~1;����o���b�I�mǐz��yܶ��c'�A�$��0B__b�C!��Ќ9����^�EˡG^e;�I7`H��a���ǶG��G�nvbPq_t���h� AC�LyԸ�KQ�E�c�2��囥��4(F ��p��Y��ڑ�C���;*2�-���B�@Ɛ�� �� @�;>>�>X�l���0uP4����5% �$S�{k���X>7��$_5����V��P��u��pO�{�WC\]�=�5���OB����Q�~o؛�CYxkkb���0܃ -%��'�n���K` Y5�k����C=��,p��K�p܃&����^O.��d�l|�K���9�c�V +%��'�n���K` Y5�k����C=��,p��K�p܃&����^O.��d�l|�K���9�c�V i76�� ���X���:"3eS2������x�Z����{Cu�j�U�_�����XQ<`í)̾B ���xKkP���a��� � ��d��K~kP�0��%R��m�!�Z�7�&v�#��&rҔXbS.��H+� ���������`���B�^u���y4�1Y��ǧV�_�=ܱ��� �aCإ�0��4z.w�I�ڐ.�Lz����'�\!n�T�lP�(dcb ��8 H{G��w,T���WV�k͗ ލ&a_p�}���7�ڽK�||Sr�z�m'Xp�����a�W�r&0^| zzY��4�P�[���(����n5������1nq��� Ms±|j�6�\"Ht�+�%gιb7�皁{�V5 �1��/��t��UN������ @@ -4833,7 +4833,7 @@ O ��hB�=��Rʯ�^~@���Am+����[�s�FOahv���æHOF�y �[;��:�0� *����v�@�� 6��݊�1R� 2Ue�ŤT�I�aVP�ޫ|G�˻��KGC�3P1j x�#Q}��ڮep#��`%�Mki%핗~@َ՛W@t�z֓?|O��w��;�հC5R� W�n���h�WJ U���6���n��������IM�,Jb���]TM����m2ir�!�{��5���0QA�貔���P��Qlcr��^�4�Ȍ+�?҉����Ǯh�u�8�o�����ݰ����jR"gx��z,.\ �8`��� �vg�씗JO��Hv]!!]d���7 I�[���Y�CB�L]!�r\�^1���9����P�s�A�J�2Y�5C㩿�=!ޯ᮹I5c���M)���Y��vxK� 2�L|e)WhJ ���X���"�r'����F��5��c�W�C6���0����Y�20p$o>^��.�)��+W��O�|�d 7� ��UR��Qp�d�@����t�^����]7�G��E�R�k�u � �:ژ�O@݁��l�@�ߛ�gE���^��|G�@����d���h.��{��1�!�aC��Q�]/����!z��v����x�K�صV����x�eR@\��aW�n��|����E�q��������0��L$` e"��إ��ق�X� -�� r-K���Ɲ�QW=���R�87�G#�C�[�����0$�P� ���e�n�c/2d�]P\0w �q�E����3�fpD���c=Ƙ�����~�@K�7�C.@���Da/� � +�� r-K���Ɲ�QW=���R�87�G#�C�[�����0$�P� ���e�n�c/2d�]P\0w �q�E����3�fpD���c=Ƙ�����~�@K�7�C.@���Da/� � ĈT�LM�,m{a�>�%��6�����El�Π�""��O�Z�G����+�Fv�����B3�!|%c��.u�G����}C!ze%�>�»fA�k>�������2�K��Ĥ��q[k��K���<�嶸��(�+I�ʛu=F ��(��^p��0AD���S����c� �E>�G��Rz%P���f�Z^O�p�MQ g��� (��������ԛM������_�&�R�@$�dT�Yߩ)%aXC���%Q8l$^ז�NY�Qy,6����D��f��u�F��v���;�|���fz�V�J.yR�H�*v�Y\?t n���6ۖcm��YWXH1钐!B^9�k����F�����G�ahg�h�_ @@ -4992,7 +4992,7 @@ D 0G��RM�4�[�p��9�]��e���&u���Fq6�b�ͽ[AG�e��O9'25z�ݖ��Q�{C��X��p�>�Mǂ��`�-xj�)f�N�X�;�¬'���s f���5�H΄�73?�Mw�h=$��~�������ě~ ���(�G��#H�]2� eK~���d�q��W��ǓM �~$�@��)V��'���qF�è;�.�+I�/��a�0�Ւ���V�xE�kH� ޝ���0_OI,n�L�6��o�R����4g���!2������(���U��]S��Y.�4�N���b^9��=�-�����? �jlZU��� �P�zcC� 5\d|���pF^�t���= ��}ޝ ���K`� -U���Nq�t]�+��3�^�+����� �]��$0� �,��N# ��-D��Ũ���y4 +U���Nq�t]�+��3�^�+����� �]��$0� �,��N# ��-D��Ũ���y4 �No�08���a��{��!"�"�k����� M�������۶�f��(�.Z����Ea4䊿dl/�^k��}D\��}~�s5�H��� � &� (���fR�Q����;��z���҇��dt�r���΁�_/�p0T ���Q}��"��B�;��»i�H���Tu��2�)ܳ���Oڕ��_ݩ?�W�K��@{5�����>�gف�@����iZR`��n��O��r8��n{u�vd��e���}�M+�[ʏ� 0�In���޾Bi���O������?G�T�]˶K1�-�i$F�k�4+I�Bk��w�9��~?/�����_�3���F��G�^��zp�7�ɓ�0�~��ÙfS� �~�Z�.�.3� o��A, 5���}HBC���C������ψ rf��X�Q�5��G�+.��?D�{a&j�u��~S��,ȮĬ9����V�*'W�� ���N ���e�5X From 8cf1e9c9670089f3cd2861db46fa326de93d008a Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 11:42:23 +0200 Subject: [PATCH 7/8] Fix editorconfig in bin directory --- bin/dupradar.r | 26 +++--- bin/gtf2bed | 132 +++++++++++++++--------------- bin/salmon_summarizedexperiment.r | 8 +- bin/salmon_tximport.r | 32 +++++--- 4 files changed, 104 insertions(+), 94 deletions(-) diff --git a/bin/dupradar.r b/bin/dupradar.r index 1fb0dc1b2..daf5a5798 100755 --- a/bin/dupradar.r +++ b/bin/dupradar.r @@ -3,7 +3,7 @@ # Command line argument processing args = commandArgs(trailingOnly=TRUE) if (length(args) < 5) { - stop("Usage: dupRadar.r ", call.=FALSE) + stop("Usage: dupRadar.r ", call.=FALSE) } input_bam <- args[1] output_prefix <- args[2] @@ -32,13 +32,13 @@ message("Output basename : ", output_prefix) # Load / install packages if (length(args) > 5) { .libPaths( c( args[6], .libPaths() ) ) } if (!require("dupRadar")){ - source("http://bioconductor.org/biocLite.R") - biocLite("dupRadar", suppressUpdates=TRUE) - library("dupRadar") + source("http://bioconductor.org/biocLite.R") + biocLite("dupRadar", suppressUpdates=TRUE) + library("dupRadar") } if (!require("parallel")) { - install.packages("parallel", dependencies=TRUE, repos='http://cloud.r-project.org/') - library("parallel") + install.packages("parallel", dependencies=TRUE, repos='http://cloud.r-project.org/') + library("parallel") } # Duplicate stats @@ -53,10 +53,10 @@ mtext(output_prefix, side=3) dev.off() fit <- duprateExpFit(DupMat=dm) cat( - paste("- dupRadar Int (duprate at low read counts):", fit$intercept), - paste("- dupRadar Sl (progression of the duplication rate):", fit$slope), - fill=TRUE, labels=output_prefix, - file=paste0(output_prefix, "_intercept_slope.txt"), append=FALSE + paste("- dupRadar Int (duprate at low read counts):", fit$intercept), + paste("- dupRadar Sl (progression of the duplication rate):", fit$slope), + fill=TRUE, labels=output_prefix, + file=paste0(output_prefix, "_intercept_slope.txt"), append=FALSE ) # Create a multiqc file dupInt @@ -125,9 +125,9 @@ line="#id: dupradar write(line,file=paste0(output_prefix, "_duprateExpDensCurve_mqc.txt"),append=TRUE) write.table( - cbind(curve_x, curve_y), - file=paste0(output_prefix, "_duprateExpDensCurve_mqc.txt"), - quote=FALSE, row.names=FALSE, col.names=FALSE, append=TRUE, + cbind(curve_x, curve_y), + file=paste0(output_prefix, "_duprateExpDensCurve_mqc.txt"), + quote=FALSE, row.names=FALSE, col.names=FALSE, append=TRUE, ) # Distribution of expression box plot diff --git a/bin/gtf2bed b/bin/gtf2bed index 62d0f49fd..66d523067 100755 --- a/bin/gtf2bed +++ b/bin/gtf2bed @@ -33,90 +33,90 @@ my $in_cmd =($in =~ /\.gz$/ ? "gunzip -c $in|" : $in =~ /\.zip$/ ? "unzip -p $in open IN, $in_cmd; while () { - $gff = 2 if /^##gff-version 2/; - $gff = 3 if /^##gff-version 3/; - next if /^#/ && $gff; - - s/\s+$//; - # 0-chr 1-src 2-feat 3-beg 4-end 5-scor 6-dir 7-fram 8-attr - my @f = split /\t/; - if ($gff) { + $gff = 2 if /^##gff-version 2/; + $gff = 3 if /^##gff-version 3/; + next if /^#/ && $gff; + + s/\s+$//; + # 0-chr 1-src 2-feat 3-beg 4-end 5-scor 6-dir 7-fram 8-attr + my @f = split /\t/; + if ($gff) { # most ver 2's stick gene names in the id field - ($id) = $f[8]=~ /\bID="([^"]+)"/; + ($id) = $f[8]=~ /\bID="([^"]+)"/; # most ver 3's stick unquoted names in the name field - ($id) = $f[8]=~ /\bName=([^";]+)/ if !$id && $gff == 3; - } else { - ($id) = $f[8]=~ /transcript_id "([^"]+)"/; - } + ($id) = $f[8]=~ /\bName=([^";]+)/ if !$id && $gff == 3; + } else { + ($id) = $f[8]=~ /transcript_id "([^"]+)"/; + } - next unless $id && $f[0]; + next unless $id && $f[0]; - if ($f[2] eq 'exon') { - die "no position at exon on line $." if ! $f[3]; + if ($f[2] eq 'exon') { + die "no position at exon on line $." if ! $f[3]; # gff3 puts :\d in exons sometimes $id =~ s/:\d+$// if $gff == 3; - push @{$exons{$id}}, \@f; - # save lowest start - $trans{$id} = \@f if !$trans{$id}; - } elsif ($f[2] eq 'start_codon') { - #optional, output codon start/stop as "thick" region in bed - $sc{$id}->[0] = $f[3]; - } elsif ($f[2] eq 'stop_codon') { - $sc{$id}->[1] = $f[4]; - } elsif ($f[2] eq 'miRNA' ) { - $trans{$id} = \@f if !$trans{$id}; - push @{$exons{$id}}, \@f; - } + push @{$exons{$id}}, \@f; + # save lowest start + $trans{$id} = \@f if !$trans{$id}; + } elsif ($f[2] eq 'start_codon') { + #optional, output codon start/stop as "thick" region in bed + $sc{$id}->[0] = $f[3]; + } elsif ($f[2] eq 'stop_codon') { + $sc{$id}->[1] = $f[4]; + } elsif ($f[2] eq 'miRNA' ) { + $trans{$id} = \@f if !$trans{$id}; + push @{$exons{$id}}, \@f; + } } for $id ( - # sort by chr then pos - sort { - $trans{$a}->[0] eq $trans{$b}->[0] ? - $trans{$a}->[3] <=> $trans{$b}->[3] : - $trans{$a}->[0] cmp $trans{$b}->[0] - } (keys(%trans)) ) { - my ($chr, undef, undef, undef, undef, undef, $dir, undef, $attr, undef, $cds, $cde) = @{$trans{$id}}; + # sort by chr then pos + sort { + $trans{$a}->[0] eq $trans{$b}->[0] ? + $trans{$a}->[3] <=> $trans{$b}->[3] : + $trans{$a}->[0] cmp $trans{$b}->[0] + } (keys(%trans)) ) { + my ($chr, undef, undef, undef, undef, undef, $dir, undef, $attr, undef, $cds, $cde) = @{$trans{$id}}; my ($cds, $cde); ($cds, $cde) = @{$sc{$id}} if $sc{$id}; - # sort by pos - my @ex = sort { - $a->[3] <=> $b->[3] - } @{$exons{$id}}; - - my $beg = $ex[0][3]; - my $end = $ex[-1][4]; - - if ($dir eq '-') { - # swap - $tmp=$cds; - $cds=$cde; - $cde=$tmp; - $cds -= 2 if $cds; - $cde += 2 if $cde; - } - - # not specified, just use exons - $cds = $beg if !$cds; - $cde = $end if !$cde; - - # adjust start for bed - --$beg; --$cds; - - my $exn = @ex; # exon count - my $exst = join ",", map {$_->[3]-$beg-1} @ex; # exon start - my $exsz = join ",", map {$_->[4]-$_->[3]+1} @ex; # exon size + # sort by pos + my @ex = sort { + $a->[3] <=> $b->[3] + } @{$exons{$id}}; + + my $beg = $ex[0][3]; + my $end = $ex[-1][4]; + + if ($dir eq '-') { + # swap + $tmp=$cds; + $cds=$cde; + $cde=$tmp; + $cds -= 2 if $cds; + $cde += 2 if $cde; + } + + # not specified, just use exons + $cds = $beg if !$cds; + $cde = $end if !$cde; + + # adjust start for bed + --$beg; --$cds; + + my $exn = @ex; # exon count + my $exst = join ",", map {$_->[3]-$beg-1} @ex; # exon start + my $exsz = join ",", map {$_->[4]-$_->[3]+1} @ex; # exon size my $gene_id; my $extend = ""; if ($extended) { - ($gene_id) = $attr =~ /gene_name "([^"]+)"/; - ($gene_id) = $attr =~ /gene_id "([^"]+)"/ unless $gene_id; + ($gene_id) = $attr =~ /gene_name "([^"]+)"/; + ($gene_id) = $attr =~ /gene_id "([^"]+)"/ unless $gene_id; $extend="\t$gene_id"; } - # added an extra comma to make it look exactly like ucsc's beds - print "$chr\t$beg\t$end\t$id\t0\t$dir\t$cds\t$cde\t0\t$exn\t$exsz,\t$exst,$extend\n"; + # added an extra comma to make it look exactly like ucsc's beds + print "$chr\t$beg\t$end\t$id\t0\t$dir\t$cds\t$cde\t0\t$exn\t$exsz,\t$exst,$extend\n"; } diff --git a/bin/salmon_summarizedexperiment.r b/bin/salmon_summarizedexperiment.r index a43732efd..75485ccb4 100755 --- a/bin/salmon_summarizedexperiment.r +++ b/bin/salmon_summarizedexperiment.r @@ -52,8 +52,10 @@ if (length(extra) > 0) { rowdata = rowdata[match(rownames(counts), as.character(rowdata[[by_what]])),] rownames(rowdata) = rowdata[[by_what]] -se = SummarizedExperiment(assays = list(counts = counts, abundance = tpm), - colData = DataFrame(coldata), - rowData = rowdata) +se = SummarizedExperiment( + assays = list(counts = counts, abundance = tpm), + colData = DataFrame(coldata), + rowData = rowdata +) saveRDS(se, file = paste0(tools::file_path_sans_ext(counts_fn), ".rds")) diff --git a/bin/salmon_tximport.r b/bin/salmon_tximport.r index ac4d477bd..ccb69ff7f 100755 --- a/bin/salmon_tximport.r +++ b/bin/salmon_tximport.r @@ -44,9 +44,11 @@ if (length(extra) > 0) { } rowdata = rowdata[match(rownames(txi[[1]]), as.character(rowdata[["tx"]])),] rownames(rowdata) = rowdata[["tx"]] -se = SummarizedExperiment(assays = list(counts = txi[["counts"]], abundance = txi[["abundance"]], length = txi[["length"]]), - colData = DataFrame(coldata), - rowData = rowdata) +se = SummarizedExperiment( + assays = list(counts = txi[["counts"]], abundance = txi[["abundance"]], length = txi[["length"]]), + colData = DataFrame(coldata), + rowData = rowdata +) if (!is.null(tx2gene)) { gi = summarizeToGene(txi, tx2gene = tx2gene) gi.ls = summarizeToGene(txi, tx2gene = tx2gene,countsFromAbundance="lengthScaledTPM") @@ -54,15 +56,21 @@ if (!is.null(tx2gene)) { growdata = unique(rowdata[,2:3]) growdata = growdata[match(rownames(gi[[1]]), growdata[["gene_id"]]),] rownames(growdata) = growdata[["tx"]] - gse = SummarizedExperiment(assays = list(counts = gi[["counts"]], abundance = gi[["abundance"]], length = gi[["length"]]), - colData = DataFrame(coldata), - rowData = growdata) - gse.ls = SummarizedExperiment(assays = list(counts = gi.ls[["counts"]], abundance = gi.ls[["abundance"]], length = gi.ls[["length"]]), - colData = DataFrame(coldata), - rowData = growdata) - gse.s = SummarizedExperiment(assays = list(counts = gi.s[["counts"]], abundance = gi.s[["abundance"]], length = gi.s[["length"]]), - colData = DataFrame(coldata), - rowData = growdata) + gse = SummarizedExperiment( + assays = list(counts = gi[["counts"]], abundance = gi[["abundance"]], length = gi[["length"]]), + colData = DataFrame(coldata), + rowData = growdata + ) + gse.ls = SummarizedExperiment( + assays = list(counts = gi.ls[["counts"]], abundance = gi.ls[["abundance"]], length = gi.ls[["length"]]), + colData = DataFrame(coldata), + rowData = growdata + ) + gse.s = SummarizedExperiment( + assays = list(counts = gi.s[["counts"]], abundance = gi.s[["abundance"]], length = gi.s[["length"]]), + colData = DataFrame(coldata), + rowData = growdata + ) } build_table = function(se.obj, slot) { From 3ac6b94942bdcb7081ad9011fc38a398e3300198 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Tue, 11 May 2021 14:59:45 +0200 Subject: [PATCH 8/8] Check local modules --- .editorconfig | 2 +- modules/local/bedtools_genomecov.nf | 118 ++++++------ modules/local/cat_additional_fasta.nf | 84 ++++---- modules/local/deseq2_qc.nf | 124 ++++++------ modules/local/dupradar.nf | 92 ++++----- modules/local/get_chrom_sizes.nf | 74 +++---- modules/local/get_software_versions.nf | 4 +- modules/local/gtf2bed.nf | 66 +++---- modules/local/gtf_gene_filter.nf | 60 +++--- modules/local/multiqc.nf | 4 +- modules/local/multiqc_custom_biotype.nf | 4 +- modules/local/multiqc_custom_fail_mapped.nf | 6 +- modules/local/multiqc_custom_strand_check.nf | 6 +- modules/local/rsem_merge_counts.nf | 112 +++++------ modules/local/salmon_merge_counts.nf | 192 +++++++++---------- modules/local/salmon_summarizedexperiment.nf | 68 +++---- modules/local/salmon_tx2gene.nf | 72 +++---- modules/local/salmon_tximport.nf | 74 +++---- modules/local/samplesheet_check.nf | 6 +- modules/local/sra_fastq_ftp.nf | 108 +++++------ modules/local/sra_ids_to_runinfo.nf | 68 +++---- modules/local/sra_merge_samplesheet.nf | 68 +++---- modules/local/sra_runinfo_to_ftp.nf | 62 +++--- modules/local/sra_to_samplesheet.nf | 94 ++++----- 24 files changed, 784 insertions(+), 784 deletions(-) diff --git a/.editorconfig b/.editorconfig index 2095f8e52..7a3ba6aad 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ indent_style = space indent_size = 2 # These files are edited upstream in nf-core/modules -[/modules/**] +[/modules/nf-core/**] charset = unset end_of_line = unset insert_final_newline = unset diff --git a/modules/local/bedtools_genomecov.nf b/modules/local/bedtools_genomecov.nf index 6768044ba..b1338de06 100644 --- a/modules/local/bedtools_genomecov.nf +++ b/modules/local/bedtools_genomecov.nf @@ -1,59 +1,59 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process BEDTOOLS_GENOMECOV { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" - } else { - container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" - } - - input: - tuple val(meta), path(bam) - - output: - tuple val(meta), path("*.sense.bedGraph") , emit: bedgraph_sense - tuple val(meta), path("*.antisense.bedGraph"), emit: bedgraph_antisense - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - - def prefix_sense = "${prefix}.sense" - def prefix_antisense = "${prefix}.antisense" - if (meta.strandedness == 'reverse') { - prefix_sense = "${prefix}.antisense" - prefix_antisense = "${prefix}.sense" - } - """ - bedtools \\ - genomecov \\ - -ibam $bam \\ - -bg \\ - -strand + \\ - $options.args \\ - | bedtools sort > ${prefix_sense}.bedGraph - - bedtools \\ - genomecov \\ - -ibam $bam \\ - -bg \\ - -strand - \\ - $options.args \\ - | bedtools sort > ${prefix_antisense}.bedGraph - - bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt - """ -} - +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_GENOMECOV { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.sense.bedGraph") , emit: bedgraph_sense + tuple val(meta), path("*.antisense.bedGraph"), emit: bedgraph_antisense + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + def prefix_sense = "${prefix}.sense" + def prefix_antisense = "${prefix}.antisense" + if (meta.strandedness == 'reverse') { + prefix_sense = "${prefix}.antisense" + prefix_antisense = "${prefix}.sense" + } + """ + bedtools \\ + genomecov \\ + -ibam $bam \\ + -bg \\ + -strand + \\ + $options.args \\ + | bedtools sort > ${prefix_sense}.bedGraph + + bedtools \\ + genomecov \\ + -ibam $bam \\ + -bg \\ + -strand - \\ + $options.args \\ + | bedtools sort > ${prefix_antisense}.bedGraph + + bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt + """ +} + diff --git a/modules/local/cat_additional_fasta.nf b/modules/local/cat_additional_fasta.nf index ac3ae1d4b..7034fa99d 100644 --- a/modules/local/cat_additional_fasta.nf +++ b/modules/local/cat_additional_fasta.nf @@ -1,42 +1,42 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -/* - * Concatenate additional fasta file e.g. ERCC spike-ins, GTF etc to primary fasta and gtf genome annotation - */ -process CAT_ADDITIONAL_FASTA { - tag "$add_fasta" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - input: - path fasta - path gtf - path add_fasta - val biotype - - output: - path "${name}.fasta", emit: fasta - path "${name}.gtf" , emit: gtf - - script: - def genome_name = params.genome ? params.genome : fasta.getBaseName() - def biotype_name = biotype ? "-b $biotype" : '' - def add_name = add_fasta.getBaseName() - name = "${genome_name}_${add_name}" - """ - fasta2gtf.py -o ${add_fasta.baseName}.gtf $biotype_name $add_fasta - cat $fasta $add_fasta > ${name}.fasta - cat $gtf ${add_fasta.baseName}.gtf > ${name}.gtf - """ -} +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +/* + * Concatenate additional fasta file e.g. ERCC spike-ins, GTF etc to primary fasta and gtf genome annotation + */ +process CAT_ADDITIONAL_FASTA { + tag "$add_fasta" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path fasta + path gtf + path add_fasta + val biotype + + output: + path "${name}.fasta", emit: fasta + path "${name}.gtf" , emit: gtf + + script: + def genome_name = params.genome ? params.genome : fasta.getBaseName() + def biotype_name = biotype ? "-b $biotype" : '' + def add_name = add_fasta.getBaseName() + name = "${genome_name}_${add_name}" + """ + fasta2gtf.py -o ${add_fasta.baseName}.gtf $biotype_name $add_fasta + cat $fasta $add_fasta > ${name}.fasta + cat $gtf ${add_fasta.baseName}.gtf > ${name}.gtf + """ +} diff --git a/modules/local/deseq2_qc.nf b/modules/local/deseq2_qc.nf index ec3b0ce06..e75edee2c 100644 --- a/modules/local/deseq2_qc.nf +++ b/modules/local/deseq2_qc.nf @@ -1,62 +1,62 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -params.multiqc_label = '' -options = initOptions(params.options) - -process DESEQ2_QC { - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - // (Bio)conda packages have intentionally not been pinned to a specific version - // This was to avoid the pipeline failing due to package conflicts whilst creating the environment when using -profile conda - conda (params.enable_conda ? "conda-forge::r-base=4.0 bioconda::bioconductor-deseq2=1.28.0 bioconda::bioconductor-biocparallel bioconda::bioconductor-tximport bioconda::bioconductor-complexheatmap conda-forge::r-optparse conda-forge::r-ggplot2 conda-forge::r-rcolorbrewer conda-forge::r-pheatmap" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/mulled-v2-8849acf39a43cdd6c839a369a74c0adc823e2f91:ab110436faf952a33575c64dd74615a84011450b-0" - } else { - container "quay.io/biocontainers/mulled-v2-8849acf39a43cdd6c839a369a74c0adc823e2f91:ab110436faf952a33575c64dd74615a84011450b-0" - } - - input: - path counts - path pca_header_multiqc - path clustering_header_multiqc - - output: - path "*.pdf" , optional:true, emit: pdf - path "*.RData" , optional:true, emit: rdata - path "*pca.vals.txt" , optional:true, emit: pca_txt - path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc - path "*sample.dists.txt" , optional:true, emit: dists_txt - path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc - path "*.log" , optional:true, emit: log - path "size_factors" , optional:true, emit: size_factors - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def label_lower = params.multiqc_label.toLowerCase() - def label_upper = params.multiqc_label.toUpperCase() - """ - deseq2_qc.r \\ - --count_file $counts \\ - --outdir ./ \\ - --cores $task.cpus \\ - $options.args - - if [ -f "R_sessionInfo.log" ]; then - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$pca_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.vals.txt > ${label_lower}.pca.vals_mqc.tsv - - sed "s/deseq2_clustering/${label_lower}_deseq2_clustering/g" <$clustering_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 sample/${label_upper} DESeq2 sample/g" tmp.txt - cat tmp.txt *.sample.dists.txt > ${label_lower}.sample.dists_mqc.tsv - fi - - Rscript -e "library(DESeq2); write(x=as.character(packageVersion('DESeq2')), file='${software}.version.txt')" - """ -} +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +params.multiqc_label = '' +options = initOptions(params.options) + +process DESEQ2_QC { + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + // (Bio)conda packages have intentionally not been pinned to a specific version + // This was to avoid the pipeline failing due to package conflicts whilst creating the environment when using -profile conda + conda (params.enable_conda ? "conda-forge::r-base=4.0 bioconda::bioconductor-deseq2=1.28.0 bioconda::bioconductor-biocparallel bioconda::bioconductor-tximport bioconda::bioconductor-complexheatmap conda-forge::r-optparse conda-forge::r-ggplot2 conda-forge::r-rcolorbrewer conda-forge::r-pheatmap" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-8849acf39a43cdd6c839a369a74c0adc823e2f91:ab110436faf952a33575c64dd74615a84011450b-0" + } else { + container "quay.io/biocontainers/mulled-v2-8849acf39a43cdd6c839a369a74c0adc823e2f91:ab110436faf952a33575c64dd74615a84011450b-0" + } + + input: + path counts + path pca_header_multiqc + path clustering_header_multiqc + + output: + path "*.pdf" , optional:true, emit: pdf + path "*.RData" , optional:true, emit: rdata + path "*pca.vals.txt" , optional:true, emit: pca_txt + path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc + path "*sample.dists.txt" , optional:true, emit: dists_txt + path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc + path "*.log" , optional:true, emit: log + path "size_factors" , optional:true, emit: size_factors + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def label_lower = params.multiqc_label.toLowerCase() + def label_upper = params.multiqc_label.toUpperCase() + """ + deseq2_qc.r \\ + --count_file $counts \\ + --outdir ./ \\ + --cores $task.cpus \\ + $options.args + + if [ -f "R_sessionInfo.log" ]; then + sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$pca_header_multiqc >tmp.txt + sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt + cat tmp.txt *.pca.vals.txt > ${label_lower}.pca.vals_mqc.tsv + + sed "s/deseq2_clustering/${label_lower}_deseq2_clustering/g" <$clustering_header_multiqc >tmp.txt + sed -i -e "s/DESeq2 sample/${label_upper} DESeq2 sample/g" tmp.txt + cat tmp.txt *.sample.dists.txt > ${label_lower}.sample.dists_mqc.tsv + fi + + Rscript -e "library(DESeq2); write(x=as.character(packageVersion('DESeq2')), file='${software}.version.txt')" + """ +} diff --git a/modules/local/dupradar.nf b/modules/local/dupradar.nf index 85371682c..4bf5f5f57 100644 --- a/modules/local/dupradar.nf +++ b/modules/local/dupradar.nf @@ -1,46 +1,46 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process DUPRADAR { - tag "$meta.id" - label 'process_long' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - conda (params.enable_conda ? "bioconda::bioconductor-dupradar=1.18.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bioconductor-dupradar:1.18.0--r40_1" - } else { - container "quay.io/biocontainers/bioconductor-dupradar:1.18.0--r40_1" - } - - input: - tuple val(meta), path(bam) - path gtf - - output: - tuple val(meta), path("*.pdf") , emit: pdf - tuple val(meta), path("*.txt") , emit: txt - tuple val(meta), path("*_mqc.txt"), emit: multiqc - path "*.version.txt" , emit: version - - script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - - def strandedness = 0 - if (meta.strandedness == 'forward') { - strandedness = 1 - } else if (meta.strandedness == 'reverse') { - strandedness = 2 - } - def paired_end = meta.single_end ? 'single' : 'paired' - """ - dupradar.r $bam $prefix $gtf $strandedness $paired_end $task.cpus - Rscript -e "library(dupRadar); write(x=as.character(packageVersion('dupRadar')), file='${software}.version.txt')" - """ -} +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DUPRADAR { + tag "$meta.id" + label 'process_long' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bioconductor-dupradar=1.18.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bioconductor-dupradar:1.18.0--r40_1" + } else { + container "quay.io/biocontainers/bioconductor-dupradar:1.18.0--r40_1" + } + + input: + tuple val(meta), path(bam) + path gtf + + output: + tuple val(meta), path("*.pdf") , emit: pdf + tuple val(meta), path("*.txt") , emit: txt + tuple val(meta), path("*_mqc.txt"), emit: multiqc + path "*.version.txt" , emit: version + + script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + def strandedness = 0 + if (meta.strandedness == 'forward') { + strandedness = 1 + } else if (meta.strandedness == 'reverse') { + strandedness = 2 + } + def paired_end = meta.single_end ? 'single' : 'paired' + """ + dupradar.r $bam $prefix $gtf $strandedness $paired_end $task.cpus + Rscript -e "library(dupRadar); write(x=as.character(packageVersion('dupRadar')), file='${software}.version.txt')" + """ +} diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index d7d69ac63..f7341b877 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -1,37 +1,37 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -/* - * Get chromosome sizes from a fasta file - */ -process GET_CHROM_SIZES { - tag "$fasta" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" - } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" - } - - input: - path fasta - - output: - path '*.sizes' , emit: sizes - path '*.fai' , emit: fai - path "*.version.txt", emit: version - - script: - def software = 'samtools' - """ - samtools faidx $fasta - cut -f 1,2 ${fasta}.fai > ${fasta}.sizes - echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt - """ -} +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +/* + * Get chromosome sizes from a fasta file + */ +process GET_CHROM_SIZES { + tag "$fasta" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + path fasta + + output: + path '*.sizes' , emit: sizes + path '*.fai' , emit: fai + path "*.version.txt", emit: version + + script: + def software = 'samtools' + """ + samtools faidx $fasta + cut -f 1,2 ${fasta}.fai > ${fasta}.sizes + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index 9b0e3585e..f0aebb762 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -10,7 +10,7 @@ process GET_SOFTWARE_VERSIONS { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } - + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/python:3.8.3" @@ -22,7 +22,7 @@ process GET_SOFTWARE_VERSIONS { input: path versions - + output: path "software_versions.csv" , emit: csv path 'software_versions_mqc.yaml', emit: yaml diff --git a/modules/local/gtf2bed.nf b/modules/local/gtf2bed.nf index 2449f99dc..094bb0264 100644 --- a/modules/local/gtf2bed.nf +++ b/modules/local/gtf2bed.nf @@ -1,33 +1,33 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -/* - * Convert GTF file to BED format - */ -process GTF2BED { - tag "$gtf" - label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::perl=5.26.2" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/perl:5.26.2" - } else { - container "quay.io/biocontainers/perl:5.26.2" - } - - input: - path gtf - - output: - path '*.bed' - - script: // This script is bundled with the pipeline, in nf-core/chipseq/bin/ - """ - gtf2bed $gtf > ${gtf.baseName}.bed - """ -} +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +/* + * Convert GTF file to BED format + */ +process GTF2BED { + tag "$gtf" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::perl=5.26.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/perl:5.26.2" + } else { + container "quay.io/biocontainers/perl:5.26.2" + } + + input: + path gtf + + output: + path '*.bed' + + script: // This script is bundled with the pipeline, in nf-core/chipseq/bin/ + """ + gtf2bed $gtf > ${gtf.baseName}.bed + """ +} diff --git a/modules/local/gtf_gene_filter.nf b/modules/local/gtf_gene_filter.nf index c0b2c5c11..d30ab21bf 100644 --- a/modules/local/gtf_gene_filter.nf +++ b/modules/local/gtf_gene_filter.nf @@ -1,30 +1,30 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -process GTF_GENE_FILTER { - tag "$fasta" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - input: - path fasta - path gtf - - output: - path "*.gtf" - - script: // filter_gtf_for_genes_in_genome.py is bundled with the pipeline, in nf-core/rnaseq/bin/ - """ - filter_gtf_for_genes_in_genome.py --gtf $gtf --fasta $fasta -o ${fasta.baseName}_genes.gtf - """ -} +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +process GTF_GENE_FILTER { + tag "$fasta" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'genome', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path fasta + path gtf + + output: + path "*.gtf" + + script: // filter_gtf_for_genes_in_genome.py is bundled with the pipeline, in nf-core/rnaseq/bin/ + """ + filter_gtf_for_genes_in_genome.py --gtf $gtf --fasta $fasta -o ${fasta.baseName}_genes.gtf + """ +} diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index cf7db1d91..fb06d4fd5 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -9,7 +9,7 @@ process MULTIQC { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - + conda (params.enable_conda ? "bioconda::multiqc=1.10.1" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/multiqc:1.10.1--py_0" @@ -51,7 +51,7 @@ process MULTIQC { path ('rseqc/junction_saturation/*') path ('rseqc/read_distribution/*') path ('rseqc/read_duplication/*') - + output: path "*multiqc_report.html", emit: report path "*_data" , emit: data diff --git a/modules/local/multiqc_custom_biotype.nf b/modules/local/multiqc_custom_biotype.nf index 1d6eeaa0a..79c0e30d0 100644 --- a/modules/local/multiqc_custom_biotype.nf +++ b/modules/local/multiqc_custom_biotype.nf @@ -9,7 +9,7 @@ process MULTIQC_CUSTOM_BIOTYPE { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/python:3.8.3" @@ -20,7 +20,7 @@ process MULTIQC_CUSTOM_BIOTYPE { input: tuple val(meta), path(count) path header - + output: tuple val(meta), path("*.tsv"), emit: tsv diff --git a/modules/local/multiqc_custom_fail_mapped.nf b/modules/local/multiqc_custom_fail_mapped.nf index 545631f53..e7dc8a22e 100644 --- a/modules/local/multiqc_custom_fail_mapped.nf +++ b/modules/local/multiqc_custom_fail_mapped.nf @@ -7,17 +7,17 @@ process MULTIQC_CUSTOM_FAIL_MAPPED { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { container "biocontainers/biocontainers:v1.2.0_cv1" } - + input: val fail_mapped - + output: path "*.tsv" diff --git a/modules/local/multiqc_custom_strand_check.nf b/modules/local/multiqc_custom_strand_check.nf index 96ed338ed..c7acf08c8 100644 --- a/modules/local/multiqc_custom_strand_check.nf +++ b/modules/local/multiqc_custom_strand_check.nf @@ -7,17 +7,17 @@ process MULTIQC_CUSTOM_STRAND_CHECK { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { container "biocontainers/biocontainers:v1.2.0_cv1" } - + input: val fail_strand - + output: path "*.tsv" diff --git a/modules/local/rsem_merge_counts.nf b/modules/local/rsem_merge_counts.nf index 30b07c802..9e86bd188 100644 --- a/modules/local/rsem_merge_counts.nf +++ b/modules/local/rsem_merge_counts.nf @@ -1,56 +1,56 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -process RSEM_MERGE_COUNTS { - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - path ('genes/*') - path ('isoforms/*') - - output: - path "rsem.merged.gene_counts.tsv" , emit: counts_gene - path "rsem.merged.gene_tpm.tsv" , emit: tpm_gene - path "rsem.merged.transcript_counts.tsv", emit: counts_transcript - path "rsem.merged.transcript_tpm.tsv" , emit: tpm_transcript - - script: - """ - mkdir -p tmp/genes - cut -f 1,2 `ls ./genes/* | head -n 1` > gene_ids.txt - for fileid in `ls ./genes/*`; do - samplename=`basename \$fileid | sed s/\\.genes.results\$//g` - echo \$samplename > tmp/genes/\${samplename}.counts.txt - cut -f 5 \${fileid} | tail -n+2 >> tmp/genes/\${samplename}.counts.txt - echo \$samplename > tmp/genes/\${samplename}.tpm.txt - cut -f 6 \${fileid} | tail -n+2 >> tmp/genes/\${samplename}.tpm.txt - done - - mkdir -p tmp/isoforms - cut -f 1,2 `ls ./isoforms/* | head -n 1` > transcript_ids.txt - for fileid in `ls ./isoforms/*`; do - samplename=`basename \$fileid | sed s/\\.isoforms.results\$//g` - echo \$samplename > tmp/isoforms/\${samplename}.counts.txt - cut -f 5 \${fileid} | tail -n+2 >> tmp/isoforms/\${samplename}.counts.txt - echo \$samplename > tmp/isoforms/\${samplename}.tpm.txt - cut -f 6 \${fileid} | tail -n+2 >> tmp/isoforms/\${samplename}.tpm.txt - done - - paste gene_ids.txt tmp/genes/*.counts.txt > rsem.merged.gene_counts.tsv - paste gene_ids.txt tmp/genes/*.tpm.txt > rsem.merged.gene_tpm.tsv - paste transcript_ids.txt tmp/isoforms/*.counts.txt > rsem.merged.transcript_counts.tsv - paste transcript_ids.txt tmp/isoforms/*.tpm.txt > rsem.merged.transcript_tpm.tsv - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process RSEM_MERGE_COUNTS { + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path ('genes/*') + path ('isoforms/*') + + output: + path "rsem.merged.gene_counts.tsv" , emit: counts_gene + path "rsem.merged.gene_tpm.tsv" , emit: tpm_gene + path "rsem.merged.transcript_counts.tsv", emit: counts_transcript + path "rsem.merged.transcript_tpm.tsv" , emit: tpm_transcript + + script: + """ + mkdir -p tmp/genes + cut -f 1,2 `ls ./genes/* | head -n 1` > gene_ids.txt + for fileid in `ls ./genes/*`; do + samplename=`basename \$fileid | sed s/\\.genes.results\$//g` + echo \$samplename > tmp/genes/\${samplename}.counts.txt + cut -f 5 \${fileid} | tail -n+2 >> tmp/genes/\${samplename}.counts.txt + echo \$samplename > tmp/genes/\${samplename}.tpm.txt + cut -f 6 \${fileid} | tail -n+2 >> tmp/genes/\${samplename}.tpm.txt + done + + mkdir -p tmp/isoforms + cut -f 1,2 `ls ./isoforms/* | head -n 1` > transcript_ids.txt + for fileid in `ls ./isoforms/*`; do + samplename=`basename \$fileid | sed s/\\.isoforms.results\$//g` + echo \$samplename > tmp/isoforms/\${samplename}.counts.txt + cut -f 5 \${fileid} | tail -n+2 >> tmp/isoforms/\${samplename}.counts.txt + echo \$samplename > tmp/isoforms/\${samplename}.tpm.txt + cut -f 6 \${fileid} | tail -n+2 >> tmp/isoforms/\${samplename}.tpm.txt + done + + paste gene_ids.txt tmp/genes/*.counts.txt > rsem.merged.gene_counts.tsv + paste gene_ids.txt tmp/genes/*.tpm.txt > rsem.merged.gene_tpm.tsv + paste transcript_ids.txt tmp/isoforms/*.counts.txt > rsem.merged.transcript_counts.tsv + paste transcript_ids.txt tmp/isoforms/*.tpm.txt > rsem.merged.transcript_tpm.tsv + """ +} diff --git a/modules/local/salmon_merge_counts.nf b/modules/local/salmon_merge_counts.nf index c328b2b06..86346e239 100644 --- a/modules/local/salmon_merge_counts.nf +++ b/modules/local/salmon_merge_counts.nf @@ -1,96 +1,96 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -process SALMON_MERGE_COUNTS { - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - path ('genes_counts/*') - path ('genes_tpm/*') - path ('genes_counts_length_scaled/*') - path ('genes_counts_scaled/*') - path ('isoforms_counts/*') - path ('isoforms_tpm/*') - - output: - path "salmon.merged.gene_counts.tsv" , emit: counts_gene - path "salmon.merged.gene_tpm.tsv" , emit: tpm_gene - path "salmon.merged.gene_counts_length_scaled.tsv", emit: counts_gene_length_scaled - path "salmon.merged.gene_counts_scaled.tsv" , emit: counts_gene_scaled - path "salmon.merged.transcript_counts.tsv" , emit: counts_transcript - path "salmon.merged.transcript_tpm.tsv" , emit: tpm_transcript - - script: - """ - mkdir -p tmp/genes_counts - echo "${params.gtf_group_features}" > gene_ids.txt - cut -f 1 `ls ./genes_counts/* | head -n 1` | tail -n +2 >> gene_ids.txt - for fileid in `ls ./genes_counts/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_counts/\${filename} - done - - mkdir -p tmp/genes_tpm - for fileid in `ls ./genes_tpm/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_tpm/\${filename} - done - - mkdir -p tmp/genes_counts_length_scaled - for fileid in `ls ./genes_counts_length_scaled/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_counts_length_scaled/\${filename} - done - - mkdir -p tmp/genes_tpm_length_scaled - for fileid in `ls ./genes_tpm_length_scaled/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_tpm_length_scaled/\${filename} - done - - mkdir -p tmp/genes_counts_scaled - for fileid in `ls ./genes_counts_scaled/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_counts_scaled/\${filename} - done - - mkdir -p tmp/genes_tpm_scaled - for fileid in `ls ./genes_tpm_scaled/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/genes_tpm_scaled/\${filename} - done - - mkdir -p tmp/isoforms_counts - echo "transcript_id" > transcript_ids.txt - cut -f 1 `ls ./isoforms_counts/* | head -n 1` | tail -n +2 >> transcript_ids.txt - for fileid in `ls ./isoforms_counts/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/isoforms_counts/\${filename} - done - - mkdir -p tmp/isoforms_tpm - for fileid in `ls ./isoforms_tpm/*`; do - filename=`basename \$fileid` - cut -f 2 \${fileid} > tmp/isoforms_tpm/\${filename} - done - - paste gene_ids.txt tmp/genes_counts/* > salmon.merged.gene_counts.tsv - paste gene_ids.txt tmp/genes_tpm/* > salmon.merged.gene_tpm.tsv - paste gene_ids.txt tmp/genes_counts_length_scaled/* > salmon.merged.gene_counts_length_scaled.tsv - paste gene_ids.txt tmp/genes_counts_scaled/* > salmon.merged.gene_counts_scaled.tsv - paste transcript_ids.txt tmp/isoforms_counts/* > salmon.merged.transcript_counts.tsv - paste transcript_ids.txt tmp/isoforms_tpm/* > salmon.merged.transcript_tpm.tsv - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SALMON_MERGE_COUNTS { + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path ('genes_counts/*') + path ('genes_tpm/*') + path ('genes_counts_length_scaled/*') + path ('genes_counts_scaled/*') + path ('isoforms_counts/*') + path ('isoforms_tpm/*') + + output: + path "salmon.merged.gene_counts.tsv" , emit: counts_gene + path "salmon.merged.gene_tpm.tsv" , emit: tpm_gene + path "salmon.merged.gene_counts_length_scaled.tsv", emit: counts_gene_length_scaled + path "salmon.merged.gene_counts_scaled.tsv" , emit: counts_gene_scaled + path "salmon.merged.transcript_counts.tsv" , emit: counts_transcript + path "salmon.merged.transcript_tpm.tsv" , emit: tpm_transcript + + script: + """ + mkdir -p tmp/genes_counts + echo "${params.gtf_group_features}" > gene_ids.txt + cut -f 1 `ls ./genes_counts/* | head -n 1` | tail -n +2 >> gene_ids.txt + for fileid in `ls ./genes_counts/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_counts/\${filename} + done + + mkdir -p tmp/genes_tpm + for fileid in `ls ./genes_tpm/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_tpm/\${filename} + done + + mkdir -p tmp/genes_counts_length_scaled + for fileid in `ls ./genes_counts_length_scaled/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_counts_length_scaled/\${filename} + done + + mkdir -p tmp/genes_tpm_length_scaled + for fileid in `ls ./genes_tpm_length_scaled/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_tpm_length_scaled/\${filename} + done + + mkdir -p tmp/genes_counts_scaled + for fileid in `ls ./genes_counts_scaled/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_counts_scaled/\${filename} + done + + mkdir -p tmp/genes_tpm_scaled + for fileid in `ls ./genes_tpm_scaled/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/genes_tpm_scaled/\${filename} + done + + mkdir -p tmp/isoforms_counts + echo "transcript_id" > transcript_ids.txt + cut -f 1 `ls ./isoforms_counts/* | head -n 1` | tail -n +2 >> transcript_ids.txt + for fileid in `ls ./isoforms_counts/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/isoforms_counts/\${filename} + done + + mkdir -p tmp/isoforms_tpm + for fileid in `ls ./isoforms_tpm/*`; do + filename=`basename \$fileid` + cut -f 2 \${fileid} > tmp/isoforms_tpm/\${filename} + done + + paste gene_ids.txt tmp/genes_counts/* > salmon.merged.gene_counts.tsv + paste gene_ids.txt tmp/genes_tpm/* > salmon.merged.gene_tpm.tsv + paste gene_ids.txt tmp/genes_counts_length_scaled/* > salmon.merged.gene_counts_length_scaled.tsv + paste gene_ids.txt tmp/genes_counts_scaled/* > salmon.merged.gene_counts_scaled.tsv + paste transcript_ids.txt tmp/isoforms_counts/* > salmon.merged.transcript_counts.tsv + paste transcript_ids.txt tmp/isoforms_tpm/* > salmon.merged.transcript_tpm.tsv + """ +} diff --git a/modules/local/salmon_summarizedexperiment.nf b/modules/local/salmon_summarizedexperiment.nf index 9cc4b1a01..55313f425 100644 --- a/modules/local/salmon_summarizedexperiment.nf +++ b/modules/local/salmon_summarizedexperiment.nf @@ -1,34 +1,34 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -process SALMON_SUMMARIZEDEXPERIMENT { - tag "$tx2gene" - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "bioconda::bioconductor-summarizedexperiment=1.20.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bioconductor-summarizedexperiment:1.20.0--r40_0" - } else { - container "quay.io/biocontainers/bioconductor-summarizedexperiment:1.20.0--r40_0" - } - - input: - path counts - path tpm - path tx2gene - - output: - path "*.rds" , emit: rds - path "*.version.txt", emit: version - - script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ - """ - salmon_summarizedexperiment.r NULL $counts $tpm - Rscript -e "library(SummarizedExperiment); write(x=as.character(packageVersion('SummarizedExperiment')), file='bioconductor-summarizedexperiment.version.txt')" - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SALMON_SUMMARIZEDEXPERIMENT { + tag "$tx2gene" + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::bioconductor-summarizedexperiment=1.20.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bioconductor-summarizedexperiment:1.20.0--r40_0" + } else { + container "quay.io/biocontainers/bioconductor-summarizedexperiment:1.20.0--r40_0" + } + + input: + path counts + path tpm + path tx2gene + + output: + path "*.rds" , emit: rds + path "*.version.txt", emit: version + + script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ + """ + salmon_summarizedexperiment.r NULL $counts $tpm + Rscript -e "library(SummarizedExperiment); write(x=as.character(packageVersion('SummarizedExperiment')), file='bioconductor-summarizedexperiment.version.txt')" + """ +} diff --git a/modules/local/salmon_tx2gene.nf b/modules/local/salmon_tx2gene.nf index 0cc2bb521..df3160799 100644 --- a/modules/local/salmon_tx2gene.nf +++ b/modules/local/salmon_tx2gene.nf @@ -1,36 +1,36 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -process SALMON_TX2GENE { - tag "$gtf" - label "process_low" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - input: - path ("salmon/*") - path gtf - - output: - path "*.tsv" - - script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ - """ - salmon_tx2gene.py \\ - --gtf $gtf \\ - --salmon salmon \\ - --id $params.gtf_group_features \\ - --extra $params.gtf_extra_attributes \\ - -o salmon_tx2gene.tsv - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SALMON_TX2GENE { + tag "$gtf" + label "process_low" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path ("salmon/*") + path gtf + + output: + path "*.tsv" + + script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ + """ + salmon_tx2gene.py \\ + --gtf $gtf \\ + --salmon salmon \\ + --id $params.gtf_group_features \\ + --extra $params.gtf_extra_attributes \\ + -o salmon_tx2gene.tsv + """ +} diff --git a/modules/local/salmon_tximport.nf b/modules/local/salmon_tximport.nf index 40b11a331..08ca29d89 100644 --- a/modules/local/salmon_tximport.nf +++ b/modules/local/salmon_tximport.nf @@ -1,37 +1,37 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -process SALMON_TXIMPORT { - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "bioconda::bioconductor-tximeta=1.8.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bioconductor-tximeta:1.8.0--r40_0" - } else { - container "quay.io/biocontainers/bioconductor-tximeta:1.8.0--r40_0" - } - - input: - path ("salmon/*") - path tx2gene - - output: - path "*gene_tpm.tsv" , emit: tpm_gene - path "*gene_counts.tsv" , emit: counts_gene - path "*gene_counts_length_scaled.tsv", emit: counts_gene_length_scaled - path "*gene_counts_scaled.tsv" , emit: counts_gene_scaled - path "*transcript_tpm.tsv" , emit: tpm_transcript - path "*transcript_counts.tsv" , emit: counts_transcript - path "*.version.txt" , emit: version - - script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ - """ - salmon_tximport.r NULL salmon salmon.merged - Rscript -e "library(tximeta); write(x=as.character(packageVersion('tximeta')), file='bioconductor-tximeta.version.txt')" - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SALMON_TXIMPORT { + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::bioconductor-tximeta=1.8.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bioconductor-tximeta:1.8.0--r40_0" + } else { + container "quay.io/biocontainers/bioconductor-tximeta:1.8.0--r40_0" + } + + input: + path ("salmon/*") + path tx2gene + + output: + path "*gene_tpm.tsv" , emit: tpm_gene + path "*gene_counts.tsv" , emit: counts_gene + path "*gene_counts_length_scaled.tsv", emit: counts_gene_length_scaled + path "*gene_counts_scaled.tsv" , emit: counts_gene_scaled + path "*transcript_tpm.tsv" , emit: tpm_transcript + path "*transcript_counts.tsv" , emit: counts_transcript + path "*.version.txt" , emit: version + + script: // This script is bundled with the pipeline, in nf-core/rnaseq/bin/ + """ + salmon_tximport.r NULL salmon salmon.merged + Rscript -e "library(tximeta); write(x=as.character(packageVersion('tximeta')), file='bioconductor-tximeta.version.txt')" + """ +} diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index ca5bef4b7..955f3a255 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -11,7 +11,7 @@ process SAMPLESHEET_CHECK { publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } - + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/python:3.8.3" @@ -21,7 +21,7 @@ process SAMPLESHEET_CHECK { input: path samplesheet - + output: path '*.csv' @@ -31,4 +31,4 @@ process SAMPLESHEET_CHECK { $samplesheet \\ samplesheet.valid.csv """ -} \ No newline at end of file +} diff --git a/modules/local/sra_fastq_ftp.nf b/modules/local/sra_fastq_ftp.nf index 55bc6bfc0..1c5fe97c1 100644 --- a/modules/local/sra_fastq_ftp.nf +++ b/modules/local/sra_fastq_ftp.nf @@ -1,54 +1,54 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - - -/* - * Download SRA data via FTP - */ -process SRA_FASTQ_FTP { - tag "$meta.id" - label 'process_medium' - label 'error_retry' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - tuple val(meta), val(fastq) - - output: - tuple val(meta), path("*fastq.gz"), emit: fastq - tuple val(meta), path("*md5") , emit: md5 - - script: - if (meta.single_end) { - """ - bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}.fastq.gz; do sleep 1; done'; - - echo "${meta.md5_1} ${meta.id}.fastq.gz" > ${meta.id}.fastq.gz.md5 - md5sum -c ${meta.id}.fastq.gz.md5 - """ - } else { - """ - bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}_1.fastq.gz; do sleep 1; done'; - - echo "${meta.md5_1} ${meta.id}_1.fastq.gz" > ${meta.id}_1.fastq.gz.md5 - md5sum -c ${meta.id}_1.fastq.gz.md5 - - bash -c 'until curl $options.args -L ${fastq[1]} -o ${meta.id}_2.fastq.gz; do sleep 1; done'; - - echo "${meta.md5_2} ${meta.id}_2.fastq.gz" > ${meta.id}_2.fastq.gz.md5 - md5sum -c ${meta.id}_2.fastq.gz.md5 - """ - } -} +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + + +/* + * Download SRA data via FTP + */ +process SRA_FASTQ_FTP { + tag "$meta.id" + label 'process_medium' + label 'error_retry' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), val(fastq) + + output: + tuple val(meta), path("*fastq.gz"), emit: fastq + tuple val(meta), path("*md5") , emit: md5 + + script: + if (meta.single_end) { + """ + bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_1} ${meta.id}.fastq.gz" > ${meta.id}.fastq.gz.md5 + md5sum -c ${meta.id}.fastq.gz.md5 + """ + } else { + """ + bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}_1.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_1} ${meta.id}_1.fastq.gz" > ${meta.id}_1.fastq.gz.md5 + md5sum -c ${meta.id}_1.fastq.gz.md5 + + bash -c 'until curl $options.args -L ${fastq[1]} -o ${meta.id}_2.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_2} ${meta.id}_2.fastq.gz" > ${meta.id}_2.fastq.gz.md5 + md5sum -c ${meta.id}_2.fastq.gz.md5 + """ + } +} diff --git a/modules/local/sra_ids_to_runinfo.nf b/modules/local/sra_ids_to_runinfo.nf index 80d266eec..06d6ceff1 100644 --- a/modules/local/sra_ids_to_runinfo.nf +++ b/modules/local/sra_ids_to_runinfo.nf @@ -1,34 +1,34 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -/* - * Fetch SRA / ENA / GEO run information via the ENA API - */ -process SRA_IDS_TO_RUNINFO { - tag "$id" - label 'error_retry' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::requests=2.24.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/requests:2.24.0" - } else { - container "quay.io/biocontainers/requests:2.24.0" - } - - input: - val id - - output: - path "*.tsv", emit: tsv - - script: - """ - echo $id > id.txt - sra_ids_to_runinfo.py id.txt ${id}.runinfo.tsv - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Fetch SRA / ENA / GEO run information via the ENA API + */ +process SRA_IDS_TO_RUNINFO { + tag "$id" + label 'error_retry' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::requests=2.24.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/requests:2.24.0" + } else { + container "quay.io/biocontainers/requests:2.24.0" + } + + input: + val id + + output: + path "*.tsv", emit: tsv + + script: + """ + echo $id > id.txt + sra_ids_to_runinfo.py id.txt ${id}.runinfo.tsv + """ +} diff --git a/modules/local/sra_merge_samplesheet.nf b/modules/local/sra_merge_samplesheet.nf index c2fcaf466..78cb84575 100644 --- a/modules/local/sra_merge_samplesheet.nf +++ b/modules/local/sra_merge_samplesheet.nf @@ -1,34 +1,34 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -/* - * Merge samplesheets across all samples - */ -process SRA_MERGE_SAMPLESHEET { - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - path ('samplesheets/*') - - output: - path "*csv", emit: csv - - script: - """ - head -n 1 `ls ./samplesheets/* | head -n 1` > samplesheet.csv - for fileid in `ls ./samplesheets/*`; do - awk 'NR>1' \$fileid >> samplesheet.csv - done - """ -} \ No newline at end of file +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Merge samplesheets across all samples + */ +process SRA_MERGE_SAMPLESHEET { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path ('samplesheets/*') + + output: + path "*csv", emit: csv + + script: + """ + head -n 1 `ls ./samplesheets/* | head -n 1` > samplesheet.csv + for fileid in `ls ./samplesheets/*`; do + awk 'NR>1' \$fileid >> samplesheet.csv + done + """ +} diff --git a/modules/local/sra_runinfo_to_ftp.nf b/modules/local/sra_runinfo_to_ftp.nf index 423bd1a77..634abd0ea 100644 --- a/modules/local/sra_runinfo_to_ftp.nf +++ b/modules/local/sra_runinfo_to_ftp.nf @@ -1,31 +1,31 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] - -/* - * Create samplesheet for pipeline from SRA run information fetched via the ENA API - */ -process SRA_RUNINFO_TO_FTP { - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/python:3.8.3" - } else { - container "quay.io/biocontainers/python:3.8.3" - } - - input: - path runinfo - - output: - path "*.tsv", emit: tsv - - script: - """ - sra_runinfo_to_ftp.py ${runinfo.join(',')} ${runinfo.toString().tokenize(".")[0]}.runinfo_ftp.tsv - """ -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Create samplesheet for pipeline from SRA run information fetched via the ENA API + */ +process SRA_RUNINFO_TO_FTP { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path runinfo + + output: + path "*.tsv", emit: tsv + + script: + """ + sra_runinfo_to_ftp.py ${runinfo.join(',')} ${runinfo.toString().tokenize(".")[0]}.runinfo_ftp.tsv + """ +} diff --git a/modules/local/sra_to_samplesheet.nf b/modules/local/sra_to_samplesheet.nf index 7502ef540..e5ff7caec 100644 --- a/modules/local/sra_to_samplesheet.nf +++ b/modules/local/sra_to_samplesheet.nf @@ -1,47 +1,47 @@ -// Import generic module functions -include { saveFiles; getSoftwareName } from './functions' - -params.options = [:] -params.results_dir = '' - -/* - * Stage FastQ files downloaded by SRA and auto-create a samplesheet for the pipeline - */ -process SRA_TO_SAMPLESHEET { - tag "$meta.id" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - memory 100.MB - - input: - tuple val(meta), path(fastq) - - output: - tuple val(meta), path("*csv"), emit: csv - - exec: - // Remove custom keys needed to download the data - def meta_map = meta.clone() - meta_map.remove("id") - meta_map.remove("fastq_1") - meta_map.remove("fastq_2") - meta_map.remove("md5_1") - meta_map.remove("md5_2") - meta_map.remove("single_end") - - // Add required fields for the pipeline to the beginning of the map - pipeline_map = [ - sample : "${meta.id.split('_')[0..-2].join('_')}", - fastq_1 : "${params.outdir}/${params.results_dir}/${fastq[0]}", - fastq_2 : meta.single_end ? '' : "${params.outdir}/${params.results_dir}/${fastq[1]}", - strandedness: 'unstranded' - ] - pipeline_map << meta_map - - // Write to file - def file = task.workDir.resolve("${meta.id}.samplesheet.csv") - file.write pipeline_map.keySet().collect{ '"' + it + '"'}.join(",") + '\n' - file.append(pipeline_map.values().collect{ '"' + it + '"'}.join(",")) + '\n' -} +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] +params.results_dir = '' + +/* + * Stage FastQ files downloaded by SRA and auto-create a samplesheet for the pipeline + */ +process SRA_TO_SAMPLESHEET { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + memory 100.MB + + input: + tuple val(meta), path(fastq) + + output: + tuple val(meta), path("*csv"), emit: csv + + exec: + // Remove custom keys needed to download the data + def meta_map = meta.clone() + meta_map.remove("id") + meta_map.remove("fastq_1") + meta_map.remove("fastq_2") + meta_map.remove("md5_1") + meta_map.remove("md5_2") + meta_map.remove("single_end") + + // Add required fields for the pipeline to the beginning of the map + pipeline_map = [ + sample : "${meta.id.split('_')[0..-2].join('_')}", + fastq_1 : "${params.outdir}/${params.results_dir}/${fastq[0]}", + fastq_2 : meta.single_end ? '' : "${params.outdir}/${params.results_dir}/${fastq[1]}", + strandedness: 'unstranded' + ] + pipeline_map << meta_map + + // Write to file + def file = task.workDir.resolve("${meta.id}.samplesheet.csv") + file.write pipeline_map.keySet().collect{ '"' + it + '"'}.join(",") + '\n' + file.append(pipeline_map.values().collect{ '"' + it + '"'}.join(",")) + '\n' +}