70 #include <ObjexxFCL/format.hh>
71 #include <ObjexxFCL/string.functions.hh>
73 #include <utility/exit.hh>
103 job_parameters_ ( job_parameters ),
106 silent_file_ (
"silent_file.txt" ),
107 output_filename_ (
"data.txt" ),
110 num_pose_kept_ ( 108 ),
112 cluster_rmsd_ ( 0.5001 ),
114 native_rmsd_screen_ ( false ),
115 native_screen_rmsd_cutoff_ ( 2.0 ),
116 o2star_screen_ ( true ),
118 medium_fast_ ( false ),
119 centroid_screen_ ( true ),
120 VDW_atr_rep_screen_ ( true ),
121 distinguish_pucker_ ( true ),
122 current_score_cutoff_ ( 99999 ),
123 finer_sampling_at_chain_closure_ ( false ),
124 PBP_clustering_at_chain_closure_ ( false ),
125 extra_anti_chi_rotamer_(false),
126 extra_syn_chi_rotamer_(false),
127 use_phenix_geo_(false)
134 std::map< core::Size, bool >
const & Is_prepend_map =
job_parameters_->Is_prepend_map();
149 return ( pose_data_1.
score < pose_data_2.
score );
156 using namespace ObjexxFCL;
158 clock_t
const time_start ( clock() );
160 std::cout <<
"--------SCREEN OPTIONS---------- " << std::endl;
162 std::cout << std::endl;
165 std::cout << std::endl;
168 std::cout << std::endl;
170 std::cout << std::endl;
171 std::cout <<
"--------------------------------" << std::endl;
172 Pose const pose_save = pose;
177 std::cout <<
"Total time in StepWiseRNA_AnalyticalLoopCloseSampler::apply " <<
static_cast<Real> ( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
185 using namespace core::scoring;
186 using namespace core::pose;
187 using namespace core::io::silent;
188 using namespace protocols::rna;
189 using namespace core::id;
190 Output_title_text (
"Enter StepWiseRNA_AnalyticalLoopCloseSampler::standard_sampling" );
191 clock_t
const time_start ( clock() );
202 Size const cutpoint_closed = cutpoint_closed_list[1];
203 std::cout <<
" NUM_NUCLEOTIDES= " << num_nucleotides << std::endl;
204 std::cout <<
" GAP SIZE " << gap_size << std::endl;
205 std::cout <<
" MOVING RES " << moving_res << std::endl;
206 std::cout <<
" MOVING SUITE " << moving_suite << std::endl;
208 std::cout << std::endl;
210 std::cout << std::endl;
212 std::cout << std::endl;
214 Pose pose_with_virtual_O2star_hydrogen = pose;
219 pose::Pose pose_with_original_HO2star_torsion;
222 pose_with_original_HO2star_torsion = pose;
226 pose = pose_with_virtual_O2star_hydrogen;
229 Real base_rep_score ( -99999 ), base_atr_score ( -99999 );
232 pose::Pose screening_pose = pose_with_virtual_O2star_hydrogen;
239 Real delta_rep_score ( 0.0 ), delta_atr_score ( 0.0 );
260 Size total_count = 0;
261 std::cout <<
"Start Generating Rotamer ..." << std::endl;
264 for ( pucker_id = 0; pucker_id < 2; pucker_id ++ ) {
265 std::cout <<
"pucker_id = " << pucker_id << std::endl;
268 if ( pucker_id == 0 ) {
269 ideal_coord.
apply( screening_pose, moving_res,
true);
271 ideal_coord.apply( screening_pose, moving_res,
false);
274 if ( pucker_id == 0 ) {
275 delta_pucker = rna_fitted_torsion_info.ideal_delta_north();
276 nu2_pucker = rna_fitted_torsion_info.ideal_nu2_north();
277 nu1_pucker = rna_fitted_torsion_info.ideal_nu1_north();
279 delta_pucker = rna_fitted_torsion_info.ideal_delta_south();
280 nu2_pucker = rna_fitted_torsion_info.ideal_nu2_south();
281 nu1_pucker = rna_fitted_torsion_info.ideal_nu1_south();
284 screening_pose.set_torsion (
TorsionID ( moving_res ,
id::BB, 4 ) , delta_pucker );
285 screening_pose.set_torsion (
TorsionID ( moving_res ,
id::CHI, 2 ) , nu2_pucker );
286 screening_pose.set_torsion (
TorsionID ( moving_res ,
id::CHI, 3 ) , nu1_pucker );
290 std::cout <<
"Entering Analytical Loop Closing" << std::endl;
292 rna_loop_close_sampler.
apply ( screening_pose );
293 std::cout <<
"Exiting Analytical Loop Closing" << std::endl;
295 for (
Size ii = 1; ii <= rna_loop_close_sampler.
n_construct(); ++ii ) {
296 rna_loop_close_sampler.
fill_pose ( screening_pose, ii );
307 if ( pucker_id == 0 ) {
308 pucker_state =
NORTH;
310 pucker_state =
SOUTH;
316 while ( base_sugar_rotamer->get_next_rotamer() ) {
317 Real chi = base_sugar_rotamer->chi();
333 bool found_a_centroid_interaction_partner (
false );
336 if ( gap_size > 0 && !found_a_centroid_interaction_partner )
continue;
357 if ( pucker_id == 0 ) {
358 ideal_coord.apply( pose, moving_res,
true);
360 ideal_coord.apply( pose, moving_res,
false);
367 std::stringstream ss;
368 ss <<
"U" << total_count;
374 std::cout << tag << std::endl;
382 std::cout <<
"before erasing.. pose_data_list= " << pose_data_list.size() << std::endl;
383 std::sort ( pose_data_list.begin(), pose_data_list.end(),
sort_criteria2 );
387 pose_data_list.erase ( pose_data_list.begin() +
num_pose_kept_, pose_data_list.end() );
390 std::cout <<
"after erasing.. pose_data_list= " << pose_data_list.size() << std::endl;
394 std::cout <<
"FINAL COUNTS" << std::endl;
398 if ( gap_size == 0 ) {
410 std::cout <<
"Total time in StepWiseRNA_AnalyticalLoopCloseSampler: " <<
static_cast<Real> ( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
418 using namespace core::scoring;
419 using namespace core::pose;
420 using namespace core::io::silent;
421 using namespace protocols::rna;
422 using namespace core::id;
441 using namespace core::conformation;
442 using namespace core::scoring;
443 using namespace core::pose;
444 using namespace ObjexxFCL;
456 if ( ( working_moving_res + 1 ) <= nres ) {
465 base_pose_screen.set_jump ( jump_at_moving_suite, j );
466 ( *atr_rep_screening_scorefxn_ ) ( base_pose_screen );
467 EnergyMap const & energy_map = base_pose_screen.energies().total_energies();
470 std::cout <<
"base_rep= " << base_rep_score <<
" base_atr= " << base_atr_score << std::endl;
472 if (
verbose_ ) base_pose_screen.dump_pdb (
"base_atr_rep_after.pdb" );
523 bool add_pose_to_list =
false;
528 if ( add_pose_to_list ) {
530 std::cout <<
"tag= " << tag <<
" current_score_cutoff_ " <<
current_score_cutoff_ <<
" score= " << current_score;
535 ( *current_pose_data.
pose_OP ) = current_pose;
536 current_pose_data.
score = current_score;
537 current_pose_data.
tag = tag;
544 pose_data_list.push_back ( current_pose_data );
546 if (
verbose_ ) std::cout <<
" pose_data_list.size= " << pose_data_list.size() << std::endl;
553 using namespace core::scoring;
554 Real const current_score = ( *sampling_scorefxn_ ) ( current_pose );
558 std::sort ( pose_data_list.begin(), pose_data_list.end(),
sort_criteria2 );
562 pose_data_list.erase ( pose_data_list.begin() +
num_pose_kept_, pose_data_list.end() );
563 std::cout <<
"after erasing.. pose_data_list.size()= " << pose_data_list.size() << std::endl;
565 std::cout <<
"pose_data_list.size()= " << pose_data_list.size() << std::endl;
569 return current_score;
580 Size num_clustered_pose = 0;
582 for (
Size i = 1; i <= pose_data_list.size(); i++ ) {
583 if ( pose_state_list[i] ==
true ) {
584 num_clustered_pose++;
586 for (
Size j = i + 1; j <= pose_data_list.size(); j++ ) {
592 rmsd =
suite_rmsd ( ( *pose_data_list[i].pose_OP ), ( *pose_data_list[j].pose_OP ), actually_moving_res, Is_prepend ,
false );
595 bool const same_pucker =
Is_same_ribose_pucker ( ( *pose_data_list[i].pose_OP ), ( *pose_data_list[j].pose_OP ), actually_moving_res );
598 pose_state_list[j] =
false;
601 std::cout <<
"rmsd= " << rmsd <<
" pose " << pose_data_list[j].tag <<
" is a neighbor of pose " << pose_data_list[i].tag;
602 std::cout <<
" same_pucker= ";
606 std::cout << std::endl;
615 for (
Size i = 1; i <= pose_data_list.size(); i++ ) {
616 if ( pose_state_list[i] ==
true ) {
617 clustered_pose_data_list.push_back ( pose_data_list[i] );
621 pose_data_list = clustered_pose_data_list;
637 Real const & base_rep_score,
638 Real const & base_atr_score,
639 Real & delta_atr_score,
640 Real & delta_rep_score,
641 Size const & gap_size,
642 bool const & Is_internal ) {
643 using namespace core::scoring;
647 bool close_chain = ( gap_size == 0 ) ?
true :
false;
649 if ( close_chain && Is_internal )
return true;
651 ( *atr_rep_screening_scorefxn_ ) ( current_pose_screen );
655 delta_rep_score = rep_score - base_rep_score;
656 delta_atr_score = atr_score - base_atr_score;
659 if ( close_chain ) actual_rep_cutoff = 200;
661 if ( close_chain && Is_internal ) actual_rep_cutoff = 200;
663 bool pass_rep_screen =
false;
665 if ( delta_rep_score < actual_rep_cutoff ) {
666 pass_rep_screen =
true;
669 bool pass_atr_rep_screen =
false;
672 pass_atr_rep_screen = pass_rep_screen;
674 if ( delta_atr_score < ( -1 ) && ( delta_rep_score + delta_atr_score ) < 0 ) pass_atr_rep_screen =
true;
677 if ( pass_atr_rep_screen ) {
679 std::cout <<
" rep= " << delta_rep_score <<
" atr= " << delta_atr_score;
689 std::cout << std::endl;
700 Real const & base_rep_score,
701 Real const & base_atr_score,
702 Real & delta_rep_score,
703 Real & delta_atr_score,
704 Size const & gap_size,
705 bool const & Is_internal ) {
706 using namespace core::scoring;
707 using namespace ObjexxFCL;
711 bool close_chain = ( gap_size == 0 ) ?
true :
false;
713 if ( close_chain && Is_internal )
return true;
715 ( *atr_rep_screening_scorefxn_ ) ( current_pose_screen );
719 delta_rep_score = rep_score - base_rep_score;
720 delta_atr_score = atr_score - base_atr_score;
722 if ( delta_rep_score < ( -0.01 ) ) {
723 std::string const message =
"delta_rep_score= " + string_of ( delta_rep_score ) +
" rep_score= " + string_of ( rep_score ) +
" base_rep_score= " + string_of ( base_rep_score );
724 utility_exit_with_message (
"delta_rep_score<(-0.01), " + message );
727 if ( delta_atr_score > ( +0.01 ) ) {
728 std::string const message =
"delta_atr_score= " + string_of ( delta_atr_score ) +
" atr_score= " + string_of ( atr_score ) +
" base_atr_score= " + string_of ( base_atr_score );
729 utility_exit_with_message (
"delta_atr_score>(+0.01), " + message );
734 if ( close_chain ) actual_rep_cutoff = 200;
736 if ( Is_internal ) actual_rep_cutoff = 200;
738 bool pass_rep_screen =
false;
740 if ( delta_rep_score < actual_rep_cutoff ) {
741 pass_rep_screen =
true;
747 bool pass_atr_rep_screen =
false;
750 pass_atr_rep_screen = pass_rep_screen;
751 }
else if ( Is_internal ) {
752 if ( delta_atr_score < ( -1 ) && ( delta_rep_score + delta_atr_score ) < ( actual_rep_cutoff -
rep_cutoff_ ) ) pass_atr_rep_screen =
true;
754 if ( delta_atr_score < ( -1 ) && ( delta_rep_score + delta_atr_score ) < 0 ) pass_atr_rep_screen =
true;
757 if ( pass_atr_rep_screen ) {
762 std::cout <<
" rep= " << delta_rep_score <<
" atr= " << delta_atr_score;
791 o2star_pack_task_->nonconst_residue_task ( seq_num ).or_include_current (
true );
817 using namespace core::id;
818 using namespace core::conformation;
836 using namespace ObjexxFCL;
838 core::Real const principal_torsion = numeric::principal_angle_degrees ( torsion_value );
839 Size const principal_torsion_SIZE =
Size( std::abs ( principal_torsion + 0.00001 ) );
841 if ( principal_torsion > 0 ) {
842 torsion_string =
"p" + lead_zero_string_of ( principal_torsion_SIZE, 3 );
844 torsion_string =
"n" + lead_zero_string_of ( principal_torsion_SIZE, 3 );
847 return torsion_string;
878 using namespace ObjexxFCL;
881 for (
Size list_position = rotamer_generator->rotamer_generator_list_size(); list_position >= 2; list_position-- ) {
882 tag.append (
"_" + lead_zero_string_of ( rotamer_generator->group_rotamer ( list_position ), 4 ) );
885 tag.append (
"_" + lead_zero_string_of ( rotamer_generator->group_rotamer ( 1 ), 4 ) );
886 tag.append (
"_" + lead_zero_string_of ( rotamer_generator->subgroup_rotamer ( 1 ), 5 ) );
954 using namespace core::io::silent;
957 utility_exit_with_message (
"verbose_==false, but StepWiseRNA_AnalyticalLoopCloseSampler::output_pose_data_list is still called?!" );
984 std::cout <<
"Set cluster_rmsd to " <<
cluster_rmsd_ << std::endl;