Difference between revisions of "Tutorial"

From victor
Jump to: navigation, search
(Align)
(Create a new project)
 
(79 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Biopool library =
+
In the '''sample''' folder are available all input and output files used in this tutorial.
 +
<br>
 +
Consider also to visit the [[Features]] page for further examples.
 +
<br>
 +
=Target/Template alignment=
  
The Biopool class implementation follows the [http://en.wikipedia.org/wiki/Composite_pattern composite design pattern ]  and for a complete description of the class hierarchy we recommend to see the [Doxygen documentation]. Without going into implementation details a '''Protein''' object is just a container for vectors representing chains. Each vector has 2 elements: the '''Spacer''' and the '''Ligand Set'''. The Spacer is the container for '''AminoAcid''' objects whereas the LigandSet is a container for all other molecules and ions, including DNA/RNA chains. Ultimately all molecules, both in the Spacer and in the LigandSet are collections of '''Atom''' objects. The main feature in Biopool is that each AminoAcid object in the Spacer is connected to its neighbours by means of one rotational vector plus one translational vector. This implementation make ease the modification of the protein structure and lot of functions were implemented to modify/perturbate/transformate the residue relative position in an efficient way.  
+
Supposing you have already found a template candidate, you need to align it against your target sequence. In this dummy example we take the sequences of two homologous proteins both endowed with 3D structure. That allows us to compare different type of Victor alignments with the "exact" one derived from the structural alignment.
Rotation and Translation vectors:
+
  
 +
The two proteins are:
  
The object representation look like that:
+
* Target = [http://www.rcsb.org/pdb/files/2ANL.pdb 2ANL] (chain A)
 +
* Template = [http://www.rcsb.org/pdb/files/1DP5.pdb 1DP5] (chain A)
  
[[File:BiopoolDiagram.jpg]]
+
The two structure superimpose quite well (RMSD 2.03 A) considering the low level of sequence identity (28.06%). This is the resulting sequence alignment after the 3D alignment done by [http://fatcat.burnham.org/ FATCAT]:
 +
 +
[[File:3d_align.png|700px]]
  
 +
[[File:alignment_cartoon.png|300px|left]]
 +
[[File:alignment_ribbon.png|300px|rigth]]
  
  
Victor includes different packages: '''Biopool''', '''Lobo''' and '''Energy'''. Every package is identified by a directory, starting with a capital letter, in the main Victor path. Inside each package you will find the '''Source''' folder containing the classes code and the '''APPS''' directory including useful utilities. In the main path you will find the '''data''' folder containing symbolic links to data files used by singular packages. In the main Victor path you should also find the '''bin''' directory containing most important programs simply copied from the APPS folders.
 
  
 +
The '''subali''' application let you choose from very different type of algorithms, strategies and parameters.
 +
The fist step is to create a file (i.e. '''pair.fasta''', already available in the '''sample''' folder) including both the target and template '''Fasta''' sequences together like that:
  
 +
<pre>
 +
>2ANL:A Target
 +
SENDVIELDDVANLMFYGEGEVGDNHQKFMLIFDTGSANLWVPSKKCNSIGCSTKHLYDSSKSKSYEKDGTKVEITYGSG
 +
TVRGFFSKDLVTLGYLSLPYKFIEVTDTDDLEPLYTAAEFDGILGLGWKDLSIGSIDPIVVELKNQNKIDQALFTFYLPV
 +
HDKHSGYLTIGGIEEKFYEGELTYEKLNHDLFWQVDLDVNFGKTSMEKANVIVDSGTSTITAPTSFINKFFKDLNVIKVP
 +
FLPFYITTCNNKDMPTLEFKSANNTYTLEPEYYMEPLLDIDDTLCMLYILPVDIDKNTFILGDPFMRKYFTVFDYDKESI
 +
GFAVAKN
 +
>1DP5:A Template
 +
GGHDVPLTNYLNAQYYTDITLGTPPQNFKVILDTGSSNLWVPSNECGSLACFLHSKYDHEASSSYKANGTEFAIQYGTGS
 +
LEGYISQDTLSIGDLTIPKQDFAEATSEPGLTFAFGKFDGILGLGYDTISVDKVVPPFYNAIQQDLLDEKRFAFYLGDTS
 +
KDTENGGEATFGGIDESKFKGDITWLPVRRKAYWEVKFEGIGLGDEYAELESHGAAIDTGTSLITLPSGLAEMINAEIGA
 +
KKGWTGQYTLDCNTRDNLPDLIFNFNGYNFTIGPYDYTLEVSGSCISAITPMDFPEPVGPLAIVGDAFLRKYYSIYDLGN
 +
NAVGLAKAI
 +
</pre>
  
== Parsing a PDB file (PdbLoader) ==
 
  
Biopool uses the '''PdbLoader class''' to load PDB files. By default it loads all '''standard residues''' and hetero atoms excluding nucleotides and water molecules. When possible it also tries to place '''hydrogen atoms''' to every amino acid included in the spacer and determine the secondary structure with the DSSP algorithm.
+
==Sequence to sequence alignment==
The simplest way to load a PDB into a '''Protein object''' is:
+
 
 +
Supposing we call the input file with the target and template sequences '''pair.fasta''' than by running the following command you obtain a basic alignment with the default parameters (see [[Features]]):
 +
 
 +
subali --in pair.fasta
 +
 
 +
The resulting alignment is this:
 +
 
 +
[[File:default_align.png|700px]]
 +
 
 +
 
 +
==Profile to profile alignment==
 +
 
 +
Most of the time including evolutionary information helps improving the alignment quality. In this example we used '''PsiBlast''' to calculate profiles both for the target and the template sequences. The PsiBlast tool is available at:
 +
 
 +
* [http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Web&PAGE=Proteins&PROGRAM=blastp&RUN_PSIBLAST=on Online service]
 +
 
 +
* [ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ Command line package]
 +
 
 +
 
 +
The profiles have to be generated in a specific format.
 +
 
 +
When using the '''online service''' set the "''Formatting options''" specifying "''Show -> Alignment as -> Plain text''" and "''Alignment View -> Flat query-anchored with letters for identities''".
 +
 
 +
Instead, if you prefer to generate the input using the '''command line tool''' remember to use "''-outfmt 4''" ("6" in older versions of Blast, see [[Features]]). In our case the commands are:
 +
 +
psiblast -num_iterations 3 -db /db/blastdb/nr90 -query 2anl_A.fasta -out 2anl_A.psi -outfmt 4
 +
 +
psiblast -num_iterations 3 -db /db/blastdb/nr90 -query 1dp5_A.fasta -out 1dp5_A.psi -outfmt 4
 +
 
 +
The output files ''2anl_A.psi'' and ''1dp5_A.psi'' are provided in the '''samples''' folder.
 +
 
 +
 
 +
Then to generate the alignment simply run:
 +
 
 +
subali --in pair.fasta --pro1 2anl_A.psi --pro2 1dp5_A.psi
 +
 
 +
 
 +
[[File:Profile_align.png|700px]]
 +
 
 +
=Evaluate 3D models=
 +
 
 +
Based on the alignment created in the previous section we can easily model the target. In our case, for simplicity, we used the [http://swissmodel.expasy.org/ SwissModel] online service. In the '''sample''' folder you can find two files:
 +
 
 +
*'''model_default.pdb''' - The model obtained from the default sequence-to-sequence alignment.
 +
*'''model_profile.pdb''' - The model obtained from the profile-to-profile alignment.
 +
 
 +
 
 +
[[File:Model_default.png|200px|left]] [[File:Model_profile.png|200px|rigth]]
 +
 
 +
By using the following commands for the two models:
 +
 
 +
frst -v -i model_default.pdb
 +
 
 +
frst -v -i model_profile.pdb
 +
 
 +
 
 +
We obtain the following output (last line):
 +
 
 +
model_default.pdb -29822.6749 -6266.6390 -18.1340 -223.0000 -46.3974
 +
 
 +
model_profile.pdb -1549.1603 -3196.3570   -1.1504 -236.0000 -13.6659
 +
 
 +
 
 +
Where numbers represent the following energies:
 +
 
 +
FRST | RAPDF | Solvation | Hydrogen | Torsion
 +
 
 +
 
 +
For comparison, the experimental structure of the target obtains the following energies:
 +
 
 +
2ANL.pdb (Target) -26691.5315 -8822.3390 -23.3529 -224.0000 -11.8836
 +
 
 +
 
 +
According to these results the profile alignment is worse than the default alignment. Moreover the model generated from the default alignment appears to be more stable of the native structure of the Target protein (PDB id 2ANL), one explanation could be that SwissModel favours stability when generating structures. The general idea is that with Victor you can easily generate different alignments (changing algorithms and/or parameters) and you can effectively test them by evaluating the quality of the 3D models built from these alignments.
 +
 
 +
For an extensive discussion about these methods visit the [[References]] page.
 +
 
 +
=Build loops=
 +
 
 +
In the last section we will show you how to build a loop. In this example we take the 3DFR and try to model the loop of 4 residues from the position 89 to 93.
 +
 
 +
The first step is to generate a LUT (see [[Features]]) of size 4:
 +
 
 +
loboLUT_all -a 4
 +
 
 +
After that you should find in the '''data''' folder of the Victor package the following files: '''aa2.lt, aa3.lt, aa4.lt'''.
 +
 
 +
Now to model the loop simply do:
 +
 +
lobo -i 3DFR.pdb -c A -s 89 -e 93
 +
 
 +
 
 +
N.B. To save disk space the "-c" option of '''loboLUT_all''' can be used to create only the necessary LUTs in a given range:
 +
 
 +
loboLUT_all -c 10
 +
 
 +
will generate only aa2, aa3, aa5, aa10.
 +
 
 +
=Create a new project=
 +
To make your own project you need a source file and a '''make''' file. It follows a simple program for loading in memory a PDB file and the necessary makefile.
 +
 
  
 
<syntaxhighlight line lang="cpp">
 
<syntaxhighlight line lang="cpp">
 +
 
 
   #include <PdbLoader.h>
 
   #include <PdbLoader.h>
 
   #include <Protein.h>
 
   #include <Protein.h>
 
   #include <iostream>
 
   #include <iostream>
 +
 +
  using namespace Victor::Biopool;
 +
  using namespace Victor;
  
 
   int main( int argc, char* argv[] ) {
 
   int main( int argc, char* argv[] ) {
Line 36: Line 163:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Modify the structure ==
 
  
 +
To generate the corresponding executable you can use the following '''make''' file.
  
  
=== Add hydrogen atoms ===
+
<syntaxhighlight line lang="cpp">
  
 +
#--*- makefile -*--------------------------------------------------------------
 +
#
 +
#  Standard makefile
 +
#
 +
#------------------------------------------------------------------------------
  
 +
# Path to project directory
 +
UPDIR = /home/Victor/
 +
# Path to subdirectories
 +
SUBDIR =
 +
# Path to directory for binaries
 +
BINPATH = /home/Victor/bin
  
== Get the secondary structure ==
+
#
There are 3 different ways in Victor to get the secondary structure. The first (inaccurate) is just parsing the '''HELIX''' and '''SHEET''' fields in the PDB file. The second method is to infer the secondary structure from '''torsional angles'''. The last choice is to use an implementation of the '''DSSP algorithm''', consider that you can find little (negligible) differences compared to the original algorithm but it is the most accurate way to calculate the secondary structure.
+
# Libraries and paths
 +
#
  
 +
LIBS = -lBiopool -ltools
  
= Align =
+
LIB_PATH = -L.  -L/home/Victor/lib/
  
To initiate the alignment process you need to put the target and the template fasta sequences in a file, that will be the input file for the application.
+
  INC_PATH +=    -I. -I/home/Victor/tools/ -I/home/Victor/Biopool/Sources/         
  >target
+
VLEEIAKDHGEALTI....
+
>template
+
AFQVTSIPTLILFQ....
+
  
Then depending of what type of alignment you want, you can choose between
+
  #
  sequence to sequence
+
  # Options
  profile to sequence
+
  #
  profile to profile
+
  
Also you can choose between the alignment algorithm to use
+
  CC=g++
  local
+
  CFLAGS=-I.  -ansi -pedantic -DNEXCEPTIONS -DLINUX -c -O3 -ffast-math -DNDEBUG -ftemplate-depth-36 -Wno-reorder -Wno-uninitialized -Wno-write- strings -Wno-narrowing
  global
+
  freeshift
+
  
if you choose profile to sequence or profile to profile type you can decide to use a specific Weighting scheme
+
  #
  PSIC
+
  # Install rule
  Henikoff
+
  #
  SecDivergence
+
  
And also choose a scoring function
+
  install:  
  CrossProduct
+
$(CC)  $(CFLAGS)  $(INC_PATH) -c test.cc -o test.o  
  LogAverage
+
$(CC)  test.o -o test $(LIB_PATH) $(LIBS)
  DotPFreq
+
</syntaxhighlight>
DotPOdds
+
EDistance
+
Pearson
+
JensenShannon
+
AtchleyDistance
+
AtchleyCorrelation
+
 
+
With all the alignment types you can decide to use a blosum substitution matrix of 62, 45, 50 or 80.
+
 
+
For more detail use the option -h with the subali application or see the [[AlignTest]] code.
+
  
= Energy functions implementation =
 
[[Features|Energy]]
 
  
= LOop Build-up and Optimization =
+
Notice that in this example only  Biopool and tools modules are used.
[[Features|Lobo]]
+

Latest revision as of 15:09, 11 November 2014

In the sample folder are available all input and output files used in this tutorial.
Consider also to visit the Features page for further examples.

Target/Template alignment

Supposing you have already found a template candidate, you need to align it against your target sequence. In this dummy example we take the sequences of two homologous proteins both endowed with 3D structure. That allows us to compare different type of Victor alignments with the "exact" one derived from the structural alignment.

The two proteins are:

  • Target = 2ANL (chain A)
  • Template = 1DP5 (chain A)

The two structure superimpose quite well (RMSD 2.03 A) considering the low level of sequence identity (28.06%). This is the resulting sequence alignment after the 3D alignment done by FATCAT:

3d align.png

Alignment cartoon.png

rigth


The subali application let you choose from very different type of algorithms, strategies and parameters. The fist step is to create a file (i.e. pair.fasta, already available in the sample folder) including both the target and template Fasta sequences together like that:

>2ANL:A Target
SENDVIELDDVANLMFYGEGEVGDNHQKFMLIFDTGSANLWVPSKKCNSIGCSTKHLYDSSKSKSYEKDGTKVEITYGSG
TVRGFFSKDLVTLGYLSLPYKFIEVTDTDDLEPLYTAAEFDGILGLGWKDLSIGSIDPIVVELKNQNKIDQALFTFYLPV
HDKHSGYLTIGGIEEKFYEGELTYEKLNHDLFWQVDLDVNFGKTSMEKANVIVDSGTSTITAPTSFINKFFKDLNVIKVP
FLPFYITTCNNKDMPTLEFKSANNTYTLEPEYYMEPLLDIDDTLCMLYILPVDIDKNTFILGDPFMRKYFTVFDYDKESI
GFAVAKN
>1DP5:A Template
GGHDVPLTNYLNAQYYTDITLGTPPQNFKVILDTGSSNLWVPSNECGSLACFLHSKYDHEASSSYKANGTEFAIQYGTGS
LEGYISQDTLSIGDLTIPKQDFAEATSEPGLTFAFGKFDGILGLGYDTISVDKVVPPFYNAIQQDLLDEKRFAFYLGDTS
KDTENGGEATFGGIDESKFKGDITWLPVRRKAYWEVKFEGIGLGDEYAELESHGAAIDTGTSLITLPSGLAEMINAEIGA
KKGWTGQYTLDCNTRDNLPDLIFNFNGYNFTIGPYDYTLEVSGSCISAITPMDFPEPVGPLAIVGDAFLRKYYSIYDLGN
NAVGLAKAI


Sequence to sequence alignment

Supposing we call the input file with the target and template sequences pair.fasta than by running the following command you obtain a basic alignment with the default parameters (see Features):

subali --in pair.fasta

The resulting alignment is this:

Default align.png


Profile to profile alignment

Most of the time including evolutionary information helps improving the alignment quality. In this example we used PsiBlast to calculate profiles both for the target and the template sequences. The PsiBlast tool is available at:


The profiles have to be generated in a specific format.

When using the online service set the "Formatting options" specifying "Show -> Alignment as -> Plain text" and "Alignment View -> Flat query-anchored with letters for identities".

Instead, if you prefer to generate the input using the command line tool remember to use "-outfmt 4" ("6" in older versions of Blast, see Features). In our case the commands are:

psiblast -num_iterations 3 -db /db/blastdb/nr90 -query 2anl_A.fasta -out 2anl_A.psi -outfmt 4

psiblast -num_iterations 3 -db /db/blastdb/nr90 -query 1dp5_A.fasta -out 1dp5_A.psi -outfmt 4

The output files 2anl_A.psi and 1dp5_A.psi are provided in the samples folder.


Then to generate the alignment simply run:

subali --in pair.fasta --pro1 2anl_A.psi --pro2 1dp5_A.psi


Profile align.png

Evaluate 3D models

Based on the alignment created in the previous section we can easily model the target. In our case, for simplicity, we used the SwissModel online service. In the sample folder you can find two files:

  • model_default.pdb - The model obtained from the default sequence-to-sequence alignment.
  • model_profile.pdb - The model obtained from the profile-to-profile alignment.


Model default.png
rigth

By using the following commands for the two models:

frst -v -i model_default.pdb
frst -v -i model_profile.pdb


We obtain the following output (last line):

model_default.pdb	-29822.6749	-6266.6390	 -18.1340	-223.0000	 -46.3974
model_profile.pdb	-1549.1603	-3196.3570	  -1.1504	-236.0000	 -13.6659


Where numbers represent the following energies:

FRST | RAPDF | Solvation | Hydrogen | Torsion


For comparison, the experimental structure of the target obtains the following energies:

2ANL.pdb (Target)	-26691.5315	-8822.3390	 -23.3529	-224.0000	 -11.8836


According to these results the profile alignment is worse than the default alignment. Moreover the model generated from the default alignment appears to be more stable of the native structure of the Target protein (PDB id 2ANL), one explanation could be that SwissModel favours stability when generating structures. The general idea is that with Victor you can easily generate different alignments (changing algorithms and/or parameters) and you can effectively test them by evaluating the quality of the 3D models built from these alignments.

For an extensive discussion about these methods visit the References page.

Build loops

In the last section we will show you how to build a loop. In this example we take the 3DFR and try to model the loop of 4 residues from the position 89 to 93.

The first step is to generate a LUT (see Features) of size 4:

loboLUT_all -a 4

After that you should find in the data folder of the Victor package the following files: aa2.lt, aa3.lt, aa4.lt.

Now to model the loop simply do:

lobo -i 3DFR.pdb -c A -s 89 -e 93


N.B. To save disk space the "-c" option of loboLUT_all can be used to create only the necessary LUTs in a given range:

loboLUT_all -c 10

will generate only aa2, aa3, aa5, aa10.

Create a new project

To make your own project you need a source file and a make file. It follows a simple program for loading in memory a PDB file and the necessary makefile.


  1.  
  2.   #include <PdbLoader.h>
  3.   #include <Protein.h>
  4.   #include <iostream>
  5.  
  6.   using namespace Victor::Biopool;
  7.   using namespace Victor; 
  8.  
  9.   int main( int argc, char* argv[] ) {
  10.  
  11.      string inputFile = "MyPdbFile.pdb";
  12.      ifstream inFile( inputFile.c_str() );
  13.      PdbLoader pl(inFile);    // creates the PdbLoader object
  14.  
  15.      Protein prot;            
  16.      prot.load( pl );         // creates the Protein object
  17.   }


To generate the corresponding executable you can use the following make file.


  1.  #--*- makefile -*--------------------------------------------------------------
  2.  #
  3.  #   Standard makefile
  4.  #
  5.  #------------------------------------------------------------------------------
  6.  
  7.  # Path to project directory
  8.  UPDIR = /home/Victor/
  9.  # Path to subdirectories
  10.  SUBDIR =
  11.  # Path to directory for binaries
  12.  BINPATH = /home/Victor/bin
  13.  
  14.  #
  15.  # Libraries and paths 
  16.  #
  17.  
  18.  LIBS = -lBiopool -ltools
  19.  
  20.  LIB_PATH = -L.  -L/home/Victor/lib/
  21.  
  22.  INC_PATH +=    -I. -I/home/Victor/tools/ -I/home/Victor/Biopool/Sources/          
  23.  
  24.  #
  25.  # Options
  26.  #
  27.  
  28.  CC=g++
  29.  CFLAGS=-I.  -ansi -pedantic -DNEXCEPTIONS -DLINUX -c -O3 -ffast-math -DNDEBUG -ftemplate-depth-36 -Wno-reorder  -Wno-uninitialized -Wno-write- strings -Wno-narrowing 
  30.  
  31.  #
  32.  # Install rule
  33.  #
  34.  
  35.  install:  
  36. 	$(CC)   $(CFLAGS)   $(INC_PATH) -c test.cc -o test.o  
  37. 	$(CC)   test.o -o test $(LIB_PATH) $(LIBS)


Notice that in this example only Biopool and tools modules are used.