29 #include <utility/vector1.hh>
42 for (
Size y = 1; y <= y_len; ++y ) {
44 scores(1,y)->score( 0.0 );
45 scores(1,y)->came_from(
end );
47 scores(1,y)->score( ss->gap_open() + (y-2) * ss->gap_extend() );
48 scores(1,y)->came_from(
end );
49 scores(1,y)->next( scores(1,y-1) );
53 for (
Size x = 1; x <= x_len; ++x ) {
55 scores(x,1)->score( 0.0 );
56 scores(x,1)->came_from(
end );
58 scores(x,1)->score( ss->gap_open() + (x-2) * ss->gap_extend() );
59 scores(x,1)->came_from(
end );
60 scores(x,1)->next( scores(x-1,1) );
76 new_seq_x->insert_gap(0);
77 new_seq_y->insert_gap(0);
82 DP_Matrix scores( new_seq_x->length(), new_seq_y->length() );
87 init_matrix( new_seq_y->length(), new_seq_x->length(), ss, scores );
93 for (
Size y = 2; y <= new_seq_y->length(); ++y ) {
94 for (
Size x = 2; x <= new_seq_x->length(); ++x ) {
97 Real l_gap_penalty( ss->gap_open() ), u_gap_penalty( ss->gap_open() );
98 if ( scores(x,y-1)->came_from() ==
above ) u_gap_penalty = ss->gap_extend();
99 if ( scores(x-1,y)->came_from() ==
left ) l_gap_penalty = ss->gap_extend();
101 Real u_gap = scores( x, y-1 )->score() + u_gap_penalty;
102 Real l_gap = scores( x-1, y )->score() + l_gap_penalty;
103 Real mm = scores( x-1, y-1 )->score() + ss->score( new_seq_x, new_seq_y, x, y );
106 CellOP current_cell = scores(x,y);
107 if ( mm >= l_gap && mm >= u_gap ) {
109 current_cell->score( mm );
110 current_cell->next( scores(x-1,y-1) );
111 current_cell->came_from(
diagonal );
112 }
else if ( l_gap >= mm && l_gap >= u_gap ) {
114 current_cell->score( l_gap );
115 current_cell->next( scores(x-1,y) );
116 current_cell->came_from(
left );
119 current_cell->score( u_gap );
120 current_cell->next( scores(x,y-1) );
121 current_cell->came_from(
above );
127 best_cell = scores( scores.rows(),scores.cols() );