static void faidx1(const char *filename) { int n, n_exp = 0, n_fq_exp = 0; char tmpfilename[FILENAME_MAX], line[500]; FILE *fin, *fout; faidx_t *fai; fin = fopen(filename, "rb"); if (fin == NULL) fail("can't open %s\n", filename); sprintf(tmpfilename, "%s.tmp", filename); fout = fopen(tmpfilename, "wb"); if (fout == NULL) fail("can't create temporary %s\n", tmpfilename); while (fgets(line, sizeof line, fin)) { if (line[0] == '>') n_exp++; if (line[0] == '+' && line[1] == '\n') n_fq_exp++; fputs(line, fout); } fclose(fin); fclose(fout); if (n_exp == 0 && n_fq_exp != 0) { // probably a fastq file n_exp = n_fq_exp; } if (fai_build(tmpfilename) < 0) fail("can't index %s", tmpfilename); fai = fai_load(tmpfilename); if (fai == NULL) { fail("can't load faidx file %s", tmpfilename); return; } n = faidx_fetch_nseq(fai); if (n != n_exp) fail("%s: faidx_fetch_nseq returned %d, expected %d", filename, n, n_exp); n = faidx_nseq(fai); if (n != n_exp) fail("%s: faidx_nseq returned %d, expected %d", filename, n, n_exp); fai_destroy(fai); }
int IndexedFastaReader::NumSequences(void) const { REQUIRE_FAIDX_LOADED; return faidx_nseq(handle_); }