Example #1
0
static int scanuintintline(uint32_t *lengthofkey,
                           Smallorbigint *smallorbigint,
                           const char *linebuffer,
                           unsigned long linelength,
                           GtError *err)
{
  int64_t readint;
  unsigned long i;
  bool found = false;
  int retval = 0;

  gt_error_check(err);
  for (i=0; i<linelength; i++)
  {
    if (linebuffer[i] == '=')
    {
      *lengthofkey = (uint32_t) i;
      found = true;

      if (sscanf((const char *) (linebuffer + i + 1),
                 FormatScanint64_t,
                 SCANint64_tcast(&readint)) != 1 ||
         readint < (int64_t) 0)
      {
        gt_error_set(err,"cannot find non-negative integer in \"%*.*s\"",
                           (int) (linelength - (i+1)),
                           (int) (linelength - (i+1)),
                           linebuffer + i + 1);
        return -1;
      }
      if (readint <= (int64_t) UINT32_MAX)
      {
        smallorbigint->smallvalue = (uint32_t) readint;
        retval = 0;
      } else
      {
        smallorbigint->bigvalue = (uint64_t) readint;
        retval = 1;
      }
      break;
    }
  }
  if (!found)
  {
    gt_error_set(err,"missing equality symbol in \"%*.*s\"",
                       (int) linelength,
                       (int) linelength,
                       linebuffer);
    return -2;
  }
  return retval;
}
Example #2
0
static inline int parse_fastq_block(GtSeqIteratorFastQ *seqit, GtError *err)
{
  int had_err = 0;
  gt_assert(seqit);
  gt_error_check(err);

  /* parse @<seqname> */
  had_err = parse_fastq_seqname(seqit,
                                seqit->descbuffer,
                                GT_FASTQ_BLOCK_START_CHAR,
                                err);
  if (!had_err) {
    /* parse sequence */
    had_err = parse_fastq_sequence(seqit, err);
    gt_fastq_premature_end_check(had_err, seqit);
  }
  if (!had_err) {
    /* parse +[seqname] */
    had_err = parse_fastq_seqname(seqit,
                                  seqit->qdescbuffer,
                                  GT_FASTQ_QUAL_SEPARATOR_CHAR,
                                  err);
    gt_fastq_premature_end_check(had_err, seqit);
  }
  if (!had_err
      && gt_str_length(seqit->qdescbuffer)
      && gt_str_cmp(seqit->descbuffer, seqit->qdescbuffer) != 0)
  {
      gt_error_set(err, "sequence description '%s' is not equal to "
                        "qualities description '%s' in line %lu",
                        gt_str_get(seqit->descbuffer),
                        gt_str_get(seqit->qdescbuffer),
                        seqit->curline-1);
      return -2;
  }
  if (!had_err) {
    /* parse qualities */
    had_err = parse_fastq_qualities(seqit, err);
    if (gt_str_length(seqit->qualsbuffer)
          != gt_str_length(seqit->sequencebuffer))
    {
      gt_error_set(err, "lengths of character sequence and qualities "
                        "sequence differ (%lu <-> %lu)",
                        gt_str_length(seqit->qualsbuffer),
                        gt_str_length(seqit->sequencebuffer));
      return -2;
    }
  }
  return had_err;
}
Example #3
0
static int gt_genomediff_arguments_check(int rest_argc,
        void *tool_arguments,
        GtError *err)
{
    GtGenomediffArguments *arguments = tool_arguments;
    bool prepared_index;
    int had_err = 0;
    gt_error_check(err);
    gt_assert(arguments);

    if (rest_argc == 0) {
        gt_error_set(err, "give at least one file (base)name!");
        had_err = -1;
    }
    if (!had_err) {
        if (strcmp("esa", gt_str_get(arguments->indextype)) == 0)
            arguments->with_esa = true;
        else if (strcmp("pck", gt_str_get(arguments->indextype)) == 0)
            arguments->with_pck = true;
    }
    prepared_index = (arguments->with_esa || arguments->with_pck);

    if (!had_err && arguments->user_max_depth != -1 && !arguments->with_pck)
        gt_warning("option -maxdepth does only apply to -indextype pck");

    if (!had_err &&
            prepared_index && gt_encseq_options_mirrored_value(arguments->loadopts))
        gt_warning("option -mirrored is ignored with esa and pck index");

    if (!had_err && prepared_index && rest_argc > 1) {
        gt_error_set(err, "there should be only one basename argument with "
                     "-indextype esa|pck");
        had_err = -1;
    }
    if (rest_argc == 1 && gt_str_length(arguments->indexname) != 0) {
        gt_error_set(err, "Option -indexname is only needed with sequence files, "
                     "if one file is given as argument, this should be an index.");
        had_err = -1;
    }
    if (!had_err && rest_argc > 1 && gt_str_length(arguments->indexname) == 0) {
        gt_error_set(err, "more than one input file given, please use -indexname "
                     "for basename of indices created during run.");
        had_err = -1;
    }

    if (!had_err)
        arguments->with_units = gt_option_is_set(arguments->ref_unitfile);

    return had_err;
}
Example #4
0
static int create_block_features(GtBEDParser *bed_parser, GtFeatureNode *fn,
                                 unsigned long block_count,
                                 GtSplitter *size_splitter,
                                 GtSplitter *start_splitter, GtIO *bed_file,
                                 GtError *err)
{
  unsigned long i;
  int had_err = 0;
  gt_assert(fn && block_count && size_splitter && start_splitter);
  gt_assert(gt_splitter_size(size_splitter) == block_count);
  gt_assert(gt_splitter_size(start_splitter) == block_count);
  for (i = 0; !had_err && i < block_count; i++) {
    unsigned long block_size, block_start, start, end;
    GtGenomeNode *block;
    const char *name;
    if (gt_parse_ulong(&block_size, gt_splitter_get_token(size_splitter, i))) {
      gt_error_set(err, "file \"%s\": line %lu: could not parse blockSize '%s'",
                   gt_io_get_filename(bed_file),
                   gt_io_get_line_number(bed_file),
                   gt_splitter_get_token(size_splitter, i));
      had_err = -1;
    }
    if (!had_err && gt_parse_ulong(&block_start,
                                   gt_splitter_get_token(start_splitter, i))) {
      gt_error_set(err, "file \"%s\": line %lu: could not parse blockStart "
                   "'%s'", gt_io_get_filename(bed_file),
                   gt_io_get_line_number(bed_file),
                   gt_splitter_get_token(start_splitter, i));
      had_err = -1;
    }
    if (!had_err) {
      start = gt_genome_node_get_start((GtGenomeNode*) fn) + block_start;
      end = start + block_size - 1;
      block = gt_feature_node_new(gt_genome_node_get_seqid((GtGenomeNode*) fn),
                                  bed_parser->block_type
                                  ? bed_parser->block_type
                                  : BED_BLOCK_TYPE,
                                  start, end, gt_feature_node_get_strand(fn));
      if ((name = gt_feature_node_get_attribute(fn, "Name")))
        gt_feature_node_add_attribute((GtFeatureNode*) block, "Name", name);
      gt_feature_node_set_score((GtFeatureNode*) block,
                                gt_feature_node_get_score(fn));
      gt_feature_node_set_strand((GtFeatureNode*) block,
                                 gt_feature_node_get_strand(fn));
      gt_feature_node_add_child(fn, (GtFeatureNode*) block);
    }
  }
  return had_err;
}
Example #5
0
static GtTranslationScheme* getschemetable(unsigned int transnum, GtError *err)
{
    if (transnum >= GT_SIZEOFTRANSRANGE) {
        gt_error_set(err, "'%u' is not a valid translation table number!",
                     transnum);
        return NULL;
    }
    if (transnum2index[transnum] == GT_UNDEFTRANSNUM) {
        gt_error_set(err, "'%u' is not a valid translation table number!",
                     transnum);
        return NULL;
    }
    gt_assert(transnum != GT_UNDEFTRANSNUM);
    return schemetable + transnum2index[transnum];
}
/*call makeblastdb with given path to <dbfile>*/
static inline int gt_condenser_search_create_blastdb(const char* dbfile,
                                                     const char *dbtype,
                                                     GtError *err) {
  int had_err = 0,
      pipe_status;
  GtStr *call = gt_str_new_cstr("makeblastdb -dbtype ");
  char *call_str;
  FILE* fpipe;
  gt_str_append_cstr(call, dbtype);
  gt_str_append_cstr(call, " -in ");
  gt_str_append_cstr(call, dbfile);

  call_str = gt_str_get(call);
  gt_log_log("executed call: %s", call_str);
  if ((fpipe = popen(call_str, "r")) == NULL) {
    gt_error_set(err, "Could not open pipe to call makeblastdb");
    had_err = -1;
  }
  if (!had_err) {
    char *newline = NULL;
    char line[BUFSIZ + 1];
    line[BUFSIZ] = '\0';
    while (fgets(line, (int) BUFSIZ, fpipe) != NULL) {
      if ((newline = strrchr(line, '\n')) != NULL) {
        *newline = '\0';
        newline = NULL;
      }
      gt_log_log("%.*s", BUFSIZ, line);
    }
  }
  gt_str_delete(call);
  if (!had_err) {
    pipe_status = pclose(fpipe);
    if (pipe_status != 0) {
      had_err = -1;
      if (errno == ECHILD)
        gt_error_set(err, "Error calling makeblastdb.");
#ifndef _WIN32
      else if (WEXITSTATUS(pipe_status) == 127)
        gt_error_set(err, "shell returned 127, makeblastdb not installed?");
      else
        gt_error_set(err, "makeblastdb error, returned %d",
                     WEXITSTATUS(pipe_status));
#endif
    }
  }
  return had_err;
}
Example #7
0
int gt_script_filter_run(GtScriptFilter *sf, GtFeatureNode *gf,
                         bool *select_node, GtError *err)
{
  int had_err = 0;
#ifndef NDEBUG
  int stack_size;
#endif
  GtGenomeNode *gn_lua;

#ifndef NDEBUG
  stack_size = lua_gettop(sf->L);
#endif

  if (!had_err) {
    lua_getglobal(sf->L, "filter");
    if (lua_isnil(sf->L, -1)) {
      gt_error_set(err, "function 'filter' is not defined");
      had_err = -1;
      lua_pop(sf->L, 1);
    }
  }

  if (!had_err) {
    gn_lua = gt_genome_node_ref((GtGenomeNode*) gf);
    gt_lua_genome_node_push(sf->L, gn_lua);

    if (lua_pcall(sf->L, 1, 1, 0) != 0) {
      gt_error_set(err, "error running function 'filter': %s",
                   lua_tostring(sf->L, -1));
      lua_pop(sf->L, 1);
      had_err = -1;
    }
  }

  if (!had_err && !lua_isboolean(sf->L, -1)) {
    gt_error_set(err, "function 'filter' must return boolean");
    lua_pop(sf->L, 1);
    had_err = -1;
  }

  if (!had_err) {
    *select_node = lua_toboolean(sf->L, -1);
    lua_pop(sf->L, 1);
  }
  gt_assert(lua_gettop(sf->L) == stack_size);

  return had_err;
}
static int gt_cntlist_parse_bin(FILE *infp, bool alloc_cntlist,
    GtBitsequence **cntlist, GtUword *nofreads, GtError *err)
{
  int had_err = gt_cntlist_parse_bin_or_bit_header(infp, nofreads, err);
  if (had_err == 0)
  {
    size_t n;
    GtUword seqnum;
    gt_assert(cntlist != NULL);
    if (alloc_cntlist)
      GT_INITBITTAB(*cntlist, *nofreads);
    while (true)
    {
      n = fread(&seqnum, sizeof (GtUword), (size_t)1, infp);
      if (n != (size_t)1)
      {
        if (!feof(infp))
        {
          gt_error_set(err, "contained reads file: unrecognized format");
          had_err = -1;
        }
        break;
      }
      GT_SETIBIT(*cntlist, seqnum);
    }
  }
  return had_err;
}
Example #9
0
GtIntset *gt_intset_io(GtIntset *intset, FILE *fp, GtError *err)
{
  int had_err = 0;
  GtUword type;
  if (intset == NULL) {
    had_err = gt_intset_read_type_rewind(fp, &type, err);
    if (!had_err && gt_intset_8_file_is_type(type))
      intset = gt_intset_8_io(intset, fp, err);
    else {
      if (!had_err && gt_intset_16_file_is_type(type))
        intset = gt_intset_16_io(intset, fp, err);
      else {
        if (!had_err && gt_intset_32_file_is_type(type))
          intset = gt_intset_32_io(intset, fp, err);
        else {
          if (!gt_error_is_set(err))
            gt_error_set(err, "could not identify intset type from file");
        }
      }
    }
  }
  else {
    gt_assert(intset->c_class != NULL);
    gt_assert(intset->c_class->io_func != NULL);
    intset = intset->c_class->io_func(intset, fp, err);
  }
  return intset;
}
Example #10
0
static int gt_intset_read_type_rewind(FILE *fp, GtUword *type, GtError *err)
{
  int had_err = 0;
  fpos_t pos;
  if (fgetpos(fp, &pos) != 0) {
    gt_error_set(err, "fgetpos failed");
    had_err = 1;
  }
  if (!had_err)
    had_err = gt_io_error_fread(type, sizeof (*type), (size_t) 1, fp, err);
  if (!had_err && fsetpos(fp, &pos) != 0) {
    gt_error_set(err, "fsetpos failed");
    had_err = 1;
  }
  return had_err;
}
Example #11
0
GtRDB* gt_rdb_mysql_new(const char *server,
                        unsigned int port,
                        const char *database,
                        const char *username,
                        const char *password,
                        GtError *err)
{
  GtRDBMySQL *rdbm;
  GtRDB *rdb = gt_rdb_create(gt_rdb_mysql_class());
  rdbm = gt_rdb_mysql_cast(rdb);
  mysql_init(&rdbm->conn);
  mysql_options(&rdbm->conn, MYSQL_READ_DEFAULT_GROUP, "genometools");
  if (!mysql_real_connect(&rdbm->conn, server, username, password, database,
                          port, NULL,
                          CLIENT_COMPRESS | CLIENT_MULTI_STATEMENTS))
  {
    gt_error_set(err, "cannot connect to database: %s",
                 mysql_error(&rdbm->conn));
    mysql_close(&rdbm->conn);
    gt_rdb_delete(rdb);
    return NULL;
  }
  rdbm->database = gt_str_new_cstr(database);
  return rdb;
}
Example #12
0
static const char *desc2key(unsigned long *keylen,const char *desc,
                            GtError *err)
{
  unsigned long i, firstpipe = 0, secondpipe = 0;

  gt_error_check(err);
  for (i=0; desc[i] != '\0'; i++)
  {
    if (desc[i] == '|')
    {
      if (firstpipe > 0)
      {
        gt_assert(i>0);
        secondpipe = i;
        break;
      }
      gt_assert(i>0);
      firstpipe = i;
    }
  }
  if (firstpipe == 0 || secondpipe == 0)
  {
    gt_error_set(err,"Cannot find key in description \"%s\"",desc);
    return NULL;
  }
  gt_assert(firstpipe < secondpipe);
  *keylen = secondpipe - firstpipe - 1;
  return desc + firstpipe + 1;
}
Example #13
0
static int gt_rdb_stmt_mysql_get_double(GtRDBStmt *st, GtUword field_no,
                                        double *result, GtError *err)
{
  GtRDBStmtMySQL *stm;
  MYSQL_BIND res_bind;
  int had_err = 0;
  double res_double = GT_UNDEF_DOUBLE;
  my_bool error, is_null;
  gt_assert(st && result);
  gt_error_check(err);
  stm = gt_rdb_stmt_mysql_cast(st);
  CHECK_INIT_STATEMENT
  if (!had_err) {
    memset(&res_bind, 0, sizeof (res_bind));
    res_bind.buffer_type = MYSQL_TYPE_DOUBLE;
    res_bind.buffer = &res_double;
    res_bind.error = &error;
    res_bind.is_null = &is_null;
    if ((had_err = mysql_stmt_fetch_column(stm->stmt, &res_bind, field_no, 0)))
      gt_error_set(err, GT_MYSQL_ERRMSG, had_err, mysql_stmt_error(stm->stmt));
  }
  if (!had_err)
    *result = res_double;
  return had_err;
}
Example #14
0
void *gt_Sfxmappedrange_map_entire(GtSfxmappedrange *sfxmappedrange,
                                   GtError *err)
{
  size_t mappedsize;

  gt_assert(sfxmappedrange != NULL);
  sfxmappedrange->entire = gt_fa_mmap_read(gt_str_get(sfxmappedrange->filename),
                                           &mappedsize,err);
  if (sfxmappedrange->entire == NULL)
  {
    return NULL;
  }
  if (mappedsize != gt_Sfxmappedrange_size_entire(sfxmappedrange))
  {
    gt_error_set(err,
                 "map file %s: mapped size = "GT_WU" != "
                 GT_WU" = expected size",
                 gt_str_get(sfxmappedrange->filename), (GtUword) mappedsize,
                 (GtUword) gt_Sfxmappedrange_size_entire(sfxmappedrange));
    gt_fa_xmunmap(sfxmappedrange->entire);
    sfxmappedrange->entire = NULL;
    return NULL;
  }
  gt_log_log("map %s completely ("GT_WU" units of size %u)",
              gt_str_get(sfxmappedrange->tablename),
              (GtUword) sfxmappedrange->numofunits,
              (unsigned int) sfxmappedrange->sizeofunit);
  return sfxmappedrange->entire;
}
Example #15
0
static GtBioseq* bioseq_new_with_recreate_and_type(GtStr *sequence_file,
                                                   bool recreate, GtError *err)
{
  GtBioseq *bs;
  int had_err = 0;
  gt_error_check(err);
  bs = gt_calloc(1, sizeof *bs);
  if (!strcmp(gt_str_get(sequence_file), "-"))
    bs->use_stdin = true;
  if (!bs->use_stdin && !gt_file_exists(gt_str_get(sequence_file))) {
    gt_error_set(err, "sequence file \"%s\" does not exist or is not readable",
                 gt_str_get(sequence_file));
    had_err = -1;
  }
  if (!had_err) {
    bs->sequence_file = gt_str_ref(sequence_file);
    had_err = bioseq_fill(bs, recreate, err);
  }
  if (had_err) {
    gt_bioseq_delete(bs);
    return NULL;
  }
  gt_assert(bs->encseq);
  bs->descriptions = gt_calloc(gt_encseq_num_of_sequences(bs->encseq),
                               sizeof (char*));
  return bs;
}
Example #16
0
static inline int parse_fastq_seqname(GtSeqIteratorFastQ *seqit,
                                      GtStr *buffer,
                                      char startchar,
                                      GtError *err)
{
  char currentchar;
  bool firstsymbol = true;
  gt_error_check(err);
  gt_assert(seqit && buffer);
  gt_assert(gt_str_length(buffer) == 0);
  if ((currentchar = fastq_buf_getchar(seqit)) == EOF)
    return EOF;
  seqit->currentread++;
  if (currentchar != startchar) {
    gt_error_set(err, "'%c' expected, '%c' encountered instead in line %lu",
                      startchar,
                      currentchar,
                      seqit->curline);
    return -2;
  }
  while (currentchar != GT_FASTQ_NEWLINESYMBOL) {
    if (!firstsymbol)
      gt_str_append_char(buffer, currentchar);
    else
      firstsymbol = false;
    if ((currentchar = fastq_buf_getchar(seqit)) == EOF)
      return EOF;
    seqit->currentread++;
  }
  seqit->curline++;
  return 0;
}
Example #17
0
extern EISeq *
createEncIdxSeqGen(Seqpos totalLen, const GtStr *projectName,
                   MRAEnc *alphabet, const struct seqStats *stats,
                   SeqDataReader seqGenerator,
                   const struct seqBaseParam *params,
                   size_t numExtHeaders, const uint16_t *headerIDs,
                   const uint32_t *extHeaderSizes,
                   headerWriteFunc *extHeaderCallbacks,
                   void **headerCBData,
                   bitInsertFunc biFunc, BitOffset cwExtBitsPerPos,
                   varExtBitsEstimator biVarBits, void *cbState, GtError *err)
{
  EISeq *seqIdx = NULL;
  switch (params->encType)
  {
  case BWT_ON_BLOCK_ENC:
    seqIdx = newGenBlockEncIdxSeq(totalLen, projectName, alphabet, stats,
                                  seqGenerator, params, numExtHeaders,
                                  headerIDs, extHeaderSizes, extHeaderCallbacks,
                                  headerCBData, biFunc, cwExtBitsPerPos,
                                  biVarBits, cbState, err);
    break;
  default:
    gt_error_set(err, "Illegal/unknown/unimplemented encoding requested!");
    break;
  }
  return seqIdx;
}
Example #18
0
int gt_bioseq_iterator_next(GtBioseqIterator *bsi, GtBioseq **bioseq,
                            GtError *err)
{
  int had_err = 0;
  gt_error_check(err);
  gt_assert(bsi && bioseq);
  if (bsi->current_file < bsi->seqfile_counter) {
    if (bsi->sequence_files[bsi->current_file] &&
        !strcmp(bsi->sequence_files[bsi->current_file], "-")) {
      if (bsi->stdin_was_used) {
        gt_error_set(err, "multiple specification of sequence file \"-\"");
        had_err = -1;
      }
      else
        bsi->stdin_was_used = true;
    }
    if (!had_err) {
      if (bsi->sequence_files[bsi->current_file])
        *bioseq = gt_bioseq_new(bsi->sequence_files[bsi->current_file], err);
      else
        *bioseq = gt_bioseq_new("-", err);
      if (*bioseq)
        bsi->current_file++;
      else
        had_err = -1;
    }
  }
  else
    *bioseq = NULL;
  return had_err;
}
Example #19
0
static int assigncorrecttype(GtMapspecification *mapspec,
                             void *ptr,
                             GtUword byteoffset,
                             GtError *err)
{
  void *voidptr;
  int had_err = 0;

  gt_error_check(err);
  switch (mapspec->typespec)
  {
    case GtCharType:
      ASSIGNPTR2STARTPTR(char);
      break;
    case GtFilelengthvaluesType:
      ASSIGNPTR2STARTPTR(GtFilelengthvalues);
      break;
    case GtUcharType:
      ASSIGNPTR2STARTPTR(GtUchar);
      break;
    case Uint16Type:
      ASSIGNPTR2STARTPTR(uint16_t);
      break;
    case Uint32Type:
      ASSIGNPTR2STARTPTR(uint32_t);
      break;
    case GtUlongType:
      ASSIGNPTR2STARTPTR(GtUword);
      break;
    case Uint64Type:
      ASSIGNPTR2STARTPTR(uint64_t);
      break;
    case GtBitsequenceType:
      ASSIGNPTR2STARTPTR(GtBitsequence);
      break;
    case GtUlongBoundType:
      ASSIGNPTR2STARTPTR(GtUlongBound);
      break;
    case GtPairBwtidxType:
      ASSIGNPTR2STARTPTR(GtPairBwtidx);
      break;
    case GtTwobitencodingType:
      ASSIGNPTR2STARTPTR(GtTwobitencoding);
      break;
    case GtSpecialcharinfoType:
      ASSIGNPTR2STARTPTR(GtSpecialcharinfo);
      break;
    case GtBitElemType:
      ASSIGNPTR2STARTPTR(BitElem);
      break;
    case GtUintType:
      ASSIGNPTR2STARTPTR(unsigned int);
      break;
    default:
      gt_error_set(err, "no assignment specification for size " GT_WU,
                   (GtUword) mapspec->sizeofunit);
      had_err = -1;
  }
  return had_err;
}
Example #20
0
static int insertfirstsuffixes(Mergertrierep *trierep,
                               unsigned long *nextpostable,
                               Suffixarray *suffixarraytable,
                               unsigned int numofindexes,
                               GtError *err)
{
  unsigned int idx;
  unsigned long suftabvalue;
  int retval;

  gt_error_check(err);
  for (idx=0; idx<numofindexes; idx++)
  {
    retval
      = gt_readnextfromstream_GtUlong(&suftabvalue,
                                  &suffixarraytable[idx].suftabstream_GtUlong);
    if (retval == 0)
    {
      gt_error_set(err,"file %s: line %d: unexpected end of file when "
                        "reading suftab",__FILE__,__LINE__);
      return -2;
    }
    nextpostable[idx]++;
    fillandinsert(trierep,
                  idx,
                  suftabvalue,
                  trierep->root,
                  (uint64_t) idx);
  }
  return 0;
}
Example #21
0
static int readkeysize(const char *indexname,GtError *err)
{
  FILE *fp;
  bool haserr = false;
  char cc;

  gt_error_check(err);
  fp = gt_fa_fopen_with_suffix(indexname,GT_KEYSTABFILESUFFIX,"rb",err);
  if (fp == NULL)
  {
    haserr = true;
  }
  if (!haserr)
  {
    GT_UNUSED size_t ret;

    ret = fread(&cc,sizeof cc, (size_t) 1, fp);
    if (ferror(fp))
    {
      gt_error_set(err,"error when trying to read first byte of file %s%s: %s",
                   indexname,GT_KEYSTABFILESUFFIX,strerror(errno));
      haserr = true;
    }
  }
  gt_assert(cc >= 0);
  gt_fa_xfclose(fp);
  return haserr ? -1 : (int) cc;
}
Example #22
0
static int parse_bed_range(GtRange *range, GtStr *start, GtStr *end,
                           GtWord offset, GtIO *bed_file, bool thick,
                           GtError *err)
{
  int had_err;
  gt_error_check(err);
  had_err = gt_parse_range(range, gt_str_get(start), gt_str_get(end),
                           gt_io_get_line_number(bed_file),
                           gt_io_get_filename(bed_file), err);
  /* BED has a weird numbering scheme: positions are 0-based, but the end
     position is not part of the feature. Transform to 1-based coordinates. */
  range->start++;
  /* Ranges defining a 'thick' region sometimes come with length 0 to
     designate that there are no thick regions. So do not fail here and
     handle that case later. */
  if (!thick) {
    if (!had_err && range->start > range->end) {
      gt_error_set(err, "file \"%s\": line "GT_WU": BED feature has length 0",
                   gt_io_get_filename(bed_file),
                   gt_io_get_line_number(bed_file));
      had_err = -1;
    }
  }
  if (offset)
    *range = gt_range_offset(range, offset);
  return had_err;
}
Example #23
0
static int gt_bioseq_col_grep_desc(GtSeqCol *sc, char **seq,
                                   GtUword start, GtUword end,
                                   GtStr *seqid, GtError *err)
{
  GtUword filenum = 0, seqnum = 0, seqlength;
  int had_err;
  GtBioseqCol *bsc;
  bsc = gt_bioseq_col_cast(sc);
  gt_error_check(err);
  gt_assert(bsc && seq && seqid);
  had_err = grep_desc(bsc, &filenum, &seqnum, seqid, err);
  if (!had_err) {
    seqlength = gt_bioseq_get_sequence_length(bsc->bioseqs[filenum], seqnum);
    if (start > seqlength - 1 || end > seqlength - 1) {
      had_err = -1;
      gt_error_set(err, "trying to extract range "GT_WU"-"GT_WU" on sequence "
                         "``%s'' which is not covered by that sequence (only "
                         ""GT_WU" characters in size). Has the sequence-region "
                         "to sequence mapping been defined correctly?",
                         start, end, gt_str_get(seqid), seqlength);
    }
  }
  if (!had_err) {
    *seq = gt_bioseq_get_sequence_range(bsc->bioseqs[filenum], seqnum,
                                        start, end);
  }
  return had_err;
}
Example #24
0
static int gt_rdb_stmt_mysql_get_string(GtRDBStmt *st, GtUword field_no,
                                        GtStr *result, GtError *err)
{
  GtRDBStmtMySQL *stm;
  int had_err = 0;
  gt_assert(st && result);
  gt_error_check(err);
  stm = gt_rdb_stmt_mysql_cast(st);
  CHECK_INIT_STATEMENT
  if (!had_err
        && stm->results[field_no].buffer_type != MYSQL_TYPE_STRING
        && stm->results[field_no].buffer_type != MYSQL_TYPE_VAR_STRING
        && stm->results[field_no].buffer_type != MYSQL_TYPE_BLOB
        && stm->results[field_no].buffer_type != MYSQL_TYPE_TINY_BLOB
        && stm->results[field_no].buffer_type != MYSQL_TYPE_MEDIUM_BLOB
        && stm->results[field_no].buffer_type != MYSQL_TYPE_LONG_BLOB
        && stm->results[field_no].buffer_type != MYSQL_TYPE_BIT)
  {
    gt_error_set(err, "incompatible type!");
    had_err = -1;
  }
  if (!had_err) {
    gt_str_reset(result);
    gt_str_append_cstr_nt(result,
                          (char*)stm->results[field_no].buffer,
                          *stm->results[field_no].length);
  }
  return had_err;
}
static int gt_condenser_runner(int argc, const char **argv, int parsed_args,
                          void *tool_arguments, GT_UNUSED GtError *err)
{
  GtToolbox *condenser_toolbox = tool_arguments;
  GtTool *tool;
  int had_err = 0;
  char **nargv = NULL;

  gt_error_check(err);
  gt_assert(condenser_toolbox);

  /* get condenser tools */
  tool = gt_toolbox_get_tool(condenser_toolbox, argv[parsed_args]);
  if (!tool) {
    gt_error_set(err, "condenser tool '%s' not found; option -help lists "
                      "possible tools", argv[parsed_args]);
    had_err = -1;
  }

  /* call condenser tool */
  if (!had_err) {
    gt_assert(tool);
    nargv = gt_cstr_array_prefix_first(argv + parsed_args,
                                       gt_error_get_progname(err));
    gt_error_set_progname(err, nargv[0]);
    had_err = gt_tool_run(tool, argc - parsed_args, (const char**) nargv, err);
  }

  /* free */
  gt_cstr_array_delete(nargv);

  return had_err;
}
Example #26
0
int gth_bssm_param_save(GthBSSMParam *bssm_param, const char *filename,
                        GtError *err)
{
    FILE *file;
    int had_err = 0;

    gt_error_check(err);

    file = gt_fa_xfopen(filename, "w");
    gt_assert(file);

    /* check if at least one model is set */
    if (!bssm_param->gt_donor_model_set &&
            !bssm_param->gc_donor_model_set &&
            !bssm_param->ag_acceptor_model_set) {
        gt_error_set(err, "BSSM parameter to write contain no model");
        had_err = -1;
    }

    if (!had_err)
        bssm_param_plain_write(bssm_param, file);

    gt_fa_xfclose(file);

    return had_err;
}
static int seqid_info_get(SeqidInfo *seqid_info, GtUword *seqnum,
                          GtUword *filenum, GtRange *outrange,
                          const GtRange *inrange,
                          GT_UNUSED const char *filename,
                          const char *seqid, GtError *err)
{
  SeqidInfoElem *seqid_info_elem;
  GtUword i;
  gt_error_check(err);
  gt_assert(seqid_info && seqnum && outrange && inrange);
  for (i = 0; i < gt_array_size(seqid_info); i++) {
    seqid_info_elem = gt_array_get(seqid_info, i);
    if (seqid_info_elem->descrange.end == GT_UNDEF_UWORD ||
        gt_range_contains(&seqid_info_elem->descrange, inrange)) {
      *seqnum = seqid_info_elem->seqnum;
      *filenum = seqid_info_elem->filenum;
      *outrange = seqid_info_elem->descrange;
      return 0;
    }
  }
  gt_error_set(err,
               "cannot find a sequence with ID \"%s\" "
               "{range " GT_WU "," GT_WU ")",
               seqid, inrange->start, inrange->end);
  return -1;
}
Example #28
0
GtMD5Tab* gt_md5_tab_new_from_cache_file(const char *cache_file,
                                         GtUword num_of_seqs,
                                         bool use_file_locking,
                                         GtError *err)
{
  GtMD5Tab *md5_tab;
  bool reading_succeeded = false;
  gt_assert(cache_file);
  gt_error_check(err);

  md5_tab = gt_calloc(1, sizeof *md5_tab);
  md5_tab->num_of_md5s = num_of_seqs;
  if (gt_file_exists(cache_file)) {
    reading_succeeded = read_fingerprints(md5_tab,
                                          cache_file,
                                          use_file_locking);
  }
  if (!reading_succeeded) {
    gt_free(md5_tab);
    gt_error_set(err, "could not read fingerprints file \"%s\" or "
                      "invalid file contents", cache_file);
    return NULL;
  }
  md5_tab->owns_md5s = false;
  return md5_tab;
}
Example #29
0
static int decode_sequence_file(const char *seqfile,
                                GtEncseqDecodeArguments *args,
                                GtError *err)
{
  GtEncseqLoader *encseq_loader;
  GtEncseq *encseq;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(seqfile);
  encseq_loader = gt_encseq_loader_new();
  if (!had_err && gt_encseq_options_lossless_value(args->eopts)) {
    gt_encseq_loader_require_lossless_support(encseq_loader);
  }
  if (!(encseq = gt_encseq_loader_load(encseq_loader, seqfile, err)))
    had_err = -1;
  if (!had_err && gt_encseq_options_mirrored_value(args->eopts)) {
    if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) {
      gt_error_set(err, "mirroring is only defined on DNA sequences");
      had_err = -1;
    }
    if (!had_err)
      had_err = gt_encseq_mirror(encseq, err);
  }
  if (!had_err)
    had_err = output_sequence(encseq, args, seqfile, err);
  gt_encseq_delete(encseq);
  gt_encseq_loader_delete(encseq_loader);
  return had_err;
}
Example #30
0
static int bssm_model_read(GthBSSMModel *bssm_model, FILE *file, GtError *err)
{
    int had_err = 0;
    gt_error_check(err);
    gt_xfread(&bssm_model->hypothesis_num, sizeof (GtUword), 1, file);
    if (bssm_model->hypothesis_num != HYPOTHESIS7 &&
            bssm_model->hypothesis_num != HYPOTHESIS2) {
        gt_error_set(err, "BSSM model contains unknown hypothesis number");
        had_err = -1;
    }
    if (!had_err) {
        gt_xfread(&bssm_model->window_size_left, sizeof (GtUword), 1, file);
        gt_xfread(&bssm_model->window_size_right, sizeof (GtUword), 1, file);
        switch (bssm_model->hypothesis_num) {
        case HYPOTHESIS2:
            gt_xfread(&bssm_model->hypotables.hypo2table, sizeof (Hypo2table), 1,
                      file);
            break;
        case HYPOTHESIS7:
            gt_xfread(&bssm_model->hypotables.hypo7table, sizeof (Hypo7table), 1,
                      file);
            break;
        default:
            gt_assert(0);
        }
    }
    return had_err;
}