+int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len)
+{
+ char base;
+ char *fai_ref = 0;
+ int fai_ref_len = 0, k;
+ int bases=0, gaps=0;
+
+ fai_ref = fai_fetch(fai, ref_name, &fai_ref_len);
+ if (fai_ref_len != padded_len) {
+ fprintf(stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len);
+ free(fai_ref);
+ return -1;
+ }
+ for (k = 0; k < padded_len; ++k) {
+ //fprintf(stderr, "[depad] checking base %i of %i or %i\n", k+1, ref_len, strlen(fai_ref));
+ base = fai_ref[k];
+ if (base == '-' || base == '*') {
+ gaps += 1;
+ } else {
+ int i = bam_nt16_table[(int)base];
+ if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16
+ fprintf(stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence '%s'\n", base, (int)base, ref_name);
+ free(fai_ref);
+ return -1;
+ }
+ bases += 1;
+ }
+ }
+ free(fai_ref);
+ assert (padded_len == bases + gaps);
+ return bases;
+}
+