Difference between revisions of "830 - Haplotyper::SampleChromosomes()"
From Genome Analysis Wiki
Jump to navigationJump to search (Created page with " void Haplotyper::SampleChromosomes(Random * rand) { RewindMemoryPool(); RetrieveMemoryBlock(markers - 1); int first = 0, second = 0; SampleHaplotypes(leftMat...") |
(No difference)
|
Revision as of 14:11, 2 October 2013
void Haplotyper::SampleChromosomes(Random * rand)
{ RewindMemoryPool(); RetrieveMemoryBlock(markers - 1);
int first = 0, second = 0; SampleHaplotypes(leftMatrices[markers - 1], first, second, rand);
float left[2][2], right[2][2]; for (int j = markers - 2; j >= 0; j--) { RecordHaplotype(j + 1, first, second); RetrieveMemoryBlock(j);
float sum = SummarizeOptions(leftMatrices[j], left, right, thetas[j], first, second); float choice = rand->Uniform(0, sum);
// The most likely outcome is that no changes occur ... choice -= left[0][0] * right[0][0]; if (choice <= 0.0) continue;
// Otherwise, check if the second haplotype changed ... choice -= left[0][1] * right[0][1]; if (choice <= 0.0) { SampleOneHaplotype(leftMatrices[j], first, second, -choice / right[0][1]); continue; }
// Otherwise, check if the first haplotype changed ... choice -= left[1][0] * right[1][0]; if (choice <= 0.0) { SampleOneHaplotype(leftMatrices[j], second, first, -choice / right[1][0]); continue; }
// And sometimes, both haplotypes recombine and we start fresh SampleHaplotypes(leftMatrices[j], first, second, rand); } RecordHaplotypes(0, first, second); }