18 int get_sub_score(
char a,
char b){
54 return substitution[i][j];
57 int get_gap_penalty(
int k,
char a){
63 void print_matrix(
int h[][max_adapter_size],
int r,
int c, std::string read, std::string adap){
64 for(
int i =0; i< r;i++){
67 for(
int k =0; k < c-1; k++) std::cout << adap[k] <<
" ";
70 for(
int j = 0; j < c;j++){
72 if(i -1 < read.length())
73 std::cout << read[i-1] <<
" ";
76 std::cout <<
" " <<
" ";
77 std::cout << h[i][j] <<
" ";
84 int* get_score_cell(
int h[][max_adapter_size],
int i,
int j, std::string read, std::string adap){
86 int *tmp =
new int[2];
89 s[0] = h[i-1][j-1] + get_sub_score(read[i-1], adap[j-1]);
90 s[1] = h[i-1][j] - get_gap_penalty(1, adap[j-1]);
91 s[2] = h[i][j-1] - get_gap_penalty(1, read[i-1]);
92 int max = (s[0]>=s[1]) ? s[0] : s[1];
93 max = (max>=s[2]) ? max : s[2];
94 max = (max > 0) ? max : 0;
98 }
else if(max == s[1]){
100 }
else if(max == s[2]){
106 void print_alignment(
char a[2][max_read_size],
int n){
107 std::cout <<
"Alignment: " << std::endl << std::endl;
108 for(
int j =0;j<2;j++){
110 std::cout <<
"Read: ";
112 std::cout <<
"Adap: ";
113 for(
int i = n -1; i >= 0;i--){
114 std::cout << a[j][i] <<
" ";
116 std::cout << std::endl;
120 int* align_seqs(std::string read, std::string adap){
121 int h[max_read_size][max_adapter_size],
122 t[max_read_size][max_adapter_size],
123 m = read.length() + 1,
132 rt[1] = read.length();
134 for(
int i = 0; i < n; i++) h[0][i] = 0;
136 for(
int i = 0; i < m; i++) h[i][0] = 0;
138 for(
int i = 1; i < m; i++){
139 for(
int j = 1; j < n; j++){
140 tmp = get_score_cell(h, i, j, read, adap);
157 int _t, _l, _d, _align_n = 0;
158 char _align[2][max_read_size];
161 _d = h[max_i-1][max_j-1];
162 _l = h[max_i][max_j-1];
163 _t = h[max_i-1][max_j];
164 switch(t[max_i][max_j]){
169 _align[0][_align_n] = read[max_i];
170 _align[1][_align_n] = adap[max_j];
176 _align[0][_align_n] =
'-';
177 _align[1][_align_n] = adap[max_j];
183 _align[0][_align_n] = read[max_i];
184 _align[1][_align_n] =
'-';
193 print_alignment(_align, _align_n);
194 if(max_score <= ((_align_n - 2) * unit_score) - get_gap_penalty(2,
'A') || max_j != 0)