示例#1
0
void majorminor::run(funkyPars *pars){
  if(doMajorMinor==0 || doMajorMinor ==3 )
    return;
  if(doMajorMinor==1 && pars->likes==NULL){
    fprintf(stderr,"[%s.%s():%d] Problem here:\n",__FILE__,__FUNCTION__,__LINE__);
    exit(0);
  }

  
  //allocate and initialize
  pars->major = new char [pars->numSites];
  pars->minor = new char [pars->numSites];
  memset(pars->major,4,pars->numSites);
  memset(pars->minor,4,pars->numSites);
  
  if(doMajorMinor!=2)
    majorMinorGL(pars);
  else if(doMajorMinor==2)
    majorMinorCounts(pars->counts,pars->nInd,pars->numSites,pars->major,pars->minor,pars->keepSites);
  else
    fprintf(stderr,"[%s.%s()%d] Should never happen\n",__FILE__,__FUNCTION__,__LINE__);

  //if user has requested reference/ancestral as major then swap if needed
  if(doMajorMinor==4||doMajorMinor==5)
    modMajorMinor(pars,doMajorMinor);
}
示例#2
0
void abcMajorMinor::run(funkyPars *pars){
  if(doMajorMinor==0 || doMajorMinor ==3 )
    return;
  if(doMajorMinor==1 && pars->likes==NULL){
    fprintf(stderr,"[%s.%s():%d] Problem here:\n",__FILE__,__FUNCTION__,__LINE__);
    exit(0);
  }

  
  //allocate and initialize
  pars->major = new char [pars->numSites];
  pars->minor = new char [pars->numSites];
  memset(pars->major,4,pars->numSites);
  memset(pars->minor,4,pars->numSites);
  
  if(doMajorMinor!=2)
    majorMinorGL(pars,doMajorMinor);
  else if(doMajorMinor==2)
    majorMinorCounts(pars->counts,pars->nInd,pars->numSites,pars->major,pars->minor,pars->keepSites,doMajorMinor,pars->ref,pars->anc);
  else
    fprintf(stderr,"[%s.%s()%d] Should never happen\n",__FILE__,__FUNCTION__,__LINE__);

  if(doSaf!=0&&pest!=NULL){
    //fix case of triallelic site in pest output when doing pest
    for(int s=0;s<pars->numSites;s++){
      if(pars->keepSites[s]==0)
	continue;
      int a=refToInt[pars->anc[s]];
      int b=refToInt[pars->major[s]];
      int c=refToInt[pars->major[s]];
      if(a!=b&&a!=c)
	pars->keepSites[s]=0;
    }

  }

  //if user has requested reference/ancestral then it is done in majorMinorGL and majorMinorCounts 0.585
  /*
  if(doMajorMinor==4||doMajorMinor==5)
    modMajorMinor(pars,doMajorMinor);
  */
}
示例#3
0
void abcMajorMinor::run(funkyPars *pars){
  if(doMajorMinor==0 || doMajorMinor ==3 )
    return;
  if(doMajorMinor==1 && pars->likes==NULL){
    fprintf(stderr,"[%s.%s():%d] Problem here:\n",__FILE__,__FUNCTION__,__LINE__);
    exit(0);
  }

  
  //allocate and initialize
  pars->major = new char [pars->numSites];
  pars->minor = new char [pars->numSites];
  memset(pars->major,4,pars->numSites);
  memset(pars->minor,4,pars->numSites);
  
  if(doMajorMinor!=2)
    majorMinorGL(pars,doMajorMinor);
  else if(doMajorMinor==2)
    majorMinorCounts(pars->counts,pars->nInd,pars->numSites,pars->major,pars->minor,pars->keepSites,doMajorMinor,pars->ref,pars->anc);
  else
    fprintf(stderr,"[%s.%s()%d] Should never happen\n",__FILE__,__FUNCTION__,__LINE__);

  if(doSaf!=0&&pest!=NULL&&skipTriallelic==1){
    //fix case of triallelic site in pest output when doing pest
    for(int s=0;s<pars->numSites;s++){
      if(pars->keepSites[s]==0)
	continue;
      int a=refToInt[pars->anc[s]];
      int b=refToInt[pars->major[s]];
      int c=refToInt[pars->minor[s]];
      if(a!=b&&a!=c)
	pars->keepSites[s]=0;
    }

  }

  //if user has requested reference/ancestral then it is done in majorMinorGL and majorMinorCounts 0.585
  /*
  if(doMajorMinor==4||doMajorMinor==5)
    modMajorMinor(pars,doMajorMinor);
  */
  if(doGlf==2||doVcf>0){
    lh3struct *lh3 = new lh3struct;
    pars->extras[index] = lh3;
    lh3->hasAlloced = new char[pars->numSites];
    memset(lh3->hasAlloced,0,pars->numSites);
    lh3->lh3 = new double *[pars->numSites];

    for(int s=0;s<pars->numSites;s++) {
      if(pars->keepSites[s]==0)
	continue;
      int major = pars->major[s];
      int minor = pars->minor[s];
      assert(major!=4&&minor!=4);
      
      lh3->hasAlloced[s]=1;
      lh3->lh3[s] = new double[3*pars->nInd];

      for(int i=0;i<pars->nInd;i++) {

	double val[3];
	val[0] = pars->likes[s][i*10+angsd::majorminor[major][major]];
	val[1] = pars->likes[s][i*10+angsd::majorminor[major][minor]];
	val[2] = pars->likes[s][i*10+angsd::majorminor[minor][minor]];
	if(isnan(val,3)){
	  pars->keepSites[s]=0;
	  break;
	}
	angsd::logrescale(val,3);
	lh3->lh3[s][i*3+0]=val[0];
	lh3->lh3[s][i*3+1]=val[1];
	lh3->lh3[s][i*3+2]=val[2];
      }
      

    }
  }

}