Class: HTS::Native::BcfRecordHandle

Inherits:
Object
  • Object
show all
Defined in:
ext/htslib_native/native_bcf.c

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.createObject



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

#allelesObject



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;
}

#duplicateObject



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_idsObject



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);}

#idObject



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

Returns:

  • (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);}