X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bcftools%2Fbcfutils.c;h=4d6835da8206ea96542ce66e14124b4a388e70db;hb=168ad095c3483f195ae3e404b3cd1fe949681909;hp=6908bc478bf7081409f9ef9f57b332ef9031ce39;hpb=6418571502ba9c6bd4eb930c7ae0309f7f251b4e;p=samtools.git diff --git a/bcftools/bcfutils.c b/bcftools/bcfutils.c index 6908bc4..4d6835d 100644 --- a/bcftools/bcfutils.c +++ b/bcftools/bcfutils.c @@ -48,11 +48,10 @@ int bcf_str2id_add(void *_hash, const char *str) return kh_val(hash, k); } -int bcf_shrink_alt(int n_smpl, bcf1_t *b, int n) +int bcf_shrink_alt(bcf1_t *b, int n) { char *p; - int i, j, k; - int *z; + int i, j, k, *z, n_smpl = b->n_smpl; if (b->n_alleles <= n) return -1; if (n > 1) { for (p = b->alt, k = 1; *p; ++p) @@ -79,6 +78,32 @@ int bcf_shrink_alt(int n_smpl, bcf1_t *b, int n) } // FIXME: to add GL } b->n_alleles = n; - bcf_sync(n_smpl, b); + bcf_sync(b); + return 0; +} + +int bcf_gl2pl(bcf1_t *b) +{ + char *p; + int i, n_smpl = b->n_smpl; + bcf_ginfo_t *g; + float *d0; + uint8_t *d1; + if (strstr(b->fmt, "PL")) return -1; + if ((p = strstr(b->fmt, "GL")) == 0) return -1; + *p = 'P'; + for (i = 0; i < b->n_gi; ++i) + if (b->gi[i].fmt == bcf_str2int("GL", 2)) + break; + g = b->gi + i; + g->fmt = bcf_str2int("PL", 2); + g->len /= 4; // 4 == sizeof(float) + d0 = (float*)g->data; d1 = (uint8_t*)g->data; + for (i = 0; i < n_smpl * g->len; ++i) { + int x = (int)(-10. * d0[i] + .499); + if (x > 255) x = 255; + if (x < 0) x = 0; + d1[i] = x; + } return 0; }