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); }
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); */ }
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]; } } } }