Exemplo n.º 1
0
void em3(double *sfs,Matrix<double> *GL1,Matrix<double> *GL2,Matrix<double> *GL3,double tole=0.01,int maxIter=10){
  double oldLik,lik;
  if(nThreads>1)
    oldLik = lik2_master();
  else
    oldLik = lik2(sfs,GL1,GL2,0,GL1->x);
  fprintf(stderr,"startlik=%f\n",oldLik);

  double *tmp = new double[dim];//<- wont be cleaned up, but is only allocated once
  for(int it=0;SIG_COND&&it<maxIter;it++) {
    if(nThreads>1)
      emStep2_master(tmp);
    else
      emStep2(sfs,GL1,GL2,tmp,0,GL1->x);

    for(int i=0;i<dim;i++)
      sfs[i]= tmp[i];
    
    if(nThreads>1)
      lik = lik2_master();
    else
      lik = lik2(sfs,GL1,GL2,0,GL1->x);
    
    fprintf(stderr,"[%d] lik=%f diff=%g\n",it,lik,fabs(lik-oldLik));

    if(fabs(lik-oldLik)<tole){
      oldLik=lik;
      break;
    }
    oldLik=lik;
  }
  
  
}
Exemplo n.º 2
0
void *lik2_slave(void *p){
  emPars &pars = emp[(size_t) p];

  pars.lik = lik2(pars.sfs,pars.GL1,pars.GL2,pars.from,pars.to);
  //fprintf(stderr," thdid=%d lik=%f\n",pars.threadId,pars.lik);
  return NULL;
}
Exemplo n.º 3
0
void *like_slave(void *p){
  emPars<T> &pars = emp[(size_t) p];
  if(pars.gls.size()==1)
    pars.lik = lik1(pars.sfs,pars.gls,pars.from,pars.to);
  else if(pars.gls.size()==2)
    pars.lik = lik2(pars.sfs,pars.gls,pars.from,pars.to);
  else if(pars.gls.size()==3)
    pars.lik = lik3(pars.sfs,pars.gls,pars.from,pars.to);
  else if(pars.gls.size()==4)
    pars.lik = lik4(pars.sfs,pars.gls,pars.from,pars.to);
  
  pthread_exit(NULL);
}