830 - MarkovModel::Transpose()

From Genome Analysis Wiki
Revision as of 14:39, 25 September 2013 by Goncalo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
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 sum = 0.0;

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

      sum *= r / states;

      double complement = 1. - r;

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

      for (int i = 0; i < states; i++)
         to[i] = from[i] * complement + sum;
      }
   }