[med-svn] [htslib] 03/06: vcf: bcf_update_format now sets the number of samples in VCF record which previously was responsibility of the user; Fix in bcf_itr_querys macro, non-existent bcf_name2id renamed to bcf_hdr_name2id
Charles Plessy
plessy at moszumanska.debian.org
Tue Dec 10 10:06:47 UTC 2013
This is an automated email from the git hooks/post-receive script.
plessy pushed a commit to branch debian/unstable
in repository htslib.
commit 5e770b308d2a77aed9d90a74fefb305731c940b0
Author: Petr Danecek <pd3 at sanger.ac.uk>
Date: Fri Dec 6 10:16:01 2013 +0000
vcf: bcf_update_format now sets the number of samples in VCF record which previously was responsibility of the user; Fix in bcf_itr_querys macro, non-existent bcf_name2id renamed to bcf_hdr_name2id
---
htslib/vcf.h | 18 +++++++++---------
test/test-vcf-api.c | 14 ++++++--------
vcf.c | 19 ++++++++++---------
3 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/htslib/vcf.h b/htslib/vcf.h
index 7be982b..2bebab4 100644
--- a/htslib/vcf.h
+++ b/htslib/vcf.h
@@ -371,23 +371,23 @@ extern "C" {
* @flt_ids: The filter IDs to set, numeric IDs returned by bcf_id2int(hdr, BCF_DT_ID, "PASS")
* @n: Number of filters. If n==0, all filters are removed
*/
- int bcf_update_filter(bcf_hdr_t *hdr, bcf1_t *line, int *flt_ids, int n);
+ int bcf_update_filter(const bcf_hdr_t *hdr, bcf1_t *line, int *flt_ids, int n);
/**
* bcf_add_filter() - adds to the FILTER column
* @flt_id: filter ID to add, numeric ID returned by bcf_id2int(hdr, BCF_DT_ID, "PASS")
*
* If flt_id is PASS, all existing filters are removed first. If other than PASS, existing PASS is removed.
*/
- int bcf_add_filter(bcf_hdr_t *hdr, bcf1_t *line, int flt_id);
+ int bcf_add_filter(const bcf_hdr_t *hdr, bcf1_t *line, int flt_id);
/**
* bcf_update_alleles() and bcf_update_alleles_str() - update REF and ALLT column
* @alleles: Array of alleles
* @nals: Number of alleles
* @alleles_string: Comma-separated alleles, starting with the REF allele
*/
- int bcf_update_alleles(bcf_hdr_t *hdr, bcf1_t *line, const char **alleles, int nals);
- int bcf_update_alleles_str(bcf_hdr_t *hdr, bcf1_t *line, const char *alleles_string);
- int bcf_update_id(bcf_hdr_t *hdr, bcf1_t *line, const char *id);
+ int bcf_update_alleles(const bcf_hdr_t *hdr, bcf1_t *line, const char **alleles, int nals);
+ int bcf_update_alleles_str(const bcf_hdr_t *hdr, bcf1_t *line, const char *alleles_string);
+ int bcf_update_id(const bcf_hdr_t *hdr, bcf1_t *line, const char *id);
// If n==0, existing tag is removed. Otherwise it is updated or appended. With *_flag, $string is optional.
// With *_string, existing tag is removed when $string set to NULL.
@@ -395,14 +395,14 @@ extern "C" {
#define bcf_update_info_float(hdr,line,key,values,n) bcf_update_info((hdr),(line),(key),(values),(n),BCF_HT_REAL)
#define bcf_update_info_flag(hdr,line,key,string,n) bcf_update_info((hdr),(line),(key),(string),(n),BCF_HT_FLAG)
#define bcf_update_info_string(hdr,line,key,string) bcf_update_info((hdr),(line),(key),(string),1,BCF_HT_STR)
- int bcf_update_info(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type);
+ int bcf_update_info(const bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type);
// If n==0, existing tag is removed. Otherwise it is updated or appended.
#define bcf_update_format_int32(hdr,line,key,values,n) bcf_update_format((hdr),(line),(key),(values),(n),BCF_HT_INT)
#define bcf_update_format_float(hdr,line,key,values,n) bcf_update_format((hdr),(line),(key),(values),(n),BCF_HT_REAL)
#define bcf_update_format_char(hdr,line,key,values,n) bcf_update_format((hdr),(line),(key),(values),(n),BCF_HT_STR)
#define bcf_update_genotypes(hdr,line,gts,n) bcf_update_format((hdr),(line),"GT",(gts),(n),BCF_HT_INT) // See bcf_gt_ macros below
- int bcf_update_format(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type);
+ int bcf_update_format(const bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type);
// Macros for setting genotypes correctly, for use with bcf_update_genotypes only; idx corresponds
// to VCF's GT (1-based index to ALT or 0 for the reference allele) and val is the opposite, obtained
@@ -457,7 +457,7 @@ extern "C" {
#define bcf_get_format_int(hdr,line,tag,dst,ndst) bcf_get_format_values(hdr,line,tag,(void**)(dst),ndst,BCF_HT_INT)
#define bcf_get_format_float(hdr,line,tag,dst,ndst) bcf_get_format_values(hdr,line,tag,(void**)(dst),ndst,BCF_HT_REAL)
#define bcf_get_genotypes(hdr,line,dst,ndst) bcf_get_format_values(hdr,line,"GT",(void**)(dst),ndst,BCF_HT_STR)
- int bcf_get_format_values(bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **dst, int *ndst, int type);
+ int bcf_get_format_values(const bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **dst, int *ndst, int type);
@@ -521,7 +521,7 @@ extern "C" {
#define bcf_itr_destroy(iter) hts_itr_destroy(iter)
#define bcf_itr_queryi(idx, tid, beg, end) hts_itr_query((idx), (tid), (beg), (end))
- #define bcf_itr_querys(idx, hdr, s) hts_itr_querys((idx), (s), (hts_name2id_f)(bcf_name2id), (hdr))
+ #define bcf_itr_querys(idx, hdr, s) hts_itr_querys((idx), (s), (hts_name2id_f)(bcf_hdr_name2id), (hdr))
#define bcf_itr_next(htsfp, itr, r) hts_itr_next((htsfp)->fp.bgzf, (itr), (r), (hts_readrec_f)(bcf_readrec), 0)
#define bcf_index_load(fn) hts_idx_load(fn, HTS_FMT_CSI)
diff --git a/test/test-vcf-api.c b/test/test-vcf-api.c
index 438cdf8..68feb2a 100644
--- a/test/test-vcf-api.c
+++ b/test/test-vcf-api.c
@@ -65,30 +65,29 @@ void write_bcf(char *fname)
bcf_update_info_flag(hdr, rec, "DB", NULL, 1);
bcf_update_info_flag(hdr, rec, "H2", NULL, 1);
// .. FORMAT
- rec->n_sample = hdr->n[BCF_DT_SAMPLE];
- int *tmpia = (int*)malloc(rec->n_sample*2*sizeof(int));
+ int *tmpia = (int*)malloc(bcf_hdr_nsamples(hdr)*2*sizeof(int));
tmpia[0] = bcf_gt_phased(0);
tmpia[1] = bcf_gt_phased(0);
tmpia[2] = bcf_gt_phased(1);
tmpia[3] = bcf_gt_phased(0);
tmpia[4] = bcf_gt_unphased(1);
tmpia[5] = bcf_gt_unphased(1);
- bcf_update_genotypes(hdr, rec, tmpia, rec->n_sample*2);
+ bcf_update_genotypes(hdr, rec, tmpia, bcf_hdr_nsamples(hdr)*2);
tmpia[0] = 48;
tmpia[1] = 48;
tmpia[2] = 43;
- bcf_update_format_int32(hdr, rec, "GQ", tmpia, rec->n_sample);
+ bcf_update_format_int32(hdr, rec, "GQ", tmpia, bcf_hdr_nsamples(hdr));
tmpia[0] = 1;
tmpia[1] = 8;
tmpia[2] = 5;
- bcf_update_format_int32(hdr, rec, "DP", tmpia, rec->n_sample);
+ bcf_update_format_int32(hdr, rec, "DP", tmpia, bcf_hdr_nsamples(hdr));
tmpia[0] = 51;
tmpia[1] = 51;
tmpia[2] = 51;
tmpia[3] = 51;
tmpia[4] = bcf_int32_missing;
tmpia[5] = bcf_int32_missing;
- bcf_update_format_int32(hdr, rec, "HQ", tmpia, rec->n_sample*2);
+ bcf_update_format_int32(hdr, rec, "HQ", tmpia, bcf_hdr_nsamples(hdr)*2);
bcf_write1(fp, hdr, rec);
// 20 1110696 . A G,T 67 . NS=2;DP=10;AF=0.333,.;AA=T;DB GT 2 1 ./.
@@ -107,14 +106,13 @@ void write_bcf(char *fname)
bcf_update_info_float(hdr, rec, "AF", tmpfa, 2);
bcf_update_info_string(hdr, rec, "AA", "T");
bcf_update_info_flag(hdr, rec, "DB", NULL, 1);
- rec->n_sample = hdr->n[BCF_DT_SAMPLE];
tmpia[0] = bcf_gt_phased(2);
tmpia[1] = bcf_int32_vector_end;
tmpia[2] = bcf_gt_phased(1);
tmpia[3] = bcf_int32_vector_end;
tmpia[4] = bcf_gt_missing;
tmpia[5] = bcf_gt_missing;
- bcf_update_genotypes(hdr, rec, tmpia, rec->n_sample*2);
+ bcf_update_genotypes(hdr, rec, tmpia, bcf_hdr_nsamples(hdr)*2);
bcf_write1(fp, hdr, rec);
free(tmpia);
diff --git a/vcf.c b/vcf.c
index 3ec380a..4023930 100644
--- a/vcf.c
+++ b/vcf.c
@@ -1832,7 +1832,7 @@ int bcf_get_variant_type(bcf1_t *rec, int ith_allele)
return rec->d.var[ith_allele].type;
}
-int bcf_update_info(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type)
+int bcf_update_info(const bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type)
{
// Is the field already present?
int i, inf_id = bcf_hdr_id2int(hdr,BCF_DT_ID,key);
@@ -1919,7 +1919,7 @@ int bcf_update_info(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *v
}
-int bcf_update_format(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type)
+int bcf_update_format(const bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void *values, int n, int type)
{
// Is the field already present?
int i, fmt_id = bcf_hdr_id2int(hdr,BCF_DT_ID,key);
@@ -1949,6 +1949,7 @@ int bcf_update_format(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void
return 0;
}
+ line->n_sample = bcf_hdr_nsamples(hdr);
int nps = n / line->n_sample; // number of values per sample
assert( nps && nps*line->n_sample==n ); // must be divisible by n_sample
@@ -2017,7 +2018,7 @@ int bcf_update_format(bcf_hdr_t *hdr, bcf1_t *line, const char *key, const void
}
-int bcf_update_filter(bcf_hdr_t *hdr, bcf1_t *line, int *flt_ids, int n)
+int bcf_update_filter(const bcf_hdr_t *hdr, bcf1_t *line, int *flt_ids, int n)
{
if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT);
line->d.shared_dirty |= BCF1_DIRTY_FLT;
@@ -2030,7 +2031,7 @@ int bcf_update_filter(bcf_hdr_t *hdr, bcf1_t *line, int *flt_ids, int n)
return 0;
}
-int bcf_add_filter(bcf_hdr_t *hdr, bcf1_t *line, int flt_id)
+int bcf_add_filter(const bcf_hdr_t *hdr, bcf1_t *line, int flt_id)
{
if ( !(line->unpacked & BCF_UN_FLT) ) bcf_unpack(line, BCF_UN_FLT);
int i;
@@ -2049,7 +2050,7 @@ int bcf_add_filter(bcf_hdr_t *hdr, bcf1_t *line, int flt_id)
return 1;
}
-static inline int _bcf1_sync_alleles(bcf_hdr_t *hdr, bcf1_t *line, int nals)
+static inline int _bcf1_sync_alleles(const bcf_hdr_t *hdr, bcf1_t *line, int nals)
{
line->n_allele = nals;
hts_expand(char*, line->n_allele, line->d.m_allele, line->d.allele);
@@ -2067,7 +2068,7 @@ static inline int _bcf1_sync_alleles(bcf_hdr_t *hdr, bcf1_t *line, int nals)
line->d.shared_dirty |= BCF1_DIRTY_ALS;
return 0;
}
-int bcf_update_alleles(bcf_hdr_t *hdr, bcf1_t *line, const char **alleles, int nals)
+int bcf_update_alleles(const bcf_hdr_t *hdr, bcf1_t *line, const char **alleles, int nals)
{
kstring_t tmp = {0,0,0};
char *free_old = NULL;
@@ -2094,7 +2095,7 @@ int bcf_update_alleles(bcf_hdr_t *hdr, bcf1_t *line, const char **alleles, int n
return _bcf1_sync_alleles(hdr,line,nals);
}
-int bcf_update_alleles_str(bcf_hdr_t *hdr, bcf1_t *line, const char *alleles_string)
+int bcf_update_alleles_str(const bcf_hdr_t *hdr, bcf1_t *line, const char *alleles_string)
{
kstring_t tmp;
tmp.l = 0; tmp.s = line->d.als; tmp.m = line->d.m_als;
@@ -2111,7 +2112,7 @@ int bcf_update_alleles_str(bcf_hdr_t *hdr, bcf1_t *line, const char *alleles_str
return _bcf1_sync_alleles(hdr, line, nals);
}
-int bcf_update_id(bcf_hdr_t *hdr, bcf1_t *line, const char *id)
+int bcf_update_id(const bcf_hdr_t *hdr, bcf1_t *line, const char *id)
{
kstring_t tmp;
tmp.l = 0; tmp.s = line->d.id; tmp.m = line->d.m_id;
@@ -2196,7 +2197,7 @@ int bcf_get_info_values(bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **ds
return -4; // this can never happen
}
-int bcf_get_format_values(bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **dst, int *ndst, int type)
+int bcf_get_format_values(const bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **dst, int *ndst, int type)
{
int i,j, tag_id = bcf_hdr_id2int(hdr, BCF_DT_ID, tag);
if ( !bcf_hdr_idinfo_exists(hdr,BCF_HL_FMT,tag_id) ) return -1; // no such FORMAT field in the header
--
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/htslib.git
More information about the debian-med-commit
mailing list