~ubuntu-branches/ubuntu/saucy/libbpp-phyl/saucy

« back to all changes in this revision

Viewing changes to src/Bpp/Phyl/Model/WordReversibleSubstitutionModel.h

  • Committer: Package Import Robot
  • Author(s): Julien Dutheil
  • Date: 2013-02-09 16:00:00 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20130209160000-5v65ba68z8032nzj
Tags: 2.0.3-1
* Reorganized model hierarchy
* New pairwise models
* Several bugs fixed

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//
2
 
// File: WordReversibleSubstitutionModel.h
3
 
// Created by: Laurent Gueguen
4
 
// Created on: Jan 2009
5
 
//
6
 
 
7
 
/*
8
 
   Copyright or © or Copr. CNRS, (November 16, 2004)
9
 
 
10
 
   This software is a computer program whose purpose is to provide classes
11
 
   for phylogenetic data analysis.
12
 
 
13
 
   This software is governed by the CeCILL  license under French law and
14
 
   abiding by the rules of distribution of free software.  You can  use,
15
 
   modify and/ or redistribute the software under the terms of the CeCILL
16
 
   license as circulated by CEA, CNRS and INRIA at the following URL
17
 
   "http://www.cecill.info".
18
 
 
19
 
   As a counterpart to the access to the source code and  rights to copy,
20
 
   modify and redistribute granted by the license, users are provided only
21
 
   with a limited warranty  and the software's author,  the holder of the
22
 
   economic rights,  and the successive licensors  have only  limited
23
 
   liability.
24
 
 
25
 
   In this respect, the user's attention is drawn to the risks associated
26
 
   with loading,  using,  modifying and/or developing or reproducing the
27
 
   software by the user in light of its specific status of free software,
28
 
   that may mean  that it is complicated to manipulate,  and  that  also
29
 
   therefore means  that it is reserved for developers  and  experienced
30
 
   professionals having in-depth computer knowledge. Users are therefore
31
 
   encouraged to load and test the software's suitability as regards their
32
 
   requirements in conditions enabling the security of their systems and/or
33
 
   data to be ensured and,  more generally, to use and operate it in the
34
 
   same conditions as regards security.
35
 
 
36
 
   The fact that you are presently reading this means that you have had
37
 
   knowledge of the CeCILL license and that you accept its terms.
38
 
 */
39
 
 
40
 
#ifndef _WORDREVERSIBLESUBSTITUTIONMODEL_H_
41
 
#define _WORDREVERSIBLESUBSTITUTIONMODEL_H_
42
 
 
43
 
#include "AbstractWordReversibleSubstitutionModel.h"
44
 
#include <Bpp/Numeric/Matrix/Matrix.h>
45
 
#include <Bpp/BppVector.h>
46
 
 
47
 
namespace bpp
48
 
{
49
 
/**
50
 
 * @brief Basal class for words of reversible substitution models.
51
 
 * @author Laurent Guéguen
52
 
 *
53
 
 * Only substitutions with one letter changed are accepted. Hence the
54
 
 * equilibrium frequency of each word is the product of the
55
 
 * equilibrium frequencies of the letters.</p>
56
 
 *
57
 
 * If there are @f$n@f$ models, @f$\rho_i@f$ is the rate of
58
 
 * model i (@f$\sum_{i=1}^{n} \rho_i = 1@f$) and the rates
59
 
 * are defined by relative rates parameters @f$r_i@f$
60
 
 * (called "relratei") with:
61
 
 * @f[
62
 
 * 1 <= i < n, \rho_i = (1-r_1).(1-r_2)...(1-r_{i-1}).r_{i}
63
 
 * @f]
64
 
 * @f[
65
 
 * \rho_n = (1-r_1).(1-r_2)...(1-r_{n-1})
66
 
 * @f]
67
 
 * and
68
 
 * @f[
69
 
 * \forall 1 <= i < n, r_i = \frac{\rho_i}{1-(\rho_1+...\rho_{i-1})}
70
 
 * @f]
71
 
 * where @f$\rho_i@f$ stands for the rate of position @f$i@f$.
72
 
 */
73
 
 
74
 
class WordReversibleSubstitutionModel :
75
 
  public AbstractWordReversibleSubstitutionModel
76
 
{
77
 
public:
78
 
  /**
79
 
   *@brief Build a new WordReversibleSubstitutionModel object from a
80
 
   *Vector of pointers to SubstitutionModels.
81
 
   *
82
 
   *@param modelVector the Vector of substitution models to use, in
83
 
   *   the order of the positions in the words from left to right. All
84
 
   *   the models must be different objects to avoid parameters
85
 
   *   redundancy, otherwise only the first model is used. The used models
86
 
   *   are owned by the instance.
87
 
   * @param st the Namespace.
88
 
   */
89
 
 
90
 
  WordReversibleSubstitutionModel(const std::vector<SubstitutionModel*>& modelVector, const std::string& st = "");
91
 
 
92
 
  /**
93
 
   *@brief Build a new WordReversibleSubstitutionModel object from a
94
 
   *pointer to an SubstitutionModel and a number of
95
 
   *desired models.
96
 
   *
97
 
   * @param pmodel pointer to the substitution model to use in all the
98
 
   *  positions. It is owned by the instance.
99
 
   * @param num The number of models involved.
100
 
   * @param st the Namespace.
101
 
   */
102
 
 
103
 
  WordReversibleSubstitutionModel(SubstitutionModel* pmodel, unsigned int num, const std::string& st = "");
104
 
 
105
 
  virtual ~WordReversibleSubstitutionModel() {}
106
 
 
107
 
  WordReversibleSubstitutionModel* clone() const { return new WordReversibleSubstitutionModel(*this); }
108
 
 
109
 
protected:
110
 
  /**
111
 
   *@brief Constructor for the derived classes only
112
 
   */
113
 
 
114
 
  WordReversibleSubstitutionModel(const Alphabet* alph, const std::string& = "");
115
 
 
116
 
  virtual void updateMatrices();
117
 
  virtual void completeMatrices();
118
 
 
119
 
public:
120
 
  virtual const RowMatrix<double>& getPij_t(double d) const;
121
 
 
122
 
  virtual const RowMatrix<double>& getdPij_dt(double d) const;
123
 
 
124
 
  virtual const RowMatrix<double>& getd2Pij_dt2(double d) const;
125
 
 
126
 
  virtual std::string getName() const;
127
 
};
128
 
} // end of namespace bpp.
129
 
 
130
 
#endif  // _WORDREVERSIBLESUBSTITUTIONMODEL
131