16 #include <basic/Tracer.hh>
26 #include <utility/vector1.hh>
27 #include <utility/io/izstream.hh>
29 #include <ObjexxFCL/format.hh>
45 new_seq_x->insert_gap(0);
46 new_seq_y->insert_gap(0);
48 DP_Matrix scores( new_seq_x->length(), new_seq_y->length() );
52 Real const threshold( 0.0 );
55 for (
Size y = 2; y <= new_seq_y->length(); ++y ) {
56 for (
Size x = 2; x <= new_seq_x->length(); ++x ) {
59 Real l_gap_penalty( ss->gap_open() ), u_gap_penalty( ss->gap_open() );
60 if ( scores(x,y-1)->came_from() ==
above ) u_gap_penalty = ss->gap_extend();
61 if ( scores(x-1,y)->came_from() ==
left ) l_gap_penalty = ss->gap_extend();
63 Real u_gap = scores( x, y-1 )->score() + u_gap_penalty;
64 Real l_gap = scores( x-1, y )->score() + l_gap_penalty;
65 Real mm = scores( x-1, y-1 )->score() + ss->score( new_seq_x, new_seq_y, x, y );
72 CellOP current_cell = scores(x,y);
73 if ( mm >= l_gap && mm >= u_gap && mm >= threshold ) {
75 current_cell->score( mm );
76 current_cell->next( scores(x-1,y-1) );
78 }
else if ( l_gap >= mm && l_gap >= u_gap && l_gap >= threshold ) {
80 current_cell->score( l_gap );
81 current_cell->next( scores(x-1,y) );
82 current_cell->came_from(
left );
83 }
else if ( u_gap >= mm && u_gap >= l_gap && u_gap >= threshold ) {
85 current_cell->score( u_gap );
86 current_cell->next( scores(x,y-1) );
87 current_cell->came_from(
above );
89 current_cell->score( threshold );
90 current_cell->came_from(
end );
93 if ( current_cell->score() > best_cell->score() ) best_cell = current_cell;
98 CellOP current_cell = best_cell;