1
2%{
3#include "transregion.h"
4
5
6%}
7
8struct MotifMatrixPara
9Probability  comp_in_match
10Probability  comp_out_match
11Probability  comp_spacer
12Probability  region_in
13Probability  motif_indel
14Probability  cons_indel
15Probability  spacer_indel
16Probability  spacer_to_cons
17Probability  spacer_to_motif
18Probability  spacer_duration
19Probability  motif_duration
20Probability  cons_duration
21
22struct MotifMatrixScore
23DnaMatrix * comp_in_motif
24DnaMatrix * comp_out_motif
25DnaMatrix * comp_spacer
26Score  region_in
27Score  motif_indel
28Score  cons_indel
29Score  spacer_indel
30Score  spacer_to_cons
31Score  spacer_to_motif
32Score  spacer_duration
33Score  motif_duration
34Score  cons_duration
35
36
37struct MotifConsMatrix
38char ** mat !matrix
39
40
41
42%{
43#include "motifmatrix.h"
44
45
46MotifMatrixScore * MotifMatrixScore_from_MotifMatrixPara(MotifMatrixPara * mmp)
47{
48  MotifMatrixScore * out;
49  DnaProbMatrix * dmp;
50
51  out = MotifMatrixScore_alloc();
52
53  dmp = DnaProbMatrix_from_match(mmp->comp_in_match,NMaskType_BANNED);
54  assert(dmp);
55  flat_null_DnaProbMatrix(dmp);
56
57  out->comp_in_motif = DnaMatrix_from_DnaProbMatrix(dmp);
58  free_DnaProbMatrix(dmp);
59
60  dmp = DnaProbMatrix_from_match(mmp->comp_out_match,NMaskType_BANNED);
61  assert(dmp);
62  flat_null_DnaProbMatrix(dmp);
63
64  out->comp_out_motif = DnaMatrix_from_DnaProbMatrix(dmp);
65  free_DnaProbMatrix(dmp);
66
67
68  dmp = DnaProbMatrix_from_match(mmp->comp_spacer,NMaskType_BANNED);
69  assert(dmp);
70  flat_null_DnaProbMatrix(dmp);
71
72  out->comp_spacer = DnaMatrix_from_DnaProbMatrix(dmp);
73  free_DnaProbMatrix(dmp);
74
75  out->region_in       = Probability2Score(mmp->region_in);
76  out->motif_indel     = Probability2Score(mmp->motif_indel);
77  out->cons_indel      = Probability2Score(mmp->cons_indel);
78  out->spacer_indel    = Probability2Score(mmp->spacer_indel);
79  out->spacer_to_cons  = Probability2Score(mmp->spacer_to_cons);
80  out->spacer_to_motif = Probability2Score(mmp->spacer_to_motif);
81  out->spacer_duration = Probability2Score(mmp->spacer_duration);
82  out->motif_duration  = Probability2Score(mmp->motif_duration);
83  out->cons_duration   = Probability2Score(mmp->cons_duration);
84
85
86  return out;
87
88}
89
90MotifMatrixPara * new_MotifMatrixPara_from_argv(int * argc,char ** argv)
91{
92  MotifMatrixPara * out;
93
94  out = MotifMatrixPara_alloc();
95
96  out->comp_in_match  = 0.9;
97  out->comp_out_match = 0.75;
98  out->comp_spacer    = 0.35;
99  out->region_in      = 0.0001;
100  out->motif_indel    = 0.00001;
101  out->cons_indel     = 0.025;
102  out->spacer_indel   = 0.1;
103  out->spacer_duration = 0.2;
104  out->motif_duration = 0.9;
105  out->cons_duration  = 0.7;
106  out->spacer_to_motif = 0.05;
107  out->spacer_to_cons  = 0.000001;
108
109  strip_out_float_argument(argc,argv,"mm_motif",&out->comp_in_match);
110  strip_out_float_argument(argc,argv,"mm_cons",&out->comp_out_match);
111  strip_out_float_argument(argc,argv,"mm_spacer",&out->comp_spacer);
112  strip_out_float_argument(argc,argv,"mm_motif_indel",&out->motif_indel);
113  strip_out_float_argument(argc,argv,"mm_cons_indel",&out->cons_indel);
114  strip_out_float_argument(argc,argv,"mm_spacer_indel",&out->spacer_indel);
115  strip_out_float_argument(argc,argv,"mm_switch_motif",&out->spacer_to_motif);
116  strip_out_float_argument(argc,argv,"mm_switch_cons",&out->spacer_to_cons);
117
118  return out;
119}
120
121void show_help_MotifMatrixPara(FILE * ofp)
122{
123  fprintf(ofp,"Motif Matrix matching paramters\n");
124  fprintf(ofp,"  -mm_motif [0.9]  Probability of a match in a motif\n");
125  fprintf(ofp,"  -mm_cons  [0.75] Probability of a match in a non-motif conserved\n");
126  fprintf(ofp,"  -mm_spacer[0.35] Probability of a match in a spacer\n");
127  fprintf(ofp,"  -mm_motif_indel [0.00001] indel inside a motif\n");
128  fprintf(ofp,"  -mm_cons_indel  [0.025]   indel inside a conserved region\n");
129  fprintf(ofp,"  -mm_spacer_indel [0.1]    indel inside a spacer\n");
130  fprintf(ofp,"  -mm_switch_motif [0.05]    cost of switching to motif match\n");
131  fprintf(ofp,"  -mm_switch_cons  [0.000001]  cost of switching to conserved match\n");
132
133}
134
135MotifConsMatrix * new_MotifConsMatrix(TransFactorMatchSet * one,int starti,int endi,TransFactorMatchSet * two,int startj,int endj)
136{
137  int i;
138  int j;
139  int l;
140  int k;
141  int z;
142  MotifConsMatrix * out;
143  int motif_len;
144
145  assert(one != NULL);
146  assert(two != NULL);
147
148  out = MotifConsMatrix_alloc_matrix(endi-starti,endj-startj);
149
150  for(i=0;i< (endi-starti);i++) {
151    for(j=0;j< (endj-startj) ;j++) {
152      out->mat[i][j] = 0;
153    }
154  }
155
156  for(l=0;l<one->len;l++) {
157    if( one->match[l]->start < starti || one->match[l]->end > endi ) {
158      continue;
159    }
160    for(k=0;k<two->len;k++) {
161      if( two->match[k]->start < startj || two->match[k]->end > endj ) {
162	continue;
163      }
164
165      if( two->match[k]->factor != one->match[l]->factor ) {
166	continue;
167      }
168
169      motif_len = one->match[l]->end - one->match[l]->start;
170
171      for(z=0;z<motif_len;z++) {
172	out->mat[one->match[l]->start-starti+z][two->match[k]->start-startj+z] = 1;
173      }
174
175    }
176  }
177
178
179  return out;
180}
181