void hwe::run(funkyPars *pars){ if(doHWE==0) return; // pars->hweStruct = new funkyHWE;//old funkyHWE *hweStruct = new funkyHWE;//new double *freq = new double[pars->numSites]; double *F = new double[pars->numSites]; double *like0 = new double[pars->numSites]; double *likeF = new double[pars->numSites]; double **loglike3; loglike3=angsd::get3likes(pars); for(int s=0;s<pars->numSites;s++){ if(pars->keepSites[s]==0) continue; //start parameter double x[2]; x[0]=0.05; x[1]=0.05; estHWE(x,loglike3[s],pars->nInd); freq[s]=x[0]; F[s]=x[1]; likeF[s] = HWE_like(x,loglike3[s],pars->nInd); x[1]=0.0; x[0]=pars->results->asso->freq[s]; like0[s] = HWE_like(x,loglike3[s],pars->nInd); // fprintf(stderr,"%f\t%f\n",x[0],x[1]); //fprintf(stderr,"%f\t%f\t%f\n",loglike3[s][0],loglike3[s][1],loglike3[s][2]); } //old // pars->hweStruct->freq=freq; // pars->hweStruct->F=F; hweStruct->freq=freq; hweStruct->F=F; hweStruct->like0=like0; hweStruct->likeF=likeF; pars->extras[index] = hweStruct; for(int s=0;s<pars->numSites;s++) delete[] loglike3[s]; delete[] loglike3; }
void abcHWE::run(funkyPars *pars){ if(doHWE==0) return; funkyHWE *hweStruct = new funkyHWE; double *freq = new double[pars->numSites]; double *freqHWE = new double[pars->numSites]; double *F = new double[pars->numSites]; double *like0 = new double[pars->numSites]; double *likeF = new double[pars->numSites]; double **loglike3; loglike3=angsd::get3likesRescale(pars); for(int s=0;s<pars->numSites;s++){ if(pars->keepSites[s]==0) continue; //est under HWE freqHWE[s] = angsd::estFreq(loglike3[s],pars->nInd); //start parameter double x[2]; x[1]=0.0; //F x[0]=freqHWE[s]; // freq //log like for HWE freq like0[s] = HWE_like(x,loglike3[s],pars->nInd); //start parameter for EM_F x[0]=freqHWE[s]; x[1]=0.05; estHWE(x,loglike3[s],pars->nInd); freq[s]=x[0]; F[s]=x[1]; likeF[s] = HWE_like(x,loglike3[s],pars->nInd); // fprintf(stderr,"%f\t%f\n",x[0],x[1]); //fprintf(stderr,"%f\t%f\t%f\n",loglike3[s][0],loglike3[s][1],loglike3[s][2]); float lrt= 2*like0[s]-2*likeF[s]; if(lrt<0) lrt=0; if(lrt<LRT_thres) pars->keepSites[s] =0; } hweStruct->freq=freq; hweStruct->freqHWE=freqHWE; hweStruct->F=F; hweStruct->like0=like0; hweStruct->likeF=likeF; pars->extras[index] = hweStruct; for(int s=0;s<pars->numSites;s++) delete[] loglike3[s]; delete[] loglike3; }