X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bcftools%2Fprob1.c;fp=bcftools%2Fprob1.c;h=15735af32cad689dccc41ea186caaa7bf2db3d72;hb=8c15f916dabce475febdf508a9cc0c708c5a7747;hp=a380484310ccd7dc0ee72f922ba9f97aef6be80a;hpb=1250c05d84fbe5bb90a0936522c1b272ca7df8a2;p=samtools.git diff --git a/bcftools/prob1.c b/bcftools/prob1.c index a380484..15735af 100644 --- a/bcftools/prob1.c +++ b/bcftools/prob1.c @@ -193,24 +193,21 @@ void bcf_p1_destroy(bcf_p1aux_t *ma) static int cal_pdg(const bcf1_t *b, bcf_p1aux_t *ma) { - int i, j; - long *p, tmp; - p = alloca(b->n_alleles * sizeof(long)); - memset(p, 0, sizeof(long) * b->n_alleles); + int i, j, imax=0; for (j = 0; j < ma->n; ++j) { const uint8_t *pi = ma->PL + j * ma->PL_len; double *pdg = ma->pdg + j * 3; pdg[0] = ma->q2p[pi[2]]; pdg[1] = ma->q2p[pi[1]]; pdg[2] = ma->q2p[pi[0]]; - for (i = 0; i < b->n_alleles; ++i) - p[i] += (int)pi[(i+1)*(i+2)/2-1]; + int ib,ia=0,n=(b->n_alleles+1)*b->n_alleles/2; + for (i=0; iimax ) imax=ia; + i++; + } + ia++; + } } - for (i = 0; i < b->n_alleles; ++i) p[i] = p[i]<<4 | i; - for (i = 1; i < b->n_alleles; ++i) // insertion sort - for (j = i; j > 0 && p[j] < p[j-1]; --j) - tmp = p[j], p[j] = p[j-1], p[j-1] = tmp; - for (i = b->n_alleles - 1; i >= 0; --i) - if ((p[i]&0xf) == 0) break; - return i; + return imax; } int bcf_p1_call_gt(const bcf_p1aux_t *ma, double f0, int k)