{
    "$schema": "http://json-schema.org/draft-07/schema",
    "$id": "https://raw.githubusercontent.com/nf-core/bacass/master/nextflow_schema.json",
    "title": "nf-core/bacass pipeline parameters",
    "description": "Simple bacterial assembly and annotation",
    "type": "object",
    "definitions": {
        "input_output_options": {
            "title": "Input/output options",
            "type": "object",
            "fa_icon": "fas fa-terminal",
            "description": "Define where the pipeline should find input data and save output data.",
            "required": ["input", "outdir"],
            "properties": {
                "input": {
                    "type": "string",
                    "exist": true,
                    "mimetype": "text/tsv",
                    "fa_icon": "fas fa-dna",
                    "description": "Path to tab-separated sample sheet",
                    "help_text": "Path to sample sheet, either tab-separated (.tsv), comma-separated (.csv), or in YAML format (.yml/.yaml), that points to compressed fastq files.\n\nThe sample sheet must have six tab-separated columns/entries with the following headers: \n- `ID` (required): Unique sample IDs, must start with a letter, and can only contain letters, numbers or underscores\n- `R1` (optional): Paths to (forward) reads zipped FastQ files\n- `R2` (optional): Paths to reverse reads zipped FastQ files, required if the data is paired-end\n- `LongFastQ` (optional): Paths to long reads zipped FastQ files\n- `Fast5` (optional): Paths to the directory containing FAST5 files\n- `GenomeSize` (optional): A number (including decimals) ending with 'm', representing genome size.\n\n Please be aware that files will be required based on the chosen assembly type specified with the '--assembly_type' option, which can be set to one of the following values: ['short', 'long', 'hybrid'].`",
                    "schema": "assets/schema_input.json"
                },
                "outdir": {
                    "type": "string",
                    "format": "directory-path",
                    "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.",
                    "fa_icon": "fas fa-folder-open"
                },
                "email": {
                    "type": "string",
                    "description": "Email address for completion summary.",
                    "fa_icon": "fas fa-envelope",
                    "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.",
                    "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$"
                }
            }
        },
        "qc_and_trim": {
            "title": "QC and Trim",
            "type": "object",
            "description": "Parameters for QC and trim short-reads",
            "default": "",
            "properties": {
                "save_trimmed_fail": {
                    "type": "boolean",
                    "enum": ["true", "false"],
                    "description": "save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz`"
                },
                "save_merged": {
                    "type": "boolean",
                    "description": "save all merged reads to the a file ending in `*.merged.fastq.gz`"
                },
                "skip_fastqc": {
                    "type": "boolean",
                    "description": "Skip FastQC"
                },
                "skip_fastp": {
                    "type": "boolean",
                    "description": "Skip FastP"
                }
            }
        },
        "contamination_screening": {
            "title": "Contamination Screening",
            "type": "object",
            "description": "",
            "default": "",
            "fa_icon": "fas fa-box",
            "properties": {
                "kraken2db": {
                    "type": "string",
                    "fa_icon": "fab fa-gitkraken",
                    "help_text": "See [Kraken2 homepage](https://benlangmead.github.io/aws-indexes/k2) for download\nlinks. Minikraken2 8GB is a reasonable choice, since we run Kraken here mainly just to check for\nsample purity.",
                    "description": "Path to Kraken2 database."
                }
            }
        },
        "assembly_parameters": {
            "title": "Assembly parameters",
            "type": "object",
            "description": "Parameters for the assembly",
            "default": "",
            "fa_icon": "fas fa-puzzle-piece",
            "properties": {
                "assembler": {
                    "type": "string",
                    "default": "unicycler",
                    "fa_icon": "fas fa-puzzle-piece",
                    "description": "The assembler to use for assembly. Use the appropriate assembler according to the chosen assembly_type. Refer to the README.md for further clarification.",
                    "enum": ["unicycler", "canu", "miniasm", "dragonflye"]
                },
                "assembly_type": {
                    "type": "string",
                    "default": "short",
                    "fa_icon": "fas fa-fingerprint",
                    "help_text": "This adjusts the type of assembly done with the input data and can be any of `long`, `short` or `hybrid`.",
                    "description": "Which type of assembly to perform.",
                    "enum": ["short", "long", "hybrid"]
                },
                "unicycler_args": {
                    "type": "string",
                    "fa_icon": "fas fa-bicycle",
                    "description": "Extra arguments for Unicycler",
                    "help_text": "This advanced option allows you to pass extra arguments to Unicycler (e.g. `\"--mode conservative\"` or `\"--no_correct\"`). For this to work you need to quote the arguments and add at least one space."
                },
                "canu_mode": {
                    "type": "string",
                    "enum": ["-pacbio", "-nanopore", "-pacbio-hifi", "null"],
                    "description": "Allowed technologies for long read assembly."
                },
                "canu_args": {
                    "type": "string",
                    "fa_icon": "fas fa-ship",
                    "description": "This can be used to supply [extra options](https://canu.readthedocs.io/en/latest/quick-start.html) to the Canu assembler. Will be ignored when other assemblers are used."
                },
                "dragonflye_args": {
                    "type": "string",
                    "description": "Extra arguments for [Dragonflye](https://github.com/rpetit3/dragonflye#usage)",
                    "help_text": "This advanced option allows you to add extra arguments to Dragonflye (e.g.: `\"--gsize 2.4m\"`). For those arguments with no values/options associated (e.g.: `\"--nopolish\"` or `\"--nofilter\"`...) you need to add an extra space at the begining of the input string to params.dragonflye_args. Example: `--params.dragonflye_args ' --nopolish'`"
                }
            }
        },
        "assembly_polishing": {
            "title": "Assembly Polishing",
            "type": "object",
            "description": "",
            "default": "",
            "fa_icon": "fas fa-user-astronaut",
            "properties": {
                "polish_method": {
                    "type": "string",
                    "default": "medaka",
                    "fa_icon": "fas fa-hotdog",
                    "description": "Which assembly polishing method to use.",
                    "help_text": "Can be used to define which polishing method is used by default for long reads.",
                    "enum": ["medaka", "nanopolish"]
                }
            }
        },
        "annotation": {
            "title": "Annotation",
            "type": "object",
            "description": "Parameters for the annotation",
            "default": "",
            "fa_icon": "fas fa-align-left",
            "properties": {
                "annotation_tool": {
                    "type": "string",
                    "default": "prokka",
                    "description": "The annotation method to annotate the final assembly.",
                    "enum": ["prokka", "bakta", "dfast"]
                },
                "prokka_args": {
                    "type": "string",
                    "description": "Extra arguments for prokka annotation tool.",
                    "help_text": "This advanced option allows you to pass extra arguments to Prokka (e.g. `\" --rfam\"` or `\" --genus name\"`). For this to work you need to quote the arguments and add at least one space between the arguments. Example:\n\n```bash\n--prokka_args `--rfam --genus Escherichia Coli`\n```\n"
                },
                "baktadb": {
                    "type": "string",
                    "description": "Path to Bakta database"
                },
                "baktadb_download": {
                    "type": "boolean",
                    "description": "Download Bakta database"
                },
                "baktadb_download_args": {
                    "type": "string",
                    "default": "--type light",
                    "description": "This can be used to supply [extra options](https://github.com/oschwengers/bakta#database-download) to the Bakta download module",
                    "enum": ["--type light", "--type full"]
                },
                "dfast_config": {
                    "type": "string",
                    "default": "assets/test_config_dfast.py",
                    "description": "Specifies a configuration file for the [DFAST](https://github.com/nigyta/dfast_core) annotation method.",
                    "help_text": "If you want to know how to create your config file, please refer to the [DFAST](https://github.com/nigyta/dfast_core) readme on how to create one.  The default config (`assets/test_config_dfast.py`) is just included for testing, so if you want to annotate using DFAST, you have to create a config!"
                }
            }
        },
        "skipping_options": {
            "title": "Skipping Options",
            "type": "object",
            "description": "",
            "default": "",
            "fa_icon": "fas fa-forward",
            "properties": {
                "skip_kraken2": {
                    "type": "boolean",
                    "fa_icon": "fas fa-forward",
                    "description": "Skip running Kraken2 classifier on reads."
                },
                "skip_annotation": {
                    "type": "boolean",
                    "fa_icon": "fas fa-forward",
                    "description": "Skip annotating the assembly with Prokka /DFAST."
                },
                "skip_pycoqc": {
                    "type": "boolean",
                    "fa_icon": "fas fa-forward",
                    "description": "Skip running `PycoQC` on long read input."
                },
                "skip_polish": {
                    "type": "boolean",
                    "fa_icon": "fas fa-forward",
                    "description": "Skip polishing the long-read assembly with fast5 input. Will not affect short/hybrid assemblies."
                },
                "skip_multiqc": {
                    "type": "boolean",
                    "description": "Skip MultiQC"
                }
            }
        },
        "institutional_config_options": {
            "title": "Institutional config options",
            "type": "object",
            "fa_icon": "fas fa-university",
            "description": "Parameters used to describe centralised config profiles. These should not be edited.",
            "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.",
            "properties": {
                "custom_config_version": {
                    "type": "string",
                    "description": "Git commit id for Institutional configs.",
                    "default": "master",
                    "hidden": true,
                    "fa_icon": "fas fa-users-cog"
                },
                "custom_config_base": {
                    "type": "string",
                    "description": "Base directory for Institutional configs.",
                    "default": "https://raw.githubusercontent.com/nf-core/configs/master",
                    "hidden": true,
                    "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.",
                    "fa_icon": "fas fa-users-cog"
                },
                "config_profile_name": {
                    "type": "string",
                    "description": "Institutional config name.",
                    "hidden": true,
                    "fa_icon": "fas fa-users-cog"
                },
                "config_profile_description": {
                    "type": "string",
                    "description": "Institutional config description.",
                    "hidden": true,
                    "fa_icon": "fas fa-users-cog"
                },
                "config_profile_contact": {
                    "type": "string",
                    "description": "Institutional config contact information.",
                    "hidden": true,
                    "fa_icon": "fas fa-users-cog"
                },
                "config_profile_url": {
                    "type": "string",
                    "description": "Institutional config URL link.",
                    "hidden": true,
                    "fa_icon": "fas fa-users-cog"
                }
            }
        },
        "max_job_request_options": {
            "title": "Max job request options",
            "type": "object",
            "fa_icon": "fab fa-acquisitions-incorporated",
            "description": "Set the top limit for requested resources for any single job.",
            "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.",
            "properties": {
                "max_cpus": {
                    "type": "integer",
                    "description": "Maximum number of CPUs that can be requested for any single job.",
                    "default": 16,
                    "fa_icon": "fas fa-microchip",
                    "hidden": true,
                    "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`"
                },
                "max_memory": {
                    "type": "string",
                    "description": "Maximum amount of memory that can be requested for any single job.",
                    "default": "128.GB",
                    "fa_icon": "fas fa-memory",
                    "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$",
                    "hidden": true,
                    "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`"
                },
                "max_time": {
                    "type": "string",
                    "description": "Maximum amount of time that can be requested for any single job.",
                    "default": "240.h",
                    "fa_icon": "far fa-clock",
                    "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$",
                    "hidden": true,
                    "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`"
                }
            }
        },
        "generic_options": {
            "title": "Generic options",
            "type": "object",
            "fa_icon": "fas fa-file-import",
            "description": "Less common options for the pipeline, typically set in a config file.",
            "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.",
            "properties": {
                "help": {
                    "type": "boolean",
                    "description": "Display help text.",
                    "fa_icon": "fas fa-question-circle",
                    "hidden": true
                },
                "version": {
                    "type": "boolean",
                    "description": "Display version and exit.",
                    "fa_icon": "fas fa-question-circle",
                    "hidden": true
                },
                "publish_dir_mode": {
                    "type": "string",
                    "default": "copy",
                    "description": "Method used to save pipeline results to output directory.",
                    "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.",
                    "fa_icon": "fas fa-copy",
                    "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"],
                    "hidden": true
                },
                "multiqc_title": {
                    "type": "string",
                    "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.",
                    "fa_icon": "fas fa-file-signature"
                },
                "email_on_fail": {
                    "type": "string",
                    "description": "Email address for completion summary, only when pipeline fails.",
                    "fa_icon": "fas fa-exclamation-triangle",
                    "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$",
                    "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.",
                    "hidden": true
                },
                "plaintext_email": {
                    "type": "boolean",
                    "description": "Send plain-text email instead of HTML.",
                    "fa_icon": "fas fa-remove-format",
                    "hidden": true
                },
                "max_multiqc_email_size": {
                    "type": "string",
                    "description": "File size limit when attaching MultiQC reports to summary emails.",
                    "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$",
                    "default": "25.MB",
                    "fa_icon": "fas fa-file-upload",
                    "hidden": true
                },
                "monochrome_logs": {
                    "type": "boolean",
                    "description": "Do not use coloured log outputs.",
                    "fa_icon": "fas fa-palette",
                    "hidden": true
                },
                "hook_url": {
                    "type": "string",
                    "description": "Incoming hook URL for messaging service",
                    "fa_icon": "fas fa-people-group",
                    "help_text": "Incoming hook URL for messaging service. Currently, MS Teams and Slack are supported.",
                    "hidden": true
                },
                "multiqc_config": {
                    "type": "string",
                    "format": "file-path",
                    "description": "Custom config file to supply to MultiQC.",
                    "fa_icon": "fas fa-cog",
                    "hidden": true
                },
                "multiqc_logo": {
                    "type": "string",
                    "description": "Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file",
                    "fa_icon": "fas fa-image",
                    "hidden": true
                },
                "multiqc_methods_description": {
                    "type": "string",
                    "description": "Custom MultiQC yaml file containing HTML including a methods description.",
                    "fa_icon": "fas fa-cog"
                },
                "validate_params": {
                    "type": "boolean",
                    "description": "Boolean whether to validate parameters against the schema at runtime",
                    "default": true,
                    "fa_icon": "fas fa-check-square",
                    "hidden": true
                },
                "validationShowHiddenParams": {
                    "type": "boolean",
                    "fa_icon": "far fa-eye-slash",
                    "description": "Show all params when using `--help`",
                    "hidden": true,
                    "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters."
                },
                "validationFailUnrecognisedParams": {
                    "type": "boolean",
                    "fa_icon": "far fa-check-circle",
                    "description": "Validation of parameters fails when an unrecognised parameter is found.",
                    "hidden": true,
                    "help_text": "By default, when an unrecognised parameter is found, it returns a warinig."
                },
                "validationLenientMode": {
                    "type": "boolean",
                    "fa_icon": "far fa-check-circle",
                    "description": "Validation of parameters in lenient more.",
                    "hidden": true,
                    "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)."
                },
                "schema_ignore_params": {
                    "type": "string",
                    "default": "modules,igenomes_base",
                    "hidden": true,
                    "description": "A comma separated string of inputs the schema validation should ignore"
                }
            }
        }
    },
    "allOf": [
        {
            "$ref": "#/definitions/input_output_options"
        },
        {
            "$ref": "#/definitions/qc_and_trim"
        },
        {
            "$ref": "#/definitions/contamination_screening"
        },
        {
            "$ref": "#/definitions/assembly_parameters"
        },
        {
            "$ref": "#/definitions/assembly_polishing"
        },
        {
            "$ref": "#/definitions/annotation"
        },
        {
            "$ref": "#/definitions/skipping_options"
        },
        {
            "$ref": "#/definitions/institutional_config_options"
        },
        {
            "$ref": "#/definitions/max_job_request_options"
        },
        {
            "$ref": "#/definitions/generic_options"
        }
    ]
}
