Difference between revisions of "830 - Haplotyper::ImputeGenotypes() (internal)"
From Genome Analysis Wiki
Jump to navigationJump to search (Created page with "void Haplotyper::ImputeGenotypes(float * matrix1, float * matrix2, int marker) { posterior[0][marker] = posterior[1][marker] = posterior[2][marker] = 0.0; for (int i...") |
|||
Line 1: | Line 1: | ||
+ | <source lang="cpp"> | ||
+ | |||
void Haplotyper::ImputeGenotypes(float * matrix1, float * matrix2, int marker) | void Haplotyper::ImputeGenotypes(float * matrix1, float * matrix2, int marker) | ||
{ | { | ||
Line 14: | Line 16: | ||
posterior[haplotypes[i][marker] * 2][marker] += *matrix1 * *matrix2; | posterior[haplotypes[i][marker] * 2][marker] += *matrix1 * *matrix2; | ||
} | } | ||
+ | |||
+ | double sum = posterior[0][marker] = posterior[1][marker] = posterior[2][marker]; | ||
+ | |||
+ | posterior[0][marker] /= sum; | ||
+ | posterior[1][marker] /= sum; | ||
+ | posterior[2][marker] /= sum; | ||
} | } | ||
+ | |||
+ | </source> |
Revision as of 14:29, 2 October 2013
void Haplotyper::ImputeGenotypes(float * matrix1, float * matrix2, int marker)
{
posterior[0][marker] = posterior[1][marker] = posterior[2][marker] = 0.0;
for (int i = 0; i < states; i++, matrix1++, matrix2++)
{
if (haplotypes[i][marker])
for (int j = 0; j < i; j++, matrix1++, matrix2++)
posterior[haplotypes[j][marker] + 1][marker] += *matrix1 * *matrix2 * 0.5;
else
for (int j = 0; j < i; j++, matrix1++, matrix2++)
posterior[haplotypes[j][marker]][marker] += *matrix1 * *matrix2 * 0.5;
posterior[haplotypes[i][marker] * 2][marker] += *matrix1 * *matrix2;
}
double sum = posterior[0][marker] = posterior[1][marker] = posterior[2][marker];
posterior[0][marker] /= sum;
posterior[1][marker] /= sum;
posterior[2][marker] /= sum;
}