1 /****************************************************************\
2 *                                                                *
3 *  Coding DNA comparison model                                   *
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 "coding2coding.h"
17 #include "frameshift.h"
18 
Coding2Coding_Data_init(Coding2Coding_Data * c2cd,Sequence * query,Sequence * target)19 void Coding2Coding_Data_init(Coding2Coding_Data *c2cd,
20                            Sequence *query, Sequence *target){
21     g_assert(query->alphabet->type == Alphabet_Type_DNA);
22     g_assert(target->alphabet->type == Alphabet_Type_DNA);
23     Affine_Data_init(&c2cd->ad, query, target, TRUE);
24     if(!Coding2Coding_Data_get_Frameshift_Data(c2cd))
25         Coding2Coding_Data_get_Frameshift_Data(c2cd)
26               = Frameshift_Data_create();
27     return;
28     }
29 
Coding2Coding_Data_create(Sequence * query,Sequence * target)30 Coding2Coding_Data *Coding2Coding_Data_create(
31                       Sequence *query, Sequence *target){
32     register Coding2Coding_Data *c2cd = g_new0(Coding2Coding_Data, 1);
33     Coding2Coding_Data_init(c2cd, query, target);
34     return c2cd;
35     }
36 
Coding2Coding_Data_clear(Coding2Coding_Data * c2cd)37 void Coding2Coding_Data_clear(Coding2Coding_Data *c2cd){
38     Affine_Data_clear(&c2cd->ad);
39     Frameshift_Data_destroy(
40                Coding2Coding_Data_get_Frameshift_Data(c2cd));
41     return;
42     }
43 
Coding2Coding_Data_destroy(Coding2Coding_Data * c2cd)44 void Coding2Coding_Data_destroy(Coding2Coding_Data *c2cd){
45     Coding2Coding_Data_clear(c2cd);
46     g_free(c2cd);
47     return;
48     }
49 
Coding2Coding_create(void)50 C4_Model *Coding2Coding_create(void){
51     register gchar *name = "coding2coding";
52     register C4_Model *model = NULL;
53     register C4_Transition *match_transition;
54     model = Affine_create(Affine_Model_Type_LOCAL,
55                           Alphabet_Type_DNA, Alphabet_Type_DNA, TRUE);
56     g_assert(model);
57     C4_Model_rename(model, name);
58     C4_Model_open(model);
59     match_transition = C4_Model_select_single_transition(model,
60                                                        C4_Label_MATCH);
61     g_assert(match_transition);
62     Frameshift_add(model, match_transition->input, "query", TRUE);
63     Frameshift_add(model, match_transition->input, "target", FALSE);
64     C4_Model_close(model);
65     return model;
66     }
67 
68