int bam_writer(void *data) { struct timeval start, end; double time; //if (time_on) { start_timer(start); } batch_t *batch = (batch_t *) data; fastq_read_t *fq_read; array_list_t *array_list; size_t num_items; //bam1_t *bam1; //alignment_t *alig; mapping_batch_t *mapping_batch = (mapping_batch_t *) batch->mapping_batch; batch_writer_input_t *writer_input = batch->writer_input; bam_file_t *bam_file = writer_input->bam_file; linked_list_t *linked_list = writer_input->list_p; size_t num_reads_b = array_list_size(mapping_batch->fq_batch); size_t num_mapped_reads = 0; size_t total_mappings = 0; unsigned char found_p1 = 0; unsigned char found_p2 = 0; int i = 0; extern size_t bwt_correct; extern size_t bwt_error; extern pthread_mutex_t bwt_mutex, mutex_sp; writer_input->total_batches++; extern size_t *histogram_sw; extern size_t num_reads_map; extern size_t num_reads; extern size_t tot_reads; extern st_bwt_t st_bwt; st_bwt.total_reads += num_reads_b; free(mapping_batch->histogram_sw); // // DNA/RNA mode // for (size_t i = 0; i < num_reads_b; i++) { num_items = array_list_size(mapping_batch->mapping_lists[i]); total_mappings += num_items; fq_read = (fastq_read_t *) array_list_get(i, mapping_batch->fq_batch); // mapped or not mapped ? if (num_items == 0) { total_mappings++; write_unmapped_read(fq_read, bam_file); if (mapping_batch->mapping_lists[i]) { array_list_free(mapping_batch->mapping_lists[i], NULL); } } else { num_mapped_reads++; if (array_list_size(mapping_batch->mapping_lists[i]) == 1) { st_bwt.single_alig++; } else { st_bwt.multi_alig++; } write_mapped_read(mapping_batch->mapping_lists[i], bam_file); } } if (mapping_batch) { mapping_batch_free(mapping_batch); } if (batch) batch_free(batch); basic_statistics_add(num_reads_b, num_mapped_reads, total_mappings, 0, basic_st); }
void ydb_batch_free(struct ydb_batch *ybatch) { struct batch *batch = (struct batch *)ybatch; batch_free(batch); }
int sam_writer(void *data) { batch_t *batch = (batch_t *) data; batch_writer_input_t *writer_input = batch->writer_input; //bam_file_t *bam_file = writer_input->bam_file; FILE *out_file = (FILE *) writer_input->bam_file; genome_t *genome = writer_input->genome; fastq_read_t *read; mapping_batch_t *mapping_batch = (mapping_batch_t *) batch->mapping_batch; size_t num_reads = array_list_size(mapping_batch->fq_batch); //linked_list_t *linked_list = writer_input->list_p; array_list_t *read_list = mapping_batch->fq_batch; array_list_t *mapping_list; size_t num_mappings; size_t num_mapped_reads = 0; size_t total_mappings = 0; alignment_t *alig; int flag, pnext = 0, tlen = 0; char rnext[4] = "*\0"; extern st_bwt_t st_bwt; st_bwt.total_reads += num_reads; for (size_t i = 0; i < num_reads; i++) { read = (fastq_read_t *) array_list_get(i, read_list); mapping_list = mapping_batch->mapping_lists[i]; num_mappings = array_list_size(mapping_list); total_mappings += num_mappings; //printf("%i.Read %s (num_mappings %i)\n", i, read->id, num_mappings); if (num_mappings > 0) { if (num_mappings == 1) { st_bwt.single_alig++; } else { st_bwt.multi_alig++; } num_mapped_reads++; for (size_t j = 0; j < num_mappings; j++) { alig = (alignment_t *) array_list_get(j, mapping_list); flag = (alig->seq_strand ? 16 : 0); fprintf(out_file, "%s\t%i\t%s\t%i\t%i\t%s\t%s\t%i\t%i\t%s\t%s\n", alig->query_name, flag, genome->chr_name[alig->chromosome], alig->position + 1, alig->map_quality, alig->cigar, rnext, pnext, tlen, alig->sequence, alig->quality); //alig->optional_fields); alignment_free(alig); } array_list_free(mapping_list, NULL); } else { total_mappings++; if (mapping_list) { array_list_free(mapping_list, NULL); } fprintf(out_file, "%s\t4\t*\t0\t0\t*\t*\t0\t0\t%s\t%s\n", read->id, read->sequence, read->quality); } } if (mapping_batch) { mapping_batch_free(mapping_batch); } if (batch) batch_free(batch); basic_statistics_add(num_reads, num_mapped_reads, total_mappings, 0, basic_st); }