830 - MarkovModel::WalkRight()
From Genome Analysis Wiki
Jump to navigationJump to search
void MarkovModel::WalkRight(char * major, char * observed, char ** haplotypes, float ** freqs)
{
float * swap;
float * vector = new float [states];
float * extra = new float [states];
// Initialize likelihoods at first position
for (int i = 0; i < states; i++)
vector[i] = 1.;
// Scan along chromosome
for (int i = markers - 1; i > 0; i--)
{
for (int j = 0; j < states; j++)
extra[j] = vector[j] * matrix[i][j];
Impute(major, observed, extra, haplotypes, freqs, i);
if (observed[i])
Condition(vector, haplotypes, i, observed[i], E[i], freqs[observed[i]][i]);
Transpose(vector, extra, R[i - 1]);
swap = vector; vector = extra; extra = swap;
}
if (observed[0])
Condition(vector, haplotypes, 0, observed[0], E[0], freqs[observed[0]][0]);
Impute(major, observed, vector, haplotypes, freqs, 0);
delete [] vector;
delete [] extra;
}