Skip to content
openvaxPublic

About

Library for manipulating genomic variants and predicting their effects

Resources

Code of conduct

Contributing

Stars

88 stars

Watchers

9 watching

Forks

Repository files navigation

Tests Coverage Status PyPI PyPI downloads Docs

Varcode

Varcode is a Python library that predicts what genomic variants do to genes, transcripts, and proteins. Load a VCF or MAF file, and for each variant on each overlapping transcript, Varcode reports the predicted consequence (for example a substitution such as p.L159M, a frameshift, or a gene fusion). Where the sequence can be determined, it also gives the mutant protein.

In the OpenVax tools, Varcode reads gene annotations through PyEnsembl. Isovar reconstructs variant sequences from RNA reads, and Topiary and Vaxrank use Varcode's predicted proteins to choose and rank candidate peptides; see how the libraries fit together.

Install

Requires Python 3.11 or later:

pip install varcode
pyensembl install --release 81 --species human

The second command downloads the gene annotation and transcript sequences used in the example below (Ensembl 81, GRCh38). For your own data, choose an annotation that matches your input's genome build; see reference setup.

Varcode installs ORFdata, which supplies the ORFs for noncanonical ORF consequences. The optional varcode[rna] extra adds pysam for phasing variants from RNA-seq reads (pysam does not support Windows).

Quick start

Predict the effect of a single GRCh38 variant on a CFTR transcript:

from varcode import Variant

variant = Variant("7", 117_531_100, "T", "A", genome=81)
transcript = variant.genome.transcript_by_id("ENST00000003084")
effect = variant.effect_on_transcript(transcript)

print(effect.gene.name, effect.short_description)
protein = effect.mutant_protein_sequence
print(protein[158])  # Python offsets start at zero
CFTR p.L159M
M

Annotate every variant in a VCF called against the same genome build, and print the most severe effect for each:

from varcode import load_vcf

variants = load_vcf("variants.vcf", genome=81)
effects = variants.effects()
for variant, effect in effects.top_priority_effect_per_variant().items():
    print(variant.short_description, effect.short_description)

For a VCF containing only the variant above, this prints:

chr7 g.117531100T>A p.L159M

Before relying on the output, read how to read results. In short: each prediction belongs to one transcript; "top priority" means most severe, not most likely; None means unknown, not unchanged; and a predicted protein is not evidence that it is expressed.

Command line

The varcode command annotates variant files without writing Python and saves one row per variant and transcript:

varcode effects --genome GRCh38 --vcf variants.vcf --output-csv effects.csv

varcode genes lists the genes each variant overlaps, and varcode check-samples screens a cohort of VCFs for possible sample mix-ups. varcode --help lists the subcommands. See the command-line guide and sample identity checks.

Documentation

Full documentation: openvax.github.io/varcode.

Development

./develop.sh   # editable install into the active environment
./lint.sh      # Ruff and mypy
./test.sh      # pytest; needs the Ensembl releases listed in CONTRIBUTING.md
mkdocs build --strict

See CONTRIBUTING.md for the development environment and reference data, and the changelog for release history. For bugs or questions, open an issue.

License

Varcode is released under the Apache 2.0 license.

About

Library for manipulating genomic variants and predicting their effects

Resources

Code of conduct

Contributing

Stars

88 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages