BIO Assignment Week 8
Assignment for Week 7
Predictions: Homology Modeling
< Assignment 6 | Assignment 8 > |
Note! This assignment is currently active. All significant changes will be announced on the mailing list.
Concepts and activities (and reading, if applicable) for this assignment will be topics on the next quiz.
Contents
- 1 Introduction
- 2 A Point Mutation
- 3 Preparation
- 4 Homology model
- 5 Model interpretation
- 6 Coloring the model by energy
- 7 Modelling DNA binding
- 8 Links and resources
- 9 Footnotes and references
- 10 Ask, if things don't work for you!
- 11 Links and resources
- 12 Footnotes and references
- 13 Ask, if things don't work for you!
Introduction
In order to understand how specific residues in the sequence contribute to the putative function of the protein, and why and how they are conserved throughout evolution, we would need to study an explicit molecular model of an APSES domain protein, bound to its cognate DNA sequence. Explanations of a protein's observed properties and functions can't rely on the general fact that it binds DNA, we need to consider details in terms of specific residues and their spatial arrangement. In particular, it would be interesting to correlate the conservation patterns of key residues with their potential to make specific DNA binding interactions. Unfortunately, the experimental evidence we have considered in Assignment 2 (Taylor et al., 2000) is not sufficient to unambiguously define the details of how a DNA double helix might be bound. Moreover, at least two distinct modes of DNA binding are known for proteins of the winged-helix superfamily, of which the APSES domain is a member.
In this assignment you will (1) construct a molecular model of the APSES domain from the Mbp1 RBM orthologue in your assigned species.
For the following, please remember the following terminology:
- Target
- The protein that you are planning to model.
- Template
- The protein whose structure you are using as a guide to build the model.
- Model
- The structure that results from the modelling process. It has the Target sequence and is similar to the Template structure.
A brief overview article on the construction and use of homology models is linked to the resource section at the bottom of this page. That section also contains links to other sites and resources you might find useful or interesting.
A Point Mutation
To illustrate how homology modelling works in principle, let's consider changing the sequence of a single amino acid, based on a structural template.
Such minimal changes to structure models can be done directly in Chimera. Let us consider the residue A 42
of the 1BM8 structure. It is oriented towards the core of the protein, but most other Mbp1 orthologs have a larger amino acid in this position, V
, or even I
.
Task:
- Open
1BM8
in Chimera, hide the ribbons and show all atoms as a stick model. - Color the protein white.
- Open the sequence window and select
A 42
. Color it red. Choose Actions → Set pivot. Then study how nicely the alanine sidechain fits into the cavity formed by its surrounding residues. - To emphasize this better, hide the solvent molecules and select only the protein atoms. Display them as a sphere model to better appreciate the packing, i.e. the Van der Waals contacts we discussed in class. Use the Favorites → Side view panel to move the clipping plane and see a section through the protein. Study the packing, in particular, note that the additional methyl groups of a valine or isoleucine would not have enough space in the structure. Then restore the clipping planes so you can see the whole molecule.
- Lets simplify the view: choose Actions → Atoms/Bonds → backbone only → chain trace. Then select
A 42
again in the sequence window and choose Actions → Atoms/Bonds → show. - Add the surrounding residues: choose Select → Zone.... In the window, see that the box is checked that selects all atoms at a distance of less then 5Å to the current selection, and check the lower box to select the whole residue of any atom that matches the distance cutoff criterion. Click OK and choose Actions → Atoms/Bonds → show.
- Select
A 42
again: left-click (control click) on any atom of the alanine to select the atom, then up-arrow to select the entire residue. Now let's mutate this residue to isoleucine. - Choose Tools → Structure Editing → Rotamers and select
ILE
as the rotamer type. Click OK, a window will pop up that shows you the possible rotamers for isoleucine together with their database-derived probabilities; you can select them in the window and cycle through them with your arrow keys. But note that the probabilities are very different - and thus show you high-energy and low-energy rotamers to choose from. Therefore, unless you have compelling reasons to do otherwise, try to find the highest-probability rotamer that may fit. This is where your stereo viewing practice becomes important, if not essential. It is really, really hard to do this reasonably in a 2D image! It becomes quite obvious in 3D. Btw: I find such "quantitative" work - where the real distances are important - easier in orthographic than in perspective view (cf. the Camera panel). - I find that the first rotamer is actually not such a bad fit. The
CD
atom comes close to the sidechains ofI 25
andL 96
. But we can assume that these are somewhat mobile and can accommodate a denser packing, because - as you can easily verify in your Jalview alignment - it is NOT the case that sequences that haveI 42
, have a smaller residue in position25
and/or96
. So let's accept the most frequentILE
rotamer by selecting it in the rotamer window and clicking OK (while existing side chain(s): replace is selected). - Done.
If you want to go over this in more detail, check the video tutorial on YouTube published by the NIAID bioinformatics group here. I would also encourage you to go over Part 2 of the video tutorial that discusses how to check for and resolve (by energy minimization) steric clashes. But do remember that it is not clear whether energy minimization will make your structure more correct in the sense of a smaller overall RMSD with the real, mutated protein.
What we have done here with one residue is exactly the way homology modeling works with entire sequences. The homology modelling program simply changes all amino acids to the residues of the target sequence, based on the template structure. Let's now build a homology model for YFO Mbp1.
Preparation
- We need to define our Target sequence;
- find a suitable structural Template; and
- build a Model.
Target sequence
We have encountered the PDB 1BM8
structure before, the APSES domain of saccharomyces cerevisiae Mbp1. This is a useful template to model the DNA binding domain of your RBM match. But what exactly is the aligned region of the APSES domain? We could use several approaches to define the APSES domain:
- we could use the biostrings package to calculate a pairwise sequence alignment with the
1BM8
sequence, like we did previously for the full-length sequences. This would give us the domain boundaries. - we could calculate a multiple sequence alignment, while including the
1BM8
sequence. This would also allow us to infer domain boundaries, actually in all sequences in our database at once. But we have found previously that such multiple sequence alignments are quite sensitive to un-alignable regions of which we have quite a few in the full length sequences. We do need an MSA, but we do need to restrict the length of the sequences we align to a reasonable region. - we could access the domain annotations at CDD or at the SMART Database, but both have interfaces that are difficult to use computationally, and have other issues: NCBI does not recognize APSES domains, only the smaller KilA-N domain, and SMART does not find APSES domains in many of our sequences.
- In our case it seems the best results are had when searching the Prosite database with the ScanProsite interface.
Task:
Let's have a first look at ScanProsite, using the yeast Mbp1 sequence. We need the UniProt ID to search Prosite. With your protein database loaded in a fresh R session, type
# (commands indented, to align their components and
# help you understand their relationship)
refDB$protein$uniProtID
which(refDB$protein$name == "MBP1")
refDB$protein$uniProtID[which(refDB$protein$name == "MBP1")]
uID <- refDB$protein$uniProtID[which(refDB$protein$name == "MBP1")]
uID
- Navigate to ScanProsite, paste the UniprotID for yeast Mbp1 into the text field, select Table output for STEP 3, and START THE SCAN.
You should see four feature hits: the APSES domain, and three ankyrin domain sequences that partially overlap. We could copy and paste the start and end numbers and IDs but that would be lame. Let's get them directly from Prosite instead, because we will want to fetch a few of these. Prosite does not have a nice API interface like UniProt, but the principles of using R's httr
package to send POST requests and retrieve the results are the same. Getting data informally from Webpages is called screenscraping and really a life-saving skill. The first step to capture the data from this page via screenscraping is to look into the HTML code of the page.
(I am writing this section from the perspective of the Chrome browser - I don't think other browsers have all of the functionality that I am describing here. You may need to install Chrome to try this...)
- Use the menu and access View → Developer → View Source. Scroll through the page. You should easily be able to identify the data table. That's fair enough: each of the lines contain the UniProt ID and we should be able to identify them. But how to send the request to get this page in the first place?
- Use the browser's back button, and again: View → Developer → View Source. This is the page that accepts user input in a so called
form
via several different types of elements: "radio-buttons", a "text-box", "check-boxes", a "drop down menu" and a "submit" button. We need to figure out what each of the values are so that we can construct a validPOST
request. If we get them wrong, in the wrong order, or have parts missing, it is likely that the server will simply ignore our request. These elements are much harder to identify thean the lines of feature information, and it's really easy to get them wrong, miss something and get no output. But Chrome has a great tool to help us: it allows you to see the exact, assembledPOST
header that it sent to the Prosite server!
- On the scanProsite page, open View → Developer → Developer Tools in the Chrome menu. Then click again on START THE SCAN. The Developer Tools page will show you information about what just happened in the transaction it negotiated to retrieve the results page. Click on the Network tab, and then on the top element:
PSScan.cgi
. This contains the form data. Then click on the Headers tab and scroll down until you see the Request Payload. This has all the the requiredPOST
elements nicely spelled out. No guesswork required. What worked from the browser should work the same way from an R script. Analogous to our UniProt fetch code, we create aPOST
query:
URL <- "http://prosite.expasy.org/cgi-bin/prosite/PSScan.cgi"
response <- POST(URL,
body = list(meta = "opt1",
meta1_protein = "opt1",
seq = "P39678",
skip = "on",
output = "tabular"))
# Note how the list-elements correspond to the page header's
# Request Payload. We include everything but the value of the
# submit button (which is for display only) in our POST
# request.
# Send off this request, and you should have a response in a few
# seconds.
# The text contents of the response is available with the
# content() function:
content(response, "text")
# ... should show you the same as the page contents that
# you have seen in the browser. Now we need to extract
# the data from the page: we need regular expressions, but
# only simple ones. First, we strsplit() the response into
# individual lines, since each of our data elements is on
# its own line. We simply split on the "\\n" newline character.
lines <- unlist(strsplit(content(response, "text"), "\\n"))
head(lines)
# Now we define a query pattern for the lines we want:
# we can use the uID, bracketed by two "|" pipe
# characters:
pattern <- paste("\\|", uID, "\\|", sep="")
# ... and select only the lines that match this
# pattern:
lines <- lines[grep(pattern, lines)]
lines
# ... captures the four lines of output.
# Now we break the lines apart into
# apart in tokens: this is another application of
# strsplit(), but this time we split either on
# "pipe" characters, "|" OR on tabs "\t". Look at the
# regex "\\t|\\|" in the strsplit() call:
strsplit(lines[1], "\\t|\\|")
# Its parts are (\\t)=tab (|)=or (\\|)=pipe.
# Both "t" and "|" need to be escaped with a backslash.
# "t" has to be escaped because we want to match a tab (\t),
# not the literal character "t". And "|" has to be escaped
# because we mean the literal pipe character, not its
# usual (special) meaning OR. Thus sometimes the backslash
# turns a special meaning off, and sometimes it turns a
# special meaning on. Unfortunately there's no easy way
# to tell - you just need to remember the characters - or
# have a reference handy. The special characters are
# (){}[]^$?*+.|&- ... and some of them have different
# meanings depending on where in the regex they are.
# Let's put the tokens into named slots of a vector.
features <- list()
for (line in lines) {
tokens <- unlist(strsplit(line, "\\t|\\|"))
features <- rbind(features, c(uID = tokens[2],
start = tokens[4],
end = tokens[5],
psID = tokens[6],
psName = tokens[7]))
}
features
This forms the base of a function that collects the features automatically from a PrositeScan result. We still need to do a bit more on the database part, but this is mostly bookkeeping:
- We need to put the feature annotations into a database table and link them to a protein ID and to a description of the feature itself.
- We need a function that extracts feature sequences in FASTA format.
- And, since we are changing the structure of the database, we need a way to migrate your old database contents to a newer version.
I don't think much new can be learned from this, so I have written those functions and put them into dbUtilities.R But you can certainly learn something from having a look at the code of
fetchPrositeFeatures()
addFeatureToDB()
getFeatureFASTA()
Also, have a quick look back at our database schema: this update has implemented the proteinFeature and the feature table. Do you remember what they were good for?
Time for a database update. You must be up to date with the latest version of dbUtilities.R
for this to work. When you are, execute the following steps:
updateVerifiedFile("363ffbae3ff21ba80aa4fbf90dcc75164dbf10f8")
# Make a backup copy of your protein database.
# Load your protein database. Then merge the data in your database
# with the updated reference database. (Obviously, substitute the
# actual filename in the placeholder strings below. And don't type
# the angled brackets!)
<my-new-database> <- mergeDB(<my-old-database>, refDB)
# check that this has worked:
str(<my-new-database>)
# and save your database.
save(<my-new-database>, file="<my-DB-filename.02>.RData")
# Now, for each of your proteins, add the domain annotations to
# the database. You could write a loop to do this but it's probably
# better to check the results of each annotation before committing
# it to the database. So just paste the UniProt Ids as argument of
# the function fetchPrositeFeatures(), execute and repeat.
features <- fetchPrositeFeatures(<one-of-my-proteins-uniProt-IDs>)
refDB <- addFeatureToDB(refDB, features)
# When you are done, save your database.
Finally, we can create a sequence selection of APSES domains
from our reference proteins. The function getFeatureFasta()
- accepts a feature name such as
"HTH_APSES"
; - finds the corresponding feature ID;
- finds all matching entries in the proteinFeature table;
- looks up the start and end position of each feature;
- fetches the corresponding substring from the sequence entries;
- adds a meaningful header line; and
- writes everything to output.
... so that you can simply execute:
cat(getFeatureFasta(<my-new-database>, "HTH_APSES"))
Here are the first five sequences from that result:
>CC1G_01306_COPCI HTH_APSES 6:112
IFKATYSGIPVYEMMCKGVAVMRRRSDSWLNATQILKVAGFDKPQRTRVLEREVQKGEHE
KVQGGYGKYQGTWIPLERGMQLAKQYNCEHLLRPIIEFTPAAKSPPL
>CNBB4890_CRYNE HTH_APSES 17:123
IYKATYSGVPVYEMVCRDVAVMRRRSDAYLNATQILKVAGFDKPQRTRVLEREVQKGEHE
KVQGGYGKYQGTWIPIERGLALAKQYGVEDILRPIIDYVPTSVSPPP
>COCMIDRAFT_338_BIPOR HTH_APSES 9:115
IYSATYSNVPVYECNVNGHHVMRRRADDWINATHILKVADYDKPARTRILEREVQKGVHE
KVQGGYGKYQGTWIPLEEGRGLAERNGVLDKMRAIFDYVPGDRSPPP
>WALSEDRAFT_68476_WALME HTH_APSES 83:192
IYSAVYSGVGVYEAMIRGIAVMRRRADGYMNATQILKVAGVDKGRRTKILEREILAGLHE
KIQGGYGKYQGTWIPFERGRELALQYGCDHLLAPIFDFNPSVMQPSAGRS
>PGTG_08863_PUCGR HTH_APSES 90:196
IYKATYSGVPVLEMPCEGIAVMRRRSDSWLNATQILKVAGFDKPQRTRVLEREIQKGTHE
KIQGGYGKYQGTWVPLDRGIDLAKQYGVDHLLSALFNFQPSSNESPP
[...]
At the bottom of these sequences, you should see the APSES sequences from
YFO, in particular the Mbp1 RBM sequence from YFO. Email me if you have trouble getting to that stage.
We'll need to align these sequences with the template...
Template choice and template sequence
The SWISS-MODEL server provides several different options for constructing homology models. The easiest option requires only a target sequence as input. In this mode the program will automatically choose suitable templates and create an input alignment. I would argue however that that is not the best way to use such a service: template choice and alignment both may be significantly influenced by biochemical reasoning, and an automated algorithm cannot make the necessary decisions. Should you use a structure of reduced resolution that however has a ligand bound? Should you move an indel from an active site to a loop region even though the sequence similarity score might be less? Questions like that may yield answers that are different from the best choices an automated algorithm could make. But Swiss Model is flexible and allows us to upload an explicit alignment between target and template. Please note: the model you will produce is "easy" - the sequence similarity is high and there are no indels to consider, the automated mode would have done just as well. But the strategy we pursue here is suitable also for much more difficult problems. The automated strategy probably is not.
Template choice is the first step. Often more than one related structure can be found in the PDB. The degree of sequence identity is the most important criterion, but there are many other factors to consider. Please refer to the template choice principles page on this Wiki where I discuss more details and alternatives. To find related structures, you can search the PDB itself through its Advanced Search interface; for example one can search for sequence similarity with a BLAST search, or search for structural similarity by accessing structures according to their CATH or SCOP classification. But the BLAST search is probably the method of choice: after all, the most important measure of the probability of success for homology modelling is sequence similarity.
Defining a template means finding a PDB coordinate set that has sufficient sequence similarity to your target that you can build a model based on that template. To find suitable PDB structures, we will perform a BLAST search at the PDB.
Task:
- Retrieve your YFO's Mbp1 RBM APSES domain sequence from the FASTA selection you have just prepared. This YFO sequence is your target sequence.
- Navigate to the PDB.
- Click on Advanced to enter the advanced search interface.
- Open the menu to Choose a Query Type:
- Find the Sequence features section and choose Sequence (BLAST...)
- Paste your target sequence into the Sequence field, select not to mask low-complexity regions and Submit Query. Since the E-value is set rather high by default, you will get a number of low-confidence hits as well as the actual homologs, these have very low E-values.
All hits that are homologs are potentially suitable templates, but some are more suitable than others. Consider how the coordinate sets differ and which features would make each more or less suitable for creating a homology model: you should consider ...
- sequence similarity to your target
- size of expected model (= length of alignment)
- presence or absence of ligands
- experimental method and quality of the data set
Sequence similarity is the most important, but we can have the PDB tabulate the other features concisely for this task.
- There is a menu to create Reports: - select customizable table.
- Select (at least) the following information items:
- Structure Summary
- Experimental Method
- Sequence
- Chain Length
- Ligands
- Ligand Name
- Biological details
- Macromolecule Name
- refinement Details
- Resolution
- R Work
- R free
- click: Create report.
Unfortunately you don't get the E-values into the report, and those should strongly influence your final decision. However in our case the sequences and therefore the E-values of the top three hits are all the same. And there is a new structure from January 2015, with a lower resolution. Some of the sequences have a longer chain-length ... but those are only disordered residues (otherwise these would be better suited templates; regrettably, you'd need to check that in the real world, there is no automatic tool to evaluate disorder and its effects on template choice). In my opinion that leaves pretty much only one unambiguous choice for our template: 1BM8.
- Finally
- Click on the 1BM8 ID to navigate to the structure page for the template and save the FASTA sequence to your computer. This is the template sequence.
Sequence numbering
It is not straightforward at all how to number sequence in such a project. A "natural" numbering starts with the start-codon of the full length protein and goes sequentially from there. However, this does not map exactly to other numbering schemes we have encountered. As you know the first residue of the APSES domain (as defined by CDD) is not Residue 1 of the Mbp1 protein. The first residue of the 1BM8 FASTA file (one of the related PDB structures) is the fourth residue of the Mbp1 protein. The first residue in the structure is GLN 3, therefore Q is the first residue in a FASTA sequence derived from the cordinate section of the PDB file (the ATOM
records. In the 1MB1 structure, the original N-terminal amino acids are present in the molecule, therefore they are present in the FASTA file which starts with MSNQIY...
, but they are disordered in the structure and no coordinates are present for M and S. A sequence derived explicitly from the coordinates is therefore different from the reported FASTA sequence, which is really bad because that is what the modeling program has to work with ... and so on. It can get complicated. You need to remember: a sequence number is not absolute, but assigned in a particular context and you need to be careful how to do this.
Fortunately, the numbering for the residues in the coordinate section of our target structure corresponds not to its FASTA sequence, but to the numbering of the gene. Otherwise we would need to renumber the sequence (e.g. by using the bio3D R package). If we would not do this, the sequence numbers in the model might not correspond to the sequence numbers of our target.
The input alignment
The sequence alignment between target and template is the single most important factor that determines the quality of your model. No comparative modeling process will repair an incorrect alignment; it is useful to consider a homology model rather like a three-dimensional map of a sequence alignment rather than a structure in its own right. In a homology modeling project, typically the largest amount of time should be spent on preparing the best possible alignment. Even though automated servers like the SwissModel server will align sequences and select template structures for you, it would be unwise to use these just because they are convenient. You should take advantage of the much more sophisticated alignment methods available. Analysis of wrong models can't be expected to produce right results.
The best possible alignment is usually constructed from a multiple sequence alignment that includes at least the target and template sequence and other related sequences as well. The additional sequences are an important aid in identifying the correct placement of insertions and deletions. Your alignment should have been carefully reviewed by you and wherever required, manually adjusted to move insertions or deletions between target and template out of the secondary structure elements of the template structure.
In most of the Mbp1 orthologues, we do not observe indels in the APSES domain regions. Evolutionary pressure on the APSES domains has selected against indels in the more than 600 million years these sequences have evolved independently in their respective species. To obtain an alignment between the template sequence and the target sequence from your species, proceed as follows.
Task:
Choose one of the following options to align your target and template sequence. Make sure your template sequence is included, i.e. the FASTA sequence of 1BM8.
- In Jalview...
- Load your APSES domain sequences plus the 1BM8 sequence in Jalview. Include the sequence of your template protein and align using Muscle.
- Delete all sequence you no longer need, i.e. keep only the APSES domains of the target (from your species) and the template (from the PDB) and choose Edit → Remove empty columns. This is your input alignment.
- Choose File→Output to textbox→FASTA to obtain the aligned sequences. They should both have exactly the same length, i.e. N- or C- termini have to be padded by hyphens if the original sequences had different length. Save the sequences in a text-file.
- Using a different MSA program
- Copy the FASTA formatted sequences of the Mbp1 proteins in the reference species from the Reference APSES domain page.
- Access the MSA tools page at the EBI.
- Paste the Mbp1 sequence set, your target sequence and the template sequence into the input form.
- Run an alignment (I like T-coffee) and save the output.
- Using the R bioconductor MSA package that you used previously.
Refer back to the page if you are lacking notes how to go about this.
Whatever method you use: the result should be a two sequence alignment in multi-FASTA format, that was constructed from a number of supporting sequences and that contains your aligned target and template sequence. This is your input alignment for the homology modeling server. For a Schizosaccharomyces pombe model, which I am using as an example here, it looks like this:
>1BM8_A QIYSARYSGVDVYEFIHSTGSIMKRKKDDWVNATHILKAANFAKAKRTRI LEKEVLKETHEKVQGGFGKYQGTWVPLNIAKQLAEKFSVYDQLKPLFDF >Mbp1_SCHPO 2-100 NP_593032 AVHVAVYSGVEVYECFIKGVSVMRRRRDSWLNATQILKVADFDKPQRTRV LERQVQIGAHEKVQGGYGKYQGTWVPFQRGVDLATKYKVDGIMSPILSL
In this case, there are no indels and therefore no hyphens - in your case there may be.
Homology model
The alignment defines the residue by residue relationship between target and template sequence. All we need to do now is to change every residue of the template to the target sequence
SwissModel
Access the Swissmodel server at http://swissmodel.expasy.org and click on the Start Modelling button. Under the Supported Inputs, choose Target-Template Alignment.
Task:
- Paste the aligned sequences of the YFO target and the 1BM8 template into the form field. SwissModel will analyse the sequences and ask you to identify target and template. The YFO sequence is your target. The 1BM8 sequence is the template.
- Click Validate Target Template Alignment and check that the returned alignment is correct. All non-identical residues are shown in light-grey.
- Click Build Model to start the modeling process. This will take about a minute or so.
- The resulting page returns information about the resulting model and its quality. You can rotate the model in the window on the right with the mouse. Regions that have a reddish hue have lower quality scores, i.e. they were harder to model or could not be modelled well with good geometry. Hovering the mouse over parts of the structure highlights the respective region of the sequence alignment.
- Mouse over the Model 01 dropdown menu (under the icon of the template structure), and choose the PDB file. Note that the B-factor column of the coordinate section contains the QMEAN scores (between 0 and 1) that the server has calculated. Higher is better. Save the PDB file on your computer.
- Open the SwissModel documentation in a new tab. Read about the modelling process. there are a number of important technical details that help to understand what the computed coordinates of your model mean, you should pay special attention to the GQME and QMEAN quality scores.
- Also save:
- The output page as pdf (for reference)
- The modeling report (as pdf)
Model interpretation
We have spent a significant amount of time to prepare data for the analysis and in practice it usually seems to turn out that way, that the preparation of data occupies the greatest part of our efforts. The actual computational analysis is generally quite fast. And, unfortunately, the interpretation of results is often somewhat neglected. Don't be that way. Data does not explain itself. The interpreattion of your computational results is the most important part.
We will look at our homology model with two different questions:
- Can we define the DNA binding residues?
- Can we tell which residues are conserved for functional reasons, rather than for structural reasons?
The PDB file
Task:
Open your model coordinates in a text-editor (make sure you view the PDB file in a fixed-width font (like "courier") so all the columns line up correctly) and consider the following questions:
- What is the residue number of the first residue in the model? What should it be, based on the alignment? If the putative DNA binding region was reported to be residues 50-74 in the Mbp1 protein, which residues of your model correspond to that region?
That's not easy to tell. But it should be.
R code: renumbering the model
As you have seen above, SwissModel numbers the first residue "1" and does not keep the numbering of the template. We should renumber the model so we can compare the model and the template with the same residue numbers. (An alternative renumbering would renumber the model correspond to the sequence it came from. Remember that we have only excised a domain from the full-length sequence.) Carefully doing this by hand will take you a bit less than an hour. Fortunately there is a very useful R package that will help: bio3d.
Task:
- Navigate to the bio3D home page to . bio3d has recently been made available via CRAN - previously it had to be compiled from source.
- Explore and execute the following R script. I am assuming that your model is in your
PROJECTDIR
folder, change paths and filenames as required.
setwd(PROJECTDIR)
PDB_INFILE <- "YFOmodel.pdb"
PDB_OUTFILE <- "YFOmodelRenumbered.pdb"
# The bio3d package provides functions for working with
# protein structures in R
if (!require(bio3d, quietly=TRUE)) {
install.packages("bio3d")
library(bio3d)
}
# == Read the YFO pdb file
iFirst <- 4 # residue number for the first residue
YFOmodel <- read.pdb(PDB_INFILE) # read the PDB file into a list
YFOmodel # examine the information
YFOmodel$atom[1,] # get information for the first atom
# Explore ?read.pdb and study the examples.
# == Modify residue numbers for each atom
resNum <- as.numeric(YFOmodel $atom[,"resno"])
resNum
resNum <- resNum - resNum[1] + iFirst # add offset
YFOmodel $atom[ , "resno"] <- resNum # replace old numbers with new
# check result
YFOmodel $atom[ , "resno"]
YFOmodel $atom[1, ]
# == Write output to file
write.pdb(pdb = YFOmodel, file=PDBout)
# Done. Open the PDB file you have written in a text editor
# and confirm that this has worked.
First visualization
Since a homology model inherits its structural details from the template, your model of the YFO sequence should look very similar to the original 1BM8 structure.
Task:
- Start Chimera and load the model coordinates that you have just renumbered.
- From the PDB, also load the template structure. (Use File → Fetch by ID ...)
- In the Favourites → Model Panel window you can switch between the two molecules.
- Hide the ribbon and choose backbone only → full. You will note that the backbone of the two structures is virtually identical.
- Next, choose Actions → Atoms/Bonds → show to display display the two molecules in a stick style and note how the sidechains have been modeled. Note especially how sidechain coordinates have been guessed, where the template had shorter sidechains than the target. It may be more clear if you hide H-atoms: Select → Chemistry → Element → H and Actions → Atoms/Bonds → hide
- Display only residue 50 to 74 to focus on the putative helix-turn-helix domain. You can drag your mouse in the Favourites → Sequence, window to select the range then Select → Invert (selected model) and Actions → Atoms/Bonds → hide. Or you can use Chimera's commandline:
~display
to undisplay everything,show #:50-74
to show this residue range for all models. - Study the result: a model of the HTH subdomain of YFO's RBM to Mbp1.
Coloring the model by energy
SwissModel calculates energies for each residue of the model with a molecular mechanics forcefield. The SwissModel modeling summary page contains a plot of these energies as a function of sequence number like. The values - between 0.0 and 1.0 - are stored in the PDB file's B-factor field.
Task:
- Back in Chimera, use the model panel to close the 1BM8 structure. Select all and show Atoms, bonds to view the entire model structure.
- Choose Tools → Depiction → Render by attribute and select attributes of atoms, Attribute: bfactor, check color atoms and click OK.
- Study the result: It seems that residues in the core of the protein have better energies (higher values) than residues at the surface. Why could that be the case?
Study the options of this window a bit, rendering by attribute is a powerful way to store and depict all manners of information with the molecule. You can simply write a little R script that uses bio3D to replace the B-factor or occupancy values with any value you might be interested in: energies, conservation scores, information ... whatever. Then render this property to map it on the 3D structure of your molecule...
Modelling DNA binding
One of the really interesting questions we can discuss with reference to our homology model is how sequence variation might result in changed DNA recognition sites, and then lead to changed cognate DNA binding sequences. In order to address this, we would need to generate a plausible structural model for how DNA is bound to APSES domains.
Since there is currently no software available that would reliably model such a complex from first principles[1], we will base a model of a bound complex on homology modelling as well. This means we need to find a similar structure for which the position of bound DNA is known, then superimpose that structure with our model. This places the DNA molecule into the spatial context of the model we are studying. It so happens that early in 2015 an APSES domain structure with bound DNA was published. You probably noticed it as a result of the PDB BLAST search: 4UX5, from the Magnaporthe oryzae Mbp1 orhologue PCG2[2].
A homologous protein/DNA complex structure
Task:
- The PCG2 / DNA complex
- Open Chimera and load the
4UX5
structure. Spend some time exploring it. There are two domains of identical sequence bound to one DNA molecule. The first question I would have is whether the two molecules bind to the same DNA motif - the CGCG core of the "MCB-box", and whether the observed protein:DNA interfaces are actually with the cognate sequence, or whether one (or both) proteins are non-specific complexes. The conditions under which proteins crystallize can be harsh, and physiological function under these conditions is not guaranteed.[3] Indeed, Liu et al. (2015) report that at low concentrations a 1:1 complex is formed and the 2:1 Protein:DNA complex only forms at high concentrations. Figure 3. of their paper shows that the detailed contacts between protein and DNA are in fact not identical.
- Without taking this question too far, let's get a quick view of the comparison by duplicating one domain of the structure and superimposing it on the other. The authors feel that chain
A
represents the tighter, more specific mode of interaction; so we will duplicate chainB
and superpose the copy onA
.
- In Chimera, open the Favorites → Model Panel and use the copy/combine button to create a copy of the
4UX5
model. Call ittest
. - Select chain B of the
test
model, then use Select → Invert (selected models) to apply the selection to everything in thetest
model except chain B. - Use Actions → Atoms/Bonds → delete to remove everything but Chain B.
- Select and colour the chain red.
- Back on the Model Panel, select both models and use the match... dialogue to open a MatchMaker dialogue window. Choose the radio button two match two specific chains and select
4UX5
chain A as the Reference chain,test
chain B as the Chain to match. Click Apply.
You will see that the superimposed structures are very similar, that the main difference is in the orientation of the disordered C-terminus, but also that there is a structural difference between the two structures around Gly 84 which inserts into the minor groove of the double helix.
- Select one of the residues of that loop in chain A by <control>-clicking on it and use Action → Set pivot to set the centre of rotation to that residue: this makes it easier to visualize the binding situation when you make the molecules larger.
- Select residues 81 to 87 and the corresponding (sequence
VQGGYGKY
) and in both chains turn their ribbon display off and display this range as "sticks". - Select nucleic acid in the structure submenu and turn ribbons and nucleotide objects off to display the DNA as sticks as well. Colour the DNA by element.
- Study the situation. Focus on Gly 84.A, especially the interaction of its carbonyl oxygen, which hydrogen bonds to the N2 atom of G8.D chain. Gln 89.A hydrogen bonds to the N2 atom of G8.C chain. Gly 84 and Gln 82 thus recognize a G:C C:G pair. In the B chain, Gly 84.B does not contact the DNA well, since it contacts residues of chain A, especially Gln 82.A. The carbonyl atom of Gly 84.B hydrogen bonds to Gln 89.B. and therefore Gln89.B is not available to contact nucleotide bases. What do you think[4]? It seems to me that a crucial interaction for the cognate sequence is contributed by Guanine 8,
- Finally, use the Model Panel to select
test
and close it.
Superimposing your model
Both your homology model and the template structure provide valuable information:
- The template structure shows how conserved the structure is at the protein/DNA interface. You have seen what subtle differences can give rise to a sequence specific complex and a non-specific binding mode. For Mbp1 we know that the APSES domain binds to the same cognate DNA sequence as PCG2. Since your model structure is heavily biased towards the template, evaluating the template in the context of a real protein/DNA complex allows you to judge which binding residues appear to be conserved and possibly modelled in an orientation that is productive for binding.
- The model structure maps sequence variation into that context: are the crucial residues for sequence specific binding conserved?
Task:
- Start by loading your model and the 1BM8 structure into your chimera session. Select all, turn all ribbons off, and set all atoms to stick representation. Then select H atoms by element and hide them.
- We need to visualize and evaluate differences in binding between different proteins and for me it works well to colour everything by element, and give the carbon atoms some identifying, distinct colour. This is best achieved through the Chimera command line that you can turn on with the little "computer" icon on the left-hand side of the graphics window. Have a look at the Chimera Users guide, and choose select to learn how Chimera's selection syntax works.
- Open the Model Panel to check which protein has which Chimera-internal model number. Then you can use the following selection syntax. Instead of the model numbers, I will type
<YFO>
,<4ux5>
, and<1BM8>
- you will certainly know by now that these are placeholder labels and you need to replace them with the numbers0
,1
, and2
instead.
- To colour the DNA carbon atoms white, type:
color white #<4ux5>:.C,.D & C
- To colour the DNA carbon atoms white, type:
- To colour the 4ux5 A chain carbon atoms grey, type:
color #878795 #<4ux5>:.A & C
Note: the color values after the first hash are rgb triplets in the hexadecimal numbering systems - exactly like in R.
- To colour the 4ux5 A chain carbon atoms grey, type:
- To undisplay the 4ux5 B chain, type:
~display #<4ux5>:.B
Note: this is the tilde character, not a hyphen or minus sign.
- To undisplay the 4ux5 B chain, type:
- To colour the YFO model carbon atoms a pale reddish color, type:
color #b06268 #<YFO> & C
- To colour the YFO model carbon atoms a pale reddish color, type:
- To colour the 1BM8 structure carbon atoms a pale greenish color, type:
color #92b098 #<1BM8> & C
- To colour the 1BM8 structure carbon atoms a pale greenish color, type:
- Ready? Let's superimpose the chains.
- Select all models in the Model Panel and click on match.
- Set 4ux5 Chain A as the Reference chain.
- Select YFO as a Chain to match, select the button for specific reference and specific match, and click Apply.
- Repeat this with 1BM8 as the match chain.
- Easy. Now enlarge the binding site. Remember that 4ux5 and 1bm8 are independently determined crystal structures, wheres YFO was modelled on 1bm8 and is expected to be very similar to it. To give you some guidance what you should focus on, select 4ux5 residue 84 CA atom and display it as Ball & Stick. You can also repeat the Action "Set Pivot in case the pivot has shifted.
- Study the scene. This is where stereo- vision will help a lot.
- What do you think? Is this what you expected? Can you explain what you see? Was the modelling process succesful?
- Now turn the display of 4ux5 chain B back on and turn chain A off instead. Then superimpose the 1BM8 template and your model on Chain B.
- Again, focus on the binding region. What do you think of that? What would you have expected? Do you see a difference? What does this all mean?
Nb. I haven't seen this before and I am completely intrigued by the results. In fact, I think I understand the protein much, much better now through this exercise. I'm very pleased how this turned out.
Links and resources
Altenhoff & Dessimoz (2012) Inferring orthology and paralogy. Methods Mol Biol 855:259-79. (pmid: 22407712) |
[ PubMed ] [ DOI ] The distinction between orthologs and paralogs, genes that started diverging by speciation versus duplication, is relevant in a wide range of contexts, most notably phylogenetic tree inference and protein function annotation. In this chapter, we provide an overview of the methods used to infer orthology and paralogy. We survey both graph-based approaches (and their various grouping strategies) and tree-based approaches, which solve the more general problem of gene/species tree reconciliation. We discuss conceptual differences among the various orthology inference methods and databases, and examine the difficult issue of verifying and benchmarking orthology predictions. Finally, we review typical applications of orthologous genes, groups, and reconciled trees and conclude with thoughts on future methodological developments. |
- PDB file format (see the Coordinate Section if you are unsure about chain identifiers)
- Wikipedia on Structural Superposition (although the article is called "Structural Alignment")
- Reference sequences
Footnotes and references
- ↑ Rosetta may get the structure approximately right, Autodock may get the complex approximately right, but the coordinate changes involved in induced fit makes the result unreliable - and we have no good way to validate whether the predicted complex is correct.
- ↑
Liu et al. (2015) Structural basis of DNA recognition by PCG2 reveals a novel DNA binding mode for winged helix-turn-helix domains. Nucleic Acids Res 43:1231-40. (pmid: 25550425) [ PubMed ] [ DOI ] The MBP1 family proteins are the DNA binding subunits of MBF cell-cycle transcription factor complexes and contain an N terminal winged helix-turn-helix (wHTH) DNA binding domain (DBD). Although the DNA binding mechanism of MBP1 from Saccharomyces cerevisiae has been extensively studied, the structural framework and the DNA binding mode of other MBP1 family proteins remains to be disclosed. Here, we determined the crystal structure of the DBD of PCG2, the Magnaporthe oryzae orthologue of MBP1, bound to MCB-DNA. The structure revealed that the wing, the 20-loop, helix A and helix B in PCG2-DBD are important elements for DNA binding. Unlike previously characterized wHTH proteins, PCG2-DBD utilizes the wing and helix-B to bind the minor groove and the major groove of the MCB-DNA whilst the 20-loop and helix A interact non-specifically with DNA. Notably, two glutamines Q89 and Q82 within the wing were found to recognize the MCB core CGCG sequence through making hydrogen bond interactions. Further in vitro assays confirmed essential roles of Q89 and Q82 in the DNA binding. These data together indicate that the MBP1 homologue PCG2 employs an unusual mode of binding to target DNA and demonstrate the versatility of wHTH domains.
- ↑ This particular crystal structure however was crystallized from a Tris-buffer with 50mM NaCl at pH 8.0 - comparatively gentle conditions actually.
- ↑ Besides the coordinate difference between the chains, if indeed chain B would be representative of a DNA "scanning" conformation, perhaps one should expect that the local DNA structure that chain B binds to is structurally closer to canonical B-DNA than the DNA binding interface of chain A...
Ask, if things don't work for you!
- If anything about the assignment is not clear to you, please ask on the mailing list. You can be certain that others will have had similar problems. Success comes from joining the conversation.
- Do consider how to ask your questions so that a meaningful answer is possible:
- How to create a Minimal, Complete, and Verifiable example on stackoverflow and ...
- How to make a great R reproducible example are required reading.
< Assignment 6 | Assignment 8 > |
Links and resources
Altenhoff & Dessimoz (2012) Inferring orthology and paralogy. Methods Mol Biol 855:259-79. (pmid: 22407712) |
[ PubMed ] [ DOI ] The distinction between orthologs and paralogs, genes that started diverging by speciation versus duplication, is relevant in a wide range of contexts, most notably phylogenetic tree inference and protein function annotation. In this chapter, we provide an overview of the methods used to infer orthology and paralogy. We survey both graph-based approaches (and their various grouping strategies) and tree-based approaches, which solve the more general problem of gene/species tree reconciliation. We discuss conceptual differences among the various orthology inference methods and databases, and examine the difficult issue of verifying and benchmarking orthology predictions. Finally, we review typical applications of orthologous genes, groups, and reconciled trees and conclude with thoughts on future methodological developments. |
- PDB file format (see the Coordinate Section if you are unsure about chain identifiers)
- Wikipedia on Structural Superposition (although the article is called "Structural Alignment")
- Reference sequences
Footnotes and references
Ask, if things don't work for you!
- If anything about the assignment is not clear to you, please ask on the mailing list. You can be certain that others will have had similar problems. Success comes from joining the conversation.
- Do consider how to ask your questions so that a meaningful answer is possible:
- How to create a Minimal, Complete, and Verifiable example on stackoverflow and ...
- How to make a great R reproducible example are required reading.
< Assignment 6 | Assignment 8 > |