37 #include <basic/Tracer.hh>
58 #include <ObjexxFCL/format.hh>
59 #include <ObjexxFCL/string.functions.hh>
61 #include <utility/exit.hh>
62 #include <utility/file/file_sys_util.hh>
85 static basic::Tracer
TR(
"protocols.swa.rna_stepwise_rna_minimizer" ) ;
93 StepWiseRNA_Minimizer::StepWiseRNA_Minimizer(
96 pose_data_list_( pose_data_list ),
97 job_parameters_( job_parameters ),
98 silent_file_(
"silent_file.txt" ),
100 native_screen_(false),
101 native_screen_rmsd_cutoff_(3.0),
102 perform_electron_density_screen_(false),
103 rm_virt_phosphate_(false),
104 native_edensity_score_cutoff_(-1.0),
105 centroid_screen_(true),
106 perform_o2star_pack_(true),
107 output_before_o2star_pack_(false),
108 perform_minimize_(true),
109 num_pose_minimize_(999999),
110 minimize_and_score_sugar_(true),
112 base_centroid_screener_( 0 )
125 return "StepWiseRNA_Minimizer";
131 return (pose_data_1.
score < pose_data_2.
score);
139 using namespace core::scoring;
140 using namespace core::pose;
141 using namespace core::io::silent;
142 using namespace protocols::rna;
143 using namespace core::optimization;
163 clock_t
const time_start( clock() );
172 float const dummy_tol( 0.00000025);
173 bool const use_nblist(
true );
180 std::cout <<
"pose_data_list_.size()==0, early exit from StepWiseRNA_Minimizer::apply" << std::endl;
190 bool o2star_pack_verbose=
true;
194 working_minimize_res.push_back(seq_num);
199 std::cout <<
"check scorefxn" << std::endl;
200 scorefxn_->show( std::cout, dummy_pose );
205 std::cout <<
"WARNING: minimize_and_score_sugar_ is FALSE, freezing all DELTA, NU_1 and NU_2 torsions." << std::endl;
212 std::cout <<
"OUTPUT move_map_list[" << n <<
"]:" << std::endl;
223 if(minimized_pose_data_list.size()==0){
224 utility_exit_with_message(
"pose_ID>num_pose_minimize_ BUT minimized_pose_data_list.size()==0! This will lead to problem in SWA_sampling_post_process.py!");
226 std::cout <<
"WARNING MAX num_pose_minimize_(" <<
num_pose_minimize_ <<
") EXCEEDED, EARLY BREAK." << std::endl;
230 std::cout <<
"Minimizing pose_ID= " << pose_ID << std::endl;
253 rna_loop_closer.apply( pose, five_prime_chain_break_res );
265 Real mean_dist_err = rna_loop_closer.apply( pose, five_prime_chain_break_res );
266 std::cout <<
"mean_dist_err (round= " <<
round <<
" ) = " << mean_dist_err << std::endl;
281 pose_data.
score=(*scorefxn_)(pose);
284 minimized_pose_data_list.push_back(pose_data);
286 std::cout <<
"SO FAR: pose_ID= " << pose_ID <<
" | minimized_pose_data_list.size()= " << minimized_pose_data_list.size();
287 std::cout <<
" | time taken= " <<
static_cast<Real>( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
288 std::cout <<
"-------------------------------------------------------------------------------------------------" << std::endl;
289 std::cout <<
"-------------------------------------------------------------------------------------------------" << std::endl;
293 std::cout <<
"FINAL minimized_pose_data_list.size() = " << minimized_pose_data_list.size() << std::endl;
295 if(minimized_pose_data_list.size()==0){
296 std::cout <<
"After finish minimizing, minimized_pose_data_list.size()==0!" << std::endl;
302 for(
Size pose_ID=1; pose_ID<=minimized_pose_data_list.size(); pose_ID++){
307 pose_data.
tag =
"S_"+ ObjexxFCL::lead_zero_string_of( pose_ID , 6);
309 pose_data.
tag[0]=
'M';
316 std::cout <<
"--------------------------------------------------------------------" << std::endl;
317 std::cout <<
"Total time in StepWiseRNA_Minimizer: " <<
static_cast<Real>( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
318 std::cout <<
"--------------------------------------------------------------------" << std::endl;
328 using namespace ObjexxFCL;
330 Size five_prime_chain_break_res = 0;
338 if(gap_size!=0) utility_exit_with_message(
"job_parameters_->Is_simple_full_length_job_params()==true but gap_size!=0");
340 Size num_cutpoint_lower_found=0;
344 Size const upper_seq_num=lower_seq_num+1;
349 error_message+=
"seq_num " + string_of(lower_seq_num) +
" is a CUTPOINT_LOWER ";
350 error_message+=
"but seq_num " + string_of(upper_seq_num) +
" is not a cutpoint CUTPOINT_UPPER??";
351 utility_exit_with_message(error_message);
354 five_prime_chain_break_res=lower_seq_num;
355 num_cutpoint_lower_found++;
360 if(num_cutpoint_lower_found!=1) utility_exit_with_message(
"num_cutpoint_lower_found=("+string_of(num_cutpoint_lower_found)+
")!=1");
363 five_prime_chain_break_res =
job_parameters_->five_prime_chain_break_res();
366 return five_prime_chain_break_res;
377 using namespace core::io::silent;
383 tag[0]=tag_first_char;
384 std::cout <<
"tag= " << tag << std::endl;
395 std::ofstream outfile;
398 outfile <<
"StepWiseRNA_Minimizer:: num_pose_outputted==0, empty silent_file!\n";
409 using namespace core::id;
411 std::cout <<
"Freeze pose sugar torsions, nres=" << nres << std::endl;
413 for(
Size i=1; i<=nres; i++){
427 using namespace core::scoring;
428 using namespace core::scoring::rna;
429 using namespace core::pose;
430 using namespace core::io::silent;
431 using namespace protocols::rna;
432 using namespace core::optimization;
437 bool pass_screen=
true;
453 std::cout <<
"gap_size == 0, " << in_tag <<
" discarded: messed up structure " << std::endl;
463 if( (five_prime_delta>1.0 && five_prime_delta<179.00)==false ){
465 std::cout <<
"gap_size == 0, " << in_tag <<
" discarded: five_prime_chain_break_res= " << five_prime_chain_break_res <<
" five_prime_CB_delta= " << five_prime_delta <<
" is out of range " << std::endl;
474 if( (three_prime_delta>1.0 && three_prime_delta<179.00)==false ){
476 std::cout <<
"gap_size == 0, " << in_tag <<
" discarded: three_prime_chain_break_res= " << (five_prime_chain_break_res+1) <<
" three_prime_CB_delta= " << three_prime_delta <<
" is out of range " << std::endl;
486 if ( !
base_centroid_screener_->Update_base_stub_list_and_Check_that_terminal_res_are_unstacked( pose,
true ) ){
487 std::cout << in_tag <<
" discarded: fail Check_that_terminal_res_are_unstacked " << std::endl;
504 std::cout << in_tag <<
" discarded: fail native_rmsd_screen. rmsd= " << rmsd <<
" loop_rmsd= " << loop_rmsd <<
" native_screen_rmsd_cutoff_= " <<
native_screen_rmsd_cutoff_ << std::endl;
522 if(pass_native==
false){
523 std::cout << in_tag <<
" discarded: fail native_edensity_score_screening" << std::endl;
537 bool const pass_physical_pose_VDW_rep_screen=
user_input_VDW_bin_screener_->VDW_rep_screen_with_act_pose( pose, working_global_sample_res_list,
true );
539 if( pass_physical_pose_VDW_rep_screen==
false){
540 std::cout << in_tag <<
" discarded: fail physical_pose_VDW_rep_screen" << std::endl;
558 using namespace core::scoring;
563 core::Real pose_score = ((*eden_scorefxn)(pose));
564 core::Real native_score = ((*eden_scorefxn)(native_pose));
566 core::Real native_score_cutoff = native_score / (static_cast <
double> (nres)) *
568 std::cout <<
"pose_score = " << pose_score << std::endl;
569 std::cout <<
"native_score = " << native_score << std::endl;
570 if (pose_score > native_score - native_score_cutoff) {
571 std::cout <<
"Fail native edensity score screening!" << std::endl;
592 move_map_list.push_back(mm);
593 return move_map_list;
602 using namespace core::id;
603 using namespace core::scoring::rna;
604 using namespace ObjexxFCL;
610 ObjexxFCL::FArray1D< bool > allow_insert( nres,
true );
611 for (
Size i = 1; i <= fixed_res.size(); i++ ) allow_insert( fixed_res[ i ] ) =
false;
617 for(
Size i = 1; i <= nres; i++ ){
631 for (
Size n = 1; n <= torsion_ids.size(); n++ ) {
633 TorsionID const & torsion_id = torsion_ids[ n ];
644 if ( !allow_insert( id1.
rsd() ) && !allow_insert( id2.
rsd() ) && !allow_insert( id3.
rsd() ) && !allow_insert( id4.
rsd() ) )
continue;
645 mm.
set( torsion_id,
true );
651 std::cout <<
"pose.fold_tree().num_jump()= " << pose.
fold_tree().
num_jump() << std::endl;
660 if( allow_insert( jump_pos1 ) || allow_insert( jump_pos2 ) ) mm.
set_jump( n,
true );
661 std::cout <<
"jump_pos1= " << jump_pos1 <<
" jump_pos2= " << jump_pos2 <<
" mm.jump= ";
Output_boolean(allow_insert( jump_pos1 ) || allow_insert( jump_pos2 ) ); std::cout << std::endl;