示例#1
0
size_t fastq_fread_bytes_se(array_list_t *reads, size_t bytes, fastq_file_t *fq_file) {
	size_t accumulated_size = 0;
	char header1[MAX_READ_ID_LENGTH];
	char sequence[MAX_READ_SEQUENCE_LENGTH];
	char header2[MAX_READ_ID_LENGTH];
	char qualities[MAX_READ_SEQUENCE_LENGTH];
	int header_length, sequence_length, quality_length;
	fastq_read_t *read;

	while (accumulated_size < bytes && fgets(header1, MAX_READ_ID_LENGTH, fq_file->fd) != NULL) {
		fgets(sequence, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
		fgets(header2, MAX_READ_ID_LENGTH, fq_file->fd);
		fgets(qualities, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
		header_length = strlen(header1);
		sequence_length = strlen(sequence);
		quality_length = strlen(qualities);

		// '\n' char is removed, but '\0' is left
		chomp_at(header1, header_length - 1);
		chomp_at(sequence, sequence_length - 1);
		chomp_at(qualities, quality_length - 1);
		
		read = fastq_read_new(header1, sequence, qualities);
		array_list_insert(read, reads);
		
		accumulated_size += header_length + sequence_length + quality_length;
	}

	return accumulated_size;
}
示例#2
0
int fastq_fread_num_reads(fastq_read_t *buffer_fq_reads, int num_reads, fastq_file_t *fq_file) {
	int count = 0;
	char header1[MAX_READ_ID_LENGTH];
	char sequence[MAX_READ_SEQUENCE_LENGTH];
	char header2[MAX_READ_ID_LENGTH];
	char qualities[MAX_READ_SEQUENCE_LENGTH];
	int header_length, sequence_length, quality_length;

	while (count < num_reads && fgets(header1, MAX_READ_ID_LENGTH, fq_file->fd) != NULL) {
		fgets(sequence, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
		fgets(header2, MAX_READ_ID_LENGTH, fq_file->fd);
		fgets(qualities, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);

		header_length = strlen(header1);
		sequence_length = strlen(sequence);
		quality_length = strlen(qualities);

		chomp_at(header1, header_length - 1);
		chomp_at(sequence, sequence_length - 1);
		chomp_at(qualities, quality_length - 1);

		buffer_fq_reads[count].id = (char*)malloc(sizeof(char) * header_length);
		buffer_fq_reads[count].sequence = (char*)malloc(sizeof(char) * sequence_length);
		buffer_fq_reads[count].quality = (char*)malloc(sizeof(char) * quality_length);

		strcpy(buffer_fq_reads[count].id, header1);
		strcpy(buffer_fq_reads[count].sequence, sequence);
		strcpy(buffer_fq_reads[count].quality, qualities);

		count++;
	}

	return count;
}
示例#3
0
size_t fastq_fread_se_ex(array_list_t *reads, size_t num_reads, fastq_file_t *fq_file) {
  size_t count = 0;
  char *p;
  char header1[MAX_READ_ID_LENGTH];
  char sequence[MAX_READ_SEQUENCE_LENGTH];
  char header2[MAX_READ_ID_LENGTH];
  char qualities[MAX_READ_SEQUENCE_LENGTH];
  int header_length, sequence_length, quality_length;
  fastq_read_t *read;
  
  while (count < num_reads && fgets(header1, MAX_READ_ID_LENGTH, fq_file->fd) != NULL) {
    char *res = fgets(sequence, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
    res = fgets(header2, MAX_READ_ID_LENGTH, fq_file->fd);
    res = fgets(qualities, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
    
    header_length = strlen(header1);
    sequence_length = strlen(sequence);
    quality_length = strlen(qualities);
    
    // '\n' char is removed, but '\0' is left
    chomp_at(header1, header_length - 1);
    if ((p = strstr(header1, " ")) != NULL) {
      *p = 0;
    }
    chomp_at(sequence, sequence_length - 1);
    chomp_at(qualities, quality_length - 1);

    read = fastq_read_new(&header1[1], sequence, qualities);
    array_list_insert(read, reads);
    
    count++;
  }
  
  return count;
}
示例#4
0
int fastq_fread_max_size(fastq_read_t *buffer_fq_reads, unsigned long max_size, fastq_file_t *fq_file) {
	int count = 0;
	unsigned long accumulated_size = 0;
	char header1[MAX_READ_ID_LENGTH];
	char sequence[MAX_READ_SEQUENCE_LENGTH];
	char header2[MAX_READ_ID_LENGTH];
	char qualities[MAX_READ_SEQUENCE_LENGTH];
	int header_length, sequence_length, quality_length;

	while (accumulated_size <= max_size && fgets(header1, MAX_READ_ID_LENGTH, fq_file->fd) != NULL) {
		fgets(sequence, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);
		fgets(header2, MAX_READ_ID_LENGTH, fq_file->fd);
		fgets(qualities, MAX_READ_SEQUENCE_LENGTH, fq_file->fd);

		header_length = strlen(header1);
		sequence_length = strlen(sequence);
		quality_length = strlen(qualities);

		chomp_at(header1, header_length - 1);
		chomp_at(sequence, sequence_length - 1);
		chomp_at(qualities, quality_length - 1);

		buffer_fq_reads[count].id = (char*)malloc(sizeof(char) * header_length);
		buffer_fq_reads[count].sequence = (char*)malloc(sizeof(char) * sequence_length);
		buffer_fq_reads[count].quality = (char*)malloc(sizeof(char) * quality_length);

		strcpy(buffer_fq_reads[count].id, header1);
		strcpy(buffer_fq_reads[count].sequence, sequence);
		strcpy(buffer_fq_reads[count].quality, qualities);
		accumulated_size += header_length + sequence_length + quality_length;

		count++;
	}

	return count;
}
示例#5
0
size_t fastq_fread_bytes_aligner_pe(array_list_t *reads, size_t bytes, fastq_file_t *fq_file1, fastq_file_t *fq_file2) {
	size_t accumulated_size = 0;
	char header1[MAX_READ_ID_LENGTH];
	char header2[MAX_READ_ID_LENGTH];
	char read_separator[MAX_READ_ID_LENGTH];
	char sequence1[MAX_READ_SEQUENCE_LENGTH];
	char sequence2[MAX_READ_SEQUENCE_LENGTH];
	char qualities1[MAX_READ_SEQUENCE_LENGTH];
	char qualities2[MAX_READ_SEQUENCE_LENGTH];
	int header_length1, sequence_length1, quality_length1;
	int header_length2, sequence_length2, quality_length2;
	fastq_read_t *read1, *read2;

	while (accumulated_size < bytes && fgets(header1, MAX_READ_ID_LENGTH, fq_file1->fd) != NULL) {
		fgets(sequence1, MAX_READ_SEQUENCE_LENGTH, fq_file1->fd);
		fgets(read_separator, MAX_READ_ID_LENGTH, fq_file1->fd);
		fgets(qualities1, MAX_READ_SEQUENCE_LENGTH, fq_file1->fd);

		header_length1 = strlen(header1);
		sequence_length1 = strlen(sequence1);
		quality_length1 = strlen(qualities1);

		// '\n' char is removed, but '\0' is left
		chomp_at(header1, header_length1 - 1);
		chomp_at(sequence1, sequence_length1 - 1);
		chomp_at(qualities1, quality_length1 - 1);

		// second file
		fgets(header2, MAX_READ_ID_LENGTH, fq_file2->fd);
		fgets(sequence2, MAX_READ_SEQUENCE_LENGTH, fq_file2->fd);
		fgets(read_separator, MAX_READ_ID_LENGTH, fq_file2->fd);
		fgets(qualities2, MAX_READ_SEQUENCE_LENGTH, fq_file2->fd);

		header_length2 = strlen(header2);
		sequence_length2 = strlen(sequence2);
		quality_length2 = strlen(qualities2);

		// '\n' char is removed, but '\0' is left
		chomp_at(header2, header_length2 - 1);
		chomp_at(sequence2, sequence_length2 - 1);
		chomp_at(qualities2, quality_length2 - 1);

		read1 = fastq_read_new(header1, sequence1, qualities1);
		read2 = fastq_read_new(header2, sequence2, qualities2);

		array_list_insert(read1, reads);
		array_list_insert(read2, reads);

		accumulated_size += header_length1 + sequence_length1 + quality_length1 + header_length2 + sequence_length2 + quality_length2;
	}

	return accumulated_size;
}
示例#6
0
size_t fastq_fread_pe(array_list_t *reads, size_t num_reads, fastq_file_t *fq_file1, fastq_file_t *fq_file2, int mode) {
	size_t count = 0;
	char header1[MAX_READ_ID_LENGTH];
	char header2[MAX_READ_ID_LENGTH];
	char read_separator[MAX_READ_ID_LENGTH];
	char sequence1[MAX_READ_SEQUENCE_LENGTH];
	char sequence2[MAX_READ_SEQUENCE_LENGTH];
	char qualities1[MAX_READ_SEQUENCE_LENGTH];
	char qualities2[MAX_READ_SEQUENCE_LENGTH];
	int header_length1, sequence_length1, quality_length1;
	int header_length2, sequence_length2, quality_length2;
	fastq_read_pe_t *read_pe;

	while (count < num_reads && fgets(header1, MAX_READ_ID_LENGTH, fq_file1->fd) != NULL) {
		fgets(sequence1, MAX_READ_SEQUENCE_LENGTH, fq_file1->fd);
		fgets(read_separator, MAX_READ_ID_LENGTH, fq_file1->fd);
		fgets(qualities1, MAX_READ_SEQUENCE_LENGTH, fq_file1->fd);

		header_length1 = strlen(header1);
		sequence_length1 = strlen(sequence1);
		quality_length1 = strlen(qualities1);

		// '\n' char is removed, but '\0' is left
		chomp_at(header1, header_length1 - 1);
		chomp_at(sequence1, sequence_length1 - 1);
		chomp_at(qualities1, quality_length1 - 1);

		// second file
		fgets(header2, MAX_READ_ID_LENGTH, fq_file2->fd);
		fgets(sequence2, MAX_READ_SEQUENCE_LENGTH, fq_file2->fd);
		fgets(read_separator, MAX_READ_ID_LENGTH, fq_file2->fd);
		fgets(qualities2, MAX_READ_SEQUENCE_LENGTH, fq_file2->fd);

		header_length2 = strlen(header2);
		sequence_length2 = strlen(sequence2);
		quality_length2 = strlen(qualities2);

		// '\n' char is removed, but '\0' is left
		chomp_at(header2, header_length2 - 1);
		chomp_at(sequence2, sequence_length2 - 1);
		chomp_at(qualities2, quality_length2 - 1);

		read_pe = fastq_read_pe_new(header1, header2, sequence1, qualities1, sequence2, qualities2, mode);
		array_list_insert(read_pe, reads);

		count++;
	}

	return count;
}