void test_push_bcf_gt_md(void) { pri_queue q = priq_new(0); struct bcf_file bcf_f = init_bcf_file(BCF_FILE); uint64_t *md_index = (uint64_t *) malloc(NUM_VARS * sizeof(uint64_t)); char *gt_of_name = "tmp.gt_of_name"; char *md_of_name = "tmp.md_of_name"; push_bcf_gt_md(&q, &bcf_f, md_index, NUM_INDS, NUM_VARS, gt_of_name, md_of_name); FILE *f = fopen(gt_of_name, "rb"); //remove(gt_of_name); //remove(md_of_name); free(md_index); }
//{{{ void print_query_result_offset(uint32_t *mask, void print_query_result_offset(uint32_t *mask, uint32_t mask_len, uint32_t *vids, struct gqt_query *q, uint32_t **counts, uint32_t *id_lens, uint32_t *U_R, uint32_t U_R_len, char **id_query_list, char **gt_query_list, uint32_t num_qs, uint32_t num_fields, char *off_file_name, char *source_file, char *full_cmd) { struct off_file *off_f = open_off_file(off_file_name); struct bcf_file bcf_f = init_bcf_file(source_file); char *sample_names = NULL; uint32_t i,j,k,line_idx,bytes, bit_i = 0; int r; for (i = 0; i < U_R_len; ++i) { if (i == 0 ) r = asprintf(&sample_names, "%s", bcf_f.hdr->samples[U_R[i]]); else r = asprintf(&sample_names, "%s,%s", sample_names, bcf_f.hdr->samples[U_R[i]]); if (r == -1) err(EX_OSERR, "asprintf error"); } if (bcf_hdr_set_samples(bcf_f.hdr, sample_names, 0) != 0) errx(EX_DATAERR, "Error setting samples: %s\n", source_file); char *info_s; for (i = 0; i < num_qs; i++) { if ( q[i].variant_op == p_count ) { r = asprintf(&info_s, "##INFO=<ID=GQT_%u,Number=1,Type=Integer," "Description=\"GQT count result from " "phenotype:'%s' genotype:'%s'\">", i, id_query_list[i], gt_query_list[i]); if (r == -1) err(EX_OSERR, "asprintf error"); if (bcf_hdr_append(bcf_f.hdr, info_s) != 0) errx(EX_DATAERR, "Error updating header: %s\n", source_file); } else if ( q[i].variant_op == p_pct ) { r = asprintf(&info_s, "##INFO=<ID=GQT_%u,Number=1,Type=Float," "Description=\"GQT percent result from " "phenotype:'%s' genotype:'%s'\">", i, id_query_list[i], gt_query_list[i]); if (r == -1) err(EX_OSERR, "asprintf error"); if (bcf_hdr_append(bcf_f.hdr, info_s) != 0) errx(EX_DATAERR, "Error updating header: %s\n", source_file); } else if ( q[i].variant_op == p_maf ) { r = asprintf(&info_s, "##INFO=<ID=GQT_%u,Number=1,Type=Float," "Description=\"GQT maf result from " "phenotype:'%s' genotype:'%s'\">", i, id_query_list[i], gt_query_list[i]); if (bcf_hdr_append(bcf_f.hdr, info_s) != 0) errx(EX_DATAERR, "Error updating header: %s\n", source_file); } } r = asprintf(&info_s, "##%s_queryVersion=%s", PROGRAM_NAME, VERSION); if (r == -1) err(EX_OSERR, "asprintf error"); if (bcf_hdr_append(bcf_f.hdr, info_s) != 0) errx(EX_DATAERR, "Error updating header: %s\n", source_file); r = asprintf(&info_s, "##%s_queryCommand=%s", PROGRAM_NAME, full_cmd); if (r == -1) err(EX_OSERR, "asprintf error"); if (bcf_hdr_append(bcf_f.hdr, info_s) != 0) errx(EX_DATAERR, "Error updating header: %s\n", source_file); htsFile *out_f = hts_open("-","w"); if ( !out_f ) err(EX_DATAERR, "Could open output file"); bcf_hdr_write(out_f, bcf_f.hdr); bcf_f.line = bcf_init1(); for (i=0; i < mask_len; ++i) { bytes = mask[i]; if (bytes == 0) continue; /* skip a bunch of ops if you can */ for (j=0; j < 32; j++) { if (bytes & 1 << (31 - j)) { line_idx = i*32+j; r = goto_bcf_line(&bcf_f, off_f, line_idx); if (r == -1) err(EX_NOINPUT, "Error seeking file '%s'", bcf_f.file_name); r = get_bcf_line(&bcf_f); if (r == -1) err(EX_NOINPUT, "Error reading file '%s'", bcf_f.file_name); for (k=0; k < num_qs; k++) { r = asprintf(&info_s, "GQT_%u", k); if (r == -1) err(EX_OSERR, "asprintf error"); if ( q[k].variant_op == p_count ) { int32_t v = counts[k][line_idx]; if (bcf_update_info_int32(bcf_f.hdr, bcf_f.line, info_s, &v, 1) != 0) errx(EX_DATAERR, "Error adding to info field: %s\n", bcf_f.file_name); } else if (q[k].variant_op == p_pct) { float v = ((float)counts[k][line_idx])/ ((float) id_lens[k]); if (bcf_update_info_float(bcf_f.hdr, bcf_f.line, info_s, &v, 1) != 0) errx(EX_DATAERR, "Error adding to info field: %s\n", bcf_f.file_name); } else if (q[k].variant_op == p_maf) { float v = ((float)counts[k][line_idx])/ (((float) id_lens[k])*2.0); if (bcf_update_info_float(bcf_f.hdr, bcf_f.line, info_s, &v, 1) != 0) errx(EX_DATAERR, "Error adding to info field: %s\n", bcf_f.file_name); } } bcf_write(out_f, bcf_f.hdr, bcf_f.line); } bit_i++; if (bit_i == num_fields) break; } if (bit_i == num_fields) break; } hts_close(out_f); destroy_off_file(off_f); }
//{{{void test_init_bcf_file_remote(void) void test_init_bcf_file_remote(void) { char *remote_file = "http://s3-us-west-2.amazonaws.com/gqt-data/test/10.1e4.var.bcf"; struct bcf_file rbf = init_bcf_file(remote_file); }
void test_init_bcf_file(void) { struct bcf_file bcf_f = init_bcf_file(BCF_FILE); TEST_ASSERT_EQUAL(NUM_INDS, bcf_f.num_records); close_bcf_file(&bcf_f); }