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