26 #include <basic/Tracer.hh>
28 #include <ObjexxFCL/FArray1D.hh>
29 #include <ObjexxFCL/FArray2D.hh>
30 #include <ObjexxFCL/format.hh>
31 #include <ObjexxFCL/string.functions.hh>
38 using ObjexxFCL::fmt::F;
40 static basic::Tracer
TR(
"protocols.swa.rna.base_centroid_screener" );
49 job_parameters_( job_parameters ),
50 rna_centroid_info_( new core::scoring::rna::RNA_CentroidInfo ),
51 base_stack_dist_cutoff_( 6.364 ),
52 base_stack_z_offset_max_( 4.5 ),
53 base_stack_z_offset_min_( 2.5 ),
54 base_stack_axis_cutoff_( 0.707 ),
55 base_stack_planarity_cutoff_( 0.707 ),
56 base_pair_dist_min_( 5.0 ),
57 base_pair_dist_max_( 12.0 ),
58 base_pair_z_offset_cutoff_( 3.0 ),
59 base_pair_axis_cutoff_( 0.5 ),
60 base_pair_planarity_cutoff_( 0.866 ),
61 base_pair_rho_min_( 5 ),
62 base_pair_rho_max_( 10 )
78 for (
Size seq_num=1; seq_num <= nres; seq_num++){
83 std::cout <<
"Residue " << seq_num <<
" is a VIRTUAL_RNA_RESIDUE!" << std::endl;
88 std::cout <<
"Residue " << seq_num <<
" is a BULGE!" << std::endl;
98 ObjexxFCL::FArray1D< bool >
const & partition_definition =
job_parameters_->partition_definition();
111 if(working_moving_partition_pos.size()==0) utility_exit_with_message(
"working_moving_partition_pos.size()==0!");
113 bool const moving_partition = partition_definition( working_moving_res );
114 bool const moving_partition_check = partition_definition( working_moving_partition_pos[1] );
116 if(moving_partition!=moving_partition_check){
117 std::cout <<
"working_moving_res= " << working_moving_res << std::endl;
119 std::cout <<
"moving_partition= " << moving_partition << std::endl;
120 std::cout <<
"moving_partition_check= " << moving_partition_check << std::endl;
121 utility_exit_with_message(
"moving_partition!=moving_partition_check!");
133 for (
Size seq_num=1; seq_num <= nres; seq_num++){
142 base_stub =
rna_centroid_info_->get_base_coordinate_system( residue_object, centroid );
149 if ( partition_definition( seq_num ) != moving_partition ) {
152 if ( verbose ) std::cout <<
" FIXED POSITION --> " << seq_num << std::endl;
156 if ( verbose ) std::cout <<
" MOVING POSITION --> " << seq_num << std::endl;
176 using namespace ObjexxFCL;
191 utility_exit_with_message(
"working_res: " + string_of(terminal_res) +
" is a terminal res but has a virtual! ");
196 for (
Size m = 1; m <= nres; m++ ) {
223 subtract( rebuild_residue_base_stub.
v, base_stub.
v, centroid_diff);
224 Real centroid_distance=centroid_diff.length();
225 if ( verbose ) std::cout <<
"Centroid Distance: " << centroid_distance << std::endl;
228 Real base_z_offset_one=std::abs(dot( centroid_diff, other_z_vector));
229 Real base_z_offset_two=std::abs(dot( centroid_diff, rebuild_z_vector));
231 if ( verbose ) std::cout <<
"Base Z offset 1: " << base_z_offset_one << std::endl;
232 if ( verbose ) std::cout <<
"Base Z offset 2: " << base_z_offset_two << std::endl;
237 Real base_axis_one=base_z_offset_one/centroid_distance;
238 Real base_axis_two=base_z_offset_two/centroid_distance;
240 if ( verbose ) std::cout <<
"Base Axis 1: " << base_axis_one << std::endl;
241 if ( verbose ) std::cout <<
"Base Axis 2: " << base_axis_two << std::endl;
245 Real base_planarity = std::abs(dot( other_z_vector, rebuild_z_vector));
247 if ( verbose ) std::cout <<
"Base planarity: " << base_planarity << std::endl;
262 subtract( rebuild_residue_base_stub.
v, base_stub.
v, centroid_diff);
264 Real centroid_distance=centroid_diff.length();
265 if(centroid_distance < base_pair_dist_min_ || centroid_distance >
base_pair_dist_max_ )
return false;
267 Real base_z_offset_one=std::abs(dot( centroid_diff, other_z_vector));
268 Real base_z_offset_two=std::abs(dot( centroid_diff, rebuild_z_vector));
272 Real base_axis_one=base_z_offset_one/centroid_distance;
273 Real base_axis_two=base_z_offset_two/centroid_distance;
276 Real base_planarity=std::abs(dot( rebuild_z_vector, other_z_vector));
281 Real rho_one=centroid_diff_perpendicular_one.length();
284 Real rho_two=centroid_diff_perpendicular_two.length();
287 (rho_two<base_pair_rho_min_ || rho_two>base_pair_rho_max_) )
return false;
325 bool stack_base(
false ), base_pairing(
false );
334 if ( stack_base )
break;
341 if ( base_pairing )
break;
344 if ( base_pairing || stack_base)
break;
355 if ( !base_pairing && !stack_base )
return false;
366 if ( reinitialize ) {
381 utility_exit_with_message(
"is_virtual_base_( pos1 )== true || is_virtual_base_( pos2 )== true !");
384 if ( pos1 == pos2 )
return true;