/* create an local alignment in square space with constant score values, * to use it in linear context you have to generate an spacemanager before, * in any other case it can be NULL */ GtWord alignment_in_square_space_local(GtLinspaceManagement *spacemanager, GtAlignment *align, const GtUchar *useq, GtUword ustart, GtUword ulen, const GtUchar *vseq, GtUword vstart, GtUword vlen, GtWord matchscore, GtWord mismatchscore, GtWord gapscore) { GtWord score; gt_assert(align); GtScoreHandler *scorehandler = gt_scorehandler_new(matchscore, mismatchscore, 0, gapscore); score = alignment_in_square_space_local_generic(spacemanager, align, useq, ustart, ulen, vseq, vstart, vlen, scorehandler); gt_scorehandler_delete(scorehandler); return score; }
/* determining start and end of local alignment and call global function */ GtWord gt_computelinearspace_local_generic(LinspaceManagement *spacemanager, GtScoreHandler *scorehandler, GtAlignment *align, const GtUchar *useq, GtUword ustart, GtUword ulen, const GtUchar *vseq, GtUword vstart, GtUword vlen) { GtWord *Ltabcolumn, GT_UNUSED score = GT_WORD_MAX; GtUwordPair *Starttabcolumn; GtUword ulen_part, ustart_part, vlen_part, vstart_part; Gtmaxcoordvalue *max; gt_assert(spacemanager && scorehandler && align); gt_linspaceManagement_set_ulen(spacemanager,ulen); if (ulen == 0UL || vlen == 0UL) { /* empty alignment */ return 0; } else if (vlen == 1UL) { gt_linspaceManagement_check_local(spacemanager, (ulen+1)*(vlen+1)-1, ulen, sizeof (GtWord), sizeof (GtWord *)); return alignment_in_square_space_local_generic(spacemanager, align, useq, ustart, ulen, vseq, vstart, vlen, scorehandler); } else if (gt_linspaceManagement_checksquare_local(spacemanager, ulen, vlen, sizeof (*Ltabcolumn), sizeof (*Starttabcolumn))) { /* call 2dim */ return alignment_in_square_space_local_generic(spacemanager, align, useq, ustart, ulen, vseq, vstart, vlen, scorehandler); } gt_linspaceManagement_check_local(spacemanager, ulen, vlen, sizeof (*Ltabcolumn), sizeof (*Starttabcolumn)); max = evaluateallLScolumns(spacemanager, scorehandler, useq, ustart, ulen, vseq, vstart, vlen); if (gt_max_get_length_safe(max)) { ustart_part = ustart+(gt_max_get_start(max)).a; vstart_part = vstart+(gt_max_get_start(max)).b; ulen_part = gt_max_get_row_length(max); vlen_part = gt_max_get_col_length(max); score = gt_max_get_value(max); gt_scorehandler_change_score_to_cost(scorehandler); gt_alignment_set_seqs(align, &useq[ustart_part], ulen_part, &vseq[vstart_part], vlen_part); /* call global function */ gt_calc_linearalign(spacemanager, gt_scorehandler_get_costhandler(scorehandler), align, useq, ustart_part, ulen_part, vseq, vstart_part, vlen_part); } else { /*empty alignment */ return 0; } return score; }