37 #include <basic/Tracer.hh>
66 #include <numeric/conversions.hh>
70 #include <ObjexxFCL/format.hh>
71 #include <ObjexxFCL/string.functions.hh>
79 static basic::Tracer
TR(
"protocols.swa.stepwise_rna_virtual_ribose_sampler" );
98 for(
Size n_1 = 1; n_1 <= rsd_1.
natoms(); n_1++){
101 Size const act_res_1= (Is_prepend && n_1 <= 4) ? res_1 + 1: res_1;
105 for(
Size n_2 = 1; n_2 <= rsd_2.
natoms(); n_2++){
107 Size const act_res_2= (Is_prepend && n_2 <= 4) ? res_2 + 1: res_2;
114 Real const clash_dist_cutoff=0.8;
116 Real const clash_radius=VDW_radius_1+VDW_radius_2-clash_dist_cutoff;
118 if( (pose.
residue(act_res_1).
xyz( n_1) - pose.
residue(act_res_2).
xyz(n_2) ).length_squared() < clash_radius*clash_radius ){
137 using namespace core::scoring;
139 (*atr_rep_screening_scorefxn)(current_pose_screen);
144 Real delta_rep_score=rep_score-base_rep_score;
146 Real actual_rep_cutoff=10;
148 bool pass_rep_screen=
false;
150 if( delta_rep_score < actual_rep_cutoff ){
151 pass_rep_screen=
true;
155 std::cout <<
"rep= " << delta_rep_score;
179 using namespace core::scoring;
180 using namespace core::scoring::rna;
186 rna_loop_closer.apply( chain_break_screening_pose, five_prime_res);
188 (*chainbreak_scorefxn)(chain_break_screening_pose);
197 if((angle_score<5) && (distance_score<5)){
201 std::cout <<
" tag= " << tag;
203 std::cout <<
" angle= " << angle_score <<
" dist= " << distance_score;
226 bool const do_minimize){
228 using namespace ObjexxFCL;
229 using namespace ObjexxFCL::fmt;
230 using namespace core::id;
231 using namespace core::chemical;
232 using namespace core::conformation;
233 using namespace core::scoring::rna;
234 using namespace protocols::rna;
235 using namespace core::scoring;
236 using namespace core::optimization;
237 using namespace core::pose;
239 pose::Pose const viewer_pose_copy=viewer_pose;
241 clock_t
const time_start( clock() );
247 if(input_pose_data_list.size()==0) {
return pose_data_list;}
255 int num_input_pose_data_pass_screen=0;
256 for(
Size n=1; n<=input_pose_data_list.size(); n++){
258 bool input_pose_data_pass_screen=
false;
261 base_sugar_rotamer->reset();
264 while(base_sugar_rotamer->get_next_rotamer()){
274 pose_data.
tag=input_pose_data.
tag +
"_" + base_sugar_rotamer->current_tag();
288 (*atr_rep_screening_scorefxn)(pose_with_ribose);
301 std::cout <<
" delta1= " << F(8, 3, base_sugar_rotamer->delta()) <<
" chi_1= " << F(8, 3, base_sugar_rotamer->chi());
302 std::cout <<
" nu2_1= " << F(8, 3, base_sugar_rotamer->nu2()) <<
" nu1_1= " << F(8, 3, base_sugar_rotamer->nu1());
303 std::cout << std::endl;
315 if(do_minimize==
true){
323 ribose_scorefxn_without_ch_bond->set_weight(
ch_bond, 0.0 );
331 std::cout <<
"--------------START Creating rescaled one_tenth_ribose_score_fxn_without_ch_bond--------------" << std::endl;
333 std::cout <<
"--------------FINISH Creating rescaled one_tenth_ribose_score_fxn_without_ch_bond--------------" << std::endl;
337 bool const use_nblist(
true );
344 float const tolerance= 0.000000000000025;
346 MinimizerOptions options_standard(
"dfpmin_atol", tolerance, use_nblist,
false,
false );
347 MinimizerOptions options_armijo(
"dfpmin_armijo_atol", tolerance, use_nblist,
false,
false );
349 std::cout <<
"options_standard: min_type= " << options_standard.
min_type() <<
" minimize_tolerance= " << options_standard.
minimize_tolerance() << std::endl;
350 std::cout <<
"options_armijo : min_type= " << options_armijo.
min_type() <<
" minimize_tolerance= " << options_armijo.
minimize_tolerance() << std::endl;
361 if(verbose) std::cout <<
"pose.fold_tree().num_jump()= " << pose_with_ribose.
fold_tree().
num_jump() << std::endl;
363 Size bulge_jump_1, bulge_jump_2, bulge_cutpoint;
374 if(verbose) std::cout <<
"bulge_cutpoint= " << bulge_cutpoint <<
" bulge_jump_1= " << bulge_jump_1 <<
" bulge_jump_2= " << bulge_jump_2 << std::endl;
377 bool found_desired_jump_ID=
false;
383 if(verbose) std::cout <<
"jump at jump_ID= " << jump_ID <<
" cutpoint= " << cutpoint <<
" jump_pos1= " << jump_pos1 <<
" jump_pos2= " << jump_pos2 << std::endl;
385 if( (jump_pos1==bulge_jump_1 && jump_pos2==bulge_jump_2 ) || (jump_pos1==bulge_jump_2 && jump_pos1==bulge_jump_2 ) ) {
386 found_desired_jump_ID=
true;
387 if(verbose) std::cout <<
"add movemap jump at jump_ID= " << jump_ID <<
" cutpoint= " << cutpoint <<
" jump_pos1= " << jump_pos1 <<
" jump_pos2= " << jump_pos2 << std::endl;
392 if(found_desired_jump_ID==
false) utility_exit_with_message(
"cannot find desired jump_ID" );
397 viewer_pose= pose_with_ribose;
398 std::cout <<
"removing ribose clashes pose # " << n <<
" sugar_rotamer # " << count <<
" " << std::endl;
415 minimizer.
run( viewer_pose, mm, *(rescaled_ribose_score_fxn_without_ch_bond), options_armijo );
418 minimizer.
run( viewer_pose, mm, *(ribose_scorefxn_without_ch_bond), options_standard );
421 minimizer.
run( viewer_pose, mm, *(ribose_scorefxn), options_standard );
423 pose_with_ribose=viewer_pose;
436 (*atr_rep_screening_scorefxn)(pose_with_ribose);
439 std::cout <<
"tag= " << pose_data.
tag <<
" with_ribose_rep= " << pose_data.
base_rep_score <<
" without_ribose_rep_score= " << without_ribose_rep_score <<
" O3i_C5iplus2_dist= " << O3i_C5iplus2_distance;
443 std::cout <<
" O3i_C5iplus2_dist>O3I_C5IPLUS2_MAX_DIST(" <<
O3I_C5IPLUS2_MAX_DIST <<
") " << std::endl;
448 std::cout <<
" RIBOSE_rep_score>10! "<< std::endl;
451 input_pose_data_pass_screen=
true;
460 (*pose_data.
pose_OP)=pose_with_ribose;
462 pose_data_list.push_back(pose_data);
465 if(input_pose_data_pass_screen) num_input_pose_data_pass_screen++;
470 std::cout <<
"input_pose_data_list.size()= " << input_pose_data_list.size() <<
" num_input_pose_data_pass_screen= " << num_input_pose_data_pass_screen;
471 std::cout <<
" pose_data_list.size()= " << pose_data_list.size() << std::endl;
473 std::cout <<
"Total time in Floating_base_chain_closure SETUP: " <<
static_cast<Real>( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
475 viewer_pose=viewer_pose_copy;
477 return pose_data_list;
490 bool const CCD_grid_index_screen){
494 if(pose_data_list.size()==0)
return;
498 if(CCD_grid_index_screen){
499 utility_exit_with_message(
"CCD_grid_index_screen no longer supported!");
504 clock_t
const time_start_sampling( clock() );
506 using namespace core::id;
507 using namespace core::chemical;
508 using namespace core::conformation;
509 using namespace core::scoring::rna;
510 using namespace protocols::rna;
511 using namespace core::scoring;
512 using namespace ObjexxFCL;
516 viewer_pose=(*pose_data_list[1].pose_OP);
522 std::cout <<
"setup backbone_rotamer_generator" << std::endl;
524 bulge_suite_list.clear();
525 bulge_suite_list.push_back(FB_job_params.
bulge_suite);
527 bool sample_sugar_and_base1(
false ), sample_sugar_and_base2(
false );
530 sample_sugar_and_base1 =
true;
532 sample_sugar_and_base2 =
true;
540 backbone_rotamer_generator->set_fast(
false );
541 backbone_rotamer_generator->set_sample_chi_torsion(
false);
542 backbone_rotamer_generator->set_include_syn_chi(
true);
543 backbone_rotamer_generator->set_bin_size(20);
545 bool more_rotamers=
true;
547 backbone_rotamer_generator->set_extra_epsilon(
true);
551 backbone_rotamer_generator->initialize_rotamer_generator_list();
553 std::cout <<
"setup_delta_rotamer_generator" << std::endl;
562 Size num_closed_chain_pose=0;
564 while( backbone_rotamer_generator->has_another_rotamer() ){
565 bulge_base_sugar_rotamer->reset();
567 if(num_closed_chain_pose==pose_data_list.size()){
577 while( bulge_base_sugar_rotamer->get_next_rotamer() ){
579 Real BB_delta_value=0.0;
581 Size num_BB_delta_ID=0;
582 Size num_chi_torsion_ID=0;
587 for(
Size n = 1; n <= BB_rotamer.size(); n++ ){
589 if(BB_rotamer[n].
id==delta_torsion_ID){
590 BB_delta_value=BB_rotamer[n].value;
595 if(BB_rotamer[n].
id==chi_torsion_ID){
596 num_chi_torsion_ID++;
600 if(num_BB_delta_ID!=1) utility_exit_with_message(
"Error: num_BB_delta_ID in BB_rotamer !=1" );
601 if(num_chi_torsion_ID!=0) utility_exit_with_message(
"Error: num_chi_torsion_ID in BB_rotamer !=0" );
603 if(BB_rotamer.size()!=8) utility_exit_with_message(
"BB_rotamer.size()=" + ObjexxFCL::string_of(BB_rotamer.size()) +
"!=8!" );
605 if( (BB_delta_value < (bulge_base_sugar_rotamer->delta()-0.1) ) || ( BB_delta_value > (bulge_base_sugar_rotamer->delta()+0.1) ) )
continue;
610 chi_torsion_info.
id=chi_torsion_ID;
611 chi_torsion_info.
value=bulge_base_sugar_rotamer->chi();
612 current_rotamer.push_back(chi_torsion_info);
614 if(current_rotamer.size()!=9) utility_exit_with_message(
"current_rotamer.size()=" + ObjexxFCL::string_of(current_rotamer.size()) +
" !=9!" );
617 count_data.tot_rotamer_count++;
626 if( VDW_bin_screener->VDW_rep_screen(screening_pose, FB_job_params.
bulge_res)==
false)
continue;
628 count_data.good_bin_rep_count++;
630 for(
Size n=1; n<=pose_data_list.size(); n++){
644 count_data.chain_closable_count++;
650 count_data.fast_full_atom_VDW_replusion_screen++;
661 if( CCD_grid_index_screen){
662 utility_exit_with_message(
"CCD_grid_index_screen no longer supported!");
679 num_closed_chain_pose++;
683 viewer_pose=current_pose;
689 std::cout <<
" bin_rep_count= " << count_data.good_bin_rep_count;
690 std::cout <<
" fast_rep_count= " << count_data.fast_full_atom_VDW_replusion_screen;
691 std::cout <<
" chain_closable= " << count_data.chain_closable_count;
692 std::cout <<
" angle_n= " << count_data.good_angle_count <<
" dist_n= " << count_data.good_distance_count;
693 std::cout <<
" rep= " << count_data.good_rep_rotamer_count;
694 std::cout <<
" rmsd= " << count_data.rmsd_count <<
" tot= " << count_data.tot_rotamer_count << std::endl;
695 std::cout <<
" " << num_closed_chain_pose <<
" out of " << pose_data_list.size() <<
" pose were closable" << std::endl;
696 std::cout <<
"Total time in Floating_base_chain_closure SAMPLING: " <<
static_cast<Real>( clock() - time_start_sampling ) / CLOCKS_PER_SEC << std::endl;
706 bool const rm_chain_break_jump_point){
708 using namespace core::optimization;
709 using namespace core::scoring;
710 using namespace core::pose;
711 using namespace core::io::silent;
712 using namespace protocols::rna;
713 using namespace core::id;
714 using namespace ObjexxFCL;
721 if( pose_data_list.size()==0) {
return output_pose_data_list;}
725 float const dummy_tol( 0.00000025);
726 bool const use_nblist(
true );
768 for(
Size n=1; n<=pose_data_list.size(); n++){
769 if(pose_data_list[n].Is_chain_close==
false)
continue;
771 viewer_pose= (*pose_data_list[n].pose_OP);
773 std::cout <<
"POST_PROCESSING pose # " << n <<
" out of " << pose_data_list.size() <<
" " << std::endl;;
774 minimizer.run( viewer_pose, mm, *(bulge_chain_closure_scorefxn), options );
776 viewer_pose.
constraint_set( pose_data_list[n].starting_cst_set_OP);
783 pose_data_list[n].score=(*sampling_scorefxn)(viewer_pose);
785 (*pose_data_list[n].pose_OP)=viewer_pose;
790 pose_data.
pose_OP=pose_data_list[n].pose_OP;
791 pose_data.score=pose_data_list[n].score;
792 pose_data.tag=pose_data_list[n].tag;
794 output_pose_data_list.push_back(pose_data);
798 return output_pose_data_list;
813 bool const virtual_ribose_is_from_prior_step){
815 using namespace core::optimization;
816 using namespace core::scoring;
817 using namespace core::pose;
818 using namespace core::io::silent;
819 using namespace protocols::rna;
820 using namespace core::id;
821 using namespace ObjexxFCL;
825 pose::Pose const viewer_pose_copy=viewer_pose;
828 if(FB_JP_list.size()==0)
return;
829 if(pose_data_list.size()==0)
return;
832 float const dummy_tol( 0.00000025);
833 bool const use_nblist(
true );
843 for(
Size n=1; n<=FB_JP_list.size(); n++){
863 for(
Size n=1; n<=pose_data_list.size(); n++){
865 viewer_pose= (*pose_data_list[n].pose_OP);
870 if(virtual_ribose_is_from_prior_step){
872 for(
Size ii=1; ii<=working_moving_partition_pos.size(); ii++){
873 Size const seq_num=working_moving_partition_pos[ii];
875 already_virtualized_res_list.push_back(seq_num);
886 std::cout <<
"minimize_all_sampled_floating_bases pose # " << n <<
" out of " << pose_data_list.size() <<
" " << std::endl;;
887 minimizer.run( viewer_pose, mm, (*sampling_scorefxn), options );
891 if(virtual_ribose_is_from_prior_step){
893 for(
Size ii=1; ii<=working_moving_partition_pos.size(); ii++){
894 Size const seq_num=working_moving_partition_pos[ii];
905 (*pose_data_list[n].pose_OP)=viewer_pose;
908 viewer_pose=viewer_pose_copy;
919 using namespace core::chemical;
920 using namespace core::conformation;
921 using namespace ObjexxFCL;
925 if( ( ribose_res+1)!= bulge_res && ( ribose_res-1)!= bulge_res ) {
926 std::cout <<
"ribose_res= " << ribose_res <<
" bulge_res= " << bulge_res << std::endl;
927 utility_exit_with_message(
"( ribose_res+1)!= bulge_res && ( ribose_res-1)!= bulge_res)" );
930 if(ribose_res<1 || ribose_res> nres){
931 utility_exit_with_message(
"ribose_res<1 || ribose_res> nres("+ string_of(nres) +
")!. ribose_res= " + string_of(ribose_res) );
937 if(bulge_res<1 || bulge_res> nres){
938 utility_exit_with_message(
"bulge_res<1 || bulge_res> nres("+ string_of(nres) +
")!. bulge_res= " + string_of(bulge_res) );
942 utility_exit_with_message(
"pose.residue(bulge_res).has_variant_type(\"VIRTUAL_RNA_RESIDUE\")==false" );
955 using namespace ObjexxFCL;
956 using namespace core::io::silent;
957 using namespace core::id;
961 std::map< core::Size, core::Size > res_map;
976 return (pose_data_1.
score < pose_data_2.
score);
1003 bool const virtual_ribose_is_from_prior_step){
1005 using namespace ObjexxFCL;
1006 using namespace core::io::silent;
1009 clock_t
const time_start( clock() );
1011 pose::Pose const viewer_pose_copy=viewer_pose;
1020 (*pose_data.pose_OP)= viewer_pose;
1021 pose_data.score = 0.0;
1024 pose::Pose & input_pose= (*pose_data.pose_OP);
1029 if(virtual_ribose_is_from_prior_step){
1031 Size const nres = job_parameters->working_sequence().size();
1032 ObjexxFCL::FArray1D< bool >
const & partition_definition = job_parameters->partition_definition();
1033 bool const bulge_res_partition_value=partition_definition(FB_job_params.
bulge_res);
1035 if( bulge_res_partition_value!=partition_definition(FB_job_params.
moving_res) ){
1036 utility_exit_with_message(
"bulge_res_partition_value!=partition_definition(FB_job_params.moving_res)");
1039 if( bulge_res_partition_value!=partition_definition(FB_job_params.
reference_res) ){
1040 utility_exit_with_message(
"bulge_res_partition_value!=partition_definition(FB_job_params.reference_res)");
1043 for(
Size seq_num=1; seq_num<=nres; seq_num++){
1044 if ( partition_definition( seq_num ) != bulge_res_partition_value ) other_partition_pos.push_back( seq_num );
1047 for(
Size ii=1; ii<=other_partition_pos.size(); ii++){
1048 Size const seq_num=other_partition_pos[ii];
1049 if(input_pose.residue(seq_num).has_variant_type(
"VIRTUAL_RNA_RESIDUE")){
1050 already_virtualized_res_list.push_back(seq_num);
1056 if(job_parameters->gap_size() == 0){
1057 if(input_pose.residue(job_parameters->five_prime_chain_break_res()+1).has_variant_type(
"VIRTUAL_PHOSPHATE")==
true){
1058 utility_exit_with_message(
"input_pose.residue(job_parameters_->five_prime_chain_break_res()+1).has_variant_type(\"VIRTUAL_PHOSPHATE\")==true" );
1063 if(job_parameters->gap_size() == 0) utility_exit_with_message(
"job_parameters_->gap_size() == 0" );
1075 ignore_res_list.push_back(FB_job_params.
moving_res);
1076 ignore_res_list.push_back(FB_job_params.
bulge_res);
1083 prev_floating_base_VDW_bin_screener->create_VDW_screen_bin( input_pose, ignore_res_list, FB_job_params.
Is_prepend, reference_stub.v,
true );
1089 input_pose_data_list.push_back(pose_data);
1093 bool const chain_closure_sampling=
true;
1095 if(chain_closure_sampling){
1096 floating_base_chain_closure_sampling(pose_data_list, viewer_pose, FB_job_params, chainbreak_scorefxn, atr_rep_screening_scorefxn, prev_floating_base_VDW_bin_screener ,
false);
1098 for(
Size n=1; n<=pose_data_list.size(); n++) {pose_data_list[n].Is_chain_close=
true; }
1101 bool const rm_CB_JP_during_post_process=
true;
1107 for(
Size n=1; n<=final_pose_data_list.size(); n++){
1108 pose::Pose & current_pose=(*final_pose_data_list[n].pose_OP);
1110 if(
false)
Output_data(silent_file_data,
"post_process_" + name +
".out", name + final_pose_data_list[n].tag ,
false, current_pose, job_parameters->working_native_pose(), job_parameters);
1112 if(virtual_ribose_is_from_prior_step){
1114 for(
Size ii=1; ii<=other_partition_pos.size(); ii++){
1115 Size const seq_num=other_partition_pos[ii];
1121 if(job_parameters->gap_size() == 0) utility_exit_with_message(
"job_parameters->gap_size() == 0" );
1127 std::cout <<
"Time in sample_virtual_ribose_and_bulge_and_close_chain(): " <<
static_cast<Real>( clock() - time_start ) / CLOCKS_PER_SEC << std::endl;
1131 viewer_pose=viewer_pose_copy;
1133 return final_pose_data_list;
1152 (*start_pose_data.
pose_OP)=pose_copy;
1155 start_pose_data.
score=0;
1156 start_pose_data.
tag=
"";
1158 for(
Size n=1; n<=FB_CC_JP_list.size(); n++){
1161 Size const sugar_ID=sugar_ID_counter_list[n];
1163 start_pose_data.
tag+= curr_FB_JP.
PDL[sugar_ID].tag;
1168 starting_pose_data_list.push_back(start_pose_data);
1171 sugar_ID_counter_list[1]++;
1173 for(
Size n=1; n<FB_CC_JP_list.size(); n++){
1174 if( sugar_ID_counter_list[n]==(FB_CC_JP_list[n].PDL.size()+1) ){
1175 sugar_ID_counter_list[n]=1;
1176 sugar_ID_counter_list[n+1]++;
1180 if( sugar_ID_counter_list[FB_CC_JP_list.size()]==(FB_CC_JP_list[FB_CC_JP_list.size()].PDL.size()+1) )
break;
1192 using namespace ObjexxFCL;
1196 std::string const & working_sequence= job_parameters->working_sequence();
1198 for(
Size n=1; n<=sample_virtual_ribose_string_list.size(); n++){
1201 if(tokenize_list.size()!=2) utility_exit_with_message(
"tokenize_list!=2");
1203 if(tokenize_list[2]!=
"A" && tokenize_list[2]!=
"P"){
1204 utility_exit_with_message(
"tokenize_list[2]!=\"A\" && tokenize_list[2]!=\"P\" (" + tokenize_list[2] +
")" );
1207 bool const Is_prepend= (tokenize_list[2]==
"P") ?
true :
false;
1210 Size const full_bulge_res=(Is_prepend) ? full_ribose_res+1 : full_ribose_res-1;
1211 Size const full_ref_res= (Is_prepend) ? full_ribose_res+2 : full_ribose_res-2;
1213 std::cout <<
"Case: " << sample_virtual_ribose_string_list[n];
1214 std::cout <<
" full_ribose_res= " << full_ribose_res <<
" full_bulge_res= " << full_bulge_res <<
" full_ref_res= " << full_ref_res;
1218 utility_exit_with_message(
"pose.total_residue()=("+string_of(pose.
total_residue())+
")!="+string_of(working_sequence.size())+
") working_sequence().size()");
1227 std::cout <<
" | working_ribose_res= " << working_ribose_res;
1230 if(ribose_is_virtual){
1235 std::cout <<
" | working_bulge_res= " << working_bulge_res <<
" working_ref_res= " << working_ref_res;
1238 if(working_ribose_res!=(working_bulge_res-1)) utility_exit_with_message(
"prepend but working_ribose_res!=(working_bulge_res-1)");
1239 if(working_ribose_res!=(working_ref_res - 2)) utility_exit_with_message(
"prepend but working_ribose_res!=(working_ref_res - 2)");
1241 if(working_ribose_res!=(working_bulge_res+1)) utility_exit_with_message(
"append but working_ribose_res!=(working_bulge_res+1)");
1242 if(working_ribose_res!=(working_ref_res + 2)) utility_exit_with_message(
"prepend but working_ribose_res!=(working_ref_res + 2)");
1248 utility_exit_with_message(
"pose.residue(working_bulge_res).has_variant_type(\"VIRTUAL_RNA_RESIDUE\")==false" );
1255 FB_CC_JP_list.push_back(curr_FB_JP);
1262 std::cout <<
" | full_ribose_res is not a working res! ";
1266 std::cout << std::endl;
1269 return FB_CC_JP_list;
1281 using namespace ObjexxFCL;
1282 using namespace core::io::silent;
1283 using namespace core::id;
1284 using namespace core::scoring;
1285 using namespace core::conformation;
1287 Output_title_text(
"Enter StepWiseRNA_VirtualRiboseSampler::sample_virtual_ribose");
1318 std::cout <<
"num_virtual_ribose= " << FB_CC_JP_list.size() << std::endl;
1320 if(FB_CC_JP_list.size()==0){
1321 std::cout <<
"no_virtual_ribose (FB_CC_JP_list.size()==0). EARLY RETURN/NO OUTPUT SILENT_FILE!" << std::endl;
1323 std::ofstream outfile;
1324 outfile.open(silent_file_out.c_str());
1325 outfile <<
"no_virtual_ribose (FB_CC_JP_list.size()==0).\n";
1333 for(
Size n=1; n<=FB_CC_JP_list.size(); n++){
1340 scorefxn, sampling_scorefxn, atr_rep_screening_scorefxn, chainbreak_scorefxn, job_parameters,
1346 if(curr_FB_JP.
PDL.size()==0){
1347 std::cout <<
"Case n= " << n <<
" Is_sugar_virt==True but curr_FB_JP.PDL.size()==0. EARLY RETURN!" << std::endl;
1349 std::ofstream outfile;
1350 outfile.open(silent_file_out.c_str());
1351 outfile <<
"num_virtual_ribose != 0 but for one of the sampled virtual_ribose, curr_FB_JP.PDL.size()==0.\n";
1368 for(
Size n=1; n<=starting_pose_data_list.size(); n++){
1369 pose=(*starting_pose_data_list[n].pose_OP);
1371 std::string starting_pose_tag=input_tag +
"_sample_ribose" + starting_pose_data_list[n].tag;
1373 if (job_parameters->gap_size() == 0) utility_exit_with_message(
"job_parameters_->gap_size() == 0" );
1381 Output_data(silent_file_data, silent_file_out , starting_pose_tag ,
false, pose, job_parameters->working_native_pose(), job_parameters);