21 #include <basic/options/option.hh>
22 #include <basic/options/keys/OptionKeys.hh>
23 #include <basic/options/keys/flexPepDocking.OptionKeys.gen.hh>
26 #include <basic/Tracer.hh>
28 #include <utility/exit.hh>
35 #include <utility/vector1.hh>
38 static basic::Tracer
TR(
"protocols.flexPepDocking.FlexPepDockingFlags");
40 using namespace protocols::flexpep_docking;
52 using namespace basic::options;
55 valid_chain_bounds_ =
false;
56 valid_receptor_chain_ =
false;
57 valid_peptide_chain_ =
false;
58 valid_ref_start_struct_ =
false;
59 receptor_anchor_pos = -1;
61 pep_fold_only = option[ OptionKeys::flexPepDocking::pep_fold_only ]();
62 if (option[ OptionKeys::flexPepDocking::ref_startstruct].user() ) {
64 option[ OptionKeys::flexPepDocking::ref_startstruct]();
65 valid_ref_start_struct_ =
true;
67 min_only = option[ OptionKeys::flexPepDocking::flexPepDockingMinimizeOnly ]();
68 random_phi_psi_pert =
false;
69 if (option[ OptionKeys::flexPepDocking::random_phi_psi_preturbation ]())
70 random_phi_psi_pert =
true;
71 random_phi_psi_pert_size =
72 option[ OptionKeys::flexPepDocking::random_phi_psi_preturbation ]();
73 extend = option[ OptionKeys::flexPepDocking::extend_peptide ]();
74 randomRBstart =
false;
75 if (option[ OptionKeys::flexPepDocking::random_trans_start ]() ||
76 option[ OptionKeys::flexPepDocking::random_rot_start ]())
78 lowres_abinitio = option[ OptionKeys::flexPepDocking::lowres_abinitio ]();
79 lowres_preoptimize = option[ OptionKeys::flexPepDocking::lowres_preoptimize ]();
80 pep_refine = option[ OptionKeys::flexPepDocking::pep_refine ]();
81 rbMCM = option[ OptionKeys::flexPepDocking::rbMCM ]();
82 torsionsMCM = option[ OptionKeys::flexPepDocking::torsionsMCM ]();
84 if(pep_refine || lowres_preoptimize || lowres_abinitio)
86 bool explicitFalseMCMs =
87 ( option[ OptionKeys::flexPepDocking::rbMCM ].user() && !rbMCM) ||
88 ( option[ OptionKeys::flexPepDocking::torsionsMCM ].user() && !torsionsMCM);
89 runtime_assert_msg(!explicitFalseMCMs,
90 "pep_refine / lowres_preoptimize / lowres_abinitio are not compatible with explicitly setting -rbMCM or -torsionsMCM to false");
95 rb_trans_size = option[ OptionKeys::flexPepDocking::random_trans_start ]();
96 rb_rot_size = option[ OptionKeys::flexPepDocking::random_rot_start ]();
97 peptide_loop_model = option[ OptionKeys::flexPepDocking::peptide_loop_model ]();
99 option[ OptionKeys::flexPepDocking::smove_angle_range ]();
100 design_peptide = option [ OptionKeys::flexPepDocking::design_peptide ]();
101 backrub_opt = option[ OptionKeys::flexPepDocking::backrub_peptide ]();
102 boost_fa_atr = option[ OptionKeys::flexPepDocking::boost_fa_atr ]();
103 ramp_fa_rep = option [ OptionKeys::flexPepDocking::ramp_fa_rep ]();
104 ramp_rama = option [ OptionKeys::flexPepDocking::ramp_rama ]();
106 option[ OptionKeys::flexPepDocking::rep_ramp_cycles ]();
108 option[ OptionKeys::flexPepDocking::mcm_cycles ]();
109 score_only = option[ OptionKeys::flexPepDocking::flexpep_score_only ]();
110 use_cen_score = option[ OptionKeys::flexPepDocking::use_cen_score ]();
111 min_receptor_bb = option[ OptionKeys::flexPepDocking::min_receptor_bb ];
112 ppk_only = option[ OptionKeys::flexPepDocking::flexpep_prepack ]();
113 no_prepack1 = option[ OptionKeys::flexPepDocking::flexpep_noprepack1 ]();
114 no_prepack2 = option[ OptionKeys::flexPepDocking::flexpep_noprepack2 ]();
115 score_filter = option[ OptionKeys::flexPepDocking::score_filter ]();
116 hb_filter = option[ OptionKeys::flexPepDocking::hb_filter ]();
117 hotspot_filter = option[ OptionKeys::flexPepDocking::hotspot_filter ]();
118 frag3_weight = option[ OptionKeys::flexPepDocking::frag3_weight ]();
119 frag5_weight = option[ OptionKeys::flexPepDocking::frag5_weight ]();
120 frag9_weight = option[ OptionKeys::flexPepDocking::frag9_weight ]();
121 pSer2Asp_centroid = option[ OptionKeys::flexPepDocking::pSer2Asp_centroid ]();
122 pSer2Glu_centroid = option[ OptionKeys::flexPepDocking::pSer2Glu_centroid ]();
123 dumpPDB_abinitio = option[ OptionKeys::flexPepDocking::dumpPDB_abinitio ]();
124 dumpPDB_lowres = option[ OptionKeys::flexPepDocking::dumpPDB_lowres ]();
125 dumpPDB_hires = option[ OptionKeys::flexPepDocking::dumpPDB_hires ]();
128 if ( option[ OptionKeys::flexPepDocking::receptor_chain ].user() )
130 this->set_receptor_chain
131 (option[ OptionKeys::flexPepDocking::receptor_chain ]().
at(0) );
134 if ( option[ OptionKeys::flexPepDocking::peptide_chain ].user() )
136 this->set_peptide_chain
137 (option[ OptionKeys::flexPepDocking::peptide_chain ]().
at(0) );
141 if(option[ OptionKeys::flexPepDocking::params_file ].user() )
143 runtime_assert_msg(! (valid_peptide_chain_ || valid_receptor_chain_),
144 "Params file and cmd-line peptide or receptor chain are mutually exclusive");
145 params_file = option[ OptionKeys::flexPepDocking::params_file ]();
146 updateChainsAndAnchors_fromParamsFile(params_file);
148 valid_peptide_chain_ = valid_peptide_chain_;
149 runtime_assert_msg(! (pep_fold_only && (min_receptor_bb || valid_receptor_chain_) ),
150 "The flag -pep_fold_only is incompatible with receptor flags like -min_receptor_bb and -receptor chain");
152 if(min_only) mut_ex_opts++;
153 if(ppk_only) mut_ex_opts++;
154 if(torsionsMCM || rbMCM || lowres_preoptimize)
156 runtime_assert_msg(mut_ex_opts <= 1,
157 "More than one mutually exclusive flags selected");
169 std::cout <<
"ERROR: chain bounds invalid" << std::endl;
176 std::cout <<
"ERROR: receptor chain invalid" << std::endl;
184 std::cout <<
"ERROR: peptide chain invalid" << std::endl;
192 std::cout <<
"ERROR: chain bounds invalid: receptor_first " << std::endl;
201 std::cout <<
"ERROR: chain bounds invalid: receptor_last " << std::endl;
210 std::cout <<
"ERROR: chain bounds invalid: receptor_nres " << std::endl;
218 std::cout <<
"ERROR: chain bounds invalid: pep_first " << std::endl;
227 std::cout <<
"ERROR: chain bounds invalid: pep_last " << std::endl;
235 std::cout <<
"ERROR: chain bounds invalid: pep_nres " << std::endl;
243 std::cout <<
"ERROR: ref start structure not specified" << std::endl;
269 TR.Warning <<
"Missing PDBInfo in input pose - generating default PDBInfo from pose object" << std::endl;
274 if(!valid_receptor_chain_ && ! pep_fold_only)
276 receptor_chain_ = pdbinfo->chain(resi);
278 if(valid_peptide_chain_ && (receptor_chain_ == peptide_chain_)){
280 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) == peptide_chain_);
281 receptor_chain_ = pdbinfo->chain(resi);
283 valid_receptor_chain_ =
true;
286 if(!valid_peptide_chain_)
290 this->set_peptide_chain(pdbinfo->chain(resi));
296 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) == receptor_chain_);
297 this->set_peptide_chain(pdbinfo->chain(resi));
305 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) != receptor_chain_) resi++;
306 receptor_first_res_ = resi;
308 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) == receptor_chain_);
309 receptor_nres_ = resi - receptor_first_res_;
313 receptor_first_res_ = 0;
319 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) != peptide_chain_) resi++;
320 peptide_first_res_ = resi;
322 while(resi <= pose.
total_residue() && pdbinfo->chain(resi) == peptide_chain_);
323 peptide_nres_ = resi - peptide_first_res_;
325 TR <<
"Receptor chain: " << receptor_chain_ << std::endl;
326 TR <<
"Receptor first res: " << receptor_first_res_ << std::endl;
327 TR <<
"Receptor nres: " << receptor_nres_ << std::endl;
328 TR <<
"Peptide chain: " << peptide_chain_ << std::endl;
329 TR <<
"Peptide first res: " << peptide_first_res_ << std::endl;
330 TR <<
"Peptide nres: " << peptide_nres_ << std::endl;
333 valid_chain_bounds_ =
true;
343 using namespace basic::options;
344 using namespace protocols::geometry;
345 peptide_anchors.clear();
346 peptide_cuts.clear();
348 if ( option[ OptionKeys::flexPepDocking::peptide_anchor ].user() )
350 this->peptide_anchors[1] = option[ OptionKeys::flexPepDocking::peptide_anchor ];
356 peptide_last_res() );
358 TR <<
"Peptide anchor: " << peptide_anchors[1] << std::endl;
359 TR <<
"# peptide anchors: " << peptide_anchors.size() << std::endl;
360 TR <<
"# peptide cuts: " << peptide_cuts.size() << std::endl;
361 runtime_assert_msg(peptide_anchors[1] >= peptide_first_res() &&
362 peptide_anchors[1] <= peptide_last_res(),
363 "Peptide anchor out of range");
367 pep_anchor_ca( pose.
residue( peptide_anchors[1] ).
atom(
"CA" ).
xyz() );
368 if(valid_receptor_chain_)
372 receptor_first_res(),
373 receptor_last_res() ,
375 TR <<
"Receptor anchor: " << receptor_anchor_pos << std::endl;
376 runtime_assert_msg( receptor_anchor_pos >= receptor_first_res() &&
377 receptor_anchor_pos <= receptor_last_res() ,
378 "Receptor anchor out of range");
393 bool local_debug =
true;
394 TR <<
"Reading params from file [" << params_file <<
"]" << endl;
397 peptide_anchors.clear();
398 peptide_cuts.clear();
399 valid_chain_bounds_ =
false;
400 valid_receptor_chain_ =
false;
401 valid_peptide_chain_ =
false;
403 peptide_first_res_ = -1;
405 receptor_anchor_pos = -1;
409 receptor_first_res_ = 1;
410 std::ifstream data( params_file.c_str() );
412 while ( getline( data,line) ) {
413 std::istringstream l( line );
417 if ( tag ==
"scaffold_anchor_pos" ) {
418 receptor_anchor_pos = param;
419 TR <<
"# receptor_anchor_pos " << param << endl;
421 else if ( tag ==
"nres_scaffold" ) {
422 receptor_nres_ = param;
423 TR <<
"# nres_receptor " << param << endl;
424 peptide_first_res_ = receptor_nres_ + 1;
426 else if ( tag ==
"nres_peptide" ) {
427 peptide_nres_ = param;
428 TR <<
"# nres_peptide " << param << endl;
430 else if ( tag ==
"peptide_anchor" ) {
434 TR <<
"# peptide_anchor " << njump <<
" anchor " << pep_anchor <<endl;
435 peptide_anchors[njump]=pep_anchor;
439 TR <<
"# finished reading params" << endl;
442 std::map<int,int>::iterator iter;
443 for(iter = peptide_anchors.begin(); iter != peptide_anchors.end(); iter++)
444 iter->second += (peptide_first_res_ - 1);
445 for(iter = peptide_cuts.begin(); iter != peptide_cuts.end(); iter++)
446 iter->second += (peptide_first_res_ - 1);
449 if(receptor_first_res_ != -1 &&
450 receptor_nres_ != -1 &&
451 peptide_first_res_ != -1 &&
454 valid_chain_bounds_ =
true;
458 TR <<
"nres_receptor: " << receptor_first_res_ << endl
459 <<
"nres_peptide: " << peptide_nres_ << endl
460 <<
"pep_begin_res: " << peptide_first_res_ << endl
461 <<
"receptor_anchor_pos: " << receptor_anchor_pos << endl
462 <<
"number of peptide anchors: " << peptide_anchors.size() << endl
463 <<
"number of peptide cuts: " << peptide_cuts.size() << endl
467 if(!valid_chain_bounds_ || !valid_anchors()){
468 TR <<
"Missing or invalid information in parameters file "
469 << params_file << std::endl;