Example #1
0
ion_string_t*
sff_read_get_read_quality_values(sff_read_t* rd, int left_clip, int right_clip) {
	ion_string_t *quality;

    // account for NULL termination
    int quality_length = (right_clip - left_clip) + 1;

    // inititalize the quality array
    quality = ion_string_init(quality_length+1);
    if (!quality) {
        fprintf(stderr, "Out of memory! For read quality array!\n");
        exit(1);
    }
 
    // copy the relative substring
    int start = left_clip;
    int stop  = right_clip;
    int i, j = 0;

    for (i = start; i < stop; i++) {
        quality->s[j] = rd->quality->s[i];
        j++;
    }

    return quality;
}
Example #2
0
File: sff_read.c Project: alecw/TS
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;
}
Example #3
0
sff_read_header_t *
sff_read_header_read(FILE *fp)
{
  sff_read_header_t *rh = NULL;
  uint32_t n = 0;

  rh = sff_read_header_init();

  if(1 != fread(&rh->rheader_length, sizeof(uint16_t), 1, fp)
     || 1 != fread(&rh->name_length, sizeof(uint16_t), 1, fp)
     || 1 != fread(&rh->n_bases, sizeof(uint32_t), 1, fp)
     || 1 != fread(&rh->clip_qual_left, sizeof(uint16_t), 1, fp)
     || 1 != fread(&rh->clip_qual_right, sizeof(uint16_t), 1, fp)
     || 1 != fread(&rh->clip_adapter_left, sizeof(uint16_t), 1, fp)
     || 1 != fread(&rh->clip_adapter_right, sizeof(uint16_t), 1, fp)) {
      free(rh);
      return NULL;
  }
  n += sizeof(uint32_t) + 6*sizeof(uint16_t);

  // convert values from big-endian
  sff_read_header_ntoh(rh);

  rh->name = ion_string_init(rh->name_length+1);

  if(rh->name_length != fread(rh->name->s, sizeof(char), rh->name_length, fp)) {
      // truncated file, error
      ion_error(__func__, "fread", Exit, ReadFileError);
  }
  n += sizeof(char)*rh->name_length;

  // set read name length and null-terminator
  rh->name->l = rh->name_length;
  rh->name->s[rh->name->l]='\0';

  n += ion_read_padding(fp, n);

#ifdef ION_SFF_DEBUG
  sff_read_header_print(stderr, rh);
#endif

  if(rh->rheader_length != n) {
      ion_error(__func__, "SFF read header length did not match", Exit, ReadFileError);
  }

  return rh;
}
Example #4
0
ion_string_t*
sff_read_get_read_bases(sff_read_t* rd, int left_clip, int right_clip) {
	ion_string_t *bases;

    // account for NULL termination
    int bases_length = (right_clip - left_clip) + 1;

	bases = ion_string_init(bases_length);//MJ?+1
    
    // copy the relative substring
    int start = left_clip;
    int stop  = right_clip;
    int i, j = 0;

    for (i = start; i < stop; i++) {
        *(bases->s + j) = *(rd->bases->s + i);
        j++;
    }

    return bases;
}