Skip to content

Commit f5491f0

Browse files
committed
Fix bug in computing ML distances (.mldist) for +I or +R models
1 parent 520be62 commit f5491f0

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

alignment/alignmentpairwise.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,17 +259,26 @@ void AlignmentPairwise::computeFuncDerv(double value, double &df, double &ddf) {
259259

260260
for (cat = 0; cat < ncat; cat++) {
261261
double rate_val = site_rate->getRate(cat);
262+
double prop_val = site_rate->getProp(cat);
262263
if (tree->getModelFactory()->site_rate->getGammaShape() == 0.0)
263264
rate_val = 1.0;
264265

265-
double rate_sqr = rate_val * rate_val;
266+
double coeff1 = rate_val * prop_val;
267+
double coeff2 = rate_val * coeff1;
266268
tree->getModelFactory()->computeTransDerv(value * rate_val, trans_mat, trans_derv1, trans_derv2);
267269
for (i = 0; i < trans_size; i++) {
268-
sum_trans[i] += trans_mat[i];
269-
sum_derv1[i] += trans_derv1[i] * rate_val;
270-
sum_derv2[i] += trans_derv2[i] * rate_sqr;
270+
sum_trans[i] += trans_mat[i] * prop_val;
271+
sum_derv1[i] += trans_derv1[i] * coeff1;
272+
sum_derv2[i] += trans_derv2[i] * coeff2;
271273
}
272274
}
275+
276+
// 2019-07-03: incorporate p_invar
277+
double p_invar = site_rate->getPInvar();
278+
if (p_invar > 0.0)
279+
for (i = 0; i < num_states; i++)
280+
sum_trans[i*num_states+i] += p_invar;
281+
273282
for (i = 0; i < trans_size; i++)
274283
if (pair_freq[i] > Params::getInstance().min_branch_length && sum_trans[i] > 0.0) {
275284
// lh -= pair_freq[i] * log(sum_trans[i]);

0 commit comments

Comments
 (0)