add --vcf to default vep_args - #182
Merged
Merged
Conversation
--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>
Contributor
There was a problem hiding this comment.
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
--vcfto the defaultparams.vep_argsinnextflow.config. - Keep defaults synchronized across
nextflow_schema.jsonanddocs/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.
| 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 |
|
ljwharbers
approved these changes
Aug 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds
--vcfto the defaultvep_args.Why
--format vcfdescribes VEP's input format;--vcfselects its output format. These are twodifferent 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 inmodules/nf-core/ensemblvep/vep/main.nf#L37falls 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.gzwhile actually being a tabfile, and
tabix(line 42, gated on the samefile_extension) is run against it.This has a concrete downstream cost. The tab format re-encodes coordinates into VEP's own
Uploaded_variationidentifier, and that encoding changed between Ensembl 114 and 115:Uploaded_variationchr1 1904021 TG>Tchr1_1904023_G/-(normalised, trimmed,-for empty side)chr1 1904021 TG>Tchr1_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
NAgene/impact and were then removed by a gene-list filter.With
--vcf, VEP echoes the originalCHROM/POS/REF/ALTline verbatim and puts annotation inINFO/CSQ. There is no identifier to reconstruct, so nothing to normalise or mis-normalise, and theproblem class disappears rather than being patched around.
Impact
SOMATIC_VEP,GERMLINE_VEP,SV_VEP) are leaves of the DAG — nothing in the pipeline consumes their output.file_extensionwas already resolving to'vcf'viathe fallback, so
*_VEP.vcf.gz/.tbi/_summary.htmlare all named exactly as before. Nosnapshot updates required (VEP output content is excluded by
tests/.nftignore, and the recordedensemblvepversion is unaffected).tabix, which the module already runs, now operates on a genuine VCF.--vep_argson the command line need to include--vcfthemselves, as with anyother default in this pipeline.
The default is kept byte-identical across
nextflow.config,nextflow_schema.jsonanddocs/usage.md.PR checklist
docsis updated (docs/usage.md).docs/output.mdneeds no change —filenames and layout are unchanged.
CHANGELOG.mdis updated.nextflow-lintcould not be run locally (nonextflowbinary onthe cluster this was authored on); prettier / trailing-whitespace / end-of-file hooks pass.
nf-testnot run locally (no docker/nf-test available here); relying on CI.