Genomic Visualization and Interpretations

Introduction to ProteinPaint

ProteinPaint is a tool made available as part of the PeCan Data Portal. The principle goal of this data portal is to facilitate exploration of childhood cancer genomics data. However, some tools, such as ProteinPaint are generally useful for visualizing the recurrence of any set of variants in a gene in the context of protein domains and other information.

This section will provide a brief introduction to ProteinPaint’s features and demonstrate its use with a few examples and exercises.

The tool is entirely web based. First navigate to the tool’s homepage: ProteinPaint. Note that it has its own tutorials.

Guided tour of pre-loaded data

Go through the following exercise to explore the functionality of this resource:

Importing custom data

# Load the data downloaded from CIViC
x = read.csv(file = "CIViC-VHL-Variants.csv",

# Store only the variant names that we will parse for protein coordinates
vhl_variants1 = x[,2] 

# Tidy up the names to remove the c. notations
vhl_variants2 = gsub("\\s+\\(.*\\)", "", vhl_variants1, perl=TRUE)

# Remove complex expressions beyond the "fs" in some variants
vhl_variants3 = gsub("fs.*", "fs", vhl_variants2, perl=TRUE)

# Limit to only those variants with a format like: L184P
vhl_variants4 = vhl_variants3[grep("^\\w+\\d+\\w+$", vhl_variants3, = TRUE, perl=TRUE)]

# Remove variants with an underscore
vhl_variants5 = vhl_variants4[grep("_", vhl_variants4, = TRUE, perl=TRUE, invert = TRUE)]

# Store the variant names for later
vhl_variant_names = vhl_variants5

# Extract the amino acid position numbers
vhl_variant_positions = gsub("\\D+(\\d+)\\D+", "\\1", vhl_variants5, perl=TRUE)

# Create a variant types list
types = vector(mode = "character", length = length(vhl_variant_names))
types[1:length(vhl_variant_names)] = "M"
types[grep("\\*", vhl_variant_names, = TRUE, perl=TRUE)] = "N"
types[grep("fs", vhl_variant_names, = TRUE, perl=TRUE)] = "F"
types[grep("ins", vhl_variant_names, = TRUE, perl=TRUE)] = "I"
types[grep("del", vhl_variant_names, = TRUE, perl=TRUE)] = "D"

# Store the values we care about in a new data frame
vhl_variants_final = data.frame(vhl_variant_names, vhl_variant_positions, types)

# Create the final format strings requested for ProteinPaint of the form: R200W;200;M
format_string = function(x){
  t = paste (x["vhl_variant_names"], x["vhl_variant_positions"], x["types"], sep = ";")  
output = apply(vhl_variants_final, 1, format_string)

# Write the output to a file
write(output, file="CIViC-VHL-Variants.formatted.csv")

ProteinPaint practice exercises

What are the three most recurrent mutation in PIK3CA according to COSMIC?

Get a hint!

Load PIK3CA, activate the COSMIC track, and look for the mutations with highest patient counts


H1047R, E545K, and E542K are the most recurrent mutations in PIK3CA according to COSMIC

What is the top tissue of origin observed for each of these three mutations?

Get a hint!

Click on the circle for each mutation and examine the tissue distribution plot


H1047R (breast), E545K (large intestine), and E542K (large intestine)

Load the Pediatric data for RUNX1T1. (A) What special kind of variant is indicated? (B) Load the RNA-seq plot for these data. Mouse over the RUNX1 variant. What interesting pattern do you observe? (C) Highlight the top 25 samples in the RNA-seq expression plot. What type of cancer dominates?

Get a hint!

Load RUNX1T1, make sure the Pediatric data track is activated, and make sure the RNA-seq gene expression panel is open


(A) RNA gene fusion variants. (B) The RUNX1-RUNX1T1 (aka AML-ETO) fusion variant corresponds to samples with very high RUNX1T1 expression. (C) AML cancer dominates the top 25 samples with highest RUNX1T1 expression.

Repeat the exercise above where we extract variants from CIViC for KRAS, create a clean version of these data, and load them into ProteinPaint.

Get a hint!

You should be able to do almost exactly what we did with VHL, but for KRAS instead

Advanced exercise. Identify a set of variants from your own gene for a single gene. Repeat the exercise above using these variants. If they are not human variants, it may be possible to first identify the closest human ortholog, and second to do “lift over”” of the coordinates.

Get a hint!

Depending on the form of the variants, some different kind of parsing and reformatting may be needed. If you need to convert the variants from one species to another you will learn more about tools for identifying orthologs and performing liftovers in later sections of this workshop. You may want to come back to this exercise...