59 size_(alpha->getSize()),
62 generator_(size_, size_),
64 exchangeability_(size_, size_),
67 d2pijt_(size_, size_),
68 eigenDecompose_(true),
71 isDiagonalizable_(false),
72 rightEigenVectors_(size_, size_),
73 isNonSingular_(false),
74 leftEigenVectors_(size_, size_),
78 for (
size_t i = 0; i <
size_; i++)
81 chars_[i] =
static_cast<int>(i);
93 if (!dynamic_cast<AbstractReversibleSubstitutionModel*>(
this)) {
94 for (
size_t i = 0; i <
size_; i++)
96 for (
size_t j = 0; j <
size_; j++)
118 isDiagonalizable_ =
false;
149 std::vector<double> vdia(
size_);
150 std::vector<double> vup(
size_ - 1);
151 std::vector<double> vlo(
size_ - 1);
153 double l =
rate_ * t;
154 for (
size_t i = 0; i <
size_; i++)
162 vup[i] = vdia[i] * s;
164 vdia[i + 1] = vdia[i];
183 double v =
rate_ * t;
190 for (
size_t i = 1; i <
vPowGen_.size(); i++)
192 s *= v /
static_cast<double>(i);
216 std::vector<double> vdia(
size_);
217 std::vector<double> vup(
size_ - 1);
218 std::vector<double> vlo(
size_ - 1);
220 double l =
rate_ * t;
221 for (
size_t i = 0; i <
size_; i++)
231 vdia[i + 1] = vdia[i];
250 double v =
rate_ * t;
257 for (
size_t i = 1; i <
vPowGen_.size(); i++)
259 s *= v /
static_cast<double>(i);
285 std::vector<double> vdia(
size_);
286 std::vector<double> vup(
size_ - 1);
287 std::vector<double> vlo(
size_ - 1);
289 double l =
rate_ * t;
290 for (
size_t i = 0; i <
size_; i++)
304 vdia[i + 1] = vdia[i];
323 double v =
rate_ * t;
330 for (
size_t i = 1; i <
vPowGen_.size(); i++)
332 s *= v /
static_cast<double>(i);
354 if (state < 0 || !alphabet_->isIntInAlphabet(state))
355 throw BadIntException(state,
"AbstractSubstitutionModel::getInitValue. Character " + alphabet_->intToChar(state) +
" is not allowed in model.");
356 vector<int> states = alphabet_->getAlias(state);
357 for (
size_t j = 0; j < states.size(); j++)
359 if (getAlphabetChar(i) == states[j])
369 map<int, int> counts;
372 map<int, double> freqs;
374 for (
int i = 0; i < static_cast<int>(
size_); i++)
376 t += counts[i] + pseudoCount;
378 for (
int i = 0; i < static_cast<int>(
size_); i++)
380 freqs[i] = (
static_cast<double>(counts[i]) + pseudoCount) / t;
391 for (
int i = 0; i < static_cast<int>(
size_); i++)
405 return -VectorTools::scalar<double, double>(v,
freq_);
447 for (
size_t i = 0; i <
size_; i++)
450 for (
size_t j = 0; j <
size_; j++)
464 for (
size_t i = 0; i <
size_; i++)