830 - Haplotyper::SampleHaplotypes()

From Genome Analysis Wiki
Revision as of 14:10, 2 October 2013 by Goncalo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
float Haplotyper::SampleHaplotypes(float * vector, int & first, int & second, Random & rand)
   {
   float sum = 0.0;
   float *probability = vector;

   // Calculate sum over all states
   for (int i = 0; i < states; i++)
      for (int j = 0; j <= i; j++)
         {
         sum += *probability;
         probability++;
         }

   // Sample number and select state
   float choice = rand->Uniform(0, sum);

   sum = 0.0;

   for (probability = vector, first = 0; first < states; first++)
      {
      for (second = 0; second <= first; second++)
         {
         sum += *probability;
         probability++;

         if (sum >= choice) break;
         }

      if (second <= first) break;
      }

   if (rand->Binary()) SWAP(first, second);
   }