Esempio n. 1
0
/* 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;
}
Esempio n. 2
0
/* 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;
}