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; }
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; }
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; }
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; }
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; }
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; }