Exemple #1
0
static void * downloadBamFile(void * args) {
	BamReaderData * data = (BamReaderData *) args;
	int j, tid, cnt, pos, n_plp;
	const bam_pileup1_t *plp;

	while (bam_mplp_auto(data->iter, &tid, &pos, &n_plp, &plp) > 0) {
		// Count reads in pileup
		cnt = 0;
		const bam_pileup1_t *p = plp;
		for (j = 0; j < n_plp; ++j) {
			//if (bam1_qual(p->b)[p->qpos] >= data->conf->min_baseQ) 
				cnt++;
			p++;
		}

		// Its a wrap:
		char * chrom = data->data->h->target_name[tid];

		if (data->stop > 0 && (strcmp(chrom, data->chrom) == 0 && pos >= data->stop))
			break;

		// +1 to account for 0-based indexing in BAMs:
		if (pushValuesToBuffer(data->bufferedReaderData, chrom, pos+1, pos+2, cnt))
			break;
	}

	bam_iter_destroy(data->data->iter);
	endBufferedSignal(data->bufferedReaderData);
	return NULL;
}
Exemple #2
0
static void * downloadTabixFile(void * args) {
	BCFReaderData * data = (BCFReaderData *) args;
	char * line;
	char * last_chrom = "";

	while ((line = nextLine(data))) {
		if (line[0] == '#')
			continue;

		char * chrom = strtok(line, "\t");
		if (strcmp(chrom, last_chrom)) {
			last_chrom = calloc(strlen(chrom) + 1, sizeof(char));
			strcpy(last_chrom, chrom);
		}
		int pos = atoi(strtok(NULL, "\t"));

		if (data->tabix_iterator)
			free(line);

		if (pushValuesToBuffer(data->bufferedReaderData, last_chrom, pos, pos+1, 1))
			break;
	}

	if (data->tabix_iterator) 
		ti_iter_destroy(data->tabix_iterator);

	endBufferedSignal(data->bufferedReaderData);
	return NULL;
}
Exemple #3
0
static int readIteratorEntries(bwOverlapIterator_t *iter, char * chrom, BigBedReaderData * data) {
	int index;
	for(index = 0; index < iter->entries->l; index++) {
		int start = iter->entries->start[index] + 1;
		int finish = iter->entries->end[index] + 1;
		if (data->stop > 0) {
			if (start >= data->stop)
				return 1;
			else if (finish > data->stop)
				finish = data->stop;
		}
		if (pushValuesToBuffer(data->bufferedReaderData, chrom, start, finish, 1))
			return 1;
	}
	return 0;
}