Skip to content

Commit

Permalink
added remaining setters and getters for INFO via a C++ interface.
Browse files Browse the repository at this point in the history
  • Loading branch information
atks committed Aug 22, 2016
1 parent bd7fcd0 commit 4cbceff
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 44 deletions.
116 changes: 82 additions & 34 deletions hts_utils.cpp
Expand Up @@ -1239,21 +1239,13 @@ int32_t bcf_get_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t defau
/**
* Sets an info integer.
*/
int32_t bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t value)
void bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t value)
{
return bcf_update_info_int32(h, v, tag, &value, 1);
bcf_update_info_int32(h, v, tag, &value, 1);
}

/**
* Sets an info integer vector.
*/
int32_t bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<int32_t>& values)
{
return bcf_update_info_int32(h, v, tag, &values[0], values.size());
}

/**
* Gets an info int vector.
* Gets an info integer vector.
*/
std::vector<int32_t> bcf_get_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t default_size, int32_t default_value)
{
Expand All @@ -1273,6 +1265,22 @@ std::vector<int32_t> bcf_get_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* t
return i_vec;
}

/**
* Sets an info integer vector.
*/
void bcf_set_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<int32_t>& values)
{
bcf_update_info_int32(h, v, tag, &values[0], values.size());
}

/**
* Sets an info integer vector.
*/
void bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<int32_t>& values)
{
bcf_update_info_int32(h, v, tag, &values[0], values.size());
}

/**
* Gets an info float.
*/
Expand All @@ -1297,9 +1305,70 @@ float bcf_get_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float default_v
/**
* Sets an info float.
*/
int32_t bcf_set_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float value)
void bcf_set_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float value)
{
bcf_update_info_float(h, v, tag, &value, 1);
}

/**
* Gets an info integer vector.
*/
std::vector<float> bcf_get_info_flt_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t default_size, float default_value)
{
std::vector<float> vec;

return vec;
}

/**
* Sets an info float vector.
*/
void bcf_set_info_flt_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<float>& values)
{
}

/**
* Gets an info string.
*/
std::string bcf_get_info_str(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value)
{
std::string str = "";
char* s = NULL;
int32_t n = 0;
if (bcf_get_info_string(h, v, tag, &s, &n)>0)
{
str.assign(s);
free(s);
}
else
{
return default_value;
}

return str;
}

/**
* Sets an info string.
*/
void bcf_set_info_str(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value)
{
}

/**
* Gets an info string vector.
*/
std::vector<std::string> bcf_get_info_str_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value)
{
std::vector<std::string> vec;

return vec;
}
/**
* Sets an info string vector.
*/
void bcf_set_info_str_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<std::string> values)
{
return bcf_update_info_float(h, v, tag, &value, 1);
}

/**
Expand Down Expand Up @@ -1339,27 +1408,6 @@ bcf_hdr_t* bcf_create_dummy_hdr()
return h;
}

/**
* Gets an info string.
*/
std::string bcf_get_info_str(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value)
{
std::string str = "";
char* s = NULL;
int32_t n = 0;
if (bcf_get_info_string(h, v, tag, &s, &n)>0)
{
str.assign(s);
free(s);
}
else
{
return default_value;
}

return str;
}

/**
* Creates a dummy bcf record representing the variant for testing purposes.
*
Expand Down
37 changes: 31 additions & 6 deletions hts_utils.h
Expand Up @@ -496,17 +496,17 @@ int32_t bcf_get_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t defau
/**
* Sets an info integer.
*/
int32_t bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t value);
void bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t value);

/**
* Sets an info integer vector.
* Gets an info integer vector.
*/
int32_t bcf_set_info_int(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<int32_t>& values);
std::vector<int32_t> bcf_get_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t default_size=0, int32_t default_value=0);

/**
* Gets an info int vector.
* Sets an info integer vector.
*/
std::vector<int32_t> bcf_get_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t default_size=0, int32_t default_value=0);
void bcf_set_info_int_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<int32_t>& values);

/**
* Gets an info float.
Expand All @@ -516,13 +516,38 @@ float bcf_get_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float default_v
/**
* Sets an info float.
*/
int32_t bcf_set_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float value);
void bcf_set_info_flt(bcf_hdr_t *h, bcf1_t *v, const char* tag, float value);

/**
* Gets an info integer vector.
*/
std::vector<float> bcf_get_info_flt_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, int32_t default_size=0, float default_value=0);

/**
* Sets an info float vector.
*/
void bcf_set_info_flt_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<float>& values);

/**
* Gets an info string.
*/
std::string bcf_get_info_str(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value = "");

/**
* Sets an info string.
*/
void bcf_set_info_str(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value = "");

/**
* Gets an info string vector.
*/
std::vector<std::string> bcf_get_info_str_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::string default_value = "");

/**
* Sets an info string vector.
*/
void bcf_set_info_str_vec(bcf_hdr_t *h, bcf1_t *v, const char* tag, std::vector<std::string> values);

/**
* Get allele
*/
Expand Down
4 changes: 2 additions & 2 deletions info2tab.cpp
Expand Up @@ -316,7 +316,7 @@ class Igor : Program
{
for (uint32_t j=0; j<num; ++j)
{
if (j) fprintf(out, "\t");
if (j) fprintf(out, ",");

float val = bcf_get_info_flt(h, v, info_tag_str[i].c_str());
fprintf(out, "%f", val);
Expand All @@ -326,7 +326,7 @@ class Igor : Program
{
for (uint32_t j=0; j<num; ++j)
{
if (j) fprintf(out, "\t");
if (j) fprintf(out, ",");

std::string val = bcf_get_info_str(h, v, info_tag_str[i].c_str());
fprintf(out, "%s", val.c_str());
Expand Down
4 changes: 2 additions & 2 deletions vntr_consolidator.cpp
Expand Up @@ -483,7 +483,7 @@ void VNTRConsolidator::merge_consistent_ru_overlapping_VNTR(Variant* variant)
bcf_set_info_int(h, v, "MLEN", motif.size());
bcf_set_info_int(h, v, "BLEN", basis.size());
std::vector<int32_t> repeat_tract = {merged_beg1, merged_end1};
bcf_set_info_int(h, v, "REPEAT_TRACT", repeat_tract);
bcf_set_info_int_vec(h, v, "REPEAT_TRACT", repeat_tract);
bcf_update_info_int32(h, v, "COMP", &fd->comp[0], 4);
bcf_set_info_flt(h, v, "ENTROPY", fd->entropy);
bcf_set_info_flt(h, v, "KL_DIVERGENCE", fd->kl_divergence);
Expand All @@ -492,7 +492,7 @@ void VNTRConsolidator::merge_consistent_ru_overlapping_VNTR(Variant* variant)
bcf_set_info_int(h, v, "RL", fd->rl);
bcf_set_info_int(h, v, "LL", fd->rl+max_dlen);
std::vector<int32_t> ru_counts = {fd->no_perfect_ru, fd->no_ru};
bcf_set_info_int(h, v, "RU_COUNTS", ru_counts);
bcf_set_info_int_vec(h, v, "RU_COUNTS", ru_counts);
bcf_set_info_flt(h, v, "SCORE", fd->score);
bcf_set_info_int(h, v, "TRF_SCORE", fd->trf_score);
std::string associated_indels = join(unique_indels, ",");
Expand Down

0 comments on commit 4cbceff

Please sign in to comment.