Exemple #1
0
void alignmentsExtract(std::vector<Chain*>& dst, Chain* query, DbAlignment** alignments,
    int alignments_length) {

	int query_len = chainGetLength(query);

	char* alignment_str = new char[query_len];
	int query_start, length;

	Chain* target = nullptr;

	char* query_str = nullptr;
	char* target_str = nullptr;
	Alignment* alignment = nullptr;

	const char gap_item = '-';

	for (int i = 0; i < alignments_length; ++i) {

		target = dbAlignmentGetTarget(alignments[i]);

		query_start = dbAlignmentGetQueryStart(alignments[i]);
		length = dbAlignmentGetPathLen(alignments[i]);

		alignment = dbAlignmentToAlignment(alignments[i]);
		aligmentStr(&query_str, &target_str, alignment, gap_item);
		alignmentDelete(alignment);

		int j = 0;
		for (; j < query_start; ++j) {
			alignment_str[j] = 'X';
		}

		for (int k = 0; k < length; ++k) {
			if (query_str[k] != gap_item) {
				if (target_str[k] != gap_item) {
					alignment_str[j++] = target_str[k];
				} else {
					alignment_str[j++] = 'X';
				}
			}
		}

		for (; j < query_len; ++j) {
			alignment_str[j] = 'X';
		}

        dst.push_back(chainCreate((char*) chainGetName(target), strlen(chainGetName(target)),
            alignment_str, query_len));

        delete[] query_str;
        delete[] target_str;
	}

    delete[] alignment_str;
}
Exemple #2
0
static void* alignThread(void* param) {

    AlignContext* context = (AlignContext*) param;
    
    DbAlignment** dbAlignment = context->dbAlignment;
    int type = context->type;
    Chain* query = context->query;
    int queryIdx = context->queryIdx;
    Chain* target = context->target;
    int targetIdx = context->targetIdx;
    double value = context->value;
    int score = context->score;
    Scorer* scorer = context->scorer;
    int* cards = context->cards;
    int cardsLen = context->cardsLen;

    // align
    Alignment* alignment;
    alignScoredPair(&alignment, type, query, target, scorer, score, cards, cardsLen, NULL);

    // check scores
    int s1 = alignmentGetScore(alignment);
    int s2 = score;

    ASSERT(s1 == s2, "Scores don't match %d %d, (%s %s)", s1, s2,
        chainGetName(query), chainGetName(target));

    // extract info
    int queryStart = alignmentGetQueryStart(alignment);
    int queryEnd = alignmentGetQueryEnd(alignment);
    int targetStart = alignmentGetTargetStart(alignment); 
    int targetEnd = alignmentGetTargetEnd(alignment);
    int pathLen = alignmentGetPathLen(alignment);

    char* path = (char*) malloc(pathLen);
    alignmentCopyPath(alignment, path);

    alignmentDelete(alignment);
        
    // create db alignment
    *dbAlignment = dbAlignmentCreate(query, queryStart, queryEnd, queryIdx, 
        target, targetStart, targetEnd, targetIdx, value, score, scorer, path, 
        pathLen);

    return NULL;
}