Sequence::Comeron95 Class Reference
[Classes related to the calculation of Ka and Ks]

Ka and Ks by Comeron's (1995) method. More...

#include <Sequence/Comeron95.hpp>

List of all members.

Public Member Functions

 Comeron95 (const Sequence::Seq *seqa, const Sequence::Seq *seqb, int max=3, const Sequence::RedundancyCom95 *genetic_code_redundancy=NULL, GeneticCodes code=UNIVERSAL, WeightingScheme2 *weights2=NULL, WeightingScheme3 *weights3=NULL) throw (Sequence::SeqException)
 ~Comeron95 (void)
double ka (void) const
double ks (void) const
double ratio (void) const
double P0 (void) const
double P2S (void) const
double P2V (void) const
double P4 (void) const
double Q0 (void) const
double Q2S (void) const
double Q2V (void) const
double Q4 (void) const
double as (void) const
double aa (void) const
double bs (void) const
double ba (void) const
double L0 (void) const
double L2S (void) const
double L2V (void) const
double L4 (void) const

Detailed Description

Ka and Ks by Comeron's (1995) method.

A definition of an object to implement Comeron's (1995) method to calculate Ka and Ks The reference is: Comeron, J. (1995) J. Molecular Evolution, 41: 1152-1159. The object has a simple purpose, but it requires a lot of code to do it. The calculation depends upon the following classes:
Sequence::RedundancyCom95
Sequence::Sites
Sequence::SingleSub
Sequence::TwoSubs
Sequence::ThreeSubs

The calculation can be done on any objects of type Sequence::Seq *, or anything derived from there.

You should be warned that this class depends heavily on namespace Sequence (the libsequence library), and may throw any and all exceptions defined in that library, so you should see the documentation for that library.

Note:
This class allows weighting of pathways where codons differ at more than 1 site to be done using any arbitrary weighting scheme. To do so, however, requires deriving classes from Sequence::WeightingScheme2 and Sequence::WeightingScheme2. See the code for Sequence::GranthamWeights2 and Sequence::GranthamWeights3 for an example of how to do this (in the files GranthamWeights.cc and GranthamWeights.hpp). You will also need to study TwoSubs.cc/.hpp and ThreeSubs.cc/.hpp to understand how branches and intermediate codons are labelled (because you need to do it correctly in your implementation of weighting schemes)
This class is best used in the form auto_ptr<Comeron95>, as illustrated in the example below. The reason to use auto_ptr is to prevent resource leaks in case an exception is thrown. This class has strict requirements about the data it is passed, resulting in several places where exceptions can be thrown. Most of these situations are caught in the constructor, which will prevent most leaks. However, anything is possible, so use auto_ptr
Example: a simple program to calculate Ka and Ks:
  #include<iostream>
  #include<memory>
  #include <Sequence/Fasta.hpp>
  #include <Sequence/Alignment.hpp>
  #include <Sequence/SeqExceptions.hpp>
  #include <Sequence/Comeron95.hpp>
 
  //using namespace std;
  using namespace Sequence;
 
  int main
  {
    char *filename = argv[1];
    vector<Fasta > data;
    
    //read data in from a file in Fasta Format
    //program will exit if file is badly format
    //the reason for the exit will be an uncaught
    //exception Sequence::badFormat
    Alignment::GetData(data,filename);
 
    //abort() unless all sequence objects are the same length
    assert(Alignment::IsAlignment(data));
 
    //iterate over the data
    for(unsigned i = 0 ; i < data.size()-1 ; ++i)
    {
      for(unsigned j = i+1 ; j < data.size() ; ++j)
      {
      //calculate and output results
        try
        {
        auto_ptr<Comeron95> C(new Comeron95(&data[i],&data[j]));
        cout << data[i].GetName() << '\t' << data[j].GetName() << '\t';
        cout << C->ka() << '\t' << C->ks() << '\t' << C->ratio() << endl;
        if (C->ratio() > 1.0 && C->ratio() != 999.0)
          cout << "congratulations, you win!" << endl;
        }
        catch (SeqException &e)
        {
          cout << e << endl;
        }
      }
    }
  }
Examples:

gestimator.cc.

Definition at line 126 of file Comeron95.hpp.


Constructor & Destructor Documentation

Sequence::Comeron95::Comeron95 ( const Sequence::Seq seqa,
const Sequence::Seq seqb,
int  max = 3,
const Sequence::RedundancyCom95 genetic_code_redundancy = NULL,
GeneticCodes  code = UNIVERSAL,
WeightingScheme2 _weights2 = NULL,
WeightingScheme3 _weights3 = NULL 
) throw (Sequence::SeqException) [explicit]

Initialize and calculate synonymous and nonsynonymous distances between two sequence objects

Parameters:
seqa an object of type or derived from type Sequence::Seq
seqb an object of type or derived from type Sequence::Seq
max maximum number of substitutions per codon to allow in the analysis
code genetic code, see Sequence::GeneticCodes
_weights2 a weighting scheme for codons differing at 2 positions. If NULL, Sequence::GranthamWeights2 is used
_weights3 a weighting scheme for codons differing at 3 positions. If NULL, Sequence::GranthamWeights3 is used
Warning:
Note that the pointers to weighting schemes are dumb pointers. This allows me to check for NULL and then assign a default. If you use your own classes, make sure they clean up after themselves if they throw exceptions!!!
Todo:
use auto_ptr for the weighting schemes
Exceptions:
Sequence::SeqException if sequence lengths are not equal
Sequence::SeqException if sequence lengths are not multiples of 3

Definition at line 56 of file Comeron95.cc.

Sequence::Comeron95::~Comeron95 ( void   ) 

deletes a pointer to a Sequence::Sites and a Sequence::RedundancyCom95

Definition at line 136 of file Comeron95.cc.


Member Function Documentation

double Sequence::Comeron95::aa ( void   )  const
Returns:
corrected nonsynonymous divergence at tranversioal- and non- degenerate sites

Definition at line 424 of file Comeron95.cc.

double Sequence::Comeron95::as ( void   )  const
Returns:
corrected synonymous divergence at transitional-degenerate sites

Definition at line 415 of file Comeron95.cc.

double Sequence::Comeron95::ba ( void   )  const
Returns:
corrected nonsynonymous divergence at transitional- and non- degenerate sites

Definition at line 442 of file Comeron95.cc.

double Sequence::Comeron95::bs ( void   )  const
Returns:
corrected synonymous divergence at transversional- and fourfold- degenerate sites

Definition at line 433 of file Comeron95.cc.

double Sequence::Comeron95::ka ( void   )  const
Returns:
the nonsynonymous distance
Note:
999.0 is returned if Ka cannot be calculated

Definition at line 463 of file Comeron95.cc.

double Sequence::Comeron95::ks ( void   )  const
Returns:
the synonymous distance
Note:
999.0 is returned if Ks cannot be calculated

Definition at line 471 of file Comeron95.cc.

double Sequence::Comeron95::L0 ( void   )  const
Returns:
the number of nondegenerate sites compared

Definition at line 386 of file Comeron95.cc.

double Sequence::Comeron95::L2S ( void   )  const
Returns:
the number of twofold, transitional-degenerate sites compared

Definition at line 393 of file Comeron95.cc.

double Sequence::Comeron95::L2V ( void   )  const
Returns:
the number of twofold, transversional-degenerate sites compared

Definition at line 400 of file Comeron95.cc.

double Sequence::Comeron95::L4 ( void   )  const
Returns:
the number of 4-fold degenerate sites compared

Definition at line 407 of file Comeron95.cc.

double Sequence::Comeron95::P0 ( void   )  const
Returns:
number of transitions at nondegenerate sites

Definition at line 480 of file Comeron95.cc.

double Sequence::Comeron95::P2S ( void   )  const
Returns:
number of transitions at 2-fold, transitional degenerate sites

Definition at line 487 of file Comeron95.cc.

double Sequence::Comeron95::P2V ( void   )  const
Returns:
number of transitions at 2-fold, transversional degenerate sites

Definition at line 494 of file Comeron95.cc.

double Sequence::Comeron95::P4 ( void   )  const
Returns:
number of transitions at 4-fold degenerate sites

Definition at line 501 of file Comeron95.cc.

double Sequence::Comeron95::Q0 ( void   )  const
Returns:
number of transversion at nondegenerate sites

Definition at line 508 of file Comeron95.cc.

double Sequence::Comeron95::Q2S ( void   )  const
Returns:
number of transversion at 2-fold, transitional degenerate sites

Definition at line 515 of file Comeron95.cc.

double Sequence::Comeron95::Q2V ( void   )  const
Returns:
number of transversion at 2-fold, transversional sites

Definition at line 522 of file Comeron95.cc.

double Sequence::Comeron95::Q4 ( void   )  const
Returns:
number of transversion at 4-fold degenerate sites

Definition at line 529 of file Comeron95.cc.

double Sequence::Comeron95::ratio ( void   )  const
Returns:
$K_a/K_s$
Note:
999.0 is returned if Ka/Ks cannot be calculated

Definition at line 452 of file Comeron95.cc.


The documentation for this class was generated from the following files:
Generated on Thu Aug 11 13:22:01 2011 for libsequence by  doxygen 1.6.3