Class: HTS::Native::BcfRecordHandle
- Inherits:
-
Object
- Object
- HTS::Native::BcfRecordHandle
- Defined in:
- ext/htslib_native/native_bcf.c
Class Method Summary collapse
Instance Method Summary collapse
- #alleles ⇒ Object
- #core_get(field) ⇒ Object
- #core_set(field, value) ⇒ Object
- #duplicate ⇒ Object
- #filter_ids ⇒ Object
- #filter_names(header) ⇒ Object
- #format_delete(header, key, type) ⇒ Object
- #format_fields(header) ⇒ Object
- #format_get(header_value, key_value, type_value, raw_value) ⇒ Object
- #format_record(header) ⇒ Object
- #format_update(header, key, type_value, values) ⇒ Object
- #format_update_float_words(header, key, values) ⇒ Object
- #genotype_update(header, values) ⇒ Object
- #id ⇒ Object
- #info_fields(header) ⇒ Object
- #info_get(header, key, type) ⇒ Object
- #info_present?(header, key, type) ⇒ Boolean
- #info_update(header, key, type_value, values) ⇒ Object
- #max_unpack=(level) ⇒ Object
- #set_alleles(header, value) ⇒ Object
- #set_id(header, id) ⇒ Object
- #subset(header, map) ⇒ Object
Class Method Details
.create ⇒ Object
207 |
# File 'ext/htslib_native/native_bcf.c', line 207 static VALUE native_bcf_record_create(VALUE klass) { return wrap_bcf_record(bcf_init()); } |
Instance Method Details
#alleles ⇒ Object
226 |
# File 'ext/htslib_native/native_bcf.c', line 226
static VALUE native_bcf_record_alleles(VALUE self) { bcf1_t *r=get_bcf_record(self)->pointer; int i; VALUE a; bcf_unpack(r,BCF_UN_STR); a=rb_ary_new_capa(r->n_allele); for(i=0;i<r->n_allele;i++)rb_ary_push(a,rb_str_new_cstr(r->d.allele[i])); return a; }
|
#core_get(field) ⇒ Object
209 210 211 212 213 214 215 216 |
# File 'ext/htslib_native/native_bcf.c', line 209
static VALUE native_bcf_record_core_get(VALUE self,VALUE field) {
bcf1_t *r=get_bcf_record(self)->pointer; ID id=SYM2ID(field);
if(id==rb_intern("rid"))return INT2NUM(r->rid);
if(id==rb_intern("pos"))return LL2NUM(r->pos);
if(id==rb_intern("rlen"))return LL2NUM(r->rlen);
if(id==rb_intern("qual"))return DBL2NUM(r->qual);
rb_raise(rb_eArgError,"unknown BCF field");
}
|
#core_set(field, value) ⇒ Object
217 218 219 220 221 222 223 |
# File 'ext/htslib_native/native_bcf.c', line 217
static VALUE native_bcf_record_core_set(VALUE self,VALUE field,VALUE value) {
bcf1_t *r=get_bcf_record(self)->pointer; ID id=SYM2ID(field);
if(id==rb_intern("rid"))r->rid=NUM2INT(value); else if(id==rb_intern("pos"))r->pos=NUM2LL(value);
else if(id==rb_intern("qual"))r->qual=(float)NUM2DBL(value);
else rb_raise(rb_eArgError,"unknown BCF field");
return value;
}
|
#duplicate ⇒ Object
208 |
# File 'ext/htslib_native/native_bcf.c', line 208
static VALUE native_bcf_record_duplicate(VALUE self) { return wrap_bcf_record(bcf_dup(get_bcf_record(self)->pointer)); }
|
#filter_ids ⇒ Object
228 |
# File 'ext/htslib_native/native_bcf.c', line 228
static VALUE native_bcf_record_filter_ids(VALUE self) { bcf1_t *r=get_bcf_record(self)->pointer; int i; VALUE a; bcf_unpack(r,BCF_UN_FLT); a=rb_ary_new_capa(r->d.n_flt); for(i=0;i<r->d.n_flt;i++)rb_ary_push(a,INT2NUM(r->d.flt[i])); return a; }
|
#filter_names(header) ⇒ Object
229 |
# File 'ext/htslib_native/native_bcf.c', line 229
static VALUE native_bcf_record_filter_names(VALUE self,VALUE header) { bcf1_t *r=get_bcf_record(self)->pointer; bcf_hdr_t *h=get_bcf_header(header)->pointer; int i; VALUE a; bcf_unpack(r,BCF_UN_FLT); a=rb_ary_new_capa(r->d.n_flt); for(i=0;i<r->d.n_flt;i++)rb_ary_push(a,rb_str_new_cstr(bcf_hdr_int2id(h,BCF_DT_ID,r->d.flt[i]))); return a; }
|
#format_delete(header, key, type) ⇒ Object
323 |
# File 'ext/htslib_native/native_bcf.c', line 323
static VALUE native_bcf_format_delete(VALUE self,VALUE header,VALUE key,VALUE type) {return INT2NUM(bcf_update_format(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,StringValueCStr(key),NULL,0,NUM2INT(type)));}
|
#format_fields(header) ⇒ Object
245 |
# File 'ext/htslib_native/native_bcf.c', line 245
static VALUE native_bcf_record_format_fields(VALUE self,VALUE header) { return field_rows(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,1); }
|
#format_get(header_value, key_value, type_value, raw_value) ⇒ Object
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'ext/htslib_native/native_bcf.c', line 287
static VALUE native_bcf_format_get(VALUE self,VALUE header_value,VALUE key_value,VALUE type_value,VALUE raw_value) {
bcf_hdr_t*h=get_bcf_header(header_value)->pointer;bcf1_t*r=get_bcf_record(self)->pointer;int type=NUM2INT(type_value),cap=0,count,i;void*dst=NULL;VALUE value;
if(type==BCF_HT_STR){
char **strings=NULL;
int sample_count=bcf_hdr_nsamples(h);
count=bcf_get_format_string(h,r,StringValueCStr(key_value),&strings,&cap);
if(count<0){free(strings);return Qnil;}
value=rb_ary_new_capa(sample_count);
for(i=0;i<sample_count;i++)rb_ary_push(value,rb_str_new_cstr(strings[i]));
if(strings){if(sample_count>0)free(strings[0]);free(strings);}
return value;
}
count=bcf_get_format_values(h,r,StringValueCStr(key_value),&dst,&cap,type);if(count<0){free(dst);return Qnil;}value=rb_ary_new_capa(count);
for(i=0;i<count;i++){if(type==BCF_HT_INT)rb_ary_push(value,INT2NUM(((int32_t*)dst)[i]));else {float f=((float*)dst)[i];uint32_t word;memcpy(&word,&f,4);if(RTEST(raw_value))rb_ary_push(value,UINT2NUM(word));else if(bcf_float_is_missing(f)||bcf_float_is_vector_end(f))rb_ary_push(value,Qnil);else rb_ary_push(value,DBL2NUM(f));}}
free(dst);return value;
}
|
#format_record(header) ⇒ Object
230 |
# File 'ext/htslib_native/native_bcf.c', line 230
static VALUE native_bcf_record_to_s(VALUE self,VALUE header) { kstring_t s=KS_INITIALIZE; VALUE v; if(vcf_format(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,&s)<0){free(s.s);rb_raise(rb_eRuntimeError,"failed to format BCF record");}v=rb_str_new(s.s,s.l);free(s.s);return v; }
|
#format_update(header, key, type_value, values) ⇒ Object
303 304 305 306 307 308 |
# File 'ext/htslib_native/native_bcf.c', line 303
static VALUE native_bcf_format_update(VALUE self,VALUE header,VALUE key,VALUE type_value,VALUE values) {
bcf_hdr_t*h=get_bcf_header(header)->pointer;bcf1_t*r=get_bcf_record(self)->pointer;int type=NUM2INT(type_value),n,result;
if(type==BCF_HT_INT){int32_t*p;n=fill_i32(values,&p);result=bcf_update_format_int32(h,r,StringValueCStr(key),p,n);xfree(p);}
else if(type==BCF_HT_REAL){float*p;n=fill_float(values,&p);result=bcf_update_format_float(h,r,StringValueCStr(key),p,n);xfree(p);}
else {int i;char**strings;n=RARRAY_LEN(values);strings=ALLOC_N(char*,n?n:1);for(i=0;i<n;i++){VALUE string=rb_ary_entry(values,i);strings[i]=StringValueCStr(string);}result=bcf_update_format_string(h,r,StringValueCStr(key),(const char**)strings,n);xfree(strings);}return INT2NUM(result);
}
|
#format_update_float_words(header, key, values) ⇒ Object
309 310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'ext/htslib_native/native_bcf.c', line 309
static VALUE native_bcf_format_update_float_words(VALUE self,VALUE header,VALUE key,VALUE values) {
bcf_hdr_t *h=get_bcf_header(header)->pointer;
bcf1_t *r=get_bcf_record(self)->pointer;
int n=RARRAY_LEN(values),i,result;
float *floats=ALLOC_N(float,n?n:1);
for(i=0;i<n;i++){
uint32_t word=NUM2UINT(rb_ary_entry(values,i));
memcpy(&floats[i],&word,sizeof(word));
}
result=bcf_update_format_float(h,r,StringValueCStr(key),floats,n);
xfree(floats);
return INT2NUM(result);
}
|
#genotype_update(header, values) ⇒ Object
322 |
# File 'ext/htslib_native/native_bcf.c', line 322
static VALUE native_bcf_genotype_update(VALUE self,VALUE header,VALUE values) {int32_t*p;int n=fill_i32(values,&p);int result=bcf_update_genotypes(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,p,n);xfree(p);return INT2NUM(result);}
|
#id ⇒ Object
224 |
# File 'ext/htslib_native/native_bcf.c', line 224
static VALUE native_bcf_record_id(VALUE self) { bcf1_t *r=get_bcf_record(self)->pointer; bcf_unpack(r,BCF_UN_INFO); return rb_str_new_cstr(r->d.id); }
|
#info_fields(header) ⇒ Object
244 |
# File 'ext/htslib_native/native_bcf.c', line 244
static VALUE native_bcf_record_info_fields(VALUE self,VALUE header) { return field_rows(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,0); }
|
#info_get(header, key, type) ⇒ Object
271 |
# File 'ext/htslib_native/native_bcf.c', line 271
static VALUE native_bcf_info_get(VALUE self,VALUE header,VALUE key,VALUE type) { return info_get(self,header,key,type); }
|
#info_present?(header, key, type) ⇒ Boolean
272 |
# File 'ext/htslib_native/native_bcf.c', line 272
static VALUE native_bcf_info_present(VALUE self,VALUE header,VALUE key,VALUE type) { return NIL_P(info_get(self,header,key,type))?Qfalse:Qtrue; }
|
#info_update(header, key, type_value, values) ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 |
# File 'ext/htslib_native/native_bcf.c', line 275
static VALUE native_bcf_info_update(VALUE self,VALUE header,VALUE key,VALUE type_value,VALUE values) {
bcf_hdr_t*h=get_bcf_header(header)->pointer;bcf1_t*r=get_bcf_record(self)->pointer;int type=NUM2INT(type_value),n,result;void*data=NULL;
if(type!=BCF_HT_FLAG && (NIL_P(values) || values==Qfalse)){
return INT2NUM(bcf_update_info(h,r,StringValueCStr(key),NULL,0,type));
}
if(type==BCF_HT_INT){int32_t*p;n=fill_i32(values,&p);data=p;result=bcf_update_info(h,r,StringValueCStr(key),data,n,type);xfree(p);}
else if(type==BCF_HT_REAL){float*p;n=fill_float(values,&p);data=p;result=bcf_update_info(h,r,StringValueCStr(key),data,n,type);xfree(p);}
else if(type==BCF_HT_STR){result=bcf_update_info(h,r,StringValueCStr(key),StringValueCStr(values),1,type);}
else { n=RTEST(values)?1:0; result=bcf_update_info(h,r,StringValueCStr(key),NULL,n,type); }
return INT2NUM(result);
}
|
#max_unpack=(level) ⇒ Object
231 |
# File 'ext/htslib_native/native_bcf.c', line 231
static VALUE native_bcf_record_set_unpack(VALUE self,VALUE level){get_bcf_record(self)->pointer->max_unpack=NUM2INT(level);return level;}
|
#set_alleles(header, value) ⇒ Object
227 |
# File 'ext/htslib_native/native_bcf.c', line 227
static VALUE native_bcf_record_set_alleles(VALUE self,VALUE header,VALUE value) { return INT2NUM(bcf_update_alleles_str(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,StringValueCStr(value))); }
|
#set_id(header, id) ⇒ Object
225 |
# File 'ext/htslib_native/native_bcf.c', line 225
static VALUE native_bcf_record_set_id(VALUE self,VALUE header,VALUE id) { return INT2NUM(bcf_update_id(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,StringValueCStr(id))); }
|
#subset(header, map) ⇒ Object
232 |
# File 'ext/htslib_native/native_bcf.c', line 232
static VALUE native_bcf_record_subset(VALUE self,VALUE header,VALUE map){int count=RARRAY_LEN(map),i,*imap=ALLOC_N(int,count?count:1);for(i=0;i<count;i++)imap[i]=NUM2INT(rb_ary_entry(map,i));int result=bcf_subset(get_bcf_header(header)->pointer,get_bcf_record(self)->pointer,count,imap);xfree(imap);return INT2NUM(result);}
|