-/* dist_dna.c 2008-01-19 */
+/* dist_dna.c 2008-12-22 */
/* Copyright 2005-2008 Emmanuel Paradis
if (KnownBase(x[s1]) && KnownBase(x[s2])) L++;\
else continue;
-void distDNA_raw(unsigned char *x, int *n, int *s, double *d)
+void distDNA_raw(unsigned char *x, int *n, int *s, double *d, int scaled)
{
int i1, i2, s1, s2, target, Nd;
Nd = 0;
for (s1 = i1 - 1, s2 = i2 - 1; s1 < i1 + *n*(*s - 1); s1+= *n, s2 += *n)
if (DifferentBase(x[s1], x[s2])) Nd++;
- d[target] = ((double) Nd / *s);
+ if (scaled) d[target] = ((double) Nd / *s);
+ else d[target] = ((double) Nd);
target++;
}
}
}
-void distDNA_raw_pairdel(unsigned char *x, int *n, int *s, double *d)
+void distDNA_raw_pairdel(unsigned char *x, int *n, int *s, double *d, int scaled)
{
int i1, i2, s1, s2, target, Nd, L;
CHECK_PAIRWISE_DELETION
if (DifferentBase(x[s1], x[s2])) Nd++;
}
- d[target] = ((double) Nd/L);
+ if (scaled) d[target] = ((double) Nd/L);
+ else d[target] = ((double) Nd);
target++;
}
}
int *gamma, double *alpha)
{
switch (*model) {
- case 1 : if (pairdel) distDNA_raw_pairdel(x, n, s, d);
- else distDNA_raw(x, n, s, d); break;
+ case 1 : if (pairdel) distDNA_raw_pairdel(x, n, s, d, 1);
+ else distDNA_raw(x, n, s, d, 1); break;
case 2 : if (pairdel) distDNA_JC69_pairdel(x, n, s, d, variance, var, gamma, alpha);
else distDNA_JC69(x, n, s, d, variance, var, gamma, alpha); break;
case 12 : if (pairdel) distDNA_ParaLin_pairdel(x, n, s, d, variance, var);
else distDNA_ParaLin(x, n, s, d, variance, var); break;
+ case 13 : if (pairdel) distDNA_raw_pairdel(x, n, s, d, 0);
+ else distDNA_raw(x, n, s, d, 0); break;
}
}