Skip to content

Input & output files

Files used as input to SnpEff must comply with standard formats. Here we describe supported input data formats.

VCF files

As we mentioned before, Variant Call Format (VCF) is the recommended format for input files. This is the format used by the "1000 Genomes Project", and is currently considered the de facto standard for genomic variants. It is also the default format used in SnpEff.

In a nutshell, VCF format is tab-separated text file having the following columns:

  1. Chromosome name
  2. Position
  3. Variant's ID
  4. Reference genome
  5. Alternative (i.e. variant)
  6. Quality score
  7. Filter (whether or not the variant passed quality filters)
  8. INFO : Generic information about this variant. SnpEff adds annotation information in this column.

Here is an example of a few lines in a VCF file:

#CHROM POS     ID        REF    ALT     QUAL FILTER INFO                    
20     14370   rs6054257 G      A       29   PASS   NS=3;DP=14;AF=0.5;DB;H2
20     17330   .         T      A       3    q10    NS=3;DP=11;AF=0.017   
Note that the first line is header information. Header lines start with '#'

VCF output

As we mentioned in the previous chapter, VCF is SnpEff's default input and output format. It is highly recommended to use VCF as input and output format, since it is a standard format that can be also used by other tools and software packages. Thus VCF makes it much easier to integrate genomic data processing pipelines.

SnpEff adds annotation information to the INFO field of a VCF file. The INFO field is the eight column of a VCF file, see previous section for a quick example or take a look at the VCF specification for details.

Here is an example of a file before and after being annotated using SnpEff: VCF file before annotations

#CHROM POS     ID        REF    ALT     QUAL FILTER INFO                    
1   889455  .   G   A   100.0   PASS    AF=0.0005
1   897062  .   C   T   100.0   PASS    AF=0.0005

VCF file after being annotated using SnpEff

#CHROM POS     ID        REF    ALT     QUAL FILTER INFO                    
1   889455  .   G   A   100.0   PASS    AF=0.0005;EFF=STOP_GAINED(HIGH|NONSENSE|Cag/Tag|Q236*|749|NOC2L||CODING|NM_015658|)
1   897062  .   C   T   100.0   PASS    AF=0.0005;EFF=STOP_GAINED(HIGH|NONSENSE|Cag/Tag|Q141*|642|KLHL17||CODING|NM_198317|)
A you can see, SnpEff added an 'EFF' tag to the INFO field (eight column).

VCF Header lines

SnpEff updates the header of the VCF file to reflect additional fields. This is required by the VCF specification. SnpEff also adds the command line options used to annotate the file as well as SnpEff's version, so you can keep track of what exactly was done.

Here is an example of some header lines added to an annotated file:

##SnpEffVersion="SnpEff 3.1m (build 2013-02-08)"
##SnpEffCmd="SnpEff  hg19 demo.1kg.vcf "
##INFO=<ID=EFF,Number=.,Type=String,Description="Predicted effects for this variant.Format: 'Effect ( Effect_Impact | Functional_Class | Codon_Change | Amino_Acid_change| Amino_Acid_length | Gene_Name | Gene_BioType | Coding | Transcript | Exon [ | ERRORS | WARNINGS ] )' \">

ANN field (VCF output files)

Functional annotations information is added to the INFO field using an ANN tag.

NOTE: field. SnpEff implements the VCF annotation standard 'ANN' field.

This format specification has been created by the developers of the most widely used variant annotation programs (SnpEff, ANNOVAR and ENSEMBL's VEP) and attempts to:

  • provide a common framework for variant annotation,
  • make pipeline development easier,
  • facilitate benchmarking, and
  • improve some known problems in variant annotations.

Obviously this 'ANN' field broke compatibility with the old 'EFF' field from old SnpEff versions. In order to use the old 'EFF' field, you can use the -formatEff command line option.

The annotation 'ANN' field looks like this (the full annotation standard specification can be found here).

ANN=T|missense_variant|MODERATE|CCT8L2|ENSG00000198445|transcript|ENST00000359963|protein_coding|1/1|c.1406G>A|p.Gly469Glu|1666/2034|1406/1674|469/557||,T|downstream_gene_variant|MODIFIER|FABP5P11|ENSG00000240122|transcript|ENST00000430910|processed_pseudogene||n.*397G>A|||||3944|

A variant can have (and usually has) more than one annotation. Multiple annotations are separated by commas. In the previous example there were two annotations corresponding to different genes (CCT8L2 and FABP5P11).

Each annotation consists of multiple sub-fields separated by the pipe character "|" (fields 15 and 16 are empty in this example):

Annotation      : T|missense_variant|MODERATE|CCT8L2|ENSG00000198445|transcript|ENST00000359963|protein_coding|1/1|c.1406G>A|p.Gly469Glu|1666/2034|1406/1674|469/557|  |
SubField number : 1|       2        |    3   |  4   |       5       |    6     |      7        |      8       | 9 |    10   |    11     |   12    |   13    |   14  |15| 16

Here is a description of the meaning of each sub-field:

  1. Allele (or ALT): In case of multiple ALT fields, this helps to identify which ALT we are referring to. E.g.:

    # CHROM  POS     ID  REF  ALT    QUAL  FILTER  INFO
    chr1    123456  .   C    A      .     .       ANN=A|...
    chr1    234567  .   A    G,T    .     .       ANN=G|... , T|...
    

    In case of cancer sample, when comparing somatic versus germline using a non-standard reference (e.g. one of the ALTs is the reference) the format should be ALT-REFERENCE. E.g.:

    #CHROM  POS     ID  REF  ALT  QUAL  FILTER  INFO
    chr1    123456  .   A    C,G  .     .       ANN=G-C|...
    

    Compound variants: two or more variants affecting the annotations (e.g. two consecutive SNPs conforming a MNP, two consecutive frame_shift variants that "recover" the frame). In this case, the Allele field should include a reference to the other variant/s included in the annotation:

    #CHROM  POS     ID  REF  ALT  QUAL  FILTER  INFO
    chr1    123456  .   A    T    .     .       ANN=T|...
    chr1    123457  .   C    G    .     .       ANN=C-chr1:123456_A>T|...
    
  2. Annotation (a.k.a. effect): Annotated using Sequence Ontology terms. Multiple effects can be concatenated using '&'.

    #CHROM  POS     ID  REF  ALT  QUAL  FILTER  INFO
    chr1    123456  .   C    A    .     .      ANN=A|intron_variant&nc_transcript_variant|...
    
  3. Putative_impact: A simple estimation of putative impact / deleteriousness : {HIGH, MODERATE, LOW, MODIFIER}

  4. Gene Name: Common gene name (HGNC). Optional: use closest gene when the variant is "intergenic".
  5. Gene ID: Gene ID
  6. Feature type: Which type of feature is in the next field (e.g. transcript, motif, miRNA, etc.). It is preferred to use Sequence Ontology (SO) terms, but 'custom' (user defined) are allowed.

    ANN=A|stop_gained|HIGH|||transcript|...
    

    Tissue specific features may include cell type / tissue information separated by semicolon e.g.:

    ANN=A|histone_binding_site|LOW|||H3K4me3:HeLa-S3|
    
  7. Feature ID: Depending on the annotation, this may be: Transcript ID (preferably using version number), Motif ID, miRNA, ChipSeq peak, Histone mark, etc. Note: Some features may not have ID (e.g. histone marks from custom Chip-Seq experiments may not have a unique ID).

  8. Transcript biotype: The bare minimum is at least a description on whether the transcript is {"Coding", "Noncoding"}. Whenever possible, use ENSEMBL biotypes.
  9. Rank / total: Exon or Intron rank / total number of exons or introns.
  10. HGVS.c: Variant using HGVS notation (DNA level)
  11. HGVS.p: If variant is coding, this field describes the variant using HGVS notation (Protein level). Since transcript ID is already mentioned in 'feature ID', it may be omitted here.
  12. cDNA_position / cDNA_len: Position in cDNA and trancript's cDNA length (one based).
  13. CDS_position / CDS_len: Position and number of coding bases (one based includes START and STOP codons).
  14. Protein_position / Protein_len: Position and number of AA (one based, including START, but not STOP).
  15. Distance to feature: All items in this field are options, so the field could be empty.
    • Up/Downstream: Distance to first / last codon
    • Intergenic: Distance to closest gene
    • Distance to closest Intron boundary in exon (+/- up/downstream). If same, use positive number.
    • Distance to closest exon boundary in Intron (+/- up/downstream)
    • Distance to first base in MOTIF
    • Distance to first base in miRNA
    • Distance to exon-intron boundary in splice_site or splice _region
    • ChipSeq peak: Distance to summit (or peak center)
    • Histone mark / Histone state: Distance to summit (or peak center)
  16. Errors, Warnings or Information messages: Add errors, warnings or informative message that can affect annotation accuracy. See details here

Consistency between HGVS and functional annotations:

In some cases there might be inconsistent reporting between 'annotation' and HGVS. This is due to the fact that VCF recommends aligning to the leftmost coordinate, whereas HGSV recommends aligning to the "most 3-prime coordinate". For instance, an InDel on the edge of an exon, which has an 'intronic' annotation according to VCF alignment recommendation, can lead to a 'stop_gained' when aligned using HGVS's recommendation (using the most 3-prime possible alignment). So the 'annotation' sub-field will report 'intron' whereas HGVS sub-field will report a 'stop_gained'. This is obviously inconsistent and must be avoided. In order to report annotations that are consistent with HGVS notation, variants must be re-aligned according to each transcript's strand (i.e. align the variant according to the transcript's most 3-prime coordinate). Then annotations are calculated, thus the reported annotations will be consistent with HGVS notation. Annotation software should have a command line option to override this behaviour (e.g. -no_shift_hgvs)

EFF field (VCF output files)

Effects information is added to the INFO field using an 'EFF' tag.

Warning

This section refers the obsolete annotation format using the 'EFF' tag which can be activated using the -formatEff command line option. As of version 4.1 SnpEff uses the 'ANN' field by default.

Notes:

  • As of version 4.0, the default output uses Sequence Ontology for 'Effect' names. You can output "old" style effect names by using the -classic command line option.
  • When multiple effects are available, they are sorted first by "Effect_Impact", then by "Effect" and finally by "marker's genomic coordinates" (e.g. affected transcript's genomic coordinates).
  • Staring from version 4.0, SnpEff outputs HGVS notation in the 'AA' sub-field by default.

There can be multiple effects separated by comma. The format for each effect is:

EFF= Effect ( Effect_Impact | Functional_Class | Codon_Change | Amino_Acid_Change| Amino_Acid_Length | Gene_Name | Transcript_BioType | Gene_Coding | Transcript_ID | Exon_Rank  | Genotype_Number [ | ERRORS | WARNINGS ] )

EFF Sub-field Meaning
Effect Effect of this variant. See details here.
Effect impact Effect impact {High, Moderate, Low, Modifier}. See details here.
Functional Class Functional class {NONE, SILENT, MISSENSE, NONSENSE}.
Codon_Change / Distance Codon change: old_codon/new_codon OR distance to transcript (in case of upstream / downstream)
Amino_Acid_Change Amino acid change: old_AA AA_position/new_AA (e.g. 'E30K')
Amino_Acid_Length Length of protein in amino acids (actually, transcription length divided by 3).
Gene_Name Gene name
Transcript_BioType Transcript bioType, if available.
Gene_Coding [CODING | NON_CODING]. This field is 'CODING' if any transcript of the gene is marked as protein coding.
Transcript_ID Transcript ID (usually ENSEMBL IDs)
Exon/Intron Rank Exon rank or Intron rank (e.g. '1' for the first exon, '2' for the second exon, etc.)
Genotype_Number Genotype number corresponding to this effect (e.g. '2' if the effect corresponds to the second ALT)
Warnings / Errors Any warnings or errors (not shown if empty).

Multiple annotations per VCF line

Usually there is more than one annotation reported in each ANN (or EFF) field.

There are several reasons for this:

  • A variant can affect multiple genes. E.g a variant can be DOWNSTREAM from one gene and UPSTREAM from another gene. E.g.:
  • In complex organisms, genes usually have multiple transcripts. So SnpEff reports the effect of a variant on each transcript. E.g.:

    #CHROM  POS       ID   REF  ALT    QUAL  FILTER  INFO
    1       889455    .    G    A      .     .       .
    

    In this case SnpEff will report the effect of each variant on each gene and each transcript (output edited for readability):

    #CHROM  POS     ID   REF  ALT  QUAL FILTER   INFO
    1       889455  .    G    A    .    .        ANN=A|stop_gained|HIGH|NOC2L|ENSG00000188976|transcript|ENST00000327044|protein_coding|7/19|c.706C>T|p.Gln236*|756/2790|706/2250|236/749||
                                                    ,A|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000487214|processed_transcript||n.*865C>T|||||351|
                                                    ,A|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000469563|retained_intron||n.*878C>T|||||4171|
                                                    ,A|non_coding_exon_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000477976|retained_intron|5/17|n.2153C>T||||||;LOF=(NOC2L|ENSG00000188976|6|0.17);NMD=(NOC2L|ENSG00000188976|6|0.17)
    
  • A VCF line can have more then one variant. E.g. If reference genome is 'G', but the sample has either 'A' or 'T' (non-biallelic variant), then this will be reported as one VCF line, having multiple alternative variants (notice that there are two ALTs):

      #CHROM  POS       ID   REF  ALT      QUAL  FILTER  INFO
      1       889455    .    G    A,T      .     .       .
    

    In this case SnpEff will report the effect of each ALT on each gene and each transcript. Notice that ENST00000327044 has a stop_gained variant (ALT = 'A') and a missense_variant (ALT = 'T')

      #CHROM  POS      ID    REF  ALT    QUAL FILTER    INFO
      1       889455   .     G    A,T    .    .         ANN=A|stop_gained|HIGH|NOC2L|ENSG00000188976|transcript|ENST00000327044|protein_coding|7/19|c.706C>T|p.Gln236*|756/2790|706/2250|236/749||
                                                           ,T|missense_variant|MODERATE|NOC2L|ENSG00000188976|transcript|ENST00000327044|protein_coding|7/19|c.706C>A|p.Gln236Lys|756/2790|706/2250|236/749||
                                                           ,A|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000487214|processed_transcript||n.*865C>T|||||351|
                                                           ,T|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000487214|processed_transcript||n.*865C>A|||||351|
                                                           ,A|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000469563|retained_intron||n.*878C>T|||||4171|
                                                           ,T|downstream_gene_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000469563|retained_intron||n.*878C>A|||||4171|
                                                           ,A|non_coding_exon_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000477976|retained_intron|5/17|n.2153C>T||||||
                                                           ,T|non_coding_exon_variant|MODIFIER|NOC2L|ENSG00000188976|transcript|ENST00000477976|retained_intron|5/17|n.2153C>A||||||;LOF=(NOC2L|ENSG00000188976|6|0.17);NMD=(NOC2L|ENSG00000188976|6|0.
    

Effect sort order. When multiple effects are reported, SnpEff sorts the effects the following way:

  • Putative impact: Effects having higher putative impact are first.
  • Effect type: Effects assumed to be more deleterious effects first.
  • Canonical transcript before non-canonical.
  • Marker genomic coordinates (e.g. genes starting before first).

Variant annotaiton details

Detailed description of the variant's functional annotation predicted by SnpEff in the Effect and Effect_Impact sub-fields.

Notes:

  • Effect (Sequence Ontology) Sequence ontology (SO) allows to standardize terminology used for assessing sequence changes and impact. This allows for a common language across all variant annotation programs and makes it easier to communicate using a uniform terminology. Starting from version 4.0 VCF output uses SO terms by default.
  • Effect (Classic) This are the "classic" effect names usd by SnpEff, these can be accessed using the -classic command line option.
  • Effect impact Effects are categorized by 'impact': {High, Moderate, Low, Modifier}. This are pre-defined categories to help users find more significant variants.

    Warning

    Impact categories must be used with care, they were created only to help and simplify the filtering process. Obviously, there is no way to predict whether a "high impact" or a "low impact" variant is the one producing a phenotype of interest.

Here is a list of effects and some brief explanations:

Effect
Seq. Ontology
Effect
Classic
Note & Example Impact
coding_sequence_variant CDS The variant hits a CDS. MODIFIER
chromosome CHROMOSOME_LARGE_DELETION A large parte (over 1%) of the chromosome was deleted. HIGH
duplication CHROMOSOME_LARGE_DUPLICATION Duplication of a large chromosome segment (over 1% or 1,000,000 bases) HIGH
inversion CHROMOSOME_LARGE_INVERSION Inversion of a large chromosome segment (over 1% or 1,000,000 bases). HIGH
coding_sequence_variant CODON_CHANGE One or many codons are changed
e.g.: An MNP of size multiple of 3
LOW
inframe_insertion CODON_INSERTION One or many codons are inserted
e.g.: An insert multiple of three in a codon boundary
MODERATE
disruptive_inframe_insertion CODON_CHANGE_PLUS CODON_INSERTION One codon is changed and one or many codons are inserted
e.g.: An insert of size multiple of three, not at codon boundary
MODERATE
inframe_deletion CODON_DELETION One or many codons are deleted
e.g.: A deletion multiple of three at codon boundary
MODERATE
disruptive_inframe_deletion CODON_CHANGE_PLUS CODON_DELETION One codon is changed and one or more codons are deleted
e.g.: A deletion of size multiple of three, not at codon boundary
MODERATE
downstream_gene_variant DOWNSTREAM Downstream of a gene (default length: 5K bases) MODIFIER
exon_variant EXON The variant hits an exon (from a non-coding transcript) or a retained intron. MODIFIER
exon_loss_variant EXON_DELETED A deletion removes the whole exon. HIGH
exon_loss_variant EXON_DELETED_PARTIAL Deletion affecting part of an exon. HIGH
duplication EXON_DUPLICATION Duplication of an exon. HIGH
duplication EXON_DUPLICATION_PARTIAL Duplication affecting part of an exon. HIGH
inversion EXON_INVERSION Inversion of an exon. HIGH
inversion EXON_INVERSION_PARTIAL Inversion affecting part of an exon. HIGH
frameshift_variant FRAME_SHIFT Insertion or deletion causes a frame shift
e.g.: An indel size is not multple of 3
HIGH
gene_variant GENE The variant hits a gene. MODIFIER
feature_ablation GENE_DELETED Deletion of a gene. HIGH
duplication GENE_DUPLICATION Duplication of a gene. MODIFIER
gene_fusion GENE_FUSION Fusion of two genes. HIGH
gene_fusion GENE_FUSION_HALF Fusion of one gene and an intergenic region. HIGH
bidirectional_gene_fusion GENE_FUSION_REVERSE Fusion of two genes in opposite directions. HIGH
rearranged_at_DNA_level GENE_REARRANGEMENT Rearrangement affecting one or more genes. HIGH
intergenic_region INTERGENIC The variant is in an intergenic region MODIFIER
conserved_intergenic_variant INTERGENIC_CONSERVED The variant is in a highly conserved intergenic region MODIFIER
intragenic_variant INTRAGENIC The variant hits a gene, but no transcripts within the gene MODIFIER
intron_variant INTRON Variant hits and intron. Technically, hits no exon in the transcript. MODIFIER
conserved_intron_variant INTRON_CONSERVED The variant is in a highly conserved intronic region MODIFIER
miRNA MICRO_RNA Variant affects an miRNA MODIFIER
missense_variant NON_SYNONYMOUS_CODING Variant causes a codon that produces a different amino acid
e.g.: Tgg/Cgg, W/R
MODERATE
initiator_codon_variant NON_SYNONYMOUS_START Variant causes start codon to be mutated into another start codon (the new codon produces a different AA).
e.g.: Atg/Ctg, M/L (ATG and CTG can be START codons)
LOW
stop_retained_variant NON_SYNONYMOUS_STOP Variant causes stop codon to be mutated into another stop codon (the new codon produces a different AA).
e.g.: Atg/Ctg, M/L (ATG and CTG can be START codons)
LOW
protein_protein_contact PROTEIN_PROTEIN_INTERACTION_LOCUS Protein-Protein interaction loci. HIGH
structural_interaction_variant PROTEIN_STRUCTURAL_INTERACTION_LOCUS Within protein interacion loci (e.g. two AA that are in contact within the same protein, prossibly helping structural conformation). HIGH
rare_amino_acid_variant RARE_AMINO_ACID The variant hits a rare amino acid thus is likely to produce protein loss of function HIGH
splice_acceptor_variant SPLICE_SITE_ACCEPTOR The variant hits a splice acceptor site (defined as two bases before exon start, except for the first exon). HIGH
splice_donor_variant SPLICE_SITE_DONOR The variant hits a Splice donor site (defined as two bases after coding exon end, except for the last exon). HIGH
splice_region_variant SPLICE_SITE_REGION A sequence variant in which a change has occurred within the region of the splice site, either within 1-3 bases of the exon or 3-8 bases of the intron. LOW
splice_region_variant SPLICE_SITE_BRANCH A varaint affective putative (Lariat) branch point, located in the intron. LOW
splice_region_variant SPLICE_SITE_BRANCH_U12 A varaint affective putative (Lariat) branch point from U12 splicing machinery, located in the intron. MODERATE
stop_lost STOP_LOST Variant causes stop codon to be mutated into a non-stop codon
e.g.: Tga/Cga, */R
HIGH
5_prime_UTR_premature_
start_codon_gain_variant
START_GAINED A variant in 5'UTR region produces a three base sequence that can be a START codon. LOW
start_lost START_LOST Variant causes start codon to be mutated into a non-start codon.
e.g.: aTg/aGg, M/R
HIGH
stop_gained STOP_GAINED Variant causes a STOP codon
e.g.: Cag/Tag, Q/*
HIGH
synonymous_variant SYNONYMOUS_CODING Variant causes a codon that produces the same amino acid
e.g.: Ttg/Ctg, L/L
LOW
start_retained SYNONYMOUS_START Variant causes start codon to be mutated into another start codon.
e.g.: Ttg/Ctg, L/L (TTG and CTG can be START codons)
LOW
stop_retained_variant SYNONYMOUS_STOP Variant causes stop codon to be mutated into another stop codon.
e.g.: taA/taG, */*
LOW
transcript_variant TRANSCRIPT The variant hits a transcript. MODIFIER
feature_ablation TRANSCRIPT_DELETED Deletion of a transcript. HIGH
regulatory_region_variant REGULATION The variant hits a known regulatory feature (non-coding). MODIFIER
upstream_gene_variant UPSTREAM Upstream of a gene (default length: 5K bases) MODIFIER
3_prime_UTR_variant UTR_3_PRIME Variant hits 3'UTR region MODIFIER
3_prime_UTR_truncation + exon_loss UTR_3_DELETED The variant deletes an exon which is in the 3'UTR of the transcript MODERATE
5_prime_UTR_variant UTR_5_PRIME Variant hits 5'UTR region MODIFIER
5_prime_UTR_truncation + exon_loss_variant UTR_5_DELETED The variant deletes an exon which is in the 5'UTR of the transcript MODERATE
sequence_feature + exon_loss_variant NEXT_PROT A 'NextProt' based annotation. Details are provided in the 'feature type' sub-field (ANN), or in the effect details (EFF). MODERATE

Details about Rare amino acid annotaitons

These are amino acids that occurs very rarely in an organism. For instance, humans are supposed to use 20 amino acids, but there is also one rare AA. Selenocysteine, single letter code 'U', appears roughly 100 times in the whole genome. The amino acid is so rare that usually it does not appear in codon translation tables. It is encoded as UGA, which usually means a STOP codon. Secondary RNA structures are assumed to enable this special translation.

A variant in one of these sites is likely to cause a loss of function in the protein. E.g. in case of a Selenocysteine, a loss of a selenium molecule is likely to cause loss of function. Put it simply, the assumption is that there is a great deal of trouble to get that non-standard amino acid there, so it must be important. RARE_AMINO_ACID mark is used to show that special attention should be paid in these cases.

Warning

When the variant hits a RARE_AMINO_ACID mark, it is likely that the 'old_AA/new_AA' field will be incorrect. This may happen because the amino acid is not predictable using a codon table.

Details about Protein interaction annotaitons

Protein interactions are calculated from PDB or AlphaFold. There are two main types of interactions:

  • protein_protein_contact: These are "protein-protein" interaction loci. They are calculated from PDB's co-crystalized structures by inferring pairs of amino acids in different proteins that have atoms closer than 3 Angstrom from each other.
  • structural_interaction_variant: These are "within protein" interaction loci, which are likely to be supporting the protein structure. They are calculated from single protein PDB entries, by selecting amino acids that are: a) atom within 3 Angstrom of each other; and b) are far away in the AA sequence (over 20 AA distance). The assumption is that, since they are very close in distance, they must be "interacting" and thus important for protein structure.

Impact prediction

SnpEff reports putative variant impact in order to make it easier quickly to categorize and prioritize variants.

Warning

Impact categories must be used with care, they were created only to help and simplify the filtering process. Obviously, there is no way to predict whether a HIGH impact or a LOW impact variant is the one producing a phenotype of interest.

Impact Meaning Example
HIGH The variant is assumed to have high (disruptive) impact in the protein, probably causing protein truncation, loss of function or triggering nonsense mediated decay. stop_gained, frameshift_variant
MODERATE A non-disruptive variant that might change protein effectiveness. missense_variant, inframe_deletion
LOW Assumed to be mostly harmless or unlikely to change protein behavior. synonymous_variant
MODIFIER Usually non-coding variants or variants affecting non-coding genes, where predictions are difficult or there is no evidence of impact. exon_variant, downstream_gene_variant

Functional class

When a variant is a single nucleotide (SNV) in a protein coding transcript, SnpEff will inferr the "Functional class".

Functional class can be, which is inferred as:

Functional Class Meaning
SILENT The condon remains the same after the variant change
MISSENSE The codon changes after the variant change
NONSENSE The codon changed into a STOP codon

Loss of function (LOF) and nonsense-mediated decay (NMD) predictions

Loss of function ('LOF') and nonsense-mediated decay ('NMD') predictions. In older versions, this prediction was activated using command line option -lof, but as of version 4.0, it is activated by default. Some details on how these variants work, can be found in these slides.

Info

Starting from version 4.0, this option is activated by default.

Analyze if a set of effects are can create a "Loss Of Function" and "Nonsense mediated decays" effects.

Needless to say, this is a prediction based on analysis of groups of "putative effects". Proper wet-lab validation is required to infer "real" LOF.

References: I used the LOF definition used in the following paper A Systematic Survey of Loss-of-Function Variants in Human Protein-Coding Genes.

Info

From the paper:

We adopted a definition for LoF variants expected to correlate with complete loss of function of the affected transcripts: stop codon-introducing (nonsense) or splice site-disrupting single-nucleotide variants (SNVs), insertion/deletion (indel) variants predicted to disrupt a transcript's reading frame, or larger deletions removing either the first exon or more than 50% of the protein-coding sequence of the affected transcript.

Both nonsense SNVs and frameshift indels are enriched toward the 3' end of the affected gene, consistent with a greater tolerance to truncation close to the end of the coding sequence; putative LoF variants identified in the last 5% of the coding region were thus systematically removed from our high-confidence set.

Other parameters used for LOF/NMD calculations:

  • Number of bases before last exon-exon junction that nonsense mediated decay is supposed to occur: 50
  • It is assumed that even with a protein coding change at the last 5% of the protein, the protein could still be functional.
  • It is assumed that even with a protein coding change at the first 5% of the protein: "..suggesting some disrupted transcripts are rescued by transcriptional reinitiation at an alternative start codon."
  • Larger deletions removing either the first exon or more than 50% of the protein-coding sequence of the affected transcript

Usage example:

# Note: Form version 4.0 onwards, the '-lof' command line option is not required
java -Xmx8g -jar snpEff.jar -v \
    -lof \
    GRCh37.75 \
    test.chr22.vcf > test.chr22.ann.vcf

SnpEff adds 'LOF' and 'NMD' tags to INFO fields (column 8 in VCF format). LOF and NMD tags have the following format:

Gene | ID | num_transcripts | percent_affected

Where:

Field Description
Gene Gene name
ID Gene ID (usually ENSEMBL)
Num_transcripts Number of transcripts in this gene
percent_affected Percentage of transcripts affected by this variant.

Example: If we have this effect

EFF=stop_gained(LOW|NONSENSE|Gga/Tga|p.Gly163*/c.487G>T|574|GAB4|protein_coding|CODING|ENST00000400588|3|1),...

and the corresponding LOF and NMD tags are

LOF=(GAB4|ENSG00000215568|4|0.25);NMD=(GAB4|ENSG00000215568|4|0.25)

The meaning of the LOF tag is:

Field Description
Gene GAB4
ID ENSG00000215568
Num_transcripts There are 4 transcripts in this gene
percent_affected 25% of transcripts are affected by this variant.

Errors and Warnings

As mentioned int the previous section, the last sub-field in EFF field shows errors or warnings (if any). Here is a description of the errors and warnings:

Error Meaning and possible solutions
ERROR_CHROMOSOME_NOT_FOUND Chromosome does not exits in reference database. Typically indicates a mismatch between the chromosome names in the input file and the chromosome names used in the reference. See this FAQ for more details.
ERROR_OUT_OF_CHROMOSOME_RANGE This means that the position is higher than chromosome's length. Probably an indicator that your data is not from this reference genome.
ERROR_OUT_OF_EXON Exonic information not matching the coordinates. Indicates a problem (or even a bug?) in the database
ERROR_MISSING_CDS_SEQUENCE Transcript has no CDS info. Indicates a problem (or even a bug?) in the database
Warning Meaning and possible solutions
WARNING_REF_DOES_NOT_MATCH_GENOME This means that the REF field does not match the reference genome.
Warning! This warning probably indicated there is something really wrong with your data!
This happens when your data was aligned to a different reference genome than the one used to create SnpEff's database. If there are many of these warnings, it's a strong indicator that the data doesn't match and all the annotations will be garbage (because you are using the wrong database).
Solution: Use the right database to annotate!
Due to performance and memory optimizations, SnpEff only checks reference sequence on Exons.
WARNING_SEQUENCE_NOT_AVAILABLE For some reason the exon sequence is not available, so we cannot calculate effects.
WARNING_TRANSCRIPT_INCOMPLETE A protein coding transcript whose length is non-multiple of 3. This means that information is missing for one or more amino acids.
This is usually due to errors in the genomic information (e.g. the genomic databases provided by UCSC or ENSEMBL). Genomic information databases are constantly being improved and are getting more accurate, but some errors still remain.
WARNING_TRANSCRIPT_MULTIPLE_STOP_CODONS A protein coding transcript has two or more STOP codons in the middle of the coding sequence (CDS). This should not happen and it usually means the genomic information may have an error in this transcript.
This is usually due to errors in the genomic information (e.g. the genomic databases provided by UCSC or ENSEMBL). Genomic information databases are constantly being improved and are getting more accurate, but some errors still remain.
WARNING_TRANSCRIPT_NO_START_CODON A protein coding transcript does not have a proper START codon. It is rare that a real transcript does not have a START codon, so this probably indicates errors in genomic information for this transcript (e.g. the genomic databases provided by UCSC or ENSEMBL).
Genomic information databases are constantly being improved and are getting more accurate, but some errors still remain.
Info Meaning
INFO_REALIGN_3_PRIME Variant has been realigned to the most 3-prime position within the transcript. This is usually done to to comply with HGVS specification to always report the most 3-prime annotation.
INFO_COMPOUND_ANNOTATION This effect is a result of combining more than one variants (e.g. two consecutive SNPs that conform an MNP, or two consecutive frame_shift variants that compensate frame).
INFO_NON_REFERENCE_ANNOTATION An alternative reference sequence was used to calculate this annotation (e.g. cancer sample comparing somatic vs. germline).

BED files

In an enrichment experiment, such as ChIP-Seq, the results are enrichment regions, usually called "peaks". It is common for "peak callers" (algorithms that detect enrichment), write the results in a BED file. SnpEff can annotate BED files in order to facilitate interpretation of enrichment experiments.

Warning

Column fifth onwards are ignored when using BED file format and they will be lost in the output file.

SnpEff can annotate BED files in order to facilitate interpretation of enrichment experiments. Annotations are added to the fourth column of the BED file.

E.g.:

$ java -Xmx8g -jar snpEff.jar -i bed BDGP5.69 chipSeq_peaks.bed

# SnpEff version 3.3 (build 2013-05-15), by Pablo Cingolani
# Command line: SnpEff  -i bed BDGP5.69 /home/pcingola/fly_pvuseq/chipSeq/Sample_w1118_IP_w_5hmC/w1118_IP_w_5hmC_peaks.bed
# Chromo  Start     End       Name;Effect|Gene|BioType        Score
2L        189463    190154    MACS_peak_1;Exon|exon_6_12_RETAINED|FBtr0078122|protein_coding|spen|protein_coding;Exon|exon_5_10_RETAINED|FBtr0078123|protein_coding|spen|protein_coding;Exon|exon_7_13_RETAINED|FBtr0306341|protein_coding|spen|protein_coding;Exon|exon_6_11_RETAINED|FBtr0078121|protein_coding|spen|protein_coding 245.41
2L        195607    196120    MACS_peak_2;Exon|exon_6_12_RETAINED|FBtr0078122|protein_coding|spen|protein_coding;Exon|exon_5_10_RETAINED|FBtr0078123|protein_coding|spen|protein_coding;Exon|exon_7_13_RETAINED|FBtr0306341|protein_coding|spen|protein_coding;Exon|exon_6_11_RETAINED|FBtr0078121|protein_coding|spen|protein_coding 51.22
2L        527253    527972    MACS_peak_3;Intron|intron_2_RETAINED-RETAINED|FBtr0078063|protein_coding|ush|protein_coding     55.97
2L        711439    711764    MACS_peak_4;Intron|intron_1_RETAINED-RETAINED|FBtr0078045|protein_coding|ds|protein_coding      61.16
2L        1365255   1365556   MACS_peak_5;Upstream|FBtr0077927|protein_coding|CG14346|protein_coding;Upstream|FBtr0077926|protein_coding|CG14346|protein_coding;Intergenic|NLaz...CG14346;Upstream|FBtr0077942|protein_coding|NLaz|protein_coding     62.78
2L        1970199   1970405   MACS_peak_6;Upstream|FBtr0077813|protein_coding|Der-1|protein_coding;Intergenic|tRNA:CR31942...Der-1;Downstream|FBtr0077812|tRNA|tRNA:CR31942|tRNA      110.34
2L        3345637   3346152   MACS_peak_7;Intron|intron_2_ALTTENATIVE_3SS-ALTTENATIVE_3SS|FBtr0089979|protein_coding|E23|protein_coding;Intron|intron_3_ALTTENATIVE_3SS-ALTTENATIVE_3SS|FBtr0089981|protein_coding|E23|protein_coding 65.49
2L        4154734   4155027   MACS_peak_8;Intergenic|CG2955...Or24a;Downstream|FBtr0077468|protein_coding|CG2955|protein_coding       76.92
2L        4643232   4643531   MACS_peak_9;Downstream|FBtr0110769|protein_coding|BG642163|protein_coding;Exon|exon_2_2_RETAINED|FBtr0300354|protein_coding|CG15635|protein_coding      76.92
When a peak intersects multiple transcripts or even multiple genes, each annotation is separated by a semicolon. So if you look into the previous results in more detail, the first line looks like this (format edited for readability purposes):
2L  189463  190154  MACS_peak_1;Exon|exon_6_12_RETAINED|FBtr0078122|protein_coding|spen|protein_coding
                                ;Exon|exon_5_10_RETAINED|FBtr0078123|protein_coding|spen|protein_coding
                                ;Exon|exon_7_13_RETAINED|FBtr0306341|protein_coding|spen|protein_coding
                                ;Exon|exon_6_11_RETAINED|FBtr0078121|protein_coding|spen|protein_coding
This peak is hitting four transcripts (FBtr0078122, FBtr0078123, FBtr0306341, FBtr0078121) in gene 'spen'.

Exon naming convention

The format for the exon identifier is exon_Rank_Total_Type, where:

  • rank is the exon rank in the transcript (position in the transcript)
  • total is the total number of exons in that transcript
  • type is the exon splice type.

For instance exon_5_10_RETAINED would be the fifth exon in a 10 exon transcript. This exon is type "RETAINED", which means it is not spliced out.

Exons are categorized by splicing as follows:

  • NONE : Not spliced
  • RETAINED : All transcripts have this exon
  • SKIPPED : Some transcripts skip it
  • ALTTENATIVE_3SS : Some transcripts have and alternative 3' exon start
  • ALTTENATIVE_5SS : Some transcripts have and alternative 5' exon end
  • MUTUALLY_EXCLUSIVE : Mutually exclusive (respect to other exon)
  • ALTTENATIVE_PROMOMOTER : The first exon is different in some transcripts.
  • ALTTENATIVE_POLY_A : The last exon.

See this Wikipedia entry for more information on exon splice types.

Intron naming convention

Similarly to exons, introns are named as intron_Rank_ExonTypeBefore-ExonTypeAfter, where:

  • Rank : the rank number for this intron in the transcript
  • ExonTypeBefore : the splicing type of the exon preceding this intron (see exon naming convention for details).
  • ExonTypeAfter : the splicing type of the after this intron (see exon naming convention for details).

For instance intron_9_SKIPPED-RETAINED would be the ninth intron of the transcript. The intron is preceded by a SKIPPED exon and followed by a RETAINED exon.