Changes

From Genome Analysis Wiki
Jump to navigationJump to search
Created page with "<source lang="cpp"> void MarkovModel::Transpose(float * from, float * to, double r) { if (r == 0) for (int i = 0; i < states; i++) to[i] = from[i]; els..."
<source lang="cpp">
void MarkovModel::Transpose(float * from, float * to, double r)
{
if (r == 0)
for (int i = 0; i < states; i++)
to[i] = from[i];
else
{
double flipRate = r * empiricalFlipRate;
double sum = 0.0;

for (int i = 0; i < states; i++)
sum += from[i];

sum *= r * (1.0 - empiricalFlipRate) / states;

double complement = 1. - r;

// avoid underflows
if (sum < 1e-10)
{
sum *= 1e15;
flipRate *= 1e15;
complement *= 1e15;
}

// printf("r = %g, SUM = %g, COMPLEMENT = %g\n", r, sum, complement);

for (int i = 0; i < states; i++)
to[i] = from[i] * complement + from[i^1] * flipRate + sum;
}
}
</source>

Navigation menu