abcGL::~abcGL(){ free(angsd_tmpdir); if(GL==0&&doGlf==0) return; else if(GL==1) bam_likes_destroy(); else if(GL==2) gatk_destroy(); else if(GL==4) abcError::killGlobalErrorProbs(errorProbs); else if(GL==5) phys_destroy(); if(doGlf) bgzf_close(gzoutfile); if(gzoutfile!=NULL) bgzf_close(gzoutfile2); if(bufstr.s!=NULL) free(bufstr.s); if(errors){ for(int i=0;i<4;i++) delete [] errors[i]; delete [] errors; } delete [] logfactorial; }
likeClass::~likeClass(){ fflush(stderr); free(angsd_tmpdir); if(GL==0&&doGlf==0) return; else if(GL==1) bam_likes_destroy(); else if(GL==2) gatk_destroy(); else if(GL==4) error::killGlobalErrorProbs(errorProbs); if(doGlf) gzclose(gzoutfile); if(bufstr.s!=NULL) free(bufstr.s); }
void call_bam(chunkyT *chk,double **lk,int trim){ // fprintf(stderr,"trim=%d\n",trim); if(chk==NULL){ if(mod!=NULL) bam_likes_destroy(); return; } assert(mod!=NULL); for(int s=0;s<chk->nSites;s++){ //fprintf(stderr,"posi=%d\n",chk->nd[s][0].refPos); lk[s] = new double[10*chk->nSamples]; for(int ii=0;ii<10*chk->nSamples;ii++) lk[s][ii] = -0.0; //fprintf(stderr,"chr=%s minbaseq=%d\n",chk->refName,minQ); for(int i=0;i<chk->nSamples;i++){ tNode *nd = chk->nd[s][i]; if(nd==NULL) continue; uint16_t bases[nd->l]; int numItems =0; for(int j=0;j<nd->l;j++) { // fprintf(stderr,"posi=%d isop=%d +=%d\n",nd.posi[j],nd.isop[j],nd.posi[j]+nd.isop[j]); int q=nd->qs[j]; // fprintf(stderr,"q=%c\n",q+33); //fprintf(stderr,"skipping q=%d mapQ=%d posi=%d isop=%d\n",q,nd.mapQ[j],nd.posi[j],nd.isop[j]); extern int minQ; if(q<minQ || nd->posi[j]<trim||nd->isop[j]<trim){ // fprintf(stderr,"skipping q=%d mapQ=%d posi=%d isop=%d ind=%d\n",q,nd.mapQ[j],nd.posi[j],nd.isop[j],i); continue; } /* extern int minQ; if(q<minQ || nd.posi[j]<trim||nd.isop[j]<trim){ // fprintf(stderr,"skipping q=%d mapQ=%d posi=%d isop=%d ind=%d\n",q,nd.mapQ[j],nd.posi[j],nd.isop[j],i); continue; } */ if (q>nd->mapQ[j])//dont allow qscores in read to exceed mapping quality q=nd->mapQ[j]; if (q > 63) q = 63; if (q < 4) q = 4; // fprintf(stderr,"q=%d qshift=%d\n",q,q<<5); //plug in values // bca->bases[n++] = q<<5 | (int)bam1_strand(p->b)<<4 | b; int isLower = islower(nd->seq[j])>0; //fprintf(stderr,"strandstuff=%d\tshiftstrandstuff=%d\n",isLower, isLower<<4 ); bases[numItems++] = q<<5 | isLower<<4 | refToInt[nd->seq[j]]; // fprintf(stderr,"bases[%d]=%d\n",j,bases[numItems-1]); } float likes[25]; for(int j=0;0&&j<25;j++) likes[j]=0; if(numItems!=0) { errmod_cal(mod,numItems,5,bases,likes); int ord[] = {0,1,2,3,6,7,8,12,13,18}; for(int gg=0;gg<10;gg++){ //fprintf(stderr,"%f\n",likes[ord[gg]]); lk[s][i*10+gg] = -log(10.0) *likes[ord[gg]]/10.0; } } } // break; } }