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