コード例 #1
0
static double evaluatePartialGTRCAT(int i, double ki, int counter,  traversalInfo *ti, double qz,
                                    int w, double *EIGN, double *EI, double *EV,
                                    double *tipVector, unsigned  char **yVector,
                                    int branchReference, int mxtips)
{
    double lz, term;
    double  d[3];
    double   *x1, *x2;
    int scale = 0, k;
    double *lVector = (double *)malloc_aligned(sizeof(double) * 4 * mxtips);

    traversalInfo *trav = &ti[0];

    assert(isTip(trav->pNumber, mxtips));

    x1 = &(tipVector[4 *  yVector[trav->pNumber][i]]);

    for(k = 1; k < counter; k++)
    {
        double
        qz = ti[k].qz[branchReference],
        rz = ti[k].rz[branchReference];

        qz = (qz > zmin) ? log(qz) : log(zmin);
        rz = (rz > zmin) ? log(rz) : log(zmin);

        computeVectorGTRCAT(lVector, &scale, ki, i, qz, rz, &ti[k],
                            EIGN, EI, EV,
                            tipVector, yVector, mxtips);
    }

    x2 = &lVector[4 * (trav->qNumber - mxtips)];

    assert(0 <=  (trav->qNumber - mxtips) && (trav->qNumber - mxtips) < mxtips);

    if(qz < zmin)
        lz = zmin;
    lz  = log(qz);
    lz *= ki;

    d[0] = EXP (EIGN[1] * lz);
    d[1] = EXP (EIGN[2] * lz);
    d[2] = EXP (EIGN[3] * lz);

    term =  x1[0] * x2[0];
    term += x1[1] * x2[1] * d[0];
    term += x1[2] * x2[2] * d[1];
    term += x1[3] * x2[3] * d[2];

    term = LOG(FABS(term)) + (scale * LOG(minlikelihood));

    term = term * w;

    free(lVector);

    return  term;
}
コード例 #2
0
static double evaluatePartialGTRCAT(int i, double ki, int counter,  traversalInfo *ti, double qz,
				    int w, double *EIGN, double *EI, double *EV,
				    double *tipVector, unsigned  char **yVector, 
				    int branchReference, int mxtips, double* expVector)
{
  double lz, term;       
  double  d[3];
  double   *x1, *x2; 
  int scale = 0, k;
  double *lVector = (double *)rax_malloc(sizeof(double) * 4 * mxtips);    

  traversalInfo *trav = &ti[0];
 
  assert(isTip(trav->pNumber, mxtips));
     
  x1 = &(tipVector[4 *  yVector[trav->pNumber][i]]);   

  if (!expVector)
    {
      for(k = 1; k < counter; k++)
        computeVectorGTRCAT(lVector, &scale, ki, i, ti[k].qz[branchReference], ti[k].rz[branchReference], &ti[k],
    			EIGN, EI, EV,
    			tipVector, yVector, mxtips);
    }
  else
    {
      for(k = 1; k < counter; k++)
	{
	  double
	    *ev1 = &expVector[k*6],
	    *ev2 = &expVector[k*6+3];

	  computeVectorGTRCAT_FAST(lVector, &scale, ki, i, &ti[k], EI, EV,
			tipVector, yVector, mxtips, ev1, ev2);
	}
    }

  x2 = &lVector[4 * (trav->qNumber - mxtips)]; 

  assert(0 <=  (trav->qNumber - mxtips) && (trav->qNumber - mxtips) < mxtips);  
       
  if(qz < zmin) 
    lz = zmin;
  lz  = log(qz); 
  lz *= ki;  
  
  d[0] = EXP (EIGN[0] * lz);
  d[1] = EXP (EIGN[1] * lz);
  d[2] = EXP (EIGN[2] * lz);       	   
  
  term =  x1[0] * x2[0];
  term += x1[1] * x2[1] * d[0];
  term += x1[2] * x2[2] * d[1];
  term += x1[3] * x2[3] * d[2];     

  term = LOG(FABS(term)) + (scale * LOG(minlikelihood));   

  term = term * w;

  rax_free(lVector);  

  return  term;
}