Exemple #1
0
sff_t *
sff_init1()
{
  sff_t *sff = NULL;

  sff = ion_calloc(1, sizeof(sff_t), __func__, "sff");
  sff->gheader = NULL;
  sff->rheader = sff_read_header_init();
  sff->read = sff_read_init();

  return sff;
}
Exemple #2
0
sff_read_t *
sff_read_read(FILE *fp, sff_header_t *gh, sff_read_header_t *rh)
{
  sff_read_t *r = NULL;
  uint32_t i, n = 0;

  r = sff_read_init();

  r->flowgram = ion_malloc(sizeof(uint16_t)*gh->flow_length, __func__, "r->flowgram");
  r->flow_index = ion_malloc(sizeof(uint8_t)*rh->n_bases, __func__, "r->flow_index");

  r->bases = ion_string_init(rh->n_bases+1);
  r->quality = ion_string_init(rh->n_bases+1);

  if(gh->flow_length != fread(r->flowgram, sizeof(uint16_t), gh->flow_length, fp)
     || rh->n_bases != fread(r->flow_index, sizeof(uint8_t), rh->n_bases, fp)
     || rh->n_bases != fread(r->bases->s, sizeof(char), rh->n_bases, fp)
     || rh->n_bases != fread(r->quality->s, sizeof(char), rh->n_bases, fp)) {
      // truncated file, error
      ion_error(__func__, "fread", Exit, ReadFileError);
  }
  n += sizeof(uint16_t)*gh->flow_length + 3*sizeof(uint8_t)*rh->n_bases;

  // set length and null-terminators
  r->bases->l = rh->n_bases;
  r->quality->l = rh->n_bases;
  r->bases->s[r->bases->l]='\0';
  r->quality->s[r->quality->l]='\0';

  // convert flowgram to host order
  for(i=0;i<gh->flow_length;i++) {
      r->flowgram[i] = ntohs(r->flowgram[i]);
  }

  n += ion_read_padding(fp, n);

#ifdef ION_SFF_DEBUG
  sff_read_print(stderr, r, gh, rh);
#endif

  return r;
}