This package contains code to implementing the methods first described
in the ECCB 2010 submission "A Convex Programming Model for Protein
Structure Prediction" by Chris Kauffman and George Karypis.

These notes are a very preliminary version of what I hope to become a
full-fledged tutorial.  Until that time, please feel free to e-mail me
with questions. 

Cheers,
Chris Kauffman
kauffman@cs.umn.edu

----------------------------------------------------------------------

Directories

| bin     | Contains some binaries, ballmodel for processing PDB files  |
| data    | Some .dat files (input to Domo) and corresponding PDB files |
| doc     | Future home of documentation                                |
| matlab  | The main location for code related to Domo                  |
| scripts | A few useful scripts for high-level benchmarking            |

----------------------------------------------------------------------

The main code are in Matlab .m files under the matlab/ subdirectory.
Matlab may be made aware of these scripts by doing

>> addpath /path/to/domo/matlab

You will also need a copy of CSDP by Brian Borchers.  I have made some
slight modifications to it which should be distributed from a similar
location to where you got Domo.  Domo will *NOT* work with the
original unmodified version.  The 'csdp.m' routine is needed for all
high-level Domo functions (domo_predict, nedm_predict, etc.) to work.
To make matlab aware of its location do

>> addpath /path/to/csdp/matlab

If Matlab complains that it cannot find the csdp executable, you will
probably need to restart and make sure csdp is on your shell's path.

The basic architecture of Domo is to read a problem instance into a
data structure, generate a noisy version of the information in the
instance, and then attempt to predict the original answer from the
noisy version.

Domo requires the optimization toolbox in order to function properly
at this point as it uses the 'lsqlin()' function internally.  With the
right tweaks, it is possible to use the SeDuMi optimizer rather than
lsqlin().  In a future release, we may make this a top-level feature
but feel free to hack if you don't have acces to the optimation
toolbox. 

A typical session might look like.

>> I = instance('data/d1e8ra_.dat');           % Read a protein instance
>> Dn = [Dn]=get_noise(I, [], 'dmat', 1, 0.25);% Create a noisy distance matrix
>> E = domo_predict(I,Dn);                     % Predict the structure using the noisy data
>> rms = gram2struct(mat(E.x),'I',I,'srmsd');  % Compute RMSD of prediction to truth 

Also available are the more standard distance geometry approachs.

>> E = nedm_predict(I,Dn);               % Nearest EDM, 15 angstrom cutoff
>> E = cmds_predict(I,Dn);               % Classical multidimensional scaling

In addition, we provide the pure convex prediction methods Objz1 and
Objz2 described in the paper.  These require an objective in order to
function properly.

>> c = load('data/d1e8ra_.cL');                % Load an objective
>> cn = get_noise(I, c, 'obj', 1, 0.25);       % Create a noisy objective
>> E = objz1_predict(I,Dn);                    % Predict the structure via Objz1
>> rms = gram2struct(mat(E.x),'I',I,'srmsd');  % Compute RMSD of prediction to truth 
>> E = objz2_predict(I,Dn);                    % Predict the structure via Objz1
>> rms = gram2struct(mat(E.x),'I',I,'srmsd');  % Compute RMSD of prediction to truth 

If you want to work with new proteins, you will need to use the
'ballmodel' program to convert the structure (.pdb or .ent) into a
data file readable by instance.m.  For example, if the structure is in
1AGTA.pdb, do the following.

sh> domo/bin/ballmodel -mode domo 1AGTA.pdb

which should produce the file '1AGTA.dat' which may be read in matlab
with

>> I = instance(1AGTA.dat');

If you want to compute objectives for new protein structures for use
with pure convex prediction, use obj_design_fixed.m in the following
way (this also requires the optimization toolbox currently).

>> R = obj_design_fixed(reduce_instance(I));
>> c = R.cL;

