static int gt_ltrdigest_pdom_visitor_parse_alignments(GT_UNUSED GtLTRdigestPdomVisitor *lv, GtHMMERParseStatus *status, char *buf, FILE *instream, GtError *err) { int had_err = 0, cur_domain = GT_UNDEF_INT, line = -1; GtHMMERSingleHit *hit = NULL; gt_assert(lv && instream && status); gt_error_check(err); had_err = pdom_parser_get_next_line(buf, instream, err); gt_assert(buf != NULL); while (!had_err && strncmp("Internal pipeline statistics", buf, (size_t) 28) && strncmp(">>", buf, (size_t) 2)) { if ((buf[2] == '=' && buf[3] == '=')) { buf[17] = '\0'; cur_domain = atoi(buf+12); gt_assert(cur_domain != GT_UNDEF_INT && cur_domain > 0); hit = gt_hmmer_parse_status_get_hit(status, (unsigned long) cur_domain - 1); gt_assert(hit && !hit->alignment); hit->alignment = gt_str_new(); hit->aastring = gt_str_new(); line = -2; } else { gt_assert(hit && hit->alignment); gt_str_append_cstr(hit->alignment, buf); gt_str_append_char(hit->alignment, '\n'); switch (line % 4) { case 1: gt_str_append_char(hit->alignment, '\n'); break; case 0: { char *b = buf; b = strtok(buf, " "); gt_assert(strspn(b, "012+-") == (size_t) 2); b = strtok(NULL, " "); gt_assert(strlen(b) > 0); b = strtok(NULL, " "); gt_ltrdigest_pdom_visitor_add_aaseq(b, hit->aastring); } break; } line++; } had_err = pdom_parser_get_next_line(buf, instream, err); } return had_err; }
static int gt_ltrdigest_pdom_visitor_parse_alignments(GT_UNUSED GtLTRdigestPdomVisitor *lv, GtHMMERParseStatus *status, char *buf, FILE *instream, GtError *err) { int had_err = 0, cur_domain = GT_UNDEF_INT, line = GT_UNDEF_INT; bool first_align_line = false; int mod_val = 4; GtHMMERSingleHit *hit = NULL; gt_assert(lv && instream && status); gt_error_check(err); had_err = pdom_parser_get_next_line(buf, instream, err); gt_assert(buf != NULL); while (!had_err && strncmp("Internal pipeline statistics", buf, (size_t) 28) && strncmp(">>", buf, (size_t) 2)) { if ((buf[2] == '=' && buf[3] == '=')) { buf[17] = '\0'; cur_domain = atoi(buf+12); gt_assert(cur_domain != GT_UNDEF_INT && cur_domain > 0); hit = gt_hmmer_parse_status_get_hit(status, (GtUword) cur_domain - 1); gt_assert(hit && !hit->alignment); hit->alignment = gt_str_new(); hit->aastring = gt_str_new(); first_align_line = true; mod_val = 4; } else { bool run = true; char junkbuf[BUFSIZ]; if (first_align_line) { /* some models contain consensus structure annotation -- in this case there is an additional line in the output which must be taken into account */ line = 0; if (1 == sscanf(buf, "%*s %s", junkbuf)) { if (0 == strcmp(junkbuf, "CS") || 0 == strcmp(junkbuf, "RF")) { mod_val = 5; line = -1; run = false; } } first_align_line = false; } if (run) { gt_assert(hit && hit->alignment); gt_str_append_cstr(hit->alignment, buf); gt_str_append_char(hit->alignment, '\n'); switch (line % mod_val) { case 1: gt_str_append_char(hit->alignment, '\n'); break; case 2: { GT_UNUSED char *b = buf; b = strtok(buf, " "); gt_assert(strspn(b, "012+-") == (size_t) 2); b = strtok(NULL, " "); gt_assert(strlen(b) > 0); b = strtok(NULL, " "); gt_ltrdigest_pdom_visitor_add_aaseq(b, hit->aastring); } break; } } line++; } had_err = pdom_parser_get_next_line(buf, instream, err); } return had_err; }