Skip to main content

VICC normalization routine for variations

Project description

Variation Normalization

Services and guidelines for normalizing variation terms into VRS (v1.2.0) and VRSATILE (latest) compatible representations.

Public OpenAPI endpoint: https://normalize.cancervariants.org/variation

Installing with pip:

pip install variation-normalizer

About

Variation Normalization works by using four main steps: tokenization, classification, validation, and translation. During tokenization, we split strings on whitespace and parse to determine the type of token. During classification, we specify the order of tokens a classification can have. We then do validation checks such as ensuring references for a nucleotide or amino acid matches the expected value and validating a position exists on the given transcript. During translation, we return a VRS Allele object.

Variation Normalization is limited to the following types of variants represented as HGVS expressions and text representations (ex: BRAF V600E):

  • protein (p.): substitution, deletion, insertion, deletion-insertion
  • coding DNA (c.): substitution, deletion, insertion, deletion-insertion
  • genomic (g.): substitution, deletion, ambiguous deletion, insertion, deletion-insertion, duplication

We are working towards adding more types of variations, coordinates, and representations.

Endpoints

/toVRS

The /toVRS endpoint returns a list of valid VRS Variations.

The /normalize endpoint returns a Variation Descriptor containing the MANE Transcript, if one is found. If a genomic query is not given a gene, normalize will return its GRCh38 representation.

The steps for retrieving MANE Transcript data is as follows:

  1. Map starting annotation layer to genomic
  2. Liftover to preferred GRCh38
    We only support lifting over from GRCh37.
  3. Select preferred compatible annotation
    1. MANE Select
    2. MANE Plus Clinical
    3. Longest Compatible Remaining Transcript
  4. Map back to starting annotation layer

Backend Services

Variation Normalization relies on some local data caches which you will need to set up. It uses pipenv to manage its environment, which you will also need to install.

Once pipenv is installed:

pipenv shell
pipenv lock
pipenv sync

Gene Normalizer

Variation Normalization relies on data from Gene Normalization. You must load all sources and merged concepts.

You must also have Gene Normalization's DynamoDB running for the application to work.

For more information about the gene-normalizer, visit the README.

SeqRepo

Variation Normalization relies on seqrepo, which you must download yourself.

Variation Normalizer uses seqrepo to retrieve sequences at given positions on a transcript.

From the root directory:

pip install seqrepo
sudo mkdir /usr/local/share/seqrepo
sudo chown $USER /usr/local/share/seqrepo
seqrepo pull -i 2021-01-29

UTA

Variation Normalizer also uses uta.

Variation Normalizer uses UTA to retrieve MANE Transcript data.

The following commands will likely need modification appropriate for the installation environment.

  1. Install PostgreSQL

  2. Create user and database.

    $ createuser -U postgres uta_admin
    $ createuser -U postgres anonymous
    $ createdb -U postgres -O uta_admin uta
    
  3. To install locally, from the variation/data directory:

export UTA_VERSION=uta_20210129.pgd.gz
curl -O http://dl.biocommons.org/uta/$UTA_VERSION
gzip -cdq ${UTA_VERSION} | grep -v "^REFRESH MATERIALIZED VIEW" | psql -h localhost -U uta_admin --echo-errors --single-transaction -v ON_ERROR_STOP=1 -d uta -p 5433

To connect to the UTA database, you can use the default url (postgresql://uta_admin@localhost:5433/uta/uta_20210129). If you use the default url, you must either set the password using environment variable UTA_PASSWORD or setting the parameter db_pwd in the UTA class.

If you do not wish to use the default, you must set the environment variable UTA_DB_URL which has the format of driver://user:pass@host/database/schema.

PyLiftover

Variation Normalizer uses PyLiftover to convert GRCh37 coordinates to GRCh38 coordinates.

Data

RefSeq

Variation Normalizer uses RefSeq data found at FTP site.

This data helps with free text variations in order to get all RefSeq accessions that correspond to a given gene.

Ensembl BioMart

Variation Normalizer uses Ensembl BioMart to retrieve variation/data/transcript_mappings.tsv. We currently use Human Genes (GRCh38.p13) for the dataset and the following attributes we use are: Gene stable ID, Gene stable ID version, Transcript stable ID, Transcript stable ID version, Protein stable ID, Protein stable ID version, RefSeq match transcript (MANE Select), Gene name.

This data helps with free text variations in order to get all Ensembl accessions that correspond to a given gene.

image

MANE Data

Variation Normalizer uses MANE data from RefSeq's FTP site.

Starting the Variation Normalization Service Locally

gene-normalizers dynamodb and the uta database must be running.

To start the service, run the following:

uvicorn variation.main:app --reload

Next, view the OpenAPI docs on your local machine: http://127.0.0.1:8000/variation

Init coding style tests

Code style is managed by flake8 and checked prior to commit.

We use pre-commit to run conformance tests.

This ensures:

  • Check code style
  • Check for added large files
  • Detect AWS Credentials
  • Detect Private Key

Before first commit run:

pre-commit install

Testing

From the root directory of the repository:

pytest tests/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

variation-normalizer-0.2.13.tar.gz (115.2 kB view details)

Uploaded Source

Built Distribution

variation_normalizer-0.2.13-py3-none-any.whl (4.2 MB view details)

Uploaded Python 3

File details

Details for the file variation-normalizer-0.2.13.tar.gz.

File metadata

  • Download URL: variation-normalizer-0.2.13.tar.gz
  • Upload date:
  • Size: 115.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for variation-normalizer-0.2.13.tar.gz
Algorithm Hash digest
SHA256 6f2fb76281338eacf361634603039918623b3abd93184e82efabf1c92b531d3a
MD5 dcc0b013e9e603961cf7ef7c00336a06
BLAKE2b-256 e36b2cfe53587182395d6796b4774e06170595aa028227561cf9f4a2212784ea

See more details on using hashes here.

File details

Details for the file variation_normalizer-0.2.13-py3-none-any.whl.

File metadata

  • Download URL: variation_normalizer-0.2.13-py3-none-any.whl
  • Upload date:
  • Size: 4.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for variation_normalizer-0.2.13-py3-none-any.whl
Algorithm Hash digest
SHA256 263e00c4e0c14baa573d3d70d4173c042cf8eac8442169452152af2b8e4d82bd
MD5 32755c594edce55589341dae10a0a78c
BLAKE2b-256 1f999cb3786ad9f2bba9250c36144ca09a8fac11cfdf4704da2bbc1bea463ff5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page