Ejemplo n.º 1
0
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);
}
Ejemplo n.º 3
0
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;
}