1 /****************************************************************\
2 *                                                                *
3 *  C4 dynamic programming library - code for optimal pairs       *
4 *                                                                *
5 *  Guy St.C. Slater..   mailto:guy@ebi.ac.uk                     *
6 *  Copyright (C) 2000-2009.  All Rights Reserved.                *
7 *                                                                *
8 *  This source code is distributed under the terms of the        *
9 *  GNU General Public License, version 3. See the file COPYING   *
10 *  or http://www.gnu.org/licenses/gpl.txt for details            *
11 *                                                                *
12 *  If you use this code, please keep this notice intact.         *
13 *                                                                *
14 \****************************************************************/
15 
16 #include "opair.h"
17 
18 /**/
19 
OPair_create(Optimal * optimal,SubOpt * subopt,gint query_length,gint target_length,gpointer user_data)20 OPair *OPair_create(Optimal *optimal, SubOpt *subopt,
21                     gint query_length, gint target_length, gpointer user_data){
22     register OPair *opair = g_new(OPair, 1);
23     g_assert(optimal);
24     g_assert(query_length >= 0);
25     g_assert(target_length >= 0);
26     opair->optimal = Optimal_share(optimal);
27     opair->user_data = user_data;
28     opair->subopt = SubOpt_share(subopt);
29     opair->region = Region_create(0, 0, query_length, target_length);
30     opair->prev_score = C4_IMPOSSIBLY_HIGH_SCORE;
31     return opair;
32     }
33 
OPair_destroy(OPair * opair)34 void OPair_destroy(OPair *opair){
35     SubOpt_destroy(opair->subopt);
36     Optimal_destroy(opair->optimal);
37     Region_destroy(opair->region);
38     g_free(opair);
39     return;
40     }
41 
OPair_next_path(OPair * opair,C4_Score threshold)42 Alignment *OPair_next_path(OPair *opair, C4_Score threshold){
43     register Alignment *alignment;
44     alignment = Optimal_find_path(opair->optimal, opair->region,
45                                   opair->user_data, threshold,
46                                   opair->subopt);
47     if(alignment){
48         if(alignment->score > opair->prev_score)
49             g_warning("Score [%d] greater than previous [%d]",
50                       alignment->score, opair->prev_score);
51         g_assert(alignment->score <= opair->prev_score);
52         opair->prev_score = alignment->score;
53         }
54     return alignment;
55     }
56 
57 /**/
58 
59