static void write_model(GtStr *str, const char *model_cstr, const GthBSSMModel *model) { GtUword i, j, k, l; gt_assert(str && model_cstr && model); gt_assert(model->hypothesis_num == 2 || model->hypothesis_num == 7); gt_str_append_cstr(str, " "); gt_str_append_cstr(str, model_cstr); gt_str_append_cstr(str, " = {\n"); gt_str_append_cstr(str, " hypothesis_num = "); gt_str_append_uword(str, model->hypothesis_num); gt_str_append_cstr(str, ",\n"); gt_str_append_cstr(str, " window_size_left = "); gt_str_append_uword(str, model->window_size_left); gt_str_append_cstr(str, ",\n"); gt_str_append_cstr(str, " window_size_right = "); gt_str_append_uword(str, model->window_size_right); gt_str_append_cstr(str, ",\n"); for (i = 0; i < model->hypothesis_num; i++) { gt_str_append_cstr(str, " {\n"); for (j = 0; j < WINSIZE + 2; j++) { gt_str_append_cstr(str, " {\n"); for (k = 0; k < 4; k++) { gt_str_append_cstr(str, " { "); for (l = 0; l < 4; l++) { if (l) gt_str_append_cstr(str, ", "); if (model->hypothesis_num == 2) { gt_str_append_double(str, model->hypotables.hypo2table[i][j][k][l], BSSM_PRECISION); } else { gt_str_append_double(str, model->hypotables.hypo7table[i][j][k][l], BSSM_PRECISION); } } gt_str_append_cstr(str, " },\n"); } gt_str_append_cstr(str, " },\n"); } gt_str_append_cstr(str, " },\n"); } gt_str_append_cstr(str, " }"); }
void gt_blast_process_call_set_xdrop_gap_final(GtBlastProcessCall *call, double xdrop_gap_final) { gt_assert(!call->xdrop_gap_final); call->xdrop_gap_final = true; gt_assert(call->nucl); if (call->all) gt_str_append_cstr(call->str, " -Z "); else gt_str_append_cstr(call->str, " -xdrop_gap_final "); gt_str_append_double(call->str, xdrop_gap_final, 2); }
GtNodeVisitor* gt_ltrdigest_pdom_visitor_new(GtPdomModelSet *model, double eval_cutoff, unsigned int chain_max_gap_length, GtPdomCutoff cutoff, GtRegionMapping *rmap, GtError *err) { GtNodeVisitor *nv; GtLTRdigestPdomVisitor *lv; GtStr *cmd; int had_err = 0, i, rval; gt_assert(model && rmap); rval = system("hmmscan -h > /dev/null"); if (rval == -1) { gt_error_set(err, "error executing system(hmmscan)"); return NULL; } #ifndef _WIN32 if (WEXITSTATUS(rval) != 0) { gt_error_set(err, "cannot find the hmmscan executable in PATH"); return NULL; } #else /* XXX */ gt_error_set(err, "hmmscan for Windows not implemented"); return NULL; #endif nv = gt_node_visitor_create(gt_ltrdigest_pdom_visitor_class()); lv = gt_ltrdigest_pdom_visitor_cast(nv); lv->eval_cutoff = eval_cutoff; lv->cutoff = cutoff; lv->chain_max_gap_length = chain_max_gap_length; lv->rmap = rmap; lv->output_all_chains = false; lv->tag = gt_str_new_cstr("GenomeTools"); lv->root_type = gt_symbol(gt_ft_LTR_retrotransposon); for (i = 0; i < 3; i++) { lv->fwd[i] = gt_str_new(); lv->rev[i] = gt_str_new(); } if (!had_err) { cmd = gt_str_new_cstr("hmmscan --cpu "); gt_str_append_uint(cmd, gt_jobs); gt_str_append_cstr(cmd, " "); switch (cutoff) { case GT_PHMM_CUTOFF_GA: gt_str_append_cstr(cmd, "--cut_ga"); break; case GT_PHMM_CUTOFF_TC: gt_str_append_cstr(cmd, "--cut_tc"); break; case GT_PHMM_CUTOFF_NONE: gt_str_append_cstr(cmd, "--domE "); gt_str_append_double(cmd, eval_cutoff, 50); break; } gt_str_append_cstr(cmd, " "); gt_str_append_cstr(cmd, gt_pdom_model_set_get_filename(model)); gt_str_append_cstr(cmd, " -"); lv->cmdline = cmd; lv->args = gt_cstr_split(gt_str_get(lv->cmdline), ' '); gt_log_log("HMMER cmdline: %s", gt_str_get(cmd)); } return nv; }