From d59c27f465e8ba063f402f02bd1927abd4a717db Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Mon, 9 Sep 2024 12:46:00 +0200 Subject: [PATCH 1/8] Add mito_fraction from sample input --- assets/schema_input.json | 8 ++++++++ docs/usage.md | 3 ++- modules/local/scanpy/filter/main.nf | 1 + modules/local/scanpy/filter/templates/filter.py | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 041a50b..acdf299 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -87,6 +87,14 @@ "default": 1, "errorMessage": "Minimum number of counts per gene must be an integer greater than 0.", "meta": ["min_counts_gene"] + }, + "mito_fraction": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1.00, + "errorMessage": "Mitochondrial fraction must be a number between 0 and 1.", + "meta": ["mito_fraction"] } }, "anyOf": [ diff --git a/docs/usage.md b/docs/usage.md index d30df36..e65dca6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -59,6 +59,7 @@ For CSV input files, specifying the `batch_col`, `label_col`, and `unknown_label | `min_cells` | Minimum number of cells required for a gene to be considered. Defaults to `1`. | | `min_counts_cell` | Minimum number of counts required for a cell to be considered. Defaults to `1`. | | `min_counts_gene` | Minimum number of counts required for a gene to be considered. Defaults to `1`. | +| `mito_fraction` | Maximum fraction of mitochondrial reads for a cell to be considered. Defaults to `1.0`. | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. @@ -217,7 +218,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` - - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later). + - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow `24.03.0-edge` or later). - `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, Charliecloud, or Apptainer. diff --git a/modules/local/scanpy/filter/main.nf b/modules/local/scanpy/filter/main.nf index 3ac4abe..2c595e5 100644 --- a/modules/local/scanpy/filter/main.nf +++ b/modules/local/scanpy/filter/main.nf @@ -22,6 +22,7 @@ process SCANPY_FILTER { min_cells = meta.min_cells ?: 1 min_counts_gene = meta.min_counts_gene ?: 1 min_counts_cell = meta.min_counts_cell ?: 1 + mito_fraction = meta.mito_fraction ?: 1.0 prefix = task.ext.prefix ?: "${meta.id}" template 'filter.py' } diff --git a/modules/local/scanpy/filter/templates/filter.py b/modules/local/scanpy/filter/templates/filter.py index 4bcbc05..20416e0 100644 --- a/modules/local/scanpy/filter/templates/filter.py +++ b/modules/local/scanpy/filter/templates/filter.py @@ -29,6 +29,12 @@ def format_yaml_like(data: dict, indent: int = 0) -> str: adata = sc.read_h5ad("${h5ad}") prefix = "${prefix}" +adata.var["mt"] = adata.var_names.str.startswith(("MT-", "mt-")) +sc.pp.calculate_qc_metrics( + adata, qc_vars=["mt"], percent_top=None, log1p=False, inplace=True +) +adata = adata[adata.obs.pct_counts_mt < float("${mito_fraction}"), :].copy() + sc.pp.filter_cells(adata, min_counts=int("${min_counts_cell}")) sc.pp.filter_genes(adata, min_counts=int("${min_counts_gene}")) From 736ef28c66765de6027339420646d90a730da931 Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 14:49:55 +0200 Subject: [PATCH 2/8] Add support to celltypist model.convert via `celltypist_map_file` parameter. Fix #98 --- conf/modules.config | 3 +++ docs/usage.md | 4 ++++ .../local/celltypes/celltypist/templates/celltypist.py | 2 ++ nextflow.config | 1 + nextflow_schema.json | 8 ++++++++ 5 files changed, 18 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 2436d15..bb7b7ac 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -297,6 +297,9 @@ process { withName: CELLTYPES_CELLTYPIST { ext.prefix = { meta.id + '_celltypist' } + ext.celltypist_map_file = { + params.celltypist_map_file ? "${params.celltypist_map_file}" : '' + } publishDir = [ path: { "${params.outdir}/celltypes/celltypist" }, diff --git a/docs/usage.md b/docs/usage.md index 5812cf2..7c47d6b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -107,6 +107,10 @@ genome: 'GRCh37' You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-co.re/launch). +### Cell type annotation + +Automated cell type annotation using [Celltypist](https://github.com/Teichlab/celltypist) is supported. You can specify the models to use with the `celltypist_model` parameter. If no models are specified, no cell type annotation will be performed. You can also specify a map file to convert gene symbols from the model to the gene symbols in your data with the `celltypist_map_file` parameter, see [here](https://celltypist.readthedocs.io/en/latest/celltypist.models.Model.html#celltypist.models.Model.convert) for more information. + ### Reference mapping The pipeline supports mapping new samples into the latent space of an existing scVI/scANVI model. diff --git a/modules/local/celltypes/celltypist/templates/celltypist.py b/modules/local/celltypes/celltypist/templates/celltypist.py index 4a4ecbb..6f3c42a 100644 --- a/modules/local/celltypes/celltypist/templates/celltypist.py +++ b/modules/local/celltypes/celltypist/templates/celltypist.py @@ -45,6 +45,8 @@ def format_yaml_like(data: dict, indent: int = 0) -> str: model_name = model_file[:-4] ct_models.download_models(model=model_file) model_obj = ct_models.Model.load(model_file) + if "${celltypist_map_file}": + model_obj.convert(map_file="${celltypist_map_file}") predictions = celltypist.annotate( adata_celltypist, model=model_obj diff --git a/nextflow.config b/nextflow.config index e34005a..7442cf7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,6 +32,7 @@ params { cluster_global = true skip_rankgenesgroups = false celltypist_model = '' + celltypist_map_file = '' cellbender_epochs = 150 var_aggr_method = 'mean' force_obs_cols = '' diff --git a/nextflow_schema.json b/nextflow_schema.json index 312951c..74f39a2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -164,6 +164,14 @@ "help_text": "If you want to use multiple models, separate them with a comma. Available models can be found [here](https://www.celltypist.org/models).", "pattern": "^([a-zA-Z0-9_]*(,[a-zA-Z0-9_]*)*)?$" }, + "celltypist_map_file": { + "type": "string", + "format": "file-path", + "exists": true, + "default": "", + "description": "Specify the map file for celltypist gene id conversion.", + "pattern": "^\\S+\\.csv$" + }, "cellbender_epochs": { "type": "integer", "default": 150, From c36b044995e954e48e5edabaaf010abca4ef2c4f Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 15:37:36 +0200 Subject: [PATCH 3/8] Max mitochondrial fraction. Fix #97 --- assets/schema_input.json | 12 ++++++------ docs/usage.md | 2 +- modules/local/scanpy/filter/main.nf | 2 +- modules/local/scanpy/filter/templates/filter.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index b14cf2c..56498f9 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -88,13 +88,13 @@ "errorMessage": "Minimum number of counts per gene must be an integer greater than 0.", "meta": ["min_counts_gene"] }, - "mito_fraction": { - "type": "number", + "max_mito_fraction": { + "type": "integer", "minimum": 0, - "maximum": 1, - "default": 1.00, - "errorMessage": "Mitochondrial fraction must be a number between 0 and 1.", - "meta": ["mito_fraction"] + "maximum": 100, + "default": 100, + "errorMessage": "Max mitochondrial fraction must be an integer between 0 and 100.", + "meta": ["max_mito_fraction"] }, "expected_cells": { "type": "integer", diff --git a/docs/usage.md b/docs/usage.md index b639e37..1caace0 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -60,7 +60,7 @@ For CSV input files, specifying the `batch_col`, `label_col`, and `unknown_label | `min_counts_cell` | Minimum number of counts required for a cell to be considered. Defaults to `1`. | | `min_counts_gene` | Minimum number of counts required for a gene to be considered. Defaults to `1`. | | `expected_cells` | Number of expected cells, used as input to Cellbender. | -| `mito_fraction` | Maximum fraction of mitochondrial reads for a cell to be considered. Defaults to `1.0`. | +| `max_mito_fraction` | Maximum fraction of mitochondrial reads for a cell to be considered. Defaults to `100`. | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. diff --git a/modules/local/scanpy/filter/main.nf b/modules/local/scanpy/filter/main.nf index 2c595e5..0fcb7e5 100644 --- a/modules/local/scanpy/filter/main.nf +++ b/modules/local/scanpy/filter/main.nf @@ -22,7 +22,7 @@ process SCANPY_FILTER { min_cells = meta.min_cells ?: 1 min_counts_gene = meta.min_counts_gene ?: 1 min_counts_cell = meta.min_counts_cell ?: 1 - mito_fraction = meta.mito_fraction ?: 1.0 + max_mito_fraction = meta.max_mito_fraction ?: 100 prefix = task.ext.prefix ?: "${meta.id}" template 'filter.py' } diff --git a/modules/local/scanpy/filter/templates/filter.py b/modules/local/scanpy/filter/templates/filter.py index 20416e0..847cd11 100644 --- a/modules/local/scanpy/filter/templates/filter.py +++ b/modules/local/scanpy/filter/templates/filter.py @@ -33,7 +33,7 @@ def format_yaml_like(data: dict, indent: int = 0) -> str: sc.pp.calculate_qc_metrics( adata, qc_vars=["mt"], percent_top=None, log1p=False, inplace=True ) -adata = adata[adata.obs.pct_counts_mt < float("${mito_fraction}"), :].copy() +adata = adata[adata.obs.pct_counts_mt < int("${max_mito_fraction}"), :].copy() sc.pp.filter_cells(adata, min_counts=int("${min_counts_cell}")) sc.pp.filter_genes(adata, min_counts=int("${min_counts_gene}")) From ce28887ce08a216a7d4cfc3f9ca54c15f33755a4 Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 15:44:39 +0200 Subject: [PATCH 4/8] prettier usage.md --- docs/usage.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 1caace0..a2c1118 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -46,21 +46,21 @@ sample3,/absolute/path/to/sample3_filtered.csv,/absolute/path/to/sample3.csv,,,, For CSV input files, specifying the `batch_col`, `label_col`, and `unknown_label` columns will not have any effect, as no additional metadata is available in the CSV file. -| Column | Description | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Unique sample identifier. Will be added to the pipeline output objects as `sample` column. | -| `filtered` | May contain paths to `h5ad`, `h5`, `rds`, or `csv` files. `rds` files may contain any object that can be converted to a `SingleCellExperiment` using the [Seurat `as.SingleCellExperiment`](https://satijalab.org/seurat/reference/as.singlecellexperiment) function. `csv` files should contain a matrix with genes as columns and cells as rows. | -| `unfiltered` | Same as `file`, but for the unfiltered cellranger or nf-core/scrnaseq output. If not provided, only `decontX` can be used for ambient RNA removal. | -| `batch_col` | Column in the input file containing batch information. Defaults to `batch`. If the column does not exist in the input object, the pipeline will create a new column and put the sample identifier in it. If the `batch_col` is something else than `batch`, it will be renamed to `batch` during pipeline execution. | -| `symbol_col` | Column in the input file containing gene symbol information. Defaults to `index`. There are two special values that can be used: `index` and `none`. `index` will use the row names of the matrix as gene symbols. `none` will trigger the pipeline to perform gene symbol conversion (this is not supported yet). The values from `symbol_col` will be copied to a column `gene_symbols` during pipeline execution. | -| `label_col` | Column in the input file containing cell type information. Defaults to `label`. If the column does not exist in the input object, the pipeline will create a new column and put `unknown` in it. If the `label_col` is something else than `label`, it will be renamed to `label` during pipeline execution. | -| `unknown_label` | Value in the `label_col` column that should be considered as unknown. Defaults to `unknown`. If the `unknown_label` is something else than `unknown`, it will be renamed to `unknown` during pipeline execution. If trying to perform integration with scANVI, more than one unique label other than `unknown` must exist in the input data. | -| `min_genes` | Minimum number of genes required for a cell to be considered. Defaults to `1`. | -| `min_cells` | Minimum number of cells required for a gene to be considered. Defaults to `1`. | -| `min_counts_cell` | Minimum number of counts required for a cell to be considered. Defaults to `1`. | -| `min_counts_gene` | Minimum number of counts required for a gene to be considered. Defaults to `1`. | -| `expected_cells` | Number of expected cells, used as input to Cellbender. | -| `max_mito_fraction` | Maximum fraction of mitochondrial reads for a cell to be considered. Defaults to `100`. | +| Column | Description | +| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sample` | Unique sample identifier. Will be added to the pipeline output objects as `sample` column. | +| `filtered` | May contain paths to `h5ad`, `h5`, `rds`, or `csv` files. `rds` files may contain any object that can be converted to a `SingleCellExperiment` using the [Seurat `as.SingleCellExperiment`](https://satijalab.org/seurat/reference/as.singlecellexperiment) function. `csv` files should contain a matrix with genes as columns and cells as rows. | +| `unfiltered` | Same as `file`, but for the unfiltered cellranger or nf-core/scrnaseq output. If not provided, only `decontX` can be used for ambient RNA removal. | +| `batch_col` | Column in the input file containing batch information. Defaults to `batch`. If the column does not exist in the input object, the pipeline will create a new column and put the sample identifier in it. If the `batch_col` is something else than `batch`, it will be renamed to `batch` during pipeline execution. | +| `symbol_col` | Column in the input file containing gene symbol information. Defaults to `index`. There are two special values that can be used: `index` and `none`. `index` will use the row names of the matrix as gene symbols. `none` will trigger the pipeline to perform gene symbol conversion (this is not supported yet). The values from `symbol_col` will be copied to a column `gene_symbols` during pipeline execution. | +| `label_col` | Column in the input file containing cell type information. Defaults to `label`. If the column does not exist in the input object, the pipeline will create a new column and put `unknown` in it. If the `label_col` is something else than `label`, it will be renamed to `label` during pipeline execution. | +| `unknown_label` | Value in the `label_col` column that should be considered as unknown. Defaults to `unknown`. If the `unknown_label` is something else than `unknown`, it will be renamed to `unknown` during pipeline execution. If trying to perform integration with scANVI, more than one unique label other than `unknown` must exist in the input data. | +| `min_genes` | Minimum number of genes required for a cell to be considered. Defaults to `1`. | +| `min_cells` | Minimum number of cells required for a gene to be considered. Defaults to `1`. | +| `min_counts_cell` | Minimum number of counts required for a cell to be considered. Defaults to `1`. | +| `min_counts_gene` | Minimum number of counts required for a gene to be considered. Defaults to `1`. | +| `expected_cells` | Number of expected cells, used as input to Cellbender. | +| `max_mito_fraction` | Maximum fraction of mitochondrial reads for a cell to be considered. Defaults to `100`. | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. From 8ed757b9fe5838cfc1f5ac690e25e2e51e9bfe97 Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 16:03:55 +0200 Subject: [PATCH 5/8] rm celltypist_map_file changes --- conf/modules.config | 3 --- docs/usage.md | 2 +- .../local/celltypes/celltypist/templates/celltypist.py | 2 -- nextflow.config | 1 - nextflow_schema.json | 8 -------- 5 files changed, 1 insertion(+), 15 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index bb7b7ac..2436d15 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -297,9 +297,6 @@ process { withName: CELLTYPES_CELLTYPIST { ext.prefix = { meta.id + '_celltypist' } - ext.celltypist_map_file = { - params.celltypist_map_file ? "${params.celltypist_map_file}" : '' - } publishDir = [ path: { "${params.outdir}/celltypes/celltypist" }, diff --git a/docs/usage.md b/docs/usage.md index a2c1118..2f0718e 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -110,7 +110,7 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c ### Cell type annotation -Automated cell type annotation using [Celltypist](https://github.com/Teichlab/celltypist) is supported. You can specify the models to use with the `celltypist_model` parameter. If no models are specified, no cell type annotation will be performed. You can also specify a map file to convert gene symbols from the model to the gene symbols in your data with the `celltypist_map_file` parameter, see [here](https://celltypist.readthedocs.io/en/latest/celltypist.models.Model.html#celltypist.models.Model.convert) for more information. +Automated cell type annotation using [Celltypist](https://github.com/Teichlab/celltypist) is supported. You can specify the models to use with the `celltypist_model` parameter. If no models are specified, no cell type annotation will be performed. ### Reference mapping diff --git a/modules/local/celltypes/celltypist/templates/celltypist.py b/modules/local/celltypes/celltypist/templates/celltypist.py index 6f3c42a..4a4ecbb 100644 --- a/modules/local/celltypes/celltypist/templates/celltypist.py +++ b/modules/local/celltypes/celltypist/templates/celltypist.py @@ -45,8 +45,6 @@ def format_yaml_like(data: dict, indent: int = 0) -> str: model_name = model_file[:-4] ct_models.download_models(model=model_file) model_obj = ct_models.Model.load(model_file) - if "${celltypist_map_file}": - model_obj.convert(map_file="${celltypist_map_file}") predictions = celltypist.annotate( adata_celltypist, model=model_obj diff --git a/nextflow.config b/nextflow.config index 7442cf7..e34005a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,7 +32,6 @@ params { cluster_global = true skip_rankgenesgroups = false celltypist_model = '' - celltypist_map_file = '' cellbender_epochs = 150 var_aggr_method = 'mean' force_obs_cols = '' diff --git a/nextflow_schema.json b/nextflow_schema.json index 74f39a2..312951c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -164,14 +164,6 @@ "help_text": "If you want to use multiple models, separate them with a comma. Available models can be found [here](https://www.celltypist.org/models).", "pattern": "^([a-zA-Z0-9_]*(,[a-zA-Z0-9_]*)*)?$" }, - "celltypist_map_file": { - "type": "string", - "format": "file-path", - "exists": true, - "default": "", - "description": "Specify the map file for celltypist gene id conversion.", - "pattern": "^\\S+\\.csv$" - }, "cellbender_epochs": { "type": "integer", "default": 150, From 93cca56a8e09958dbb7ff97e9ebf700af76cf0b3 Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 16:04:47 +0200 Subject: [PATCH 6/8] lint modules.json --- modules.json | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/modules.json b/modules.json index 8318f95..b698c75 100644 --- a/modules.json +++ b/modules.json @@ -8,19 +8,25 @@ "cellbender/merge": { "branch": "master", "git_sha": "bb21d916a55074acbb48cedc282242077e4ad9b9", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/cellbender/merge/cellbender-merge.diff" }, "cellbender/removebackground": { "branch": "master", "git_sha": "bb21d916a55074acbb48cedc282242077e4ad9b9", - "installed_by": ["modules"], + "installed_by": [ + "modules" + ], "patch": "modules/nf-core/cellbender/removebackground/cellbender-removebackground.diff" }, "multiqc": { "branch": "master", "git_sha": "8f2062e7b4185590fb9f43c275381a31a6544fc0", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -29,17 +35,23 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfvalidation_plugin": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } From 22b693502d246145718055c3c3fd4ced99205c59 Mon Sep 17 00:00:00 2001 From: tbrittoborges Date: Tue, 24 Sep 2024 16:50:15 +0200 Subject: [PATCH 7/8] prettier modules.json --- modules.json | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/modules.json b/modules.json index b698c75..8318f95 100644 --- a/modules.json +++ b/modules.json @@ -8,25 +8,19 @@ "cellbender/merge": { "branch": "master", "git_sha": "bb21d916a55074acbb48cedc282242077e4ad9b9", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/cellbender/merge/cellbender-merge.diff" }, "cellbender/removebackground": { "branch": "master", "git_sha": "bb21d916a55074acbb48cedc282242077e4ad9b9", - "installed_by": [ - "modules" - ], + "installed_by": ["modules"], "patch": "modules/nf-core/cellbender/removebackground/cellbender-removebackground.diff" }, "multiqc": { "branch": "master", "git_sha": "8f2062e7b4185590fb9f43c275381a31a6544fc0", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -35,23 +29,17 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfvalidation_plugin": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } From 456d47e5475f18bdb9e000f51aa9a0386785a594 Mon Sep 17 00:00:00 2001 From: Nico Trummer <52698566+nictru@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:16:48 +0200 Subject: [PATCH 8/8] Add celltypist model parameter link --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 2f0718e..47e349c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -110,7 +110,7 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c ### Cell type annotation -Automated cell type annotation using [Celltypist](https://github.com/Teichlab/celltypist) is supported. You can specify the models to use with the `celltypist_model` parameter. If no models are specified, no cell type annotation will be performed. +Automated cell type annotation using [Celltypist](https://github.com/Teichlab/celltypist) is supported. You can specify the models to use with the [`celltypist_model` parameter](https://nf-co.re/scdownstream/dev/parameters/#celltypist_model). If no models are specified, no cell type annotation will be performed. ### Reference mapping