Exemplo n.º 1
0
PandaNextSeq panda_trim_overhangs(
	PandaNextSeq inner,
	void *inner_data,
	PandaDestroy inner_destroy,
	PandaLogProxy logger,
	panda_nt *forward,
	size_t forward_length,
	panda_nt *reverse,
	size_t reverse_length,
	bool skip,
	double threshold,
	void **next_data,
	PandaDestroy *next_destroy) {
	struct hang_data *data = malloc(sizeof(struct hang_data));
	size_t it;

	data->next = inner;
	data->next_data = inner_data;
	data->next_destroy = inner_destroy;
	data->skip = skip;
	data->threshold = threshold;
	for (it = 0; it < forward_length; it++)
		data->forward[forward_length - it - 1] = forward[it];
	for (it = 0; it < reverse_length; it++)
		data->reverse[reverse_length - it - 1] = reverse[it];
	data->forward_length = forward_length;
	data->reverse_length = reverse_length;
	data->logger = panda_log_proxy_ref(logger);

	*next_data = data;
	*next_destroy = hang_free;
	return hang_next;
}
Exemplo n.º 2
0
PandaMux panda_mux_new(
	PandaNextSeq next,
	void *next_data,
	PandaDestroy next_destroy,
	PandaLogProxy logger) {
	PandaMux mux = malloc(sizeof(struct panda_mux));
	mux->refcnt = 1;
	mux->next = next;
	mux->next_data = next_data;
	mux->next_destroy = next_destroy;
	mux->logger = panda_log_proxy_ref(logger);
	mux->noalgn = NULL;
	mux->noalgn_data = NULL;
	mux->noalgn_destroy = NULL;
	mux->child_count = 0;
	pthread_mutex_init(&mux->mutex, NULL);
	pthread_mutex_init(&mux->next_mutex, NULL);
	pthread_rwlock_init(&mux->noalgn_rwlock, NULL);
	return mux;
}
Exemplo n.º 3
0
PandaAssembler panda_assembler_new_kmer(
	PandaNextSeq next,
	void *next_data,
	PandaDestroy next_destroy,
	PandaLogProxy logger,
	size_t num_kmers) {
	PandaAssembler assembler = malloc(sizeof(struct panda_assembler));
	if (assembler == NULL) {
		if (next_destroy != NULL) {
			next_destroy(next_data);
		}
		return NULL;
	}
	assembler->refcnt = 1;
	assembler->name[0] = '\0';
	assembler->next = next;
	assembler->next_data = next_data;
	assembler->next_destroy = next_destroy;
	assembler->noalgn = NULL;
	assembler->noalgn_data = NULL;
	assembler->noalgn_destroy = NULL;
	assembler->rejected = NULL;
	assembler->modules = NULL;
	assembler->modules_length = 0;
	assembler->modules_size = 0;
	assembler->result.forward = NULL;
	assembler->forward_primer_length = 0;
	assembler->result.reverse = NULL;
	assembler->result.sequence = assembler->result_seq;
	assembler->reverse_primer_length = 0;
	assembler->forward_trim = 0;
	assembler->reverse_trim = 0;
	assembler->nofpcount = 0;
	assembler->norpcount = 0;
	assembler->okcount = 0;
	assembler->lowqcount = 0;
	assembler->noalgncount = 0;
	assembler->badreadcount = 0;
	assembler->slowcount = 0;
	assembler->count = 0;
	assembler->post_primers = false;
	assembler->threshold = log(0.6);
	assembler->algo = panda_algorithm_simple_bayes_new();
	memset(assembler->overlapcount, 0, 2 * PANDA_MAX_LEN * sizeof(long));
	assembler->longest_overlap = 0;
	assembler->num_kmers = num_kmers;
	assert(1 << (8 * sizeof(seqindex)) > PANDA_MAX_LEN);
	assembler->kmerseen = malloc(KMERSEEN_SIZE(num_kmers));
	if (assembler->kmerseen == NULL) {
		if (next_destroy != NULL) {
			next_destroy(next_data);
		}
		free(assembler);
		return NULL;
	}
	assembler->logger = panda_log_proxy_ref(logger);
#ifdef HAVE_PTHREAD
	pthread_mutex_init(&assembler->mutex, NULL);
#endif
	memset(assembler->kmerseen, 0, KMERSEEN_SIZE(num_kmers));
	panda_assembler_set_maximum_overlap(assembler, 0);
	panda_assembler_set_minimum_overlap(assembler, 2);
	panda_assembler_set_primer_penalty(assembler, 0);

	return assembler;
}