BWA::BWA(const char* ann_filename, const char* amb_filename, const char* pac_filename, const char* forward_bwt_filename, const char* forward_sa_filename, const char* reverse_bwt_filename, const char* reverse_sa_filename) { // Load the bns (?) and reference bns = bns_restore_core(ann_filename,amb_filename,pac_filename); reference = new ubyte_t[bns->l_pac/4+1]; rewind(bns->fp_pac); fread(reference, 1, bns->l_pac/4+1, bns->fp_pac); fclose(bns->fp_pac); bns->fp_pac = NULL; // Load the BWTs (both directions) and suffix arrays (both directions) bwts[0] = bwt_restore_bwt(forward_bwt_filename); bwt_restore_sa(forward_sa_filename, bwts[0]); bwts[1] = bwt_restore_bwt(reverse_bwt_filename); bwt_restore_sa(reverse_sa_filename, bwts[1]); load_default_options(); // Always reinitialize the random seed whenever a new set of files are loaded. initialize_random_seed(); // initialize the bwase subsystem bwase_initialize(); }
bntseq_t *bns_restore(const char *prefix) { char ann_filename[1024], amb_filename[1024], pac_filename[1024], alt_filename[1024]; FILE *fp; bntseq_t *bns; strcat(strcpy(ann_filename, prefix), ".ann"); strcat(strcpy(amb_filename, prefix), ".amb"); strcat(strcpy(pac_filename, prefix), ".pac"); bns = bns_restore_core(ann_filename, amb_filename, pac_filename); if (bns == 0) return 0; if ((fp = fopen(strcat(strcpy(alt_filename, prefix), ".alt"), "r")) != 0) { // read .alt file if present char str[1024]; khash_t(str) *h; int i, absent; khint_t k; h = kh_init(str); for (i = 0; i < bns->n_seqs; ++i) { k = kh_put(str, h, bns->anns[i].name, &absent); kh_val(h, k) = i; } while (fscanf(fp, "%s", str) == 1) { k = kh_get(str, h, str); if (k != kh_end(h)) bns->anns[kh_val(h, k)].is_alt = 1; } kh_destroy(str, h); fclose(fp); } return bns; }
bntseq_t *bns_restore(const char *prefix) { char ann_filename[1024], amb_filename[1024], pac_filename[1024]; strcat(strcpy(ann_filename, prefix), ".ann"); strcat(strcpy(amb_filename, prefix), ".amb"); strcat(strcpy(pac_filename, prefix), ".pac"); return bns_restore_core(ann_filename, amb_filename, pac_filename); }
bntseq_t *bns_restore(const char *prefix) { char ann_filename[1024], amb_filename[1024], pac_filename[1024], alt_filename[1024]; FILE *fp; bntseq_t *bns; /**** bisulfite adaptation ****/ /* strcat(strcpy(ann_filename, prefix), ".ann"); */ /* strcat(strcpy(amb_filename, prefix), ".amb"); */ /* strcat(strcpy(pac_filename, prefix), ".pac"); */ strcat(strcpy(ann_filename, prefix), ".bis.ann"); strcat(strcpy(amb_filename, prefix), ".bis.amb"); strcat(strcpy(pac_filename, prefix), ".bis.pac"); bns = bns_restore_core(ann_filename, amb_filename, pac_filename); if (bns == 0) return 0; if ((fp = fopen(strcat(strcpy(alt_filename, prefix), ".alt"), "r")) != 0) { // read .alt file if present char str[1024]; khash_t(str) *h; int c, i, absent; khint_t k; h = kh_init(str); for (i = 0; i < bns->n_seqs; ++i) { k = kh_put(str, h, bns->anns[i].name, &absent); kh_val(h, k) = i; } i = 0; while ((c = fgetc(fp)) != EOF) { if (c == '\t' || c == '\n' || c == '\r') { str[i] = 0; if (str[0] != '@') { k = kh_get(str, h, str); if (k != kh_end(h)) bns->anns[kh_val(h, k)].is_alt = 1; } while (c != '\n' && c != EOF) c = fgetc(fp); i = 0; } else str[i++] = c; // FIXME: potential segfault here } kh_destroy(str, h); fclose(fp); } return bns; }