Skip to content

add --vcf to default vep_args - #182

Merged
ljwharbers merged 1 commit into
devfrom
vep_vcf_output
Aug 14, 2026
Merged

add --vcf to default vep_args#182
ljwharbers merged 1 commit into
devfrom
vep_vcf_output

Conversation

@AmberVerhasselt

Copy link
Copy Markdown
Contributor

What

Adds --vcf to the default vep_args.

Why

--format vcf describes VEP's input format; --vcf selects its output format. These are two
different flags, and only the first was being passed.

Without --vcf, VEP writes its default tab-delimited output. The module still names the file
*_VEP.vcf.gz, because the file-extension ternary in
modules/nf-core/ensemblvep/vep/main.nf#L37

def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json") ? 'json' : args.contains("--tab") ? 'tab' : 'vcf'

falls through to its trailing 'vcf' fallback — "--format vcf" does not contain the substring
--vcf (there is a space). So every published VEP file is named .vcf.gz while actually being a tab
file, and tabix (line 42, gated on the same file_extension) is run against it.

This has a concrete downstream cost. The tab format re-encodes coordinates into VEP's own
Uploaded_variation identifier, and that encoding changed between Ensembl 114 and 115:

Ensembl VCF record Uploaded_variation
114 chr1 1904021 TG>T chr1_1904023_G/- (normalised, trimmed, - for empty side)
115 chr1 1904021 TG>T chr1_1904022_TG/T (raw alleles, position +1)

SNV identifiers are identical under both conventions, so only indels break. Any analysis joining
the annotation back to the caller VCF on that identifier silently loses every insertion and deletion —
in a cohort here that was ~150 indels (98 HIGH / 9 MODERATE / 43 LOW impact), dropped with no error
because the unmatched rows just carried NA gene/impact and were then removed by a gene-list filter.

With --vcf, VEP echoes the original CHROM/POS/REF/ALT line verbatim and puts annotation in
INFO/CSQ. There is no identifier to reconstruct, so nothing to normalise or mis-normalise, and the
problem class disappears rather than being patched around.

Impact

  • Affects published-file content only. All three VEP calls (SOMATIC_VEP, GERMLINE_VEP,
    SV_VEP) are leaves of the DAG — nothing in the pipeline consumes their output.
  • Output filenames and paths are unchanged: file_extension was already resolving to 'vcf' via
    the fallback, so *_VEP.vcf.gz / .tbi / _summary.html are all named exactly as before. No
    snapshot updates required (VEP output content is excluded by tests/.nftignore, and the recorded
    ensemblvep version is unaffected).
  • tabix, which the module already runs, now operates on a genuine VCF.
  • Users overriding --vep_args on the command line need to include --vcf themselves, as with any
    other default in this pipeline.

The default is kept byte-identical across nextflow.config, nextflow_schema.json and
docs/usage.md.

PR checklist

  • This comment contains a description of changes (with reason).
  • Documentation in docs is updated (docs/usage.md). docs/output.md needs no change —
    filenames and layout are unchanged.
  • CHANGELOG.md is updated.
  • Make sure your code lints — nextflow-lint could not be run locally (no nextflow binary on
    the cluster this was authored on); prettier / trailing-whitespace / end-of-file hooks pass.
  • nf-test not run locally (no docker/nf-test available here); relying on CI.

--format vcf describes VEP's input; --vcf selects its output. Without
--vcf, VEP writes its default tab-delimited format into a file the
module names *_VEP.vcf.gz, because "--format vcf" does not contain the
substring "--vcf" and the file_extension ternary in
modules/nf-core/ensemblvep/vep/main.nf falls through to its 'vcf'
fallback.

Kept in sync across nextflow.config, nextflow_schema.json and
docs/usage.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 14, 2026 09:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the pipeline’s default Ensembl VEP arguments so VEP emits VCF output (via --vcf) rather than its default tab-delimited output, aligning produced file contents with existing .vcf.gz naming and downstream indexing behavior.

Changes:

  • Add --vcf to the default params.vep_args in nextflow.config.
  • Keep defaults synchronized across nextflow_schema.json and docs/usage.md.
  • Document the fix in CHANGELOG.md.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
nextflow.config Updates the pipeline default VEP args to include --vcf.
nextflow_schema.json Updates the schema default for vep_args to match the config.
docs/usage.md Updates usage docs to reflect the new default --vep_args.
CHANGELOG.md Adds a changelog entry for the VEP output-format fix.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread CHANGELOG.md
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## v1.2.0dev
@github-actions

Copy link
Copy Markdown

nf-core pipelines lint overall result: Passed ✅ ⚠️

Posted for pipeline commit bfb154e

+| ✅ 202 tests passed       |+
#| ❔  22 tests were ignored |#
!| ❗  38 tests had warnings |!
Details

❗ Test warnings:

  • nextflow_config - Config manifest.version should end in dev: 1.1.0
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in README.md: Include a figure that guides the user through the major workflow steps. Many nf-core
  • pipeline_todos - TODO string in nextflow.config: Specify your pipeline's command line flags
  • pipeline_todos - TODO string in nextflow.config: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0
  • pipeline_todos - TODO string in meta.yml: #Add a description of the module and list keywords
  • pipeline_todos - TODO string in nextflow.config: Specify any additional parameters here
  • pipeline_todos - TODO string in methods_description_template.yml: #Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline
  • pipeline_todos - TODO string in CONTRIBUTING.md: Add any pipeline specific contribution guidelines here, such as coding styles, procedures, checklists etc.
  • pipeline_todos - TODO string in base.config: Check the defaults for all processes
  • pipeline_todos - TODO string in base.config: Customise requirements for specific processes.
  • schema_description - Ungrouped param in schema: skip_modkit
  • schema_description - No description provided in schema for parameter: generate_gvcf
  • schema_description - No description provided in schema for parameter: autocorrelation
  • schema_description - No description provided in schema for parameter: vep_custom
  • schema_description - No description provided in schema for parameter: vep_custom_tbi
  • schema_description - No description provided in schema for parameter: severus_minsupport
  • schema_description - No description provided in schema for parameter: wakhan_chroms
  • local_component_structure - phasing_haplotyping.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - small_variant_consensus.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - prepare_reference_files.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - prepare_annotation.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - deepsomatic.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure

❔ Tests ignored:

  • files_exist - File is ignored: CODE_OF_CONDUCT.md
  • files_exist - File is ignored: assets/nf-core-lrsomatic_logo_light.png
  • files_exist - File is ignored: docs/images/nf-core-lrsomatic_logo_light.png
  • files_exist - File is ignored: docs/images/nf-core-lrsomatic_logo_dark.png
  • files_exist - File is ignored: .github/ISSUE_TEMPLATE/config.yml
  • files_exist - File is ignored: .github/workflows/awstest.yml
  • files_exist - File is ignored: .github/workflows/awsfulltest.yml
  • files_exist - File is ignored: .github/CONTRIBUTING.md
  • nextflow_config - Config variable ignored: manifest.name
  • nextflow_config - Config variable ignored: manifest.homePage
  • files_unchanged - File ignored due to lint config: CODE_OF_CONDUCT.md
  • files_unchanged - File ignored due to lint config: .github/ISSUE_TEMPLATE/bug_report.yml
  • files_unchanged - File ignored due to lint config: .github/PULL_REQUEST_TEMPLATE.md
  • files_unchanged - File ignored due to lint config: .github/workflows/branch.yml
  • files_unchanged - File ignored due to lint config: .github/workflows/linting_comment.yml
  • files_unchanged - File ignored due to lint config: .github/workflows/linting.yml
  • files_unchanged - File ignored due to lint config: assets/email_template.txt
  • files_unchanged - File ignored due to lint config: assets/nf-core-lrsomatic_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-lrsomatic_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-lrsomatic_logo_dark.png
  • files_unchanged - File ignored due to lint config: docs/README.md
  • actions_awstest - 'awstest.yml' workflow not found: /home/runner/work/lrsomatic/lrsomatic/.github/workflows/awstest.yml

✅ Tests passed:

Run details

  • nf-core/tools version 4.0.2
  • Run at 2026-08-14 09:22:45

@ljwharbers
ljwharbers merged commit d8871ee into dev Aug 14, 2026
7 of 8 checks passed
@ljwharbers
ljwharbers deleted the vep_vcf_output branch August 14, 2026 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants