830 - Haplotyper::SummarizeOptions()

From Genome Analysis Wiki
Revision as of 15:55, 2 October 2013 by Goncalo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
float Haplotyper::SummarizeOptions(float * vector, float ** left, float ** right, float theta, int first, int second)
   {
   right[0][0] = (1. - theta) * (1. - theta);
   right[1][0] = right[0][1] = (1. - theta) * theta / states;
   right[1][1] = theta / states * theta / states;

   left[0][0] = left[1][0] = left[0][1] = left[0][0] = 0.;

   float * probability = vector;

   for (int k = 0; k < states; k++)
      {
      for (int l = 0; l < k; l++, probability++)
         {
         left[1][1] += *probability;
         if (first == k || first == l) left[0][1] += *probability * 0.5;
         if (second == k || second == l) left[1][0] += *probability * 0.5;
         if (first == k && second == l || first == l && second == k) left[0][0] += *probability * 0.5;
         }

      left[1][1] += *probability;
      if (first == k) left[0][1] += *probability;
      if (second == k) left[1][0] += *probability;
      if (first == k && second == l) left[0][0] += *probability;
      }

   return left[0][0] * right[0][0] + left[1][0] * right[1][0] +
          left[0][1] * right[0][1] + left[1][1] * right[1][1];
   }